pike.git
/
src
/
docode.c
version
»
Context lines:
10
20
40
80
file
none
3
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) {