summaryrefslogtreecommitdiff
path: root/tool/ruby_vm/loaders/insns_def.rb
diff options
context:
space:
mode:
-rw-r--r--tool/ruby_vm/loaders/insns_def.rb34
1 files changed, 19 insertions, 15 deletions
@@ -11,6 +11,7 @@
# details.
require_relative '../helpers/scanner'
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: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"]
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: {
name: name,
- ope: ope,
- pop: pop,
- ret: ret,
- },
- attributes: attrs,
- expr: {
- location: [path, l3],
- expr: scanner["block"],
- },
- }
end
RubyVM::InsnsDef = json