From: nobu@... Date: 2015-10-14T05:10:26+00:00 Subject: [ruby-core:71082] [Ruby trunk - Feature #11589] Disasm callinfo kw output as list of keywords used Issue #11589 has been updated by Nobuyoshi Nakada. Tracker changed from Bug to Feature ---------------------------------------- Feature #11589: Disasm callinfo kw output as list of keywords used https://bugs.ruby-lang.org/issues/11589#change-54446 * Author: Brian Black * Status: Open * Priority: Normal * Assignee: ---------------------------------------- Feature https://bugs.ruby-lang.org/issues/10440 changed the disasm output so that only the number of keywords used at a call site is added to the callinfo output. This means that if a function has n keyword arguments and k are used at a call site, then there are n!/(n-k)! possible combinations of k (keyword, argument) pairs. Essentially, this means that it is impossible to determine what keywords were used and in what order from the disasm without referring to the original source code. I changed the disasm output (https://github.com/ruby/ruby/compare/trunk...bpblack:kwargs) to replace the number of keywords with the ordered list of keywords used in the call info disasm. For example: ~~~ ruby def test1(a: 'default', b:, c: 'default') puts a, b, c end test1 a: 'a', b: 'b', c: 'c' ~~~ Currently, the call info disasm for the call to test1 looks like: ~~~ 0088 opt_send_without_block , ~~~ Based on this disasm, all I know without referring to the original source code is that the arguments are passed as one of the 6 possible orderings of keywords a, b, and c. With my changes it looks like: ~~~ 0088 opt_send_without_block , ~~~ -- https://bugs.ruby-lang.org/