pike.git / src / docode.c

version» Context lines:

pike.git/src/docode.c:1895:    emit0(F_SOFT_CAST);    return 1;    }    tmp1 = do_docode(CAR(n), flags);    if (tmp1 > 1) do_pop(DO_NOT_WARN((INT32)(tmp1 - 1)));    return !!tmp1;       case F_APPLY:    if(CAR(n)->token == F_CONSTANT)    { +  int args = count_args(CDR(n));    if(TYPEOF(CAR(n)->u.sval) == T_FUNCTION)    {    if(SUBTYPEOF(CAR(n)->u.sval) == FUNCTION_BUILTIN) /* driver fun? */    {    if(!CAR(n)->u.sval.u.efun->docode ||    !CAR(n)->u.sval.u.efun->docode(n))    { -  if(count_args(CDR(n))==1) +  if(args==1)    {    do_docode(CDR(n),0);    tmp1=store_constant(& CAR(n)->u.sval,    !(CAR(n)->tree_info & OPT_EXTERNAL_DEPEND),    CAR(n)->name);    emit1(F_CALL_BUILTIN1, DO_NOT_WARN((INT32)tmp1)); -  + #ifdef USE_APPLY_N +  }else if(args>0){ +  do_docode(CDR(n),0); +  tmp1=store_constant(& CAR(n)->u.sval, +  !(CAR(n)->tree_info & OPT_EXTERNAL_DEPEND), +  CAR(n)->name); +  emit2(F_CALL_BUILTIN_N, DO_NOT_WARN((INT32)tmp1), args); + #endif    }else{    emit0(F_MARK);    PUSH_CLEANUP_FRAME(do_pop_mark, 0);    do_docode(CDR(n),0);    tmp1=store_constant(& CAR(n)->u.sval,    !(CAR(n)->tree_info & OPT_EXTERNAL_DEPEND),    CAR(n)->name);    emit1(F_CALL_BUILTIN, DO_NOT_WARN((INT32)tmp1));    POP_AND_DONT_CLEANUP;    }    }    if(n->type == void_type_string)    return 0; -  +     return 1;    }else{    if(CAR(n)->u.sval.u.object == Pike_compiler->fake_object)    return do_lfun_call(SUBTYPEOF(CAR(n)->u.sval), CDR(n));    }    } -  + #ifdef USE_APPLY_N +  if( args <= 1 ) + #endif +  {    emit0(F_MARK);    PUSH_CLEANUP_FRAME(do_pop_mark, 0);    do_docode(CDR(n),0);    tmp1=store_constant(& CAR(n)->u.sval,    !(CAR(n)->tree_info & OPT_EXTERNAL_DEPEND),    CAR(n)->name);    emit1(F_APPLY, DO_NOT_WARN((INT32)tmp1));    POP_AND_DONT_CLEANUP; -  +  } + #ifdef USE_APPLY_N +  else +  { +  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)    {