diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-06-30 02:09:42 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-06-30 02:09:42 +0000 |
commit | ab7c308029678f9608bb82b216a2460185220e6d (patch) | |
tree | 4dca2ae591eafe64be9c8b4af6e359240c8e9924 /compile.c | |
parent | 0a9ed1014e3ccc2cf1cfe5854a581822a5de4195 (diff) | |
download | ruby-ab7c308029678f9608bb82b216a2460185220e6d.tar.gz |
compile.c: dump iseq
* compile.c (append_compile_error): raise a fatal error when
compile_debug is enabled.
* compile.c (COMPILE_ERROR): dump the disassembled instruction
instruction sequence always.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59212 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'compile.c')
-rw-r--r-- | compile.c | 16 |
1 files changed, 5 insertions, 11 deletions
@@ -321,7 +321,9 @@ struct iseq_compile_data_ensure_node_stack { #define IS_INSN_ID(iobj, insn) (INSN_OF(iobj) == BIN(insn)) /* error */ -typedef void (*compile_error_func)(rb_iseq_t *, int, const char *, ...); +#if CPDEBUG > 0 +NORETURN(static void append_compile_error(rb_iseq_t *iseq, int line, const char *fmt, ...)); +#endif static void append_compile_error(rb_iseq_t *iseq, int line, const char *fmt, ...) @@ -341,6 +343,7 @@ append_compile_error(rb_iseq_t *iseq, int line, const char *fmt, ...) else if (!err_info) { RB_OBJ_WRITE(iseq, &ISEQ_COMPILE_DATA(iseq)->err_info, Qtrue); } + if (compile_debug) rb_exc_fatal(err); } static void @@ -353,16 +356,7 @@ compile_bug(rb_iseq_t *iseq, int line, const char *fmt, ...) abort(); } -NOINLINE(static compile_error_func prepare_compile_error(rb_iseq_t *iseq)); - -static compile_error_func -prepare_compile_error(rb_iseq_t *iseq) -{ - if (compile_debug) return &compile_bug; - return &append_compile_error; -} - -#define COMPILE_ERROR prepare_compile_error(iseq) +#define COMPILE_ERROR append_compile_error #define ERROR_ARGS_AT(n) iseq, nd_line(n), #define ERROR_ARGS ERROR_ARGS_AT(node) |