call_stack.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // Copyright (C) 2019 Samuel Newbold
  2. class Call_stack {
  3. bool collect_excess_thrown;
  4. bool execution_handler_excess_thrown;
  5. bool in_exception_handler_v;
  6. bool unwind_stack_v;
  7. int exit_v;
  8. public:
  9. Argm::Exception_t caught_signal;
  10. unsigned current_exception_count;
  11. bool exit_requested;
  12. int global_nesting;
  13. unsigned max_collect;
  14. unsigned max_extra;
  15. int max_nesting;
  16. Call_stack(void) : caught_signal(Argm::No_exception),
  17. collect_excess_thrown(false), current_exception_count(0),
  18. execution_handler_excess_thrown(false), exit_requested(false),
  19. global_nesting(0), in_exception_handler_v(false), exit_v(0),
  20. max_collect(1), max_extra(1), max_nesting(0), unwind_stack_v(false) {}
  21. void add_error(void);
  22. void catch_blocks(const Argm& argm, Error_list& exceptions);
  23. void catch_one(Argm& argm, Error_list& exceptions);
  24. void collect_errors_core(const Argm& argm, bool logic, Error_list& parent);
  25. void exception_handler(Error_list& exceptions);
  26. int exit_value(void) {return exit_v;}
  27. bool in_exception_handler(void) {return in_exception_handler_v;}
  28. bool remove_exceptions(const std::string &name, Error_list& exceptions);
  29. void replace_error(void);
  30. void request_exit(int exit_val);
  31. void reset(void);
  32. bool unwind_stack(void) {return unwind_stack_v;}
  33. };
  34. extern Call_stack global_stack;
  35. struct Conditional_state {
  36. bool in_if_block;
  37. bool successful_condition;
  38. bool exception_thrown;
  39. Conditional_state(void);};
  40. extern Conditional_state gc_state;