pike.git / src / interpret.c

version» Context lines:

pike.git/src/interpret.c:3428:    if(SUBTYPEOF(*s) == FUNCTION_BUILTIN)    {    c->type = CALLTYPE_EFUN;    c->ptr = s->u.efun->function;    }else{    callsite_resolve_fun(c, s->u.object, SUBTYPEOF(*s));    return;    }    break;    case T_ARRAY: -  c->type = CALLTYPE_ARRAY; +  c->type = (s >= Pike_interpreter.evaluator_stack && s < Pike_sp) +  ? CALLTYPE_ARRAY_ON_STACK +  : CALLTYPE_ARRAY;    c->ptr = s->u.array;    break;    case PIKE_T_TYPE:    c->type = CALLTYPE_CAST;    c->ptr = s->u.type;    break;    case T_PROGRAM:    c->type = CALLTYPE_CLONE;    c->ptr = s->u.program;    break;
pike.git/src/interpret.c:3560: Inside #if defined(ENTRY_PROLOGUE_SIZE)
  #ifdef ENTRY_PROLOGUE_SIZE    pc -= ENTRY_PROLOGUE_SIZE;   #endif    eval_instruction(pc);    }    goto do_return;    case CALLTYPE_CAST:    o_cast(c->ptr, compile_type_to_runtime_type(c->ptr));    break;    case CALLTYPE_ARRAY: -  /* TODO: reenable destructive operation */ -  apply_array(c->ptr, c->args, 0); +  case CALLTYPE_ARRAY_ON_STACK: +  apply_array(c->ptr, c->args, c->type == CALLTYPE_ARRAY_ON_STACK);    break;    case CALLTYPE_CLONE:    push_object(clone_object(c->ptr, c->args));    break;    case CALLTYPE_PARENT_CLONE:    {    struct object *tmp;    tmp=parent_clone_object(c->ptr,    c->frame->current_object,    c->frame->fun,