* eval.c (evaluate_subexp_standard): Add some comments.

This commit is contained in:
Doug Evans 2014-05-19 10:51:08 -07:00
parent f1f4348a6e
commit cd8ae15e25
2 changed files with 14 additions and 3 deletions

View File

@ -1,3 +1,7 @@
2014-05-19 Doug Evans <dje@google.com>
* eval.c (evaluate_subexp_standard): Add some comments.
2014-05-17 Doug Evans <xdje42@gmail.com> 2014-05-17 Doug Evans <xdje42@gmail.com>
* progspace.c (remove_program_space): Delete, unused. * progspace.c (remove_program_space): Delete, unused.

View File

@ -1363,7 +1363,7 @@ evaluate_subexp_standard (struct type *expect_type,
op = exp->elts[*pos].opcode; op = exp->elts[*pos].opcode;
nargs = longest_to_int (exp->elts[pc + 1].longconst); nargs = longest_to_int (exp->elts[pc + 1].longconst);
/* Allocate arg vector, including space for the function to be /* Allocate arg vector, including space for the function to be
called in argvec[0] and a terminating NULL. */ called in argvec[0], a potential `this', and a terminating NULL. */
argvec = (struct value **) argvec = (struct value **)
alloca (sizeof (struct value *) * (nargs + 3)); alloca (sizeof (struct value *) * (nargs + 3));
if (op == STRUCTOP_MEMBER || op == STRUCTOP_MPTR) if (op == STRUCTOP_MEMBER || op == STRUCTOP_MPTR)
@ -1514,6 +1514,7 @@ evaluate_subexp_standard (struct type *expect_type,
name, TYPE_TAG_NAME (type)); name, TYPE_TAG_NAME (type));
tem = 1; tem = 1;
/* arg2 is left as NULL on purpose. */
} }
else else
{ {
@ -1521,6 +1522,8 @@ evaluate_subexp_standard (struct type *expect_type,
|| TYPE_CODE (type) == TYPE_CODE_UNION); || TYPE_CODE (type) == TYPE_CODE_UNION);
function_name = name; function_name = name;
/* We need a properly typed value for method lookup. For
static methods arg2 is otherwise unused. */
arg2 = value_zero (type, lval_memory); arg2 = value_zero (type, lval_memory);
++nargs; ++nargs;
tem = 2; tem = 2;
@ -1570,7 +1573,8 @@ evaluate_subexp_standard (struct type *expect_type,
} }
} }
/* Evaluate arguments. */ /* Evaluate arguments (if not already done, e.g., namespace::func()
and overload-resolution is off). */
for (; tem <= nargs; tem++) for (; tem <= nargs; tem++)
{ {
/* Ensure that array expressions are coerced into pointer /* Ensure that array expressions are coerced into pointer
@ -1580,6 +1584,7 @@ evaluate_subexp_standard (struct type *expect_type,
/* Signal end of arglist. */ /* Signal end of arglist. */
argvec[tem] = 0; argvec[tem] = 0;
if (op == OP_ADL_FUNC) if (op == OP_ADL_FUNC)
{ {
struct symbol *symp; struct symbol *symp;
@ -1609,7 +1614,8 @@ evaluate_subexp_standard (struct type *expect_type,
int static_memfuncp; int static_memfuncp;
char *tstr; char *tstr;
/* Method invocation : stuff "this" as first parameter. */ /* Method invocation: stuff "this" as first parameter.
If the method turns out to be static we undo this below. */
argvec[1] = arg2; argvec[1] = arg2;
if (op != OP_SCOPE) if (op != OP_SCOPE)
@ -1663,6 +1669,7 @@ evaluate_subexp_standard (struct type *expect_type,
argvec[1] = arg2; /* the ``this'' pointer */ argvec[1] = arg2; /* the ``this'' pointer */
} }
/* Take out `this' if needed. */
if (static_memfuncp) if (static_memfuncp)
{ {
argvec[1] = argvec[0]; argvec[1] = argvec[0];