diff options
author | Nobuyoshi Nakada <[email protected]> | 2020-10-29 17:37:29 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <[email protected]> | 2020-10-29 18:14:27 +0900 |
commit | bf951c763d00a4aee8f8c896d1a97c387fa8f30e (patch) | |
tree | bd0e80739e0a62f152d3bad9e8cc82889467430d /tool/ruby_vm/loaders | |
parent | 9f3adaf5293d6347250df218bad9dcd3cd8da9ba (diff) |
An ellipsis (...) can only be placed at the beginning
Diffstat (limited to 'tool/ruby_vm/loaders')
-rw-r--r-- | tool/ruby_vm/loaders/insns_def.rb | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/tool/ruby_vm/loaders/insns_def.rb b/tool/ruby_vm/loaders/insns_def.rb index 47e4ba29f5..034905f74e 100644 --- a/tool/ruby_vm/loaders/insns_def.rb +++ b/tool/ruby_vm/loaders/insns_def.rb @@ -25,10 +25,10 @@ grammar = %r' (?<ws> \g<comment> | \s ){0} (?<ident> [_a-zA-Z] [0-9_a-zA-Z]* ){0} (?<type> (?: \g<keyword> \g<ws>+ )* \g<ident> ){0} - (?<arg> \g<type> \g<ws>+ \g<ident> | \.\.\. ){0} + (?<arg> \g<type> \g<ws>+ \g<ident> ){0} (?<argv> (?# empty ) | void | - \g<arg> (?: \g<ws>* , \g<ws>* \g<arg> \g<ws>* )* ){0} + (?: \.\.\. | \g<arg>) (?: \g<ws>* , \g<ws>* \g<arg> \g<ws>* )* ){0} (?<pragma> \g<ws>* // \s* attr \g<ws>+ (?<pragma:type> \g<type> ) \g<ws>+ (?<pragma:name> \g<ident> ) \g<ws>* @@ -57,6 +57,10 @@ until scanner.eos? do ope = split.(scanner["insn:opes"]) pop = split.(scanner["insn:pops"]) ret = split.(scanner["insn:rets"]) + if ope.include?("...") + raise sprintf("parse error at %s:%d:%s: operands cannot be variadic", + scanner.__FILE__, scanner.__LINE__, name) + end attrs = [] while l2 = scanner.scan(/\G#{grammar}\g<pragma>/o) do |