pike.git
/
src
/
docode.c
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/src/docode.c:1:
/* || This file is part of Pike. For copyright information see COPYRIGHT. || Pike is distributed under GPL, LGPL and MPL. See the file COPYING || for more information.
-
|| $Id: docode.c,v 1.
195
2008/
01
/
29
20
:
08
:
39
grubba Exp $
+
|| $Id: docode.c,v 1.
196
2008/
03
/
22
13
:
22
:
20
grubba Exp $
*/ #include "global.h" #include "las.h" #include "program.h" #include "pike_types.h" #include "stralloc.h" #include "interpret.h" #include "constants.h" #include "array.h"
pike.git/src/docode.c:1213:
case F_APPLY: if ((CAAR(n)->token == F_CONSTANT) && (CAAR(n)->u.sval.type == T_FUNCTION) && (CAAR(n)->u.sval.subtype == FUNCTION_BUILTIN) && (CAAR(n)->u.sval.u.efun->function != f_map) && (CAAR(n)->u.sval.u.efun->function != f_filter)) { /* efuns typically don't access object variables. */ node *args = CDAR(n); if (args) { node **arg = my_get_arg(&args, 0);
-
if (arg && node_is_eq(CDR(n), *arg)) {
+
if (arg && node_is_eq(CDR(n), *arg)
&&
+
!(args->tree_info & OPT_ASSIGNMENT
)
)
{
/* First arg is the lvalue. * * We optimize this to allow for destructive operations. */ int no = 0; tmp1 = do_docode(CDR(n), DO_LVALUE); emit0(F_MARK_AND_CONST0); PUSH_CLEANUP_FRAME(do_pop_mark, 0); while ((arg = my_get_arg(&args, ++no)) && *arg) { do_docode(*arg, 0);