pike.git / src / docode.c

version» Context lines:

pike.git/src/docode.c:423:    return !!CAR(n)+!!CDR(n);       default:    ret=0;    if(car_is_node(n)) ret += count_cases(CAR(n));    if(cdr_is_node(n)) ret += count_cases(CDR(n));    return ret;    }   }    + static int has_automap(node *n) + { +  if(!n) return 0; +  switch(n->token) +  { +  case F_AUTO_MAP_MARKER: +  case F_AUTO_MAP: +  return 1;    -  +  default: +  if(car_is_node(n) && has_automap(CAR(n)) ) +  return 1; +  if( cdr_is_node(n) && has_automap(CDR(n)) ) +  return 1; +  } +  return 0; + } +  +    int generate_call_function(node *n)   {    struct compilation *c = THIS_COMPILATION;    emit0(F_MARK);    PUSH_CLEANUP_FRAME(do_pop_mark, 0);    do_docode(CDR(n),DO_NOT_COPY);    emit0(F_CALL_FUNCTION);    POP_AND_DONT_CLEANUP;    return 1;   }
pike.git/src/docode.c:1166:    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!"); +  +  if( CAR(n)->token == F_AUTO_MAP_MARKER || +  CAR(n)->token == F_AUTO_MAP || +  /* Well, hello there... ;) */ +  /* This is what is generated by a[*] += 10 and such. */ +  (CAR(n)->token == F_SOFT_CAST && +  has_automap(CAR(n)))) +  {    emit1(F_ASSIGN_INDICES,depth); -  +  } +  else +  emit1(F_ASSIGN_ALL_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)))    {