From 26338fe640720a39303885a98e6312210f051cde Mon Sep 17 00:00:00 2001 From: dearblue Date: Fri, 17 Dec 2021 23:03:27 +0900 Subject: Print error before cleanup in `codegen_error()` Previously, it always pointed to the highest scope as the location of the error. - example code `code.rb` ```ruby huge_num = "1" + "0" * 300; eval <filename_sym && s->lineno) { + const char *filename = mrb_sym_name_len(s->mrb, s->filename_sym, NULL); + fprintf(stderr, "%s:%d: %s\n", filename, s->lineno, message); + } + else { + fprintf(stderr, "%s\n", message); + } +#endif while (s->prev) { codegen_scope *tmp = s->prev; if (s->irep) { @@ -137,15 +146,6 @@ codegen_error(codegen_scope *s, const char *message) mrb_pool_close(s->mpool); s = tmp; } -#ifndef MRB_NO_STDIO - if (s->filename_sym && s->lineno) { - const char *filename = mrb_sym_name_len(s->mrb, s->filename_sym, NULL); - fprintf(stderr, "%s:%d: %s\n", filename, s->lineno, message); - } - else { - fprintf(stderr, "%s\n", message); - } -#endif MRB_THROW(s->mrb->jmp); } -- cgit v1.2.3