Skip to content

Commit 7422833

Browse files
committed
* 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
1 parent f3cdd50 commit 7422833

File tree

4 files changed

+23
-6
lines changed

4 files changed

+23
-6
lines changed

ChangeLog

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,15 @@
1+
Sun Sep 22 21:49:42 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
2+
3+
* eval.c (call_trace_func): should not call trace function while
4+
compilation.
5+
6+
* eval.c (rb_call0): also inside c-func.
7+
8+
* parse.y (yycompile): ditto.
9+
10+
* ruby.c (require_libraries): preserve source file/line for each
11+
require.
12+
113
Sat Sep 21 22:23:41 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
214

315
* eval.c (rb_thread_raise): no need to save dead thread context.

eval.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -895,8 +895,7 @@ void
895895
ruby_set_current_source()
896896
{
897897
if (ruby_current_node) {
898-
ruby_sourcefile = ruby_current_node->nd_file;
899-
ruby_sourceline = nd_line(ruby_current_node);
898+
SET_CURRENT_SOURCE();
900899
}
901900
}
902901

@@ -2061,6 +2060,7 @@ call_trace_func(event, node, self, id, klass)
20612060

20622061
if (!trace_func) return;
20632062
if (tracing) return;
2063+
if (ruby_in_compile) return;
20642064

20652065
node_save[0] = ruby_last_node;
20662066
if (!(node_save[1] = ruby_current_node)) {
@@ -4501,17 +4501,21 @@ rb_call0(klass, recv, id, oid, argc, argv, body, nosuper)
45014501
}
45024502
if (trace_func) {
45034503
int state;
4504+
NODE *volatile node = ruby_current_node;
45044505

45054506
call_trace_func("c-call", ruby_current_node, recv, id, klass);
4507+
ruby_current_node = 0;
45064508
PUSH_TAG(PROT_FUNC);
45074509
if ((state = EXEC_TAG()) == 0) {
45084510
result = call_cfunc(body->nd_cfnc, recv, len, argc, argv);
45094511
}
45104512
POP_TAG();
4513+
ruby_current_node = node;
45114514
call_trace_func("c-return", ruby_current_node, recv, id, klass);
45124515
if (state) JUMP_TAG(state);
45134516
}
45144517
else {
4518+
ruby_current_node = 0;
45154519
result = call_cfunc(body->nd_cfnc, recv, len, argc, argv);
45164520
}
45174521
}

parse.y

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2335,6 +2335,7 @@ yycompile(f, line)
23352335
NODE *node = 0;
23362336
struct RVarmap *vp, *vars = ruby_dyna_vars;
23372337

2338+
ruby_in_compile = 1;
23382339
if (!compile_for_eval && rb_safe_level() == 0 &&
23392340
rb_const_defined(rb_cObject, rb_intern("SCRIPT_LINES__"))) {
23402341
VALUE hash, fname;
@@ -2365,7 +2366,6 @@ yycompile(f, line)
23652366
quoted_term = -1;
23662367
ruby_current_node = 0;
23672368
ruby_sourcefile = rb_source_filename(f);
2368-
ruby_in_compile = 1;
23692369
n = yyparse();
23702370
ruby_debug_lines = 0;
23712371
compile_for_eval = 0;

ruby.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -321,19 +321,20 @@ require_libraries()
321321
ruby_eval_tree = ruby_eval_tree_begin = 0;
322322
req_list_last = 0;
323323
while (list) {
324+
ruby_current_node = 0;
324325
rb_require(list->name);
325326
tmp = list->next;
326327
free(list->name);
327328
free(list);
328329
list = tmp;
330+
ruby_current_node = save[2];
331+
ruby_set_current_source();
329332
}
330333
req_list_head.next = 0;
331334
ruby_eval_tree = save[0];
332335
ruby_eval_tree_begin = save[1];
333-
ruby_current_node = save[2];
334-
ruby_set_current_source();
335-
ruby_current_node = 0;
336336
rb_gc_force_recycle((VALUE)save[2]);
337+
ruby_current_node = 0;
337338
}
338339

339340
static void

0 commit comments

Comments
 (0)