#include "cp-support.h"
#include "ui-out.h"
#include "exceptions.h"
+#include "regcache.h"
#include "gdb_assert.h"
case OP_REGISTER:
{
- int regno = longest_to_int (exp->elts[pc + 1].longconst);
- struct value *val = value_of_register (regno, get_selected_frame (NULL));
- (*pos) += 2;
+ const char *name = &exp->elts[pc + 2].string;
+ int regno;
+ struct value *val;
+
+ (*pos) += 3 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
+ regno = frame_map_name_to_regnum (deprecated_safe_get_selected_frame (),
+ name, strlen (name));
+ if (regno == -1)
+ error (_("Register $%s not available."), name);
+ if (noside == EVAL_AVOID_SIDE_EFFECTS)
+ val = value_zero (register_type (current_gdbarch, regno), not_lval);
+ else
+ val = value_of_register (regno, get_selected_frame (NULL));
if (val == NULL)
- error (_("Value of register %s not available."),
- frame_map_regnum_to_name (get_selected_frame (NULL), regno));
+ error (_("Value of register %s not available."), name);
else
return val;
}
argvec = (struct value **) alloca (sizeof (struct value *) * (nargs + 3));
if (op == STRUCTOP_MEMBER || op == STRUCTOP_MPTR)
{
- /* 1997-08-01 Currently we do not support function invocation
- via pointers-to-methods with HP aCC. Pointer does not point
- to the function, but possibly to some thunk. */
- if (deprecated_hp_som_som_object_present)
- {
- error (_("Not implemented: function invocation through pointer to method with HP aCC"));
- }
-
nargs++;
/* First, evaluate the structure into arg2 */
pc2 = (*pos)++;
switch (TYPE_CODE (type))
{
case TYPE_CODE_METHODPTR:
- if (deprecated_hp_som_som_object_present)
- {
- /* With HP aCC, pointers to methods do not point to the
- function code. */
- /* 1997-08-19 */
- error (_("Pointers to methods not supported with HP aCC"));
- }
-
if (noside == EVAL_AVOID_SIDE_EFFECTS)
return value_zero (TYPE_TARGET_TYPE (type), not_lval);
else
arg1);
mem_offset = value_as_long (arg2);
- if (deprecated_hp_som_som_object_present)
- {
- /* HP aCC generates offsets that have bit #29 set; turn it off to get
- a real offset to the member. */
- if (!mem_offset) /* no bias -> really null */
- error (_("Attempted dereference of null pointer-to-member"));
- mem_offset &= ~0x20000000;
- }
arg3 = value_from_pointer (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
value_as_long (arg1) + mem_offset);
arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
- /* Do special stuff for HP aCC pointers to members */
- if (deprecated_hp_som_som_object_present)
- {
- /* 1997-08-19 Can't assign HP aCC pointers to methods. No details of
- the implementation yet; but the pointer appears to point to a code
- sequence (thunk) in memory -- in any case it is *not* the address
- of the function as it would be in a naive implementation. */
- if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_METHODPTR)
- error (_("Assignment to pointers to methods not implemented with HP aCC"));
-
- /* HP aCC pointers to data members require a constant bias. */
- if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_MEMBERPTR)
- {
- unsigned int *ptr = (unsigned int *) value_contents (arg2); /* forces evaluation */
- *ptr |= 0x20000000; /* set 29th bit */
- }
- }
-
if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
return arg1;
if (binop_user_defined_p (op, arg1, arg2))
else
{
struct value *retvalp = evaluate_subexp_for_address (exp, pos, noside);
- /* If HP aCC object, use bias for pointers to members */
- if (deprecated_hp_som_som_object_present
- && TYPE_CODE (value_type (retvalp)) == TYPE_CODE_MEMBERPTR)
- {
- unsigned int *ptr = (unsigned int *) value_contents (retvalp); /* forces evaluation */
- *ptr |= 0x20000000; /* set 29th bit */
- }
return retvalp;
}