diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-01-22 18:38:53 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-01-22 18:38:53 +0900 |
| commit | dc51d89ac22acc60b9bfeed87115863565b74085 (patch) | |
| tree | 4ac51e7949d187c87aa4fb29159b6f7ae02401b3 /include | |
| parent | c5c156a6dd57eddc87e2162172b202233e45ad70 (diff) | |
| download | mruby-dc51d89ac22acc60b9bfeed87115863565b74085.tar.gz mruby-dc51d89ac22acc60b9bfeed87115863565b74085.zip | |
Minimize the changes in #5277
Instead of including `mruby/presym.h` everywhere, we provided the
fallback `mruby/presym.inc` under `include/mruby` directory, and specify
`-I<build-dir>/include` before `-I<top-dir>/include` in `presym.rake`.
So even when someone drops `-I<build-dir>/include` in compiler options,
it just compiles without failure.
Diffstat (limited to 'include')
| -rw-r--r-- | include/mruby.h | 42 | ||||
| -rw-r--r-- | include/mruby/presym.h | 4 | ||||
| -rw-r--r-- | include/mruby/presym.inc | 14 | ||||
| -rw-r--r-- | include/mruby/presym/enable.h | 16 |
4 files changed, 53 insertions, 23 deletions
diff --git a/include/mruby.h b/include/mruby.h index aa6d2ab65..57f556e94 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -1298,31 +1298,33 @@ MRB_API void mrb_print_error(mrb_state *mrb); /* function for `raisef` formatting */ MRB_API mrb_value mrb_vformat(mrb_state *mrb, const char *format, va_list ap); +#include <mruby/presym.h> + /* macros to get typical exception objects note: + those E_* macros requires mrb_state* variable named mrb. + exception objects obtained from those macros are local to mrb */ -#define E_RUNTIME_ERROR mrb_exc_get_id(mrb, mrb_intern_lit(mrb, "RuntimeError")) -#define E_TYPE_ERROR mrb_exc_get_id(mrb, mrb_intern_lit(mrb, "TypeError")) -#define E_ZERODIV_ERROR mrb_exc_get_id(mrb, mrb_intern_lit(mrb, "ZeroDivisionError")) -#define E_ARGUMENT_ERROR mrb_exc_get_id(mrb, mrb_intern_lit(mrb, "ArgumentError")) -#define E_INDEX_ERROR mrb_exc_get_id(mrb, mrb_intern_lit(mrb, "IndexError")) -#define E_RANGE_ERROR mrb_exc_get_id(mrb, mrb_intern_lit(mrb, "RangeError")) -#define E_NAME_ERROR mrb_exc_get_id(mrb, mrb_intern_lit(mrb, "NameError")) -#define E_NOMETHOD_ERROR mrb_exc_get_id(mrb, mrb_intern_lit(mrb, "NoMethodError")) -#define E_SCRIPT_ERROR mrb_exc_get_id(mrb, mrb_intern_lit(mrb, "ScriptError")) -#define E_SYNTAX_ERROR mrb_exc_get_id(mrb, mrb_intern_lit(mrb, "SyntaxError")) -#define E_LOCALJUMP_ERROR mrb_exc_get_id(mrb, mrb_intern_lit(mrb, "LocalJumpError")) -#define E_REGEXP_ERROR mrb_exc_get_id(mrb, mrb_intern_lit(mrb, "RegexpError")) -#define E_FROZEN_ERROR mrb_exc_get_id(mrb, mrb_intern_lit(mrb, "FrozenError")) - -#define E_NOTIMP_ERROR mrb_exc_get_id(mrb, mrb_intern_lit(mrb, "NotImplementedError")) +#define E_RUNTIME_ERROR mrb_exc_get_id(mrb, MRB_SYM(RuntimeError)) +#define E_TYPE_ERROR mrb_exc_get_id(mrb, MRB_SYM(TypeError)) +#define E_ZERODIV_ERROR mrb_exc_get_id(mrb, MRB_SYM(ZeroDivisionError)) +#define E_ARGUMENT_ERROR mrb_exc_get_id(mrb, MRB_SYM(ArgumentError)) +#define E_INDEX_ERROR mrb_exc_get_id(mrb, MRB_SYM(IndexError)) +#define E_RANGE_ERROR mrb_exc_get_id(mrb, MRB_SYM(RangeError)) +#define E_NAME_ERROR mrb_exc_get_id(mrb, MRB_SYM(NameError)) +#define E_NOMETHOD_ERROR mrb_exc_get_id(mrb, MRB_SYM(NoMethodError)) +#define E_SCRIPT_ERROR mrb_exc_get_id(mrb, MRB_SYM(ScriptError)) +#define E_SYNTAX_ERROR mrb_exc_get_id(mrb, MRB_SYM(SyntaxError)) +#define E_LOCALJUMP_ERROR mrb_exc_get_id(mrb, MRB_SYM(LocalJumpError)) +#define E_REGEXP_ERROR mrb_exc_get_id(mrb, MRB_SYM(RegexpError)) +#define E_FROZEN_ERROR mrb_exc_get_id(mrb, MRB_SYM(FrozenError)) + +#define E_NOTIMP_ERROR mrb_exc_get_id(mrb, MRB_SYM(NotImplementedError)) #ifndef MRB_NO_FLOAT -#define E_FLOATDOMAIN_ERROR mrb_exc_get_id(mrb, mrb_intern_lit(mrb, "FloatDomainError")) +#define E_FLOATDOMAIN_ERROR mrb_exc_get_id(mrb, MRB_SYM(FloatDomainError)) #endif -#define E_KEY_ERROR mrb_exc_get_id(mrb, mrb_intern_lit(mrb, "KeyError")) +#define E_KEY_ERROR mrb_exc_get_id(mrb, MRB_SYM(KeyError)) MRB_API mrb_value mrb_yield(mrb_state *mrb, mrb_value b, mrb_value arg); MRB_API mrb_value mrb_yield_argv(mrb_state *mrb, mrb_value b, mrb_int argc, const mrb_value *argv); @@ -1389,7 +1391,7 @@ MRB_API mrb_value mrb_fiber_alive_p(mrb_state *mrb, mrb_value fib); * * Implemented in mruby-fiber */ -#define E_FIBER_ERROR mrb_exc_get_id(mrb, mrb_intern_lit(mrb, "FiberError")) +#define E_FIBER_ERROR (mrb_exc_get_id(mrb, MRB_SYM(FiberError))) MRB_API void mrb_stack_extend(mrb_state*, mrb_int); /* memory pool implementation */ @@ -1409,10 +1411,6 @@ MRB_API void mrb_show_copyright(mrb_state *mrb); MRB_API mrb_value mrb_format(mrb_state *mrb, const char *format, ...); -#ifdef MRB_PRESYM_SCANNING -# include <mruby/presym/scanning.h> -#endif - #if 0 /* memcpy and memset does not work with gdb reverse-next on my box */ /* use naive memcpy and memset instead */ diff --git a/include/mruby/presym.h b/include/mruby/presym.h index 066b675e7..e3ce9214c 100644 --- a/include/mruby/presym.h +++ b/include/mruby/presym.h @@ -9,7 +9,9 @@ #if defined(MRB_NO_PRESYM) # include <mruby/presym/disable.h> -#elif !defined(MRB_PRESYM_SCANNING) +#elif defined(MRB_PRESYM_SCANNING) +# include <mruby/presym/scanning.h> +#else # include <mruby/presym/enable.h> #endif diff --git a/include/mruby/presym.inc b/include/mruby/presym.inc new file mode 100644 index 000000000..8eced3d4f --- /dev/null +++ b/include/mruby/presym.inc @@ -0,0 +1,14 @@ +/** +** @file mruby/presym.inc - Fallback file for Preallocated Symbols +** +** See Copyright Notice in mruby.h +*/ + +/* + * Reading this file means you failed to specify `-I<build-dir>/include` + * in the configuration. I will not use `PRESYM*` macros for compilation. + */ + +# error "mruby/presym.h" +1 1 + + d +#define MRB_NO_PRESYM diff --git a/include/mruby/presym/enable.h b/include/mruby/presym/enable.h index ddeb17e32..4f03e6689 100644 --- a/include/mruby/presym/enable.h +++ b/include/mruby/presym/enable.h @@ -8,6 +8,20 @@ #define MRUBY_PRESYM_ENABLE_H #undef MRB_PRESYM_MAX +#define MRB_PRESYM_NAMED(lit, num, type, name) +#define MRB_PRESYM_UNNAMED(lit, num) +/* test for proper -I `<build-dir>/include` */ +/* fallback `presym.inc` defines `MRB_NO_PRESYM` */ +# include <mruby/presym.inc> + +#undef MRB_PRESYM_MAX +#undef MRB_PRESYM_NAMED +#undef MRB_PRESYM_UNNAMED + +#if defined(MRB_NO_PRESYM) +# include <mruby/presym/disable.h> +#else + #define MRB_PRESYM_NAMED(lit, num, type, name) MRB_##type##__##name = (num), #define MRB_PRESYM_UNNAMED(lit, num) @@ -38,4 +52,6 @@ enum mruby_presym { static const mrb_sym name[] = {__VA_ARGS__}; \ static void init_##name(mrb_state *mrb) {} +#endif /* !MRUBY_NO_PRESYM */ + #endif /* MRUBY_PRESYM_ENABLE_H */ |
