summaryrefslogtreecommitdiffstats
path: root/insns.def
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-07-01 18:13:22 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-07-01 18:13:22 +0000
commit3ce21396a4a190b1c99d95c7b421cede555ab909 (patch)
tree4e0a94fae643781bef9670c5f058f12100e6eccc /insns.def
parentd61356d9f794a87b566f97263d9fb3455ce625c1 (diff)
downloadruby-3ce21396a4a190b1c99d95c7b421cede555ab909.tar.gz
ruby-3ce21396a4a190b1c99d95c7b421cede555ab909.tar.xz
ruby-3ce21396a4a190b1c99d95c7b421cede555ab909.zip
* compile.h, insns.def: reduce insn operand of "trace".
* include/ruby/ruby.h: add RUBY_EVENT_COVERAGE event. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@17785 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'insns.def')
-rw-r--r--insns.def28
1 files changed, 17 insertions, 11 deletions
diff --git a/insns.def b/insns.def
index f0eaefe66..e378260c4 100644
--- a/insns.def
+++ b/insns.def
@@ -847,23 +847,29 @@ defined
*/
DEFINE_INSN
trace
-(rb_num_t nf, VALUE coverage)
+(rb_num_t nf)
()
()
{
rb_event_flag_t flag = nf;
- if (coverage) {
- long line = rb_sourceline() - 1;
- long count;
- if (RARRAY_PTR(coverage)[line] == Qnil) {
- rb_bug("bug");
- }
- count = FIX2LONG(RARRAY_PTR(coverage)[line]) + 1;
- if (POSFIXABLE(count)) {
- RARRAY_PTR(coverage)[line] = LONG2FIX(count);
+
+ if (flag == RUBY_EVENT_COVERAGE) {
+ VALUE coverage = GET_ISEQ()->coverage;
+ if (coverage) {
+ long line = vm_get_sourceline(GET_CFP()) - 1;
+ long count;
+ if (RARRAY_PTR(coverage)[line] == Qnil) {
+ rb_bug("bug");
+ }
+ count = FIX2LONG(RARRAY_PTR(coverage)[line]) + 1;
+ if (POSFIXABLE(count)) {
+ RARRAY_PTR(coverage)[line] = LONG2FIX(count);
+ }
}
}
- EXEC_EVENT_HOOK(th, flag, GET_SELF(), 0, 0 /* TODO: id, klass */);
+ else {
+ EXEC_EVENT_HOOK(th, flag, GET_SELF(), 0, 0 /* TODO: id, klass */);
+ }
}
/**********************************************************/