--00221532c7188dd6190466394349
Content-Type: multipart/alternative; boundary=00221532c7188dd6100466394347

--00221532c7188dd6100466394347
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

It's been quiet in ruby-core.

Recently I've looking at introspection, tracing and writing a new debugger
for Ruby 1.9.

Here are two little extensions to some existing functions that I think will
help in tracing and writing a debugger.

1. set_trace_func().

Right now  set_trace_func() takes a function name. Internally though the C
code sets a trace mask to an event type to trigger (TRACE_MASK_ALL).  It is
helpful sometimes to pass a more selective mask. One possible approach is to
add this as an optional parameter.

In the attached patch this is done. However in the patch the optional
parameter is a Fixnum. I realize it might be nicer if the mask could be
instead set or a list of string event names. Since the change is in C code,
and I prefer to write Ruby, the way I'd suggest doing this is some outside
Ruby code that accomplishes this. Perhaps it could be added to tracer.rb

Not in the patch but something one may want to do is have a routine to
change the mask.

2. binding()

One of the things one wants to do in a debugger is to change the frame in
which to evaluate expressions. For this, ruby-debug adds Kernel#binding_n.
However, wouldn't it be nicer to just extend binding to allow an optional
level parameter (defaulting to 0) that returns a binding for the context
frame of the nth caller? Again this seems pretty simple to do in the
existing C code.

--00221532c7188dd6100466394347
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

It&#39;s been quiet in ruby-core.<br><br>Recently I&#39;ve looking at introspection, tracing and writing a new debugger for Ruby 1.9.<br><br>Here are two little extensions to some existing functions that I think will help in tracing and writing a debugger.<br>


<br>1. set_trace_func(). <br><br>Right nowset_trace_func() takes a
function name. Internally though the C code sets a trace mask to an
event type to trigger (TRACE_MASK_ALL).It is helpful sometimes to
pass a more selective mask. One possible approach is to add this as an
optional parameter.<br>
<br>In the attached patch this is done. However in the patch the
optional parameter is a Fixnum. I realize it might be nicer if the mask
could be instead set or a list of string event names. Since the change
is in C code, and I prefer to write Ruby, the way I&#39;d suggest doing
this is some outside Ruby code that accomplishes this. Perhaps it could
be added to tracer.rb <br>
<br>Not in the patch but something one may want to do is have a routine to change the mask.<br><br>2. binding()<br><br>One
of the things one wants to do in a debugger is to change the frame in
which to evaluate expressions. For this, ruby-debug adds
Kernel#binding_n. However, wouldn&#39;t it be nicer to just extend binding
to allow an optional level parameter (defaulting to 0) that returns a
binding for the context frame of the nth caller? Again this seems
pretty simple to do in the existing C code.

--00221532c7188dd6100466394347--
--00221532c7188dd6190466394349
Content-Type: text/x-diff; charset=US-ASCII; name="trace-mask.patch"
Content-Disposition: attachment; filename="trace-mask.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_fsv5ige60

LS0tCiB0ZXN0L3RyYWNlLnJiIHwgICA0OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrCiAxIGZpbGVzIGNoYW5nZWQsIDQ5IGluc2VydGlvbnMoKyksIDAg
ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC90cmFjZS5yYgoKZGlmZiAtLWdp
dCBhL3Rlc3QvdHJhY2UucmIgYi90ZXN0L3RyYWNlLnJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjRlNWY1NTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3RyYWNlLnJiCkBA
IC0wLDAgKzEsNDkgQEAKK3JlcXVpcmUgJ3Rlc3QvdW5pdCcKKworZGVmIHNxcih4KQorICByZXR1
cm4geCp4CitlbmQKKworZGVmIHNvbWV0aGluZygpCisgIHg9NQorICB4PTYuMiBpZiB4PT02LjEK
KyAgeD03CisgIHNxcig1KQorZW5kCisKK2NsYXNzIFRlc3RUcmFjZSA8IFRlc3Q6OlVuaXQ6OlRl
c3RDYXNlCisKKyAgQEBtc2dzID0gW10KKyAgZGVmIHNldHVwCisgICAgQEBtc2dzID0gW10KKyAg
ZW5kCisKKyAgZGVmIHRyYWNlX2Z1bmMoZXZlbnQsIGZpbGUsIGxpbmUsIGlkLCBiaW5kaW5nLCBr
bGFzcywgKikKKyAgICBAQG1zZ3MgPDwgW2V2ZW50LCBmaWxlLCBsaW5lXQorICBlbmQKKworICBk
ZWYgdGVzdF90cmFjZV9mdW5jX25pbAorICAgIGFzc2VydF9lcXVhbChuaWwsIHNldF90cmFjZV9m
dW5jKG5pbCksICJzZXRfdHJhY2VfZnVuYyhuaWwpIikKKyAgZW5kCisKKyAgZGVmIHRlc3RfdHJh
Y2VfbWFza19hbmRfYWxsCisgICAgc2V0X3RyYWNlX2Z1bmMobWV0aG9kKDp0cmFjZV9mdW5jKS50
b19wcm9jLCAweDAwMTgpCisgICAgc29tZXRoaW5nKCkKKyAgICBzZXRfdHJhY2VfZnVuYyhuaWwp
CisgICAgYXNzZXJ0X2VxdWFsKHRydWUsIAorICAgICAgICAgICAgICAgICBAQG1zZ3MuaW5qZWN0
IGRvIHxyZXN1bHQsIHRyaXBsZXwgCisgICAgICAgICAgICAgICAgICAgcmVzdWx0ICYmIFsnY2Fs
bCcsICdyZXR1cm4nXS5tZW1iZXI/KHRyaXBsZVswXSkKKyAgICAgICAgICAgICAgICAgZW5kLAor
ICAgICAgICAgICAgICAgICAidHJhY2UgLSBvbmx5IGNhbGwvcmV0dXJuIGV2ZW50cyIKKyAgICAg
ICAgICAgICAgICAgKQorICAgIGNhbGxfcmV0dXJuX2V2ZW50X2NvdW50ID0gQEBtc2dzLnNpemUK
KyAgICBzZXRfdHJhY2VfZnVuYyhtZXRob2QoOnRyYWNlX2Z1bmMpLnRvX3Byb2MpCisgICAgc29t
ZXRoaW5nKCkKKyAgICBzZXRfdHJhY2VfZnVuYyhuaWwpCisgICAgYXNzZXJ0X2VxdWFsKHRydWUs
IEBAbXNncy5zaXplID4gY2FsbF9yZXR1cm5fZXZlbnRfY291bnQsCisgICAgICAgICAgICAgICAg
ICd0cmFjZSAtIGFsbCBldmVudHMnKQorCisgIGVuZAorZW5kCisKKwotLSAKMS41LjYuMwoKCkZy
b20gOWI4MWFkOTUxYWJjZDVmMGM3MGVlMWIwMTg0NjhkZmEyODQ3NzU2MSBNb24gU2VwIDE3IDAw
OjAwOjAwIDIwMDEKRnJvbTogcm9ja3kgPHJvY2t5QHNhbmNoZXouKG5vbmUpPgpEYXRlOiBUaHUs
IDI2IE1hciAyMDA5IDAwOjExOjQ5IC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gQWRkIG9wdGlvbmFs
IHRyYWNlLWV2ZW50IGJpdCBtYXNrIHRvIGZpbHRlciB0cmFjZSBldmVudHMKCi0tLQogdGhyZWFk
LmMgfCAgIDMwICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQogMSBmaWxlcyBjaGFuZ2Vk
LCAyNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3RocmVhZC5j
IGIvdGhyZWFkLmMKaW5kZXggMzYyNzgxMS4uYWFhZDU3MCAxMDA2NDQKLS0tIGEvdGhyZWFkLmMK
KysrIGIvdGhyZWFkLmMKQEAgLTM1MDIsOCArMzUwMiw5IEBAIHN0YXRpYyB2b2lkIGNhbGxfdHJh
Y2VfZnVuYyhyYl9ldmVudF9mbGFnX3QsIFZBTFVFIGRhdGEsIFZBTFVFIHNlbGYsIElEIGlkLCBW
QUxVCiAKIC8qCiAgKiAgY2FsbC1zZXE6Ci0gKiAgICAgc2V0X3RyYWNlX2Z1bmMocHJvYykgICAg
PT4gcHJvYwotICogICAgIHNldF90cmFjZV9mdW5jKG5pbCkgICAgID0+IG5pbAorICogICAgIHNl
dF90cmFjZV9mdW5jKHByb2MpICAgICAgICA9PiBwcm9jCisgKiAgICAgc2V0X3RyYWNlX2Z1bmMo
cHJvYywgbWFzaykgID0+IHByb2MKKyAqICAgICBzZXRfdHJhY2VfZnVuYyhuaWwpICAgICAgICAg
PT4gbmlsCiAgKgogICogIEVzdGFibGlzaGVzIF9wcm9jXyBhcyB0aGUgaGFuZGxlciBmb3IgdHJh
Y2luZywgb3IgZGlzYWJsZXMKICAqICB0cmFjaW5nIGlmIHRoZSBwYXJhbWV0ZXIgaXMgK25pbCsu
IF9wcm9jXyB0YWtlcyB1cApAQCAtMzUxNyw2ICszNTE4LDggQEAgc3RhdGljIHZvaWQgY2FsbF90
cmFjZV9mdW5jKHJiX2V2ZW50X2ZsYWdfdCwgVkFMVUUgZGF0YSwgVkFMVUUgc2VsZiwgSUQgaWQs
IFZBTFUKICAqICA8Y29kZT5saW5lPC9jb2RlPiAoZXhlY3V0ZSBjb2RlIG9uIGEgbmV3IGxpbmUp
LCA8Y29kZT5yYWlzZTwvY29kZT4KICAqICAocmFpc2UgYW4gZXhjZXB0aW9uKSwgYW5kIDxjb2Rl
PnJldHVybjwvY29kZT4gKHJldHVybiBmcm9tIGEgUnVieQogICogIG1ldGhvZCkuIFRyYWNpbmcg
aXMgZGlzYWJsZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIF9wcm9jXy4KKyAqICBfbWFza18gaXMg
YW4gb3B0aW9uYWwgYml0bWFzayBvZiBldmVudHMgdG8gdHJpZ2dlciBvbiwgU2VlIHJ1YnkuaAor
ICogIGZvciB0aGUgaW50ZWdlciB2YWx1ZXMuIElmIG5vIG1hc2sgaXMgc3BlY2lmaWVkIGFsbCBl
dmVudHMgYXJlIHRyaWdnZXJlZC4KICAqCiAgKiAgICAgIGNsYXNzIFRlc3QKICAqCWRlZiB0ZXN0
CkBAIC0zNTQxLDExICszNTQ0LDI4IEBAIHN0YXRpYyB2b2lkIGNhbGxfdHJhY2VfZnVuYyhyYl9l
dmVudF9mbGFnX3QsIFZBTFVFIGRhdGEsIFZBTFVFIHNlbGYsIElEIGlkLCBWQUxVCiAgKgkgIGxp
bmUgcHJvZy5yYjozICAgICAgICB0ZXN0ICAgICBUZXN0CiAgKgkgIGxpbmUgcHJvZy5yYjo0ICAg
ICAgICB0ZXN0ICAgICBUZXN0CiAgKiAgICAgIHJldHVybiBwcm9nLnJiOjQgICAgICAgIHRlc3Qg
ICAgIFRlc3QKKyAqCisgKiAgICAgIHNldF90cmFjZV9mdW5jKHByb2MgeyB8ZXZlbnQsIGZpbGUs
IGxpbmUsIGlkLCBiaW5kaW5nLCBjbGFzc25hbWV8CisgKgkgICBwcmludGYgIiU4cyAlczolLTJk
ICUxMHMgJThzXG4iLCBldmVudCwgZmlsZSwgbGluZSwgaWQsIGNsYXNzbmFtZQorICogICAgICB9
LCAweDAxOCkgIyAweDAxOCA9PSBjYWxscyBhbmQgcmV0dXJucyBvbmx5CisgKiAgICAgIHQgPSBU
ZXN0Lm5ldworICogICAgICB0LnRlc3QKKyAqCisgKiAgCSAgY2FsbCBwcm9nLnJiOjIgICAgICAg
IHRlc3QgICAgIFRlc3QKKyAqICAgICAgcmV0dXJuIHByb2cucmI6NCAgICAgICAgdGVzdCAgICAg
VGVzdAorCiAgKi8KIAogc3RhdGljIFZBTFVFCi1zZXRfdHJhY2VfZnVuYyhWQUxVRSBvYmosIFZB
TFVFIHRyYWNlKQorc2V0X3RyYWNlX2Z1bmMoaW50IGFyZ2MsIFZBTFVFICphcmd2KQogeworICAg
IFZBTFVFIHZtYXNrOworICAgIFZBTFVFIHRyYWNlOworICAgIGludCBtYXNrPVJVQllfRVZFTlRf
QUxMOworICAgIGlmICgyID09IHJiX3NjYW5fYXJncyhhcmdjLCBhcmd2LCAiMTEiLCAmdHJhY2Us
ICZ2bWFzaykpIHsKKyAgICAgICAgbWFzayA9IE5VTTJJTlQodm1hc2spOworICAgIH0KKwogICAg
IHJiX3JlbW92ZV9ldmVudF9ob29rKGNhbGxfdHJhY2VfZnVuYyk7CiAKICAgICBpZiAoTklMX1Ao
dHJhY2UpKSB7CkBAIC0zNTU2LDcgKzM1NzYsNyBAQCBzZXRfdHJhY2VfZnVuYyhWQUxVRSBvYmos
IFZBTFVFIHRyYWNlKQogCXJiX3JhaXNlKHJiX2VUeXBlRXJyb3IsICJ0cmFjZV9mdW5jIG5lZWRz
IHRvIGJlIFByb2MiKTsKICAgICB9CiAKLSAgICByYl9hZGRfZXZlbnRfaG9vayhjYWxsX3RyYWNl
X2Z1bmMsIFJVQllfRVZFTlRfQUxMLCB0cmFjZSk7CisgICAgcmJfYWRkX2V2ZW50X2hvb2soY2Fs
bF90cmFjZV9mdW5jLCBtYXNrLCB0cmFjZSk7CiAgICAgcmV0dXJuIHRyYWNlOwogfQogCkBAIC0z
ODAxLDcgKzM4MjEsNyBAQCBJbml0X1RocmVhZCh2b2lkKQogICAgIHJiX2VUaHJlYWRFcnJvciA9
IHJiX2RlZmluZV9jbGFzcygiVGhyZWFkRXJyb3IiLCByYl9lU3RhbmRhcmRFcnJvcik7CiAKICAg
ICAvKiB0cmFjZSAqLwotICAgIHJiX2RlZmluZV9nbG9iYWxfZnVuY3Rpb24oInNldF90cmFjZV9m
dW5jIiwgc2V0X3RyYWNlX2Z1bmMsIDEpOworICAgIHJiX2RlZmluZV9nbG9iYWxfZnVuY3Rpb24o
InNldF90cmFjZV9mdW5jIiwgc2V0X3RyYWNlX2Z1bmMsIC0xKTsKICAgICByYl9kZWZpbmVfbWV0
aG9kKHJiX2NUaHJlYWQsICJzZXRfdHJhY2VfZnVuYyIsIHRocmVhZF9zZXRfdHJhY2VfZnVuY19t
LCAxKTsKICAgICByYl9kZWZpbmVfbWV0aG9kKHJiX2NUaHJlYWQsICJhZGRfdHJhY2VfZnVuYyIs
IHRocmVhZF9hZGRfdHJhY2VfZnVuY19tLCAxKTsKIAotLSAKMS41LjYuMwoKCkZyb20gZTVhMjNj
ZjVkMTM1YWJlODQyMGRhZDdmMDY2YTcxMjdlMzRmNjcwNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIw
MDEKRnJvbTogcm9ja3kgPHJvY2t5QHNhbmNoZXouKG5vbmUpPgpEYXRlOiBUaHUsIDI2IE1hciAy
MDA5IDA1OjU0OjMwIC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gTWFrZSBzdXJlIHRlc3QgaW5jbHVk
ZXMgYSAicmFpc2UiIGV2ZW50CgotLS0KIHRlc3QvdHJhY2UucmIgfCAgIDI5ICsrKysrKysrKysr
KysrKysrKy0tLS0tLS0tLS0tCiAxIGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDEx
IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Rlc3QvdHJhY2UucmIgYi90ZXN0L3RyYWNlLnJi
CmluZGV4IDRlNWY1NTguLmZkYTYxMGQgMTAwNjQ0Ci0tLSBhL3Rlc3QvdHJhY2UucmIKKysrIGIv
dGVzdC90cmFjZS5yYgpAQCAtMSwxNCArMSwxNiBAQAogcmVxdWlyZSAndGVzdC91bml0JwogCi1k
ZWYgc3FyKHgpCi0gIHJldHVybiB4KngKK2RlZiBidWdneSh4LCB5KQorICByZXR1cm4geCAvIHkg
KiB5CiBlbmQKIAotZGVmIHNvbWV0aGluZygpCi0gIHg9NQotICB4PTYuMiBpZiB4PT02LjEKLSAg
eD03Ci0gIHNxcig1KQorZGVmIHNvbWV0aGluZyhjKQorICBiPTAgaWYgYz09Ni4xCisgIGJlZ2lu
CisgICAgcmV0dXJuIGJ1Z2d5KDUsIGIpCisgIHJlc2N1ZQorICBlbmQKKyAgcmV0dXJuIDAKIGVu
ZAogCiBjbGFzcyBUZXN0VHJhY2UgPCBUZXN0OjpVbml0OjpUZXN0Q2FzZQpAQCAtMTksNiArMjEs
NyBAQCBjbGFzcyBUZXN0VHJhY2UgPCBUZXN0OjpVbml0OjpUZXN0Q2FzZQogICBlbmQKIAogICBk
ZWYgdHJhY2VfZnVuYyhldmVudCwgZmlsZSwgbGluZSwgaWQsIGJpbmRpbmcsIGtsYXNzLCAqKQor
ICAgIHB1dHMgIiN7ZmlsZX06I3tsaW5lfSAtICN7ZXZlbnR9IiBpZiAkREVCVUcKICAgICBAQG1z
Z3MgPDwgW2V2ZW50LCBmaWxlLCBsaW5lXQogICBlbmQKIApAQCAtMjcsOCArMzAsOCBAQCBjbGFz
cyBUZXN0VHJhY2UgPCBUZXN0OjpVbml0OjpUZXN0Q2FzZQogICBlbmQKIAogICBkZWYgdGVzdF90
cmFjZV9tYXNrX2FuZF9hbGwKLSAgICBzZXRfdHJhY2VfZnVuYyhtZXRob2QoOnRyYWNlX2Z1bmMp
LnRvX3Byb2MsIDB4MDAxOCkKLSAgICBzb21ldGhpbmcoKQorICAgIHNldF90cmFjZV9mdW5jKG1l
dGhvZCg6dHJhY2VfZnVuYykudG9fcHJvYywgMHgwMDE4KSAjIENhbGxzL3JldHVybnMKKyAgICBz
b21ldGhpbmcoNi4xKQogICAgIHNldF90cmFjZV9mdW5jKG5pbCkKICAgICBhc3NlcnRfZXF1YWwo
dHJ1ZSwgCiAgICAgICAgICAgICAgICAgIEBAbXNncy5pbmplY3QgZG8gfHJlc3VsdCwgdHJpcGxl
fCAKQEAgLTM3LDExICs0MCwxNSBAQCBjbGFzcyBUZXN0VHJhY2UgPCBUZXN0OjpVbml0OjpUZXN0
Q2FzZQogICAgICAgICAgICAgICAgICAidHJhY2UgLSBvbmx5IGNhbGwvcmV0dXJuIGV2ZW50cyIK
ICAgICAgICAgICAgICAgICAgKQogICAgIGNhbGxfcmV0dXJuX2V2ZW50X2NvdW50ID0gQEBtc2dz
LnNpemUKKyAgICBAQG1zZ3MgPSBbXQorICAgIHB1dHMgJz0nICogMjAgaWYgJERFQlVHCiAgICAg
c2V0X3RyYWNlX2Z1bmMobWV0aG9kKDp0cmFjZV9mdW5jKS50b19wcm9jKQotICAgIHNvbWV0aGlu
ZygpCisgICAgc29tZXRoaW5nKDYuMSkKICAgICBzZXRfdHJhY2VfZnVuYyhuaWwpCiAgICAgYXNz
ZXJ0X2VxdWFsKHRydWUsIEBAbXNncy5zaXplID4gY2FsbF9yZXR1cm5fZXZlbnRfY291bnQsCi0g
ICAgICAgICAgICAgICAgICd0cmFjZSAtIGFsbCBldmVudHMnKQorICAgICAgICAgICAgICAgICAn
dHJhY2UgLSBhbGwgZXZlbnRzLiBTaG91bGQgcmVjb3JkIG1vcmUgZXZlbnRzLicpCisgICAgYXNz
ZXJ0X2VxdWFsKDEsIEBAbXNncy5zZWxlY3Qge3x4fCB4WzBdID09ICdyYWlzZSd9LnNpemUsCisg
ICAgICAgICAgICAgICAgICd0cmFjZSAtIGFsbCBldmVudHMuIFNob3VsZCBnZXQgYSByYWlzZSBl
dmVudCcpCiAKICAgZW5kCiBlbmQKLS0gCjEuNS42LjMKCg--00221532c7188dd6190466394349--