pike.git/src/docode.c:757:
if (var->node_info & OPT_ASSIGNMENT) {
/* Initialize. */
emit0(F_CONST0);
emit1(F_ASSIGN_LOCAL_AND_POP, var->u.integer.a);
}
code_expression(val, 0, "RHS");
emit_multi_assign(vals, vars, no+1);
emit1(F_ASSIGN_LOCAL_AND_POP, var->u.integer.a );
break;
- /* FIXME: Make special case for F_EXTERNAL */
- case F_IDENTIFIER:
- if(!IDENTIFIER_IS_VARIABLE( ID_FROM_INT(Pike_compiler->new_program,
- var->u.id.number)->identifier_flags))
- {
- yyerror("Cannot assign functions or constants.\n");
- }else{
- code_expression(val, 0, "RHS");
- emit_multi_assign(vals, vars, no+1);
- emit_assign_global( var->u.id.number, 1 );
- }
- break;
-
+
case F_GET_SET:
{
/* Check for the setter function. */
struct program_state *state = Pike_compiler;
int program_id = var->u.integer.a;
int level = 0;
while (state && (state->new_program->id != program_id)) {
state = state->previous;
level++;
}
pike.git/src/docode.c:863:
default:
yyerror("Illegal lvalue.");
emit1(F_NUMBER,0);
emit1(F_NUMBER,0);
return 2;
case F_ARRAY_LVALUE:
case F_LVALUE_LIST:
case F_LOCAL:
case F_GLOBAL:
- case F_IDENTIFIER:
+
case F_INDEX:
case F_ARROW:
case F_ARG_LIST:
case F_COMMA_EXPR:
case F_EXTERNAL:
case F_GET_SET:
case F_AUTO_MAP_MARKER:
break;
}
}
pike.git/src/docode.c:1292:
if (CDR(n)->node_info & OPT_ASSIGNMENT) {
/* Initialize. */
emit0(F_CONST0);
emit1(F_ASSIGN_LOCAL_AND_POP, CDR(n)->u.integer.a);
}
code_expression(CAR(n), 0, "RHS");
emit1(flags & DO_POP ? F_ASSIGN_LOCAL_AND_POP:F_ASSIGN_LOCAL,
CDR(n)->u.integer.a );
break;
- /* FIXME: Make special case for F_EXTERNAL */
- case F_IDENTIFIER:
- if(!IDENTIFIER_IS_VARIABLE( ID_FROM_INT(Pike_compiler->new_program, CDR(n)->u.id.number)->identifier_flags))
- {
- yyerror("Cannot assign functions or constants.\n");
- }else{
- code_expression(CAR(n), 0, "RHS");
- emit_assign_global( CDR(n)->u.id.number, flags & DO_POP );
- }
- break;
+
case F_GET_SET:
{
/* Check for the setter function. */
struct program_state *state = Pike_compiler;
int program_id = CDR(n)->u.integer.a;
int level = 0;
while (state && (state->new_program->id != program_id)) {
state = state->previous;
level++;
pike.git/src/docode.c:1911: Inside #if defined(USE_APPLY_N)
{
do_docode(CDR(n),0);
tmp1=store_constant(& CAR(n)->u.sval,
!(CAR(n)->tree_info & OPT_EXTERNAL_DEPEND),
CAR(n)->name);
emit2(F_APPLY_N, DO_NOT_WARN((INT32)tmp1), args);
}
#endif
return 1;
}
- else if(CAR(n)->token == F_IDENTIFIER)
- {
- return do_lfun_call(CAR(n)->u.id.number, CDR(n));
- }
+
else if(CAR(n)->token == F_EXTERNAL &&
CAR(n)->u.integer.a == Pike_compiler->new_program->id &&
CAR(n)->u.integer.b != IDREF_MAGIC_THIS)
{
return do_lfun_call(CAR(n)->u.integer.b, CDR(n));
}
else if(CAR(n)->token == F_GET_SET &&
CAR(n)->u.integer.a == Pike_compiler->new_program->id &&
CAR(n)->u.integer.b != IDREF_MAGIC_THIS)
{
pike.git/src/docode.c:2668:
struct compiler_frame *f;
int depth=0;
for(f=Pike_compiler->compiler_frame;
f!=n->u.trampoline.frame;f=f->previous)
depth++;
emit2(F_TRAMPOLINE,n->u.trampoline.ident,depth);
return 1;
}
- case F_IDENTIFIER: {
- struct identifier *id = ID_FROM_INT(Pike_compiler->new_program, n->u.id.number);
- if(IDENTIFIER_IS_FUNCTION(id->identifier_flags))
- {
- if(flags & WANT_LVALUE)
- {
- yyerror("Cannot assign functions.\n");
- }else{
- if (id->identifier_flags & IDENTIFIER_HAS_BODY)
- /* Only use this opcode when it's certain that the result
- * can't zero, i.e. when we know the function isn't just a
- * prototype. */
- emit1(F_LFUN,n->u.id.number);
- else
- emit_global(n->u.id.number);
- }
- }else{
- if(flags & WANT_LVALUE)
- {
- emit1(F_GLOBAL_LVALUE,n->u.id.number);
- return 2;
- }else{
- emit_global(n->u.id.number);
- }
- }
- return 1;
- }
-
+
case F_VAL_LVAL:
ret = do_docode(CAR(n),flags);
return ret + do_docode(CDR(n), flags | DO_LVALUE);
case F_AUTO_MAP:
emit0(F_MARK);
code_expression(CAR(n), 0, "automap function");
do_encode_automap_arg_list(CDR(n),0);
emit_apply_builtin("__automap__");
return 1;