diff options
author | Takashi Kokubun <[email protected]> | 2019-09-03 02:51:48 +0900 |
---|---|---|
committer | Takashi Kokubun <[email protected]> | 2019-09-03 14:22:44 +0900 |
commit | 1a9cc3b27c020c33c87d8b4fe659243aacfeedf3 (patch) | |
tree | a42b16de623a5e7236bf326a185444ff1985d2cb /tool/ruby_vm | |
parent | 355ccdeae52cde250f09675e9d5e65b3ddc41f2e (diff) |
Avoid defining unused instructions
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/2420
Diffstat (limited to 'tool/ruby_vm')
-rw-r--r-- | tool/ruby_vm/loaders/insns_def.rb | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/tool/ruby_vm/loaders/insns_def.rb b/tool/ruby_vm/loaders/insns_def.rb index a7d27ad06a..a29d13a661 100644 --- a/tool/ruby_vm/loaders/insns_def.rb +++ b/tool/ruby_vm/loaders/insns_def.rb @@ -11,6 +11,7 @@ # details. require_relative '../helpers/scanner' +require_relative './vm_opts_h' json = [] scanner = RubyVM::Scanner.new '../../../insns.def' @@ -33,7 +34,7 @@ grammar = %r' (?<pragma:name> \g<ident> ) \g<ws>* = \g<ws>* (?<pragma:expr> .+?; ) \g<ws>* ){0} - (?<insn> DEFINE_INSN \g<ws>+ + (?<insn> DEFINE_INSN(_IF\((?<insn:if>\w+)\))? \g<ws>+ (?<insn:name> \g<ident> ) \g<ws>* [(] \g<ws>* (?<insn:opes> \g<argv> ) \g<ws>* [)] \g<ws>* [(] \g<ws>* (?<insn:pops> \g<argv> ) \g<ws>* [)] \g<ws>* @@ -52,6 +53,7 @@ until scanner.eos? do l1 = scanner.scan!(/\G#{grammar}\g<insn>/o) name = scanner["insn:name"] + opt = scanner["insn:if"] ope = split.(scanner["insn:opes"]) pop = split.(scanner["insn:pops"]) ret = split.(scanner["insn:rets"]) @@ -67,21 +69,23 @@ until scanner.eos? do end l3 = scanner.scan!(/\G#{grammar}\g<block>/o) - json << { - name: name, - location: [path, l1], - signature: { + if opt.nil? || RubyVM::VmOptsH[opt] + json << { name: name, - ope: ope, - pop: pop, - ret: ret, - }, - attributes: attrs, - expr: { - location: [path, l3], - expr: scanner["block"], - }, - } + location: [path, l1], + signature: { + name: name, + ope: ope, + pop: pop, + ret: ret, + }, + attributes: attrs, + expr: { + location: [path, l3], + expr: scanner["block"], + }, + } + end end RubyVM::InsnsDef = json |