From bf951c763d00a4aee8f8c896d1a97c387fa8f30e Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Thu, 29 Oct 2020 17:37:29 +0900 Subject: An ellipsis (...) can only be placed at the beginning --- tool/ruby_vm/loaders/insns_def.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'tool/ruby_vm/loaders') 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' (? \g | \s ){0} (? [_a-zA-Z] [0-9_a-zA-Z]* ){0} (? (?: \g \g+ )* \g ){0} - (? \g \g+ \g | \.\.\. ){0} + (? \g \g+ \g ){0} (? (?# empty ) | void | - \g (?: \g* , \g* \g \g* )* ){0} + (?: \.\.\. | \g) (?: \g* , \g* \g \g* )* ){0} (? \g* // \s* attr \g+ (? \g ) \g+ (? \g ) \g* @@ -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/o) do -- cgit v1.2.3