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.208 2010/07/04 12:16:06 grubba Exp $ + || $Id$   */      #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:1158:    return 0;    }       if(CAR(n)->token != F_AUTO_MAP &&    (match_types(CAR(n)->type, array_type_string) ||    match_types(CAR(n)->type, string_type_string) ||    match_types(CAR(n)->type, mapping_type_string) ||    match_types(CAR(n)->type, object_type_string)))    {    code_expression(CDR(n), 0, "assignment"); -  emit0(F_LTOSVAL2); +  emit0(F_LTOSVAL2_AND_FREE);    }else{    emit0(F_LTOSVAL);    code_expression(CDR(n), 0, "assignment");    }          switch(n->token)    {    case F_ADD_EQ:    if(CAR(n)->type == int_type_string &&
pike.git/src/docode.c:1250:    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) ||    match_types(CDR(n)->type, multiset_type_string) ||    match_types(CDR(n)->type, mapping_type_string))    {    num_args = do_docode(CDAR(n), 0);    switch (num_args)    { -  case 0: emit0(F_LTOSVAL1); break; -  case 1: emit0(F_LTOSVAL2); break; -  case 2: emit0(F_LTOSVAL3); break; +  case 0: emit0(F_LTOSVAL_AND_FREE); break; +  case 1: emit0(F_LTOSVAL2_AND_FREE); break; +  case 2: emit0(F_LTOSVAL3_AND_FREE); break;   #ifdef PIKE_DEBUG    default:    Pike_fatal("Arglebargle glop-glyf?\n");   #endif    }    }else{    emit0(F_LTOSVAL);    num_args = do_docode(CDAR(n), 0);    }       if (CAR (n)->token == F_RANGE)    emit_range (CAR (n) DO_IF_DEBUG (COMMA num_args));    else    emit0(CAR(n)->token);       emit0(n->token); -  return n->token==F_ASSIGN; +  return n->token==F_ASSIGN; /* So when is this false? /mast */    }    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) {