pike.git / src / docode.c

version» Context lines:

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);