pike.git
/
src
/
docode.c
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/src/docode.c:1311:
* cdr(n)= softcast(apply(efun, arglist(car(n),one more arg))) * * The first argument of the arglist is equal to the lvalue. * * We only want to evaluate car(n) once. */ if( CAR(n)->token == F_AUTO_MAP_MARKER ) yyerror("[*] is not yet supported here\n"); return emit_ltosval_call_and_assign( CAR(n), CAADR(n), CDADR(n) );
+
case F_ATOMIC_GET_SET:
+
if (CAR(n)->token == F_AUTO_MAP_MARKER) {
+
yyerror("Unsupported lvalue for =?.");
+
emit0(F_UNDEFINED);
+
return 1;
+
}
+
if (!(flags & DO_POP)) {
+
tmp1 = do_docode(CAR(n), DO_LVALUE);
+
if (do_docode(CDR(n), 0) != 1) yyerror("RHS is void!");
+
emit0(F_ATOMIC_GET_SET);
+
return 1;
+
}
+
+
yywarning("Use of operator =? without using return value.");
+
n->token = F_ASSIGN;
+
+
/* FALLTHROUGH */
+
case F_ASSIGN: if( CAR(n)->token == F_AUTO_MAP_MARKER ) { int depth = 0; node *lval = CAR(n); while( lval->token == F_AUTO_MAP_MARKER ) { lval = CAR(lval); depth++;