pike.git
/
src
/
docode.c
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/src/docode.c:1165:
emit0(F_MARK); PUSH_CLEANUP_FRAME(do_pop_mark, 0); do_docode(CAR(n), 0); emit_apply_builtin("aggregate"); POP_AND_DONT_CLEANUP; emit0(F_ASSIGN); return 1; } case F_ASSIGN:
+
if( CDR(n)->token == F_AUTO_MAP_MARKER )
+
{
+
int depth = 0;
+
node *lval = CDR(n);
+
while( lval->token == F_AUTO_MAP_MARKER )
+
{
+
lval = CAR(lval);
+
depth++;
+
}
+
do_docode(lval,0); /* note: not lvalue */
+
if(do_docode(CAR(n),0)!=1)
+
yyerror("RHS is void!");
+
emit1(F_ASSIGN_INDICES,depth);
+
if( flags & DO_POP )
+
emit0( F_POP_VALUE );
+
return !(flags&DO_POP);
+
}
+
switch(CAR(n)->token) { case F_RANGE: if(node_is_eq(CDR(n),CAAR(n))) { int num_args; /* tmp1=do_docode(CDR(n),DO_LVALUE); */ if(match_types(CDR(n)->type, array_type_string) || match_types(CDR(n)->type, string_type_string) || match_types(CDR(n)->type, object_type_string) ||
pike.git/src/docode.c:2687:
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; case F_AUTO_MAP_MARKER:
+
if( flags & DO_LVALUE )
+
{
+
do_docode(CAR(n),DO_LVALUE);
+
}
+
else
+
{
yyerror("[*] not supported here.\n"); emit0(F_CONST0);
-
+
}
return 1; default: Pike_fatal("Infernal compiler error (unknown parse-tree-token %d).\n", n->token); return 0; /* make gcc happy */ } } /* Used to generate code for functions. */ INT32 do_code_block(node *n)