pike.git / src / docode.c

version» Context lines:

pike.git/src/docode.c:1165:    emit0(F_MARK);    PUSH_CLEANUP_FRAME(do_pop_mark, 0);    do_docode(CAR(n), 0);    emit_apply_builtin("aggregate");    POP_AND_DONT_CLEANUP;    emit0(F_ASSIGN);    return 1;    }       case F_ASSIGN: +  if( CDR(n)->token == F_AUTO_MAP_MARKER ) +  { +  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!"); +  emit1(F_ASSIGN_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)))    {    int num_args;    /* 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) ||
pike.git/src/docode.c:2687:    return ret + do_docode(CDR(n), flags | DO_LVALUE);       case F_AUTO_MAP:    emit0(F_MARK);    code_expression(CAR(n), 0, "automap function");    do_encode_automap_arg_list(CDR(n),0);    emit_apply_builtin("__automap__");    return 1;       case F_AUTO_MAP_MARKER: +  if( flags & DO_LVALUE ) +  { +  do_docode(CAR(n),DO_LVALUE); +  } +  else +  {    yyerror("[*] not supported here.\n");    emit0(F_CONST0); -  +  }    return 1;       default:    Pike_fatal("Infernal compiler error (unknown parse-tree-token %d).\n", n->token);    return 0; /* make gcc happy */    }   }      /* Used to generate code for functions. */   INT32 do_code_block(node *n)