* [ruby-dev:50558] [Ruby trunk Bug#14817] TracePoint#parameters for bmethod's return event should return the same value as its Method#parameters
[not found] <redmine.issue-14817.20180603144747@ruby-lang.org>
@ 2018-06-03 14:47 ` kazuki
2018-06-03 22:54 ` [ruby-dev:50559] " mame
` (4 subsequent siblings)
5 siblings, 0 replies; 6+ messages in thread
From: kazuki @ 2018-06-03 14:47 UTC (permalink / raw)
To: ruby-dev
Issue #14817 has been reported by ktsj (Kazuki Tsujimoto).
----------------------------------------
Bug #14817: TracePoint#parameters for bmethod's return event should return the same value as its Method#parameters
https://bugs.ruby-lang.org/issues/14817
* Author: ktsj (Kazuki Tsujimoto)
* Status: Assigned
* Priority: Normal
* Assignee: mame (Yusuke Endoh)
* Target version: 2.6
* ruby -v: ruby 2.6.0dev (2018-06-03 master 63562) [x86_64-linux]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
define_methodしたメソッド(bmethod)のcall/returnイベント中にTracePoint#parametersを呼び出すと
以下の結果となります。
```
$ cat t.rb
define_method(:bm) {|a|}
p method_parameters: method(:bm).parameters
trace = TracePoint.new(:call, :return){|tp|
mid = tp.method_id
if mid == :bm
p mid: mid, event: tp.event, tp_parameters: tp.parameters
end
}
trace.enable{
bm(0)
}
$ ruby -v t.rb
ruby 2.6.0dev (2018-06-03 master 63562) [x86_64-linux]
{:method_parameters=>[[:req, :a]]}
{:mid=>:bm, :event=>:call, :tp_parameters=>[[:req, :a]]}
{:mid=>:bm, :event=>:return, :tp_parameters=>[]} #=> expected: {:mid=>:bm, :event=>:return, :tp_parameters=>[[:req, :a]]}
```
現状、callイベントに限ってその戻り値がbmethodのMethod#parametersの呼び出し結果と一致しますが
returnイベント時も同様となるべきだと思います。
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ruby-dev:50559] [Ruby trunk Bug#14817] TracePoint#parameters for bmethod's return event should return the same value as its Method#parameters
[not found] <redmine.issue-14817.20180603144747@ruby-lang.org>
2018-06-03 14:47 ` [ruby-dev:50558] [Ruby trunk Bug#14817] TracePoint#parameters for bmethod's return event should return the same value as its Method#parameters kazuki
@ 2018-06-03 22:54 ` mame
2018-06-03 23:00 ` [ruby-dev:50560] " mame
` (3 subsequent siblings)
5 siblings, 0 replies; 6+ messages in thread
From: mame @ 2018-06-03 22:54 UTC (permalink / raw)
To: ruby-dev
Issue #14817 has been updated by mame (Yusuke Endoh).
TracePoint#parameters の問題ではなく、define_method + TracePoint 全般の問題のようです。
```
define_method(:bm) {|a|}
trace = TracePoint.new(:call, :return){|tp|
p [tp.event, tp.lineno] if tp.method_id == :bm
}
trace.enable{
bm(0)
}
```
```
$ ./miniruby test.rb
[:call, 1]
[:return, 7] #=> [:return, 1] になるべき?
```
----------------------------------------
Bug #14817: TracePoint#parameters for bmethod's return event should return the same value as its Method#parameters
https://bugs.ruby-lang.org/issues/14817#change-72354
* Author: ktsj (Kazuki Tsujimoto)
* Status: Assigned
* Priority: Normal
* Assignee: mame (Yusuke Endoh)
* Target version: 2.6
* ruby -v: ruby 2.6.0dev (2018-06-03 master 63562) [x86_64-linux]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
define_methodしたメソッド(bmethod)のcall/returnイベント中にTracePoint#parametersを呼び出すと
以下の結果となります。
```
$ cat t.rb
define_method(:bm) {|a|}
p method_parameters: method(:bm).parameters
trace = TracePoint.new(:call, :return){|tp|
mid = tp.method_id
if mid == :bm
p mid: mid, event: tp.event, tp_parameters: tp.parameters
end
}
trace.enable{
bm(0)
}
$ ruby -v t.rb
ruby 2.6.0dev (2018-06-03 master 63562) [x86_64-linux]
{:method_parameters=>[[:req, :a]]}
{:mid=>:bm, :event=>:call, :tp_parameters=>[[:req, :a]]}
{:mid=>:bm, :event=>:return, :tp_parameters=>[]} #=> expected: {:mid=>:bm, :event=>:return, :tp_parameters=>[[:req, :a]]}
```
現状、callイベントに限ってその戻り値がbmethodのMethod#parametersの呼び出し結果と一致しますが
returnイベント時も同様となるべきだと思います。
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ruby-dev:50560] [Ruby trunk Bug#14817] TracePoint#parameters for bmethod's return event should return the same value as its Method#parameters
[not found] <redmine.issue-14817.20180603144747@ruby-lang.org>
2018-06-03 14:47 ` [ruby-dev:50558] [Ruby trunk Bug#14817] TracePoint#parameters for bmethod's return event should return the same value as its Method#parameters kazuki
2018-06-03 22:54 ` [ruby-dev:50559] " mame
@ 2018-06-03 23:00 ` mame
2018-08-23 7:10 ` [ruby-dev:50622] " ko1
` (2 subsequent siblings)
5 siblings, 0 replies; 6+ messages in thread
From: mame @ 2018-06-03 23:00 UTC (permalink / raw)
To: ruby-dev
Issue #14817 has been updated by mame (Yusuke Endoh).
Assignee changed from mame (Yusuke Endoh) to ko1 (Koichi Sasada)
invoke_bmethod で vm_exec が終わったあとに EXEC_EVENT_HOOK(ec, RUBY_EVENT_RETURN, ...) するため、このような挙動になっているようです。
これは仕様でしょうか。とりあえずささださんに振ります。
----------------------------------------
Bug #14817: TracePoint#parameters for bmethod's return event should return the same value as its Method#parameters
https://bugs.ruby-lang.org/issues/14817#change-72355
* Author: ktsj (Kazuki Tsujimoto)
* Status: Assigned
* Priority: Normal
* Assignee: ko1 (Koichi Sasada)
* Target version: 2.6
* ruby -v: ruby 2.6.0dev (2018-06-03 master 63562) [x86_64-linux]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
define_methodしたメソッド(bmethod)のcall/returnイベント中にTracePoint#parametersを呼び出すと
以下の結果となります。
```
$ cat t.rb
define_method(:bm) {|a|}
p method_parameters: method(:bm).parameters
trace = TracePoint.new(:call, :return){|tp|
mid = tp.method_id
if mid == :bm
p mid: mid, event: tp.event, tp_parameters: tp.parameters
end
}
trace.enable{
bm(0)
}
$ ruby -v t.rb
ruby 2.6.0dev (2018-06-03 master 63562) [x86_64-linux]
{:method_parameters=>[[:req, :a]]}
{:mid=>:bm, :event=>:call, :tp_parameters=>[[:req, :a]]}
{:mid=>:bm, :event=>:return, :tp_parameters=>[]} #=> expected: {:mid=>:bm, :event=>:return, :tp_parameters=>[[:req, :a]]}
```
現状、callイベントに限ってその戻り値がbmethodのMethod#parametersの呼び出し結果と一致しますが
returnイベント時も同様となるべきだと思います。
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ruby-dev:50622] [Ruby trunk Bug#14817] TracePoint#parameters for bmethod's return event should return the same value as its Method#parameters
[not found] <redmine.issue-14817.20180603144747@ruby-lang.org>
` (2 preceding siblings ...)
2018-06-03 23:00 ` [ruby-dev:50560] " mame
@ 2018-08-23 7:10 ` ko1
2018-12-10 6:48 ` [ruby-dev:50689] " ko1
2019-07-15 2:51 ` [ruby-dev:50815] [Ruby master " ko1
5 siblings, 0 replies; 6+ messages in thread
From: ko1 @ 2018-08-23 7:10 UTC (permalink / raw)
To: ruby-dev
Issue #14817 has been updated by ko1 (Koichi Sasada).
見逃してました。
これ、実装見てたら、どーしょーもない気がするんで、制限のある仕様、ってことで駄目でしょうか。駄目かなあ。実装アイディア募集。
----------------------------------------
Bug #14817: TracePoint#parameters for bmethod's return event should return the same value as its Method#parameters
https://bugs.ruby-lang.org/issues/14817#change-73669
* Author: ktsj (Kazuki Tsujimoto)
* Status: Assigned
* Priority: Normal
* Assignee: ko1 (Koichi Sasada)
* Target version: 2.6
* ruby -v: ruby 2.6.0dev (2018-06-03 master 63562) [x86_64-linux]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
define_methodしたメソッド(bmethod)のcall/returnイベント中にTracePoint#parametersを呼び出すと
以下の結果となります。
```
$ cat t.rb
define_method(:bm) {|a|}
p method_parameters: method(:bm).parameters
trace = TracePoint.new(:call, :return){|tp|
mid = tp.method_id
if mid == :bm
p mid: mid, event: tp.event, tp_parameters: tp.parameters
end
}
trace.enable{
bm(0)
}
$ ruby -v t.rb
ruby 2.6.0dev (2018-06-03 master 63562) [x86_64-linux]
{:method_parameters=>[[:req, :a]]}
{:mid=>:bm, :event=>:call, :tp_parameters=>[[:req, :a]]}
{:mid=>:bm, :event=>:return, :tp_parameters=>[]} #=> expected: {:mid=>:bm, :event=>:return, :tp_parameters=>[[:req, :a]]}
```
現状、callイベントに限ってその戻り値がbmethodのMethod#parametersの呼び出し結果と一致しますが
returnイベント時も同様となるべきだと思います。
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ruby-dev:50689] [Ruby trunk Bug#14817] TracePoint#parameters for bmethod's return event should return the same value as its Method#parameters
[not found] <redmine.issue-14817.20180603144747@ruby-lang.org>
` (3 preceding siblings ...)
2018-08-23 7:10 ` [ruby-dev:50622] " ko1
@ 2018-12-10 6:48 ` ko1
2019-07-15 2:51 ` [ruby-dev:50815] [Ruby master " ko1
5 siblings, 0 replies; 6+ messages in thread
From: ko1 @ 2018-12-10 6:48 UTC (permalink / raw)
To: ruby-dev
Issue #14817 has been updated by ko1 (Koichi Sasada).
2.6では known issue にします。
2.7 で、define_method したら ISeq 作るようにするとどうかな、と思っているので、それで一気に解決します。
----------------------------------------
Bug #14817: TracePoint#parameters for bmethod's return event should return the same value as its Method#parameters
https://bugs.ruby-lang.org/issues/14817#change-75527
* Author: ktsj (Kazuki Tsujimoto)
* Status: Feedback
* Priority: Normal
* Assignee: ko1 (Koichi Sasada)
* Target version: 2.6
* ruby -v: ruby 2.6.0dev (2018-06-03 master 63562) [x86_64-linux]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
define_methodしたメソッド(bmethod)のcall/returnイベント中にTracePoint#parametersを呼び出すと
以下の結果となります。
```
$ cat t.rb
define_method(:bm) {|a|}
p method_parameters: method(:bm).parameters
trace = TracePoint.new(:call, :return){|tp|
mid = tp.method_id
if mid == :bm
p mid: mid, event: tp.event, tp_parameters: tp.parameters
end
}
trace.enable{
bm(0)
}
$ ruby -v t.rb
ruby 2.6.0dev (2018-06-03 master 63562) [x86_64-linux]
{:method_parameters=>[[:req, :a]]}
{:mid=>:bm, :event=>:call, :tp_parameters=>[[:req, :a]]}
{:mid=>:bm, :event=>:return, :tp_parameters=>[]} #=> expected: {:mid=>:bm, :event=>:return, :tp_parameters=>[[:req, :a]]}
```
現状、callイベントに限ってその戻り値がbmethodのMethod#parametersの呼び出し結果と一致しますが
returnイベント時も同様となるべきだと思います。
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ruby-dev:50815] [Ruby master Bug#14817] TracePoint#parameters for bmethod's return event should return the same value as its Method#parameters
[not found] <redmine.issue-14817.20180603144747@ruby-lang.org>
` (4 preceding siblings ...)
2018-12-10 6:48 ` [ruby-dev:50689] " ko1
@ 2019-07-15 2:51 ` ko1
5 siblings, 0 replies; 6+ messages in thread
From: ko1 @ 2019-07-15 2:51 UTC (permalink / raw)
To: ruby-dev
Issue #14817 has been updated by ko1 (Koichi Sasada).
Status changed from Feedback to Assigned
> 2.7 で、define_method したら ISeq 作るようにするとどうかな、と思っているので、それで一気に解決します。
これでうまくいかない、ということがわかったので、ちょっと宙ぶらりんです。
考えていた解決案:
* (1) proc を受け取る
* (2) proc のパラメータとまったく同じ method iseq を作る
* (3) 受け取ったパラメータを proc に渡す
こんな感じです。
```
foo_body = proc{|a, b| xxx}
def foo(a, b) # foo_body.parameters を見て、パラメータリストを作る
foo_body[a, b]
end
```
これでいけるじゃん、天才だなと思ってたんですが、optional 引数 o = expr が入ると、うまくいかないことがわかりました。optional 引数の分を、rest で受け取っちゃう、ってのも手だけど、それだと実際に rest が居たときに面倒そうかなぁ。ああ、foo の method parameter が rest になっちゃうから良くないですね。
この問題について、解決案が全然思い浮かびません。
----------------------------------------
Bug #14817: TracePoint#parameters for bmethod's return event should return the same value as its Method#parameters
https://bugs.ruby-lang.org/issues/14817#change-79419
* Author: ktsj (Kazuki Tsujimoto)
* Status: Assigned
* Priority: Normal
* Assignee: ko1 (Koichi Sasada)
* Target version:
* ruby -v: ruby 2.6.0dev (2018-06-03 master 63562) [x86_64-linux]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
define_methodしたメソッド(bmethod)のcall/returnイベント中にTracePoint#parametersを呼び出すと
以下の結果となります。
```
$ cat t.rb
define_method(:bm) {|a|}
p method_parameters: method(:bm).parameters
trace = TracePoint.new(:call, :return){|tp|
mid = tp.method_id
if mid == :bm
p mid: mid, event: tp.event, tp_parameters: tp.parameters
end
}
trace.enable{
bm(0)
}
$ ruby -v t.rb
ruby 2.6.0dev (2018-06-03 master 63562) [x86_64-linux]
{:method_parameters=>[[:req, :a]]}
{:mid=>:bm, :event=>:call, :tp_parameters=>[[:req, :a]]}
{:mid=>:bm, :event=>:return, :tp_parameters=>[]} #=> expected: {:mid=>:bm, :event=>:return, :tp_parameters=>[[:req, :a]]}
```
現状、callイベントに限ってその戻り値がbmethodのMethod#parametersの呼び出し結果と一致しますが
returnイベント時も同様となるべきだと思います。
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2019-07-15 2:51 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <redmine.issue-14817.20180603144747@ruby-lang.org>
2018-06-03 14:47 ` [ruby-dev:50558] [Ruby trunk Bug#14817] TracePoint#parameters for bmethod's return event should return the same value as its Method#parameters kazuki
2018-06-03 22:54 ` [ruby-dev:50559] " mame
2018-06-03 23:00 ` [ruby-dev:50560] " mame
2018-08-23 7:10 ` [ruby-dev:50622] " ko1
2018-12-10 6:48 ` [ruby-dev:50689] " ko1
2019-07-15 2:51 ` [ruby-dev:50815] [Ruby master " ko1
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).