summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-09-03 15:33:35 +0900
committerYukihiro Matsumoto <[email protected]>2012-09-03 15:33:35 +0900
commit4e8317f5df061db63600113123a83c6572f6c63f (patch)
tree5aa14e11119c646eb0837104c4929db16e0c3490
parent4f7a1a167db8a3373b356540eaee21f9cf93e7f2 (diff)
downloadmruby-4e8317f5df061db63600113123a83c6572f6c63f.tar.gz
mruby-4e8317f5df061db63600113123a83c6572f6c63f.zip
do no generate lineno info if no filename is specified
-rw-r--r--src/codegen.c16
-rw-r--r--src/error.c2
2 files changed, 13 insertions, 5 deletions
diff --git a/src/codegen.c b/src/codegen.c
index bdd2aeecc..49d53b1ea 100644
--- a/src/codegen.c
+++ b/src/codegen.c
@@ -145,10 +145,14 @@ genop(codegen_scope *s, mrb_code i)
if (s->pc == s->icapa) {
s->icapa *= 2;
s->iseq = (mrb_code *)codegen_realloc(s, s->iseq, sizeof(mrb_code)*s->icapa);
- s->lines = (short*)codegen_realloc(s, s->lines, sizeof(short)*s->icapa);
+ if (s->lines) {
+ s->lines = (short*)codegen_realloc(s, s->lines, sizeof(short)*s->icapa);
+ }
}
s->iseq[s->pc] = i;
- s->lines[s->pc] = s->lineno;
+ if (s->lines) {
+ s->lines[s->pc] = s->lineno;
+ }
s->pc++;
}
@@ -2040,7 +2044,6 @@ scope_new(mrb_state *mrb, codegen_scope *prev, node *lv)
p->mrb = prev->mrb;
p->icapa = 1024;
p->iseq = (mrb_code*)mrb_malloc(mrb, sizeof(mrb_code)*p->icapa);
- p->lines = (short*)mrb_malloc(mrb, sizeof(short)*p->icapa);
p->pcapa = 32;
p->pool = (mrb_value*)mrb_malloc(mrb, sizeof(mrb_value)*p->pcapa);
@@ -2054,7 +2057,9 @@ scope_new(mrb_state *mrb, codegen_scope *prev, node *lv)
p->idx = mrb->irep_len++;
p->filename = prev->filename;
-
+ if (p->filename) {
+ p->lines = (short*)mrb_malloc(mrb, sizeof(short)*p->icapa);
+ }
return p;
}
@@ -2074,6 +2079,9 @@ scope_finish(codegen_scope *s, int idx)
if (s->lines) {
irep->lines = (short *)codegen_realloc(s, s->lines, sizeof(short)*s->pc);
}
+ else {
+ irep->lines = 0;
+ }
}
if (s->pool) {
irep->pool = (mrb_value *)codegen_realloc(s, s->pool, sizeof(mrb_value)*s->plen);
diff --git a/src/error.c b/src/error.c
index da8786650..6d05a3c6c 100644
--- a/src/error.c
+++ b/src/error.c
@@ -191,7 +191,7 @@ exc_debug_info(mrb_state *mrb, struct RObject *exc)
if (ci->proc && !MRB_PROC_CFUNC_P(ci->proc)) {
mrb_irep *irep = ci->proc->body.irep;
- if (irep->lines && irep->iseq <= pc && pc < irep->iseq + irep->ilen) {
+ if (irep->filename && irep->lines && irep->iseq <= pc && pc < irep->iseq + irep->ilen) {
mrb_obj_iv_set(mrb, exc, mrb_intern(mrb, "file"), mrb_str_new_cstr(mrb, irep->filename));
mrb_obj_iv_set(mrb, exc, mrb_intern(mrb, "line"), mrb_fixnum_value(irep->lines[pc - irep->iseq - 1]));
return;