pike.git / src / docode.c

version» Context lines:

pike.git/src/docode.c:757:    if (var->node_info & OPT_ASSIGNMENT) {    /* Initialize. */    emit0(F_CONST0);    emit1(F_ASSIGN_LOCAL_AND_POP, var->u.integer.a);    }    code_expression(val, 0, "RHS");    emit_multi_assign(vals, vars, no+1);    emit1(F_ASSIGN_LOCAL_AND_POP, var->u.integer.a );    break;    -  /* FIXME: Make special case for F_EXTERNAL */ -  case F_IDENTIFIER: -  if(!IDENTIFIER_IS_VARIABLE( ID_FROM_INT(Pike_compiler->new_program, -  var->u.id.number)->identifier_flags)) -  { -  yyerror("Cannot assign functions or constants.\n"); -  }else{ -  code_expression(val, 0, "RHS"); -  emit_multi_assign(vals, vars, no+1); -  emit_assign_global( var->u.id.number, 1 ); -  } -  break; -  +     case F_GET_SET:    {    /* Check for the setter function. */    struct program_state *state = Pike_compiler;    int program_id = var->u.integer.a;    int level = 0;    while (state && (state->new_program->id != program_id)) {    state = state->previous;    level++;    }
pike.git/src/docode.c:863:    default:    yyerror("Illegal lvalue.");    emit1(F_NUMBER,0);    emit1(F_NUMBER,0);    return 2;       case F_ARRAY_LVALUE:    case F_LVALUE_LIST:    case F_LOCAL:    case F_GLOBAL: -  case F_IDENTIFIER: +     case F_INDEX:    case F_ARROW:    case F_ARG_LIST:    case F_COMMA_EXPR:    case F_EXTERNAL:    case F_GET_SET:    case F_AUTO_MAP_MARKER:    break;    }    }
pike.git/src/docode.c:1292:    if (CDR(n)->node_info & OPT_ASSIGNMENT) {    /* Initialize. */    emit0(F_CONST0);    emit1(F_ASSIGN_LOCAL_AND_POP, CDR(n)->u.integer.a);    }    code_expression(CAR(n), 0, "RHS");    emit1(flags & DO_POP ? F_ASSIGN_LOCAL_AND_POP:F_ASSIGN_LOCAL,    CDR(n)->u.integer.a );    break;    -  /* FIXME: Make special case for F_EXTERNAL */ -  case F_IDENTIFIER: -  if(!IDENTIFIER_IS_VARIABLE( ID_FROM_INT(Pike_compiler->new_program, CDR(n)->u.id.number)->identifier_flags)) -  { -  yyerror("Cannot assign functions or constants.\n"); -  }else{ -  code_expression(CAR(n), 0, "RHS"); -  emit_assign_global( CDR(n)->u.id.number, flags & DO_POP ); -  } -  break; +        case F_GET_SET:    {    /* Check for the setter function. */    struct program_state *state = Pike_compiler;    int program_id = CDR(n)->u.integer.a;    int level = 0;    while (state && (state->new_program->id != program_id)) {    state = state->previous;    level++;
pike.git/src/docode.c:1911: Inside #if defined(USE_APPLY_N)
   {    do_docode(CDR(n),0);    tmp1=store_constant(& CAR(n)->u.sval,    !(CAR(n)->tree_info & OPT_EXTERNAL_DEPEND),    CAR(n)->name);    emit2(F_APPLY_N, DO_NOT_WARN((INT32)tmp1), args);    }   #endif    return 1;    } -  else if(CAR(n)->token == F_IDENTIFIER) -  { -  return do_lfun_call(CAR(n)->u.id.number, CDR(n)); -  } +     else if(CAR(n)->token == F_EXTERNAL &&    CAR(n)->u.integer.a == Pike_compiler->new_program->id &&    CAR(n)->u.integer.b != IDREF_MAGIC_THIS)    {    return do_lfun_call(CAR(n)->u.integer.b, CDR(n));    }    else if(CAR(n)->token == F_GET_SET &&    CAR(n)->u.integer.a == Pike_compiler->new_program->id &&    CAR(n)->u.integer.b != IDREF_MAGIC_THIS)    {
pike.git/src/docode.c:2668:    struct compiler_frame *f;    int depth=0;    for(f=Pike_compiler->compiler_frame;    f!=n->u.trampoline.frame;f=f->previous)    depth++;       emit2(F_TRAMPOLINE,n->u.trampoline.ident,depth);    return 1;    }    -  case F_IDENTIFIER: { -  struct identifier *id = ID_FROM_INT(Pike_compiler->new_program, n->u.id.number); -  if(IDENTIFIER_IS_FUNCTION(id->identifier_flags)) -  { -  if(flags & WANT_LVALUE) -  { -  yyerror("Cannot assign functions.\n"); -  }else{ -  if (id->identifier_flags & IDENTIFIER_HAS_BODY) -  /* Only use this opcode when it's certain that the result -  * can't zero, i.e. when we know the function isn't just a -  * prototype. */ -  emit1(F_LFUN,n->u.id.number); -  else -  emit_global(n->u.id.number); -  } -  }else{ -  if(flags & WANT_LVALUE) -  { -  emit1(F_GLOBAL_LVALUE,n->u.id.number); -  return 2; -  }else{ -  emit_global(n->u.id.number); -  } -  } -  return 1; -  } -  +     case F_VAL_LVAL:    ret = do_docode(CAR(n),flags);    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;