ruby-dev (Japanese) list archive (unofficial mirror)
 help / color / mirror / Atom feed
* [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 read-only IMAP folder(s) and NNTP newsgroup(s).