diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-09-22 12:52:18 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-09-22 12:52:18 +0000 |
commit | 742283385fc8539e76581ad2482ad62ed8a12c76 (patch) | |
tree | e139ff6c1bb02c3cfda4d5fa224f6b88c5b898f3 | |
parent | f3cdd50125b9a66b18766dc1eaaff10fbc92a29d (diff) |
* eval.c (call_trace_func): should not call trace function while
compilation.
* eval.c (rb_call0): also inside c-func.
* parse.y (yycompile): ditto.
* ruby.c (require_libraries): preserve source file/line for each
require.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2880 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | eval.c | 8 | ||||
-rw-r--r-- | parse.y | 2 | ||||
-rw-r--r-- | ruby.c | 7 |
4 files changed, 23 insertions, 6 deletions
@@ -1,3 +1,15 @@ +Sun Sep 22 21:49:42 2002 Nobuyoshi Nakada <[email protected]> + + * eval.c (call_trace_func): should not call trace function while + compilation. + + * eval.c (rb_call0): also inside c-func. + + * parse.y (yycompile): ditto. + + * ruby.c (require_libraries): preserve source file/line for each + require. + Sat Sep 21 22:23:41 2002 Nobuyoshi Nakada <[email protected]> * eval.c (rb_thread_raise): no need to save dead thread context. @@ -895,8 +895,7 @@ void ruby_set_current_source() { if (ruby_current_node) { - ruby_sourcefile = ruby_current_node->nd_file; - ruby_sourceline = nd_line(ruby_current_node); + SET_CURRENT_SOURCE(); } } @@ -2061,6 +2060,7 @@ call_trace_func(event, node, self, id, klass) if (!trace_func) return; if (tracing) return; + if (ruby_in_compile) return; node_save[0] = ruby_last_node; if (!(node_save[1] = ruby_current_node)) { @@ -4501,17 +4501,21 @@ rb_call0(klass, recv, id, oid, argc, argv, body, nosuper) } if (trace_func) { int state; + NODE *volatile node = ruby_current_node; call_trace_func("c-call", ruby_current_node, recv, id, klass); + ruby_current_node = 0; PUSH_TAG(PROT_FUNC); if ((state = EXEC_TAG()) == 0) { result = call_cfunc(body->nd_cfnc, recv, len, argc, argv); } POP_TAG(); + ruby_current_node = node; call_trace_func("c-return", ruby_current_node, recv, id, klass); if (state) JUMP_TAG(state); } else { + ruby_current_node = 0; result = call_cfunc(body->nd_cfnc, recv, len, argc, argv); } } @@ -2335,6 +2335,7 @@ yycompile(f, line) NODE *node = 0; struct RVarmap *vp, *vars = ruby_dyna_vars; + ruby_in_compile = 1; if (!compile_for_eval && rb_safe_level() == 0 && rb_const_defined(rb_cObject, rb_intern("SCRIPT_LINES__"))) { VALUE hash, fname; @@ -2365,7 +2366,6 @@ yycompile(f, line) quoted_term = -1; ruby_current_node = 0; ruby_sourcefile = rb_source_filename(f); - ruby_in_compile = 1; n = yyparse(); ruby_debug_lines = 0; compile_for_eval = 0; @@ -321,19 +321,20 @@ require_libraries() ruby_eval_tree = ruby_eval_tree_begin = 0; req_list_last = 0; while (list) { + ruby_current_node = 0; rb_require(list->name); tmp = list->next; free(list->name); free(list); list = tmp; + ruby_current_node = save[2]; + ruby_set_current_source(); } req_list_head.next = 0; ruby_eval_tree = save[0]; ruby_eval_tree_begin = save[1]; - ruby_current_node = save[2]; - ruby_set_current_source(); - ruby_current_node = 0; rb_gc_force_recycle((VALUE)save[2]); + ruby_current_node = 0; } static void |