pike.git / src / docode.c

version» Context lines:

pike.git/src/docode.c:382:   }      static int do_docode2(node *n,int flags);      #define DO_LVALUE 1   #define DO_NOT_COPY 2   #define DO_POP 4      #define DO_CODE_BLOCK(N) do_pop(do_docode(N,DO_NOT_COPY | DO_POP))    - static int do_docode(node *n,INT16 flags) + int do_docode(node *n,INT16 flags)   {    int i;    int save_current_line=current_line;    if(!n) return 0;    current_line=n->line_number;    i=do_docode2(n, flags);       current_line=save_current_line;    return i;   }
pike.git/src/docode.c:528:    DO_CODE_BLOCK(CDDR(n));    set_branch(tmp1, PC);    return 0;    }       tmp1=count_args(CDDR(n));    tmp2=count_args(CADR(n));       if(tmp2 < tmp1) tmp1=tmp2;    +  if(tmp1 == -1) +  fatal("Unknown number of args in ? :\n"); +     tmp2=do_jump_when_zero(CAR(n),-1);       tmp3=do_docode(CADR(n), flags);    if(tmp3 < tmp1) fatal("Count arguments was wrong.\n");    do_pop(tmp3 - tmp1);       tmp3=do_jump(F_BRANCH,-1);    set_branch(tmp2, PC);       tmp2=do_docode(CDDR(n), flags);
pike.git/src/docode.c:866:    tmp1=do_docode(CAR(n),0);    if(!tmp1) { ins_f_byte(F_CONST0); tmp1=1; }    if(tmp1>1) do_pop(tmp1-1);       tmp1=store_prog_string(n->type);    ins_f_byte_with_numerical_arg(F_STRING,tmp1);    ins_f_byte(F_CAST);    return 1;       case F_APPLY: -  ins_f_byte(F_MARK); +     if(CAR(n)->token == F_CONSTANT)    { -  do_docode(CDR(n),0); -  if(CAR(n)->u.sval.type == T_FUNCTION && -  CAR(n)->u.sval.subtype != -1 && -  CAR(n)->u.sval.u.object == &fake_object) +  if(CAR(n)->u.sval.type == T_FUNCTION)    { -  ins_f_byte_with_numerical_arg(F_CALL_LFUN, CAR(n)->u.sval.subtype); -  }else{ +  if(CAR(n)->u.sval.subtype == -1) /* driver fun? */ +  { +  if(!CAR(n)->u.sval.u.efun->docode || +  !CAR(n)->u.sval.u.efun->docode(n)) +  { +  ins_f_byte(F_MARK); +  do_docode(CDR(n),0);    tmp1=store_constant(& CAR(n)->u.sval,    !(CAR(n)->tree_info & OPT_EXTERNAL_DEPEND));    ins_f_byte(F_MAX_OPCODE + tmp1); -  +  }    if(n->type == void_type_string) return 0; -  +  return 1; +  }else{ +  if(CAR(n)->u.sval.u.object == &fake_object) +  { +  ins_f_byte(F_MARK); +  do_docode(CDR(n),0); +  ins_f_byte_with_numerical_arg(F_CALL_LFUN, CAR(n)->u.sval.subtype); +  return 1;    } -  +  } +  } +  +  ins_f_byte(F_MARK); +  do_docode(CDR(n),0); +  tmp1=store_constant(& CAR(n)->u.sval, +  !(CAR(n)->tree_info & OPT_EXTERNAL_DEPEND)); +  ins_f_byte(F_MAX_OPCODE + tmp1); +     return 1;    }    else if(CAR(n)->token == F_IDENTIFIER &&    ID_FROM_INT(& fake_program, CAR(n)->u.number)->flags & IDENTIFIER_FUNCTION)    { -  +  ins_f_byte(F_MARK);    do_docode(CDR(n),0);    ins_f_byte_with_numerical_arg(F_CALL_LFUN, CAR(n)->u.number);    return 1;    }    else    {    struct lpc_string *tmp;    struct efun *fun;    -  +  ins_f_byte(F_MARK);    tmp=make_shared_string("call_function");    if(!tmp) yyerror("No call_function efun.");    fun=lookup_efun(tmp);    if(!fun) yyerror("No call_function efun.");    free_string(tmp);       do_docode(CAR(n),0);    do_docode(CDR(n),0);    tmp1=store_constant(& fun->function, 1);    ins_f_byte(tmp1 + F_MAX_OPCODE);