summaryrefslogtreecommitdiff
path: root/compile.c
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-04-19 10:37:08 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-04-19 10:37:08 +0000
commita73894337a830cdd32a913964f3150bc35269975 (patch)
tree9867f12c88a52c9c4d7ca5fe30c9b57e5a9e411f /compile.c
parent2dd91facca2337ff611489f1ccd84441d8fc9bf2 (diff)
* eval.c, node.h, thread.c, yarvcore.[ch], eval_intern.h:
support set_trace_func (incomplete. id and klass don't be passed). And support Thread#set_trace_func which hook only specified thread and Thread#add_trace_func which add new trace func instead of replace old one. C level API was modified. See thread.c (logic) and yarvcore.h (data structures). * vm.c, vm_macro.def: add hook points. * compile.c, insns.def: fix "trace" instruction. * iseq.c, vm_macro.h: add compile option "trace_instruction". * test/ruby/test_settracefunc.rb: hook "c-return" of set_trace_func. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12195 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'compile.c')
-rw-r--r--compile.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/compile.c b/compile.c
index 85160de2eb..b028ff853e 100644
--- a/compile.c
+++ b/compile.c
@@ -162,7 +162,19 @@ rb_iseq_compile(VALUE self, NODE *node)
ADD_CATCH_ENTRY(CATCH_TYPE_NEXT, start, end, 0, end);
}
else {
- COMPILE(ret, "scoped node", node->nd_body);
+ if (iseq->type == ISEQ_TYPE_CLASS) {
+ ADD_TRACE(ret, nd_line(node), RUBY_EVENT_CLASS);
+ COMPILE(ret, "scoped node", node->nd_body);
+ ADD_TRACE(ret, nd_line(node), RUBY_EVENT_END);
+ }
+ else if (iseq->type == ISEQ_TYPE_METHOD) {
+ ADD_TRACE(ret, nd_line(node), RUBY_EVENT_CALL);
+ COMPILE(ret, "scoped node", node->nd_body);
+ ADD_TRACE(ret, nd_line(node), RUBY_EVENT_RETURN);
+ }
+ else {
+ COMPILE(ret, "scoped node", node->nd_body);
+ }
}
}
else {
@@ -2433,6 +2445,10 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
type = nd_type(node);
+ if (node->flags & NODE_NEWLINE) {
+ ADD_TRACE(ret, nd_line(node), RUBY_EVENT_LINE);
+ }
+
switch (type) {
case NODE_METHOD:{