pike.git / src / docode.c

version» Context lines:

pike.git/src/docode.c:284:    emit0(F_POP_MARK);   }      static void do_pop_to_mark(void *UNUSED(ignored))   {    struct compilation *c = THIS_COMPILATION;    emit0(F_POP_TO_MARK);   }      #ifdef PIKE_DEBUG - static void do_cleanup_synch_mark(void) + static void do_cleanup_synch_mark(void *UNUSED(ignored))   {    struct compilation *c = THIS_COMPILATION;    if (d_flag > 2)    emit0(F_CLEANUP_SYNCH_MARK);   }   #endif    - static void do_escape_catch(void) + static void do_escape_catch(void *UNUSED(ignored))   {    struct compilation *c = THIS_COMPILATION;    emit0(F_ESCAPE_CATCH);   }      #define DO_CODE_BLOCK(X) do_pop(do_docode((X),DO_NOT_COPY | DO_POP ))      int do_docode(node *n, int flags)   {    int i;
pike.git/src/docode.c:2500:    Pike_compiler->compiler_frame->generator_local);    }       /* Insert the appropriate number of F_ESCAPE_CATCH. The rest of    * the cleanup is handled wholesale in low_return et al.    * Alternatively we could handle this too in low_return and    * then allow tail recursion of these kind of returns too. */    for (p = current_label; p; p = p->prev) {    struct cleanup_frame *q;    for (q = p->cleanups; q; q = q->prev) { -  if (q->cleanup == (cleanup_func) do_escape_catch) { +  if (q->cleanup == do_escape_catch) {    in_catch = 1; -  do_escape_catch(); +  do_escape_catch(q->cleanup_arg);    }   #ifdef PIKE_DEBUG    /* Have to pop marks from F_SYNCH_MARK too if the debug level    * is high enough to get them inserted, otherwise we'll get    * false alarms from debug checks in e.g. POP_CATCH_CONTEXT. */    else if (d_flag > 2 &&    q->cleanup == (cleanup_func) do_cleanup_synch_mark) {    /* Use the ordinary pop mark instruction here since we know    * the stack isn't in synch and we don't want debug checks    * for that. */
pike.git/src/docode.c:2540:    case F_SSCANF:    tmp1=do_docode(CAR(n),DO_NOT_COPY);    tmp2=do_docode(CDR(n),DO_NOT_COPY | DO_LVALUE);    emit1(F_SSCANF, (INT32)(tmp1+tmp2));    return 1;       case F_CATCH: {    INT32 *prev_switch_jumptable = current_switch.jumptable;       tmp1=do_jump(F_CATCH,-1); -  PUSH_CLEANUP_FRAME(do_escape_catch, 0); +  PUSH_CLEANUP_FRAME(do_escape_catch, (void *)(ptrdiff_t)tmp1);       /* Entry point called via catching_eval_instruction(). */    emit0(F_ENTRY);       PUSH_STATEMENT_LABEL;    current_switch.jumptable=0;    current_label->break_label=alloc_label();       DO_CODE_BLOCK(CAR(n));