pike.git / src / docode.c

version» Context lines:

pike.git/src/docode.c:112:    {    --comp_stackp;    return 0;    }    return comp_stack[--comp_stackp];   }         static int label_no=0;    - static int alloc_label() { return ++label_no; } + int alloc_label() { return ++label_no; }    - static int do_jump(int token,INT32 lbl) + int do_jump(int token,INT32 lbl)   {    if(lbl==-1) lbl=alloc_label();    emit(token, lbl);    return lbl;   }      static int do_docode2(node *n,int flags);      #define ins_label(L) do_jump(F_LABEL, L)    - static void do_pop(int x) + void do_pop(int x)   {    switch(x)    {    case 0: return;    case 1: emit2(F_POP_VALUE); break;    default: emit(F_POP_N_ELEMS,x); break;    }   }   #define DO_CODE_BLOCK(N) do_pop(do_docode(N,DO_NOT_COPY | DO_POP))   
pike.git/src/docode.c:149:    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;   }       - static INT32 do_jump_when_zero(node *n,int j); + void do_jump_when_zero(node *n,int j);    - static int do_jump_when_non_zero(node *n,int j) + void do_jump_when_non_zero(node *n,int j)   {    if(!node_is_tossable(n))    {    if(node_is_true(n)) -  return do_jump(F_BRANCH,j); +  { +  do_jump(F_BRANCH,j); +  return; +  }       if(node_is_false(n)) -  return -1; +  return;    }    -  if(n->token == F_NOT) -  return do_jump_when_zero(CAR(n), j); +  switch(n->token) +  { +  case F_NOT: +  do_jump_when_zero(CAR(n), j); +  return; +  case F_OR: +  do_jump_when_non_zero(CAR(n), j); +  do_jump_when_non_zero(CDR(n), j); +  return; +  }       if(do_docode(n, DO_NOT_COPY)!=1)    fatal("Infernal compiler skiterror.\n"); -  return do_jump(F_BRANCH_WHEN_NON_ZERO,j); +  do_jump(F_BRANCH_WHEN_NON_ZERO,j);   }    - static INT32 do_jump_when_zero(node *n,int j) + void do_jump_when_zero(node *n,int j)   {    if(!node_is_tossable(n))    {    if(node_is_true(n)) -  return -1; +  return;       if(node_is_false(n)) -  return do_jump(F_BRANCH,j); +  { +  do_jump(F_BRANCH,j); +  return;    } -  +  }    -  if(n->token == F_NOT) -  return do_jump_when_non_zero(CAR(n), j); +  switch(n->token) +  { +  case F_NOT: +  do_jump_when_non_zero(CAR(n), j); +  return; +  case F_AND: +  do_jump_when_zero(CAR(n), j); +  do_jump_when_zero(CDR(n), j); +  return; +  }       if(do_docode(n, DO_NOT_COPY)!=1)    fatal("Infernal compiler skiterror.\n"); -  return do_jump(F_BRANCH_WHEN_ZERO,j); +  do_jump(F_BRANCH_WHEN_ZERO,j);   }      static INT32 count_cases(node *n)   {    INT32 ret;    if(!n) return 0;    switch(n->token)    {    case F_DO:    case F_FOR:
pike.git/src/docode.c:259:    }    emit2(F_PUSH_ARRAY);    return -0x7ffffff;       case '?':    {    int adroppings , bdroppings;       if(!CDDR(n))    { -  tmp1=do_jump_when_zero(CAR(n), -1); +  tmp1=alloc_label(); +  do_jump_when_zero(CAR(n), tmp1);    DO_CODE_BLOCK(CADR(n));    emit(F_LABEL, tmp1);    return 0;    }       if(!CADR(n))    { -  tmp1=do_jump_when_non_zero(CAR(n), -1); +  tmp1=alloc_label(); +  do_jump_when_non_zero(CAR(n), tmp1);    DO_CODE_BLOCK(CDDR(n));    emit(F_LABEL,tmp1);    return 0;    }    -  tmp1=do_jump_when_zero(CAR(n),-1); +  tmp1=alloc_label(); +  do_jump_when_zero(CAR(n),tmp1);       adroppings=do_docode(CADR(n), flags);    tmp3=emit(F_POP_N_ELEMS,0);       /* Else */    tmp2=do_jump(F_BRANCH,-1);    emit(F_LABEL, tmp1);       bdroppings=do_docode(CDDR(n), flags);    if(adroppings < bdroppings)