diff options
| author | take_cheeze <[email protected]> | 2013-09-02 00:11:17 +0900 |
|---|---|---|
| committer | take_cheeze <[email protected]> | 2013-09-02 00:48:07 +0900 |
| commit | 0b806ca17ba1a9dc6b5863050090a74e51236745 (patch) | |
| tree | 1560617d507113a71c3f632acb126b1eae01d7d0 /src/codegen.c | |
| parent | 8082a37748215462562977dab9b78ae92eca0ad6 (diff) | |
| download | mruby-0b806ca17ba1a9dc6b5863050090a74e51236745.tar.gz mruby-0b806ca17ba1a9dc6b5863050090a74e51236745.zip | |
reduce node size
Diffstat (limited to 'src/codegen.c')
| -rw-r--r-- | src/codegen.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/codegen.c b/src/codegen.c index e4fa75b33..b46ddf87e 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -70,6 +70,8 @@ typedef struct scope { int idx; int debug_start_pos; + uint16_t filename_index; + parser_state* parser; } codegen_scope; static codegen_scope* scope_new(mrb_state *mrb, codegen_scope *prev, node *lv); @@ -1112,14 +1114,12 @@ codegen(codegen_scope *s, node *tree, int val) if (!tree) return; - if (s->irep) { - if (s->pc > 0 && strcmp(s->filename, tree->filename) != 0) { - mrb_debug_info_append_file(s->mrb, s->irep, s->debug_start_pos, s->pc); - s->debug_start_pos = s->pc; - // fprintf(stderr, "%s\n", s->filename); - } - s->irep->filename = tree->filename; - s->filename = tree->filename; + if (s->irep && s->pc > 0 && s->filename_index != tree->filename) { + s->irep->filename = s->filename = mrb_parser_get_filename(s->parser, s->filename_index); + mrb_debug_info_append_file(s->mrb, s->irep, s->debug_start_pos, s->pc); + s->debug_start_pos = s->pc; + s->filename_index = tree->filename; + s->filename = mrb_parser_get_filename(s->parser, tree->filename); } nt = (intptr_t)tree->car; @@ -2421,6 +2421,8 @@ scope_new(mrb_state *mrb, codegen_scope *prev, node *lv) else { p->irep->debug_info = NULL; } + p->parser = prev->parser; + p->filename_index = prev->filename_index; return p; } @@ -2869,7 +2871,9 @@ codegen_start(mrb_state *mrb, parser_state *p) return -1; } scope->mrb = mrb; + scope->parser = p; scope->filename = p->filename; + scope->filename_index = p->current_filename_index; if (setjmp(scope->jmp) == 0) { // prepare irep codegen(scope, p->tree, NOVAL); |
