binding_of_caller 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +2 -3
- data/ext/binding_of_caller/binding_of_caller.c +27 -19
- data/lib/binding_of_caller/version.rb +1 -1
- metadata +5 -5
data/README.md
CHANGED
@@ -13,7 +13,7 @@ call stack, not limited to just the immediate caller.
|
|
13
13
|
|
14
14
|
**Recommended for use only in debugging situations. Do not use this in production apps.**
|
15
15
|
|
16
|
-
**Only works in MRI Ruby 1.9.2**
|
16
|
+
**Only works in MRI Ruby 1.9.2 and 1.9.3**
|
17
17
|
|
18
18
|
* Install the [gem](https://rubygems.org/gems/binding_of_caller): `gem install binding_of_caller`
|
19
19
|
* See the [source code](http://github.com/banister/binding_of_caller)
|
@@ -50,8 +50,7 @@ This project is a spinoff from the [Pry REPL project.](http://pry.github.com)
|
|
50
50
|
Features and limitations
|
51
51
|
-------------------------
|
52
52
|
|
53
|
-
* Only works with MRI 1.9.2
|
54
|
-
* Broken in 1.9.3, support will hopefully be provided in the near future.
|
53
|
+
* Only works with MRI 1.9.2 and 1.9.3
|
55
54
|
* Does not work in 1.8.7, but there is a well known (continuation-based) hack to get a `Binding#of_caller` there.
|
56
55
|
|
57
56
|
Contact
|
@@ -93,6 +93,25 @@ static rb_control_frame_t * find_valid_frame(rb_control_frame_t * cfp, rb_contro
|
|
93
93
|
return NULL;
|
94
94
|
}
|
95
95
|
|
96
|
+
static VALUE
|
97
|
+
frametype_name(VALUE flag)
|
98
|
+
{
|
99
|
+
switch (flag & VM_FRAME_MAGIC_MASK) {
|
100
|
+
case VM_FRAME_MAGIC_METHOD: return string2sym("method");
|
101
|
+
case VM_FRAME_MAGIC_BLOCK: return string2sym("block");
|
102
|
+
case VM_FRAME_MAGIC_CLASS: return string2sym("class");
|
103
|
+
case VM_FRAME_MAGIC_TOP: return string2sym("top");
|
104
|
+
case VM_FRAME_MAGIC_FINISH: return string2sym("finish");
|
105
|
+
case VM_FRAME_MAGIC_CFUNC: return string2sym("cfunc");
|
106
|
+
case VM_FRAME_MAGIC_PROC: return string2sym("proc");
|
107
|
+
case VM_FRAME_MAGIC_IFUNC: return string2sym("ifunc");
|
108
|
+
case VM_FRAME_MAGIC_EVAL: return string2sym("eval");
|
109
|
+
case VM_FRAME_MAGIC_LAMBDA: return string2sym("lambda");
|
110
|
+
default:
|
111
|
+
rb_raise(rb_eRuntimeError, "Unknown frame type! got flag: %d", FIX2INT(flag));
|
112
|
+
}
|
113
|
+
}
|
114
|
+
|
96
115
|
static VALUE binding_of_caller(VALUE self, VALUE rb_level)
|
97
116
|
{
|
98
117
|
rb_thread_t *th;
|
@@ -125,34 +144,22 @@ static VALUE binding_of_caller(VALUE self, VALUE rb_level)
|
|
125
144
|
bind->filename = cfp->iseq->filename;
|
126
145
|
bind->line_no = rb_vm_get_sourceline(cfp);
|
127
146
|
|
128
|
-
rb_iv_set(bindval, "@frame_type", cfp->flag);
|
147
|
+
rb_iv_set(bindval, "@frame_type", frametype_name(cfp->flag));
|
148
|
+
rb_iv_set(bindval, "@frame_description", cfp->iseq->name);
|
149
|
+
|
129
150
|
return bindval;
|
130
151
|
}
|
131
152
|
|
132
|
-
|
133
153
|
static VALUE
|
134
|
-
|
154
|
+
frame_type(VALUE self)
|
135
155
|
{
|
136
|
-
|
137
|
-
case VM_FRAME_MAGIC_METHOD: return string2sym("method");
|
138
|
-
case VM_FRAME_MAGIC_BLOCK: return string2sym("block");
|
139
|
-
case VM_FRAME_MAGIC_CLASS: return string2sym("class");
|
140
|
-
case VM_FRAME_MAGIC_TOP: return string2sym("top");
|
141
|
-
case VM_FRAME_MAGIC_FINISH: return string2sym("finish");
|
142
|
-
case VM_FRAME_MAGIC_CFUNC: return string2sym("cfunc");
|
143
|
-
case VM_FRAME_MAGIC_PROC: return string2sym("proc");
|
144
|
-
case VM_FRAME_MAGIC_IFUNC: return string2sym("ifunc");
|
145
|
-
case VM_FRAME_MAGIC_EVAL: return string2sym("eval");
|
146
|
-
case VM_FRAME_MAGIC_LAMBDA: return string2sym("lambda");
|
147
|
-
default:
|
148
|
-
rb_raise(rb_eRuntimeError, "frame_type can only be returned for bindings created with Binding#of_caller().");
|
149
|
-
}
|
156
|
+
return rb_iv_get(self, "@frame_type");
|
150
157
|
}
|
151
158
|
|
152
159
|
static VALUE
|
153
|
-
|
160
|
+
frame_description(VALUE self)
|
154
161
|
{
|
155
|
-
return
|
162
|
+
return rb_iv_get(self, "@frame_description");
|
156
163
|
}
|
157
164
|
|
158
165
|
static VALUE frame_count(VALUE self)
|
@@ -199,6 +206,7 @@ Init_binding_of_caller()
|
|
199
206
|
rb_define_method(mBindingOfCaller, "of_caller", binding_of_caller, 1);
|
200
207
|
rb_define_method(mBindingOfCaller, "frame_count", frame_count, 0);
|
201
208
|
rb_define_method(mBindingOfCaller, "frame_type", frame_type, 0);
|
209
|
+
rb_define_method(mBindingOfCaller, "frame_description", frame_description, 0);
|
202
210
|
rb_define_method(mBindingOfCaller, "callers", callers, 0);
|
203
211
|
rb_include_module(rb_cBinding, mBindingOfCaller);
|
204
212
|
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: binding_of_caller
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-11-
|
12
|
+
date: 2011-11-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bacon
|
16
|
-
requirement: &
|
16
|
+
requirement: &70166101101640 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: 1.1.0
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70166101101640
|
25
25
|
description: Retrieve the binding of a method's caller. Can also retrieve bindings
|
26
26
|
even further up the stack. Currently only works for MRI 1.9.2.
|
27
27
|
email: jrmair@gmail.com
|
@@ -110,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
110
110
|
version: '0'
|
111
111
|
requirements: []
|
112
112
|
rubyforge_project:
|
113
|
-
rubygems_version: 1.8.
|
113
|
+
rubygems_version: 1.8.10
|
114
114
|
signing_key:
|
115
115
|
specification_version: 3
|
116
116
|
summary: Retrieve the binding of a method's caller. Can also retrieve bindings even
|