|
|
| version 1.292, 2026/10/23 20:48:48 | version 1.293, 2026/10/28 01:17:38 |
|---|---|
| Line 177 public: | Line 177 public: |
| private: | private: |
| int fin_cycle; | int fin_cycle; |
| Skip fskip; | volatile Skip fskip; // also changed from the signal handler |
| volatile int finterrupted; // set by the signal handler, if fskip was overwritten meanwhile, the next set_skip() restores SKIP_INTERRUPTED from it | |
| VMethodFrame* freturn_method_frame; | VMethodFrame* freturn_method_frame; |
| public: | public: |
| Line 329 public: | Line 330 public: |
| } | } |
| Skip get_skip() { return fskip; } | Skip get_skip() { return fskip; } |
| void set_skip(Skip askip) { fskip=askip; } | void set_skip(Skip askip) { fskip=finterrupted ? SKIP_INTERRUPTED : askip; } |
| void set_skip_return(VMethodFrame& amethod_frame) { fskip=SKIP_RETURN; freturn_method_frame=&amethod_frame; } | void set_skip_return(VMethodFrame& amethod_frame) { freturn_method_frame=&amethod_frame; set_skip(SKIP_RETURN); } |
| inline bool check_skip_break() { bool result=fskip >= SKIP_BREAK; if(fskip <= SKIP_BREAK) fskip=SKIP_NOTHING; return result; } | inline bool check_skip_break() { bool result=fskip >= SKIP_BREAK; if(fskip <= SKIP_BREAK) set_skip(SKIP_NOTHING); return result; } |
| inline void check_skip_return() { if(fskip==SKIP_RETURN && method_frame==freturn_method_frame) fskip=SKIP_NOTHING; } | inline void check_skip_return() { if(fskip==SKIP_RETURN && method_frame==freturn_method_frame) set_skip(SKIP_NOTHING); } |
| /// for signal handlers | |
| void interrupt() { finterrupted=1; fskip=SKIP_INTERRUPTED; } | |
| /// clears the interruption and throws parser.interrupted | |
| void throw_interrupted(); | |
| void set_in_cycle(int adelta) { fin_cycle+=adelta; } | void set_in_cycle(int adelta) { fin_cycle+=adelta; } |
| bool get_in_cycle() { return fin_cycle>0; } | bool get_in_cycle() { return fin_cycle>0; } |