#include "global.h"#include "las.h"#include "program.h"#include "pike_types.h"#include "stralloc.h"#include "interpret.h"#include "constants.h"#include "array.h"#include "pike_macros.h"#include "pike_error.h"#include "pike_memory.h"#include "svalue.h"#include "pike_embed.h"#include "builtin_functions.h"#include "peep.h"#include "docode.h"#include "operators.h"#include "object.h"#include "opcodes.h"#include "lex.h"#include "mapping.h"#include "multiset.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Value: do_pop(current_stack_depth - cleanup_frame__.stack_depth); \ cleanup_frame__.cleanup(cleanup_frame__.cleanup_arg); \ POP_AND_DONT_CLEANUP |
|
|
Value: if (current_label->cleanups == &cleanup_frame__) \ current_label->cleanups = cleanup_frame__.prev; \ else { \ DO_IF_DEBUG( \ if (current_label->prev->cleanups != &cleanup_frame__) \ Pike_fatal("Cleanup frame lost from statement_label cleanup list.\n");\ ) \ current_label->prev->cleanups = cleanup_frame__.prev; \ } \ } while (0) |
|
|
Value: current_label = new_label__.prev; \ DO_IF_DEBUG( \ if (new_label__.cleanups && \ new_label__.cleanups != (void *)(ptrdiff_t) -1) \ Pike_fatal("Cleanup frames still left in statement_label.\n")); \ } while (0) |
|
|
Value: do { \ struct cleanup_frame cleanup_frame__; \ cleanup_frame__.cleanup = (cleanup_func) (func); \ cleanup_frame__.cleanup_arg = (void *)(ptrdiff_t) (arg); \ cleanup_frame__.stack_depth = current_stack_depth; \ DO_IF_DEBUG( \ if (current_label->cleanups == (void *)(ptrdiff_t) -1) \ Pike_fatal("current_label points to an unused statement_label.\n"); \ ) \ if (current_label->break_label == -2) { \ DO_IF_DEBUG( \ if (current_label->prev->break_label == -2) \ Pike_fatal("Found two open statement_label entries in a row.\n"); \ ) \ cleanup_frame__.prev = current_label->prev->cleanups; \ current_label->prev->cleanups = &cleanup_frame__; \ } \ else { \ cleanup_frame__.prev = current_label->cleanups; \ current_label->cleanups = &cleanup_frame__; \ } |
|
|
Value: do { \ struct statement_label new_label__; \ new_label__.prev = current_label; \ if (current_label->break_label != -2) { \ /* Only cover the current label if it's closed. */ \ new_label__.name = 0; \ new_label__.break_label = new_label__.continue_label = -1; \ new_label__.emit_break_label = 0; \ new_label__.cleanups = 0; \ new_label__.stack_depth = current_stack_depth; \ current_label = &new_label__; \ } \ else { \ DO_IF_DEBUG( \ new_label__.cleanups = (void *)(ptrdiff_t) -1; \ new_label__.stack_depth = current_stack_depth; \ ) \ current_label->stack_depth = current_stack_depth; \ } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||
|
|
|
||||||||||||
|
|
|
|
|
|
||||||||||||
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
1.3.9.1