summaryrefslogtreecommitdiff
path: root/tool
diff options
context:
space:
mode:
Diffstat (limited to 'tool')
-rw-r--r--tool/bundler/dev_gems.rb2
-rw-r--r--tool/lib/_tmpdir.rb100
-rw-r--r--tool/lib/output.rb13
-rw-r--r--tool/lib/test/unit.rb30
-rw-r--r--tool/lib/test/unit/assertions.rb9
-rw-r--r--tool/lrama/lib/lrama/command.rb5
-rw-r--r--tool/lrama/lib/lrama/grammar/parameterizing_rule/resolver.rb21
-rw-r--r--tool/lrama/lib/lrama/grammar/parameterizing_rule/rhs.rb22
-rw-r--r--tool/lrama/lib/lrama/grammar/parameterizing_rule/rule.rb6
-rw-r--r--tool/lrama/lib/lrama/grammar/rule.rb6
-rw-r--r--tool/lrama/lib/lrama/grammar/rule_builder.rb86
-rw-r--r--tool/lrama/lib/lrama/lexer.rb1
-rw-r--r--tool/lrama/lib/lrama/lexer/grammar_file.rb12
-rw-r--r--tool/lrama/lib/lrama/option_parser.rb5
-rw-r--r--tool/lrama/lib/lrama/parser.rb1062
-rw-r--r--tool/lrama/lib/lrama/state.rb28
-rw-r--r--tool/lrama/lib/lrama/version.rb2
-rwxr-xr-xtool/merger.rb9
-rwxr-xr-x[-rw-r--r--]tool/rdoc-srcdir0
-rw-r--r--tool/rubyspec_temp.rb13
-rw-r--r--tool/test/testunit/test_assertion.rb13
-rwxr-xr-xtool/test_for_warn_bundled_gems/test.sh4
-rw-r--r--tool/test_for_warn_bundled_gems/test_warn_bootsnap_rubyarchdir_gem.rb11
23 files changed, 853 insertions, 607 deletions
diff --git a/tool/bundler/dev_gems.rb b/tool/bundler/dev_gems.rb
index acf7335578..1422cfc7a5 100644
--- a/tool/bundler/dev_gems.rb
+++ b/tool/bundler/dev_gems.rb
@@ -7,7 +7,7 @@ gem "rake", "~> 13.1"
gem "rb_sys"
gem "webrick", "~> 1.6"
-gem "turbo_tests", "= 2.1.0"
+gem "turbo_tests", "~> 2.2.3"
gem "parallel_tests", "< 3.9.0"
gem "parallel", "~> 1.19"
gem "rspec-core", "~> 3.12"
diff --git a/tool/lib/_tmpdir.rb b/tool/lib/_tmpdir.rb
new file mode 100644
index 0000000000..fd429dab37
--- /dev/null
+++ b/tool/lib/_tmpdir.rb
@@ -0,0 +1,100 @@
+template = "rubytest."
+
+# This path is only for tests.
+# Assume the directory by these environment variables are safe.
+base = [ENV["TMPDIR"], ENV["TMP"], "/tmp"].find do |tmp|
+ next unless tmp and tmp.size <= 50 and File.directory?(tmp)
+ # On macOS, the default TMPDIR is very long, inspite of UNIX socket
+ # path length is limited.
+ #
+ # Also Rubygems creates its own temporary directory per tests, and
+ # some tests copy the full path of gemhome there. In that caes, the
+ # path contains both temporary names twice, and can exceed path name
+ # limit very easily.
+ tmp
+end
+begin
+ tmpdir = File.join(base, template + Random.new_seed.to_s(36)[-6..-1])
+ Dir.mkdir(tmpdir, 0o700)
+rescue Errno::EEXIST
+ retry
+end
+# warn "tmpdir(#{tmpdir.size}) = #{tmpdir}"
+
+pid = $$
+END {
+ if pid == $$
+ begin
+ Dir.rmdir(tmpdir)
+ rescue Errno::ENOENT
+ rescue Errno::ENOTEMPTY
+ require_relative "colorize"
+ colorize = Colorize.new
+ ls = Struct.new(:colorize) do
+ def mode_inspect(m, s)
+ [
+ (m & 0o4 == 0 ? ?- : ?r),
+ (m & 0o2 == 0 ? ?- : ?w),
+ (m & 0o1 == 0 ? (s ? s.upcase : ?-) : (s || ?x)),
+ ]
+ end
+ def decorate_path(path, st)
+ case
+ when st.directory?
+ color = "bold;blue"
+ type = "/"
+ when st.symlink?
+ color = "bold;cyan"
+ # type = "@"
+ when st.executable?
+ color = "bold;green"
+ type = "*"
+ when path.end_with?(".gem")
+ color = "green"
+ end
+ colorize.decorate(path, color) + (type || "")
+ end
+ def list_tree(parent, indent = "", &block)
+ children = Dir.children(parent).map do |child|
+ [child, path = File.join(parent, child), File.lstat(path)]
+ end
+ nlink_width = children.map {|child, path, st| st.nlink}.max.to_s.size
+ size_width = children.map {|child, path, st| st.size}.max.to_s.size
+
+ children.each do |child, path, st|
+ m = st.mode
+ m = [
+ (st.file? ? ?- : st.ftype[0]),
+ mode_inspect(m >> 6, (?s unless m & 04000 == 0)),
+ mode_inspect(m >> 3, (?s unless m & 02000 == 0)),
+ mode_inspect(m, (?t unless m & 01000 == 0)),
+ ].join("")
+ warn sprintf("%s* %s %*d %*d %s % s%s",
+ indent, m, nlink_width, st.nlink, size_width, st.size,
+ st.mtime.to_s, decorate_path(child, st),
+ (" -> " + decorate_path(File.readlink(path), File.stat(path)) if
+ st.symlink?))
+ if st.directory?
+ list_tree(File.join(parent, child), indent + " ", &block)
+ end
+ yield path, st if block
+ end
+ end
+ end.new(colorize)
+ warn colorize.notice("Children under ")+colorize.fail(tmpdir)+":"
+ Dir.chdir(tmpdir) do
+ ls.list_tree(".") do |path, st|
+ if st.directory?
+ Dir.rmdir(path)
+ else
+ File.unlink(path)
+ end
+ end
+ end
+ require "fileutils"
+ FileUtils.rm_rf(tmpdir)
+ end
+ end
+}
+
+ENV["TMPDIR"] = ENV["SPEC_TEMP_DIR"] = ENV["GEM_TEST_TMPDIR"] = tmpdir
diff --git a/tool/lib/output.rb b/tool/lib/output.rb
index 5c645daca6..8cb426ae4a 100644
--- a/tool/lib/output.rb
+++ b/tool/lib/output.rb
@@ -4,10 +4,15 @@ require_relative 'colorize'
class Output
attr_reader :path, :vpath
- def initialize
- @path = @timestamp = @ifchange = @color = nil
- @overwrite = @create_only = false
- @vpath = VPath.new
+ def initialize(path: nil, timestamp: nil, ifchange: nil, color: nil,
+ overwrite: false, create_only: false, vpath: VPath.new)
+ @path = path
+ @timestamp = timestamp
+ @ifchange = ifchange
+ @color = color
+ @overwrite = overwrite
+ @create_only = create_only
+ @vpath = vpath
end
COLOR_WHEN = {
diff --git a/tool/lib/test/unit.rb b/tool/lib/test/unit.rb
index d758b5fb02..2b0856b822 100644
--- a/tool/lib/test/unit.rb
+++ b/tool/lib/test/unit.rb
@@ -37,6 +37,26 @@ module Test
class PendedError < AssertionFailedError; end
+ class << self
+ ##
+ # Extract the location where the last assertion method was
+ # called. Returns "<empty>" if _e_ does not have backtrace, or
+ # an empty string if no assertion method location was found.
+
+ def location e
+ last_before_assertion = nil
+
+ return '<empty>' unless e&.backtrace # SystemStackError can return nil.
+
+ e.backtrace.reverse_each do |s|
+ break if s =~ /:in \W(?:.*\#)?(?:assert|refute|flunk|pass|fail|raise|must|wont)/
+ last_before_assertion = s
+ end
+ return "" unless last_before_assertion
+ /:in / =~ last_before_assertion ? $` : last_before_assertion
+ end
+ end
+
module Order
class NoSort
def initialize(seed)
@@ -1778,15 +1798,7 @@ module Test
end
def location e # :nodoc:
- last_before_assertion = ""
-
- return '<empty>' unless e&.backtrace # SystemStackError can return nil.
-
- e.backtrace.reverse_each do |s|
- break if s =~ /in .(?:Test::Unit::(?:Core)?Assertions#)?(assert|refute|flunk|pass|fail|raise|must|wont)/
- last_before_assertion = s
- end
- last_before_assertion.sub(/:in .*$/, '')
+ Test::Unit.location e
end
##
diff --git a/tool/lib/test/unit/assertions.rb b/tool/lib/test/unit/assertions.rb
index b4f1dbc176..aad422f7e7 100644
--- a/tool/lib/test/unit/assertions.rb
+++ b/tool/lib/test/unit/assertions.rb
@@ -768,7 +768,14 @@ EOT
e = assert_raise(SyntaxError, mesg) do
syntax_check(src, fname, line)
end
- assert_match(error, e.message, mesg)
+
+ # Prism adds ANSI escape sequences to syntax error messages to
+ # colorize and format them. We strip them out here to make them easier
+ # to match against in tests.
+ message = e.message
+ message.gsub!(/\e\[.*?m/, "")
+
+ assert_match(error, message, mesg)
e
end
end
diff --git a/tool/lrama/lib/lrama/command.rb b/tool/lrama/lib/lrama/command.rb
index 94e86c6c94..12fc4fc7ec 100644
--- a/tool/lrama/lib/lrama/command.rb
+++ b/tool/lrama/lib/lrama/command.rb
@@ -47,6 +47,11 @@ module Lrama
puts grammar.rules
end
+ if options.trace_opts && options.trace_opts[:actions]
+ puts "Grammar rules with actions:"
+ grammar.rules.each { |rule| puts rule.with_actions }
+ end
+
File.open(options.outfile, "w+") do |f|
Lrama::Output.new(
out: f,
diff --git a/tool/lrama/lib/lrama/grammar/parameterizing_rule/resolver.rb b/tool/lrama/lib/lrama/grammar/parameterizing_rule/resolver.rb
index 1923e7819c..d8f3ae7897 100644
--- a/tool/lrama/lib/lrama/grammar/parameterizing_rule/resolver.rb
+++ b/tool/lrama/lib/lrama/grammar/parameterizing_rule/resolver.rb
@@ -13,8 +13,12 @@ module Lrama
@rules << rule
end
- def find(token)
- select_rules(token).last
+ def find_rule(token)
+ select_rules(@rules, token).last
+ end
+
+ def find_inline(token)
+ @rules.select { |rule| rule.name == token.s_value && rule.is_inline }.last
end
def created_lhs(lhs_s_value)
@@ -23,8 +27,9 @@ module Lrama
private
- def select_rules(token)
- rules = select_rules_by_name(token.rule_name)
+ def select_rules(rules, token)
+ rules = select_not_inline_rules(rules)
+ rules = select_rules_by_name(rules, token.rule_name)
rules = rules.select { |rule| rule.required_parameters_count == token.args_count }
if rules.empty?
raise "Invalid number of arguments. `#{token.rule_name}`"
@@ -33,8 +38,12 @@ module Lrama
end
end
- def select_rules_by_name(rule_name)
- rules = @rules.select { |rule| rule.name == rule_name }
+ def select_not_inline_rules(rules)
+ rules.select { |rule| !rule.is_inline }
+ end
+
+ def select_rules_by_name(rules, rule_name)
+ rules = rules.select { |rule| rule.name == rule_name }
if rules.empty?
raise "Parameterizing rule does not exist. `#{rule_name}`"
else
diff --git a/tool/lrama/lib/lrama/grammar/parameterizing_rule/rhs.rb b/tool/lrama/lib/lrama/grammar/parameterizing_rule/rhs.rb
index 7f50be873c..3eb92f8ef4 100644
--- a/tool/lrama/lib/lrama/grammar/parameterizing_rule/rhs.rb
+++ b/tool/lrama/lib/lrama/grammar/parameterizing_rule/rhs.rb
@@ -9,6 +9,28 @@ module Lrama
@user_code = nil
@precedence_sym = nil
end
+
+ def resolve_user_code(bindings)
+ return unless user_code
+
+ var_to_arg = {}
+ symbols.each do |sym|
+ resolved_sym = bindings.resolve_symbol(sym)
+ if resolved_sym != sym
+ var_to_arg[sym.s_value] = resolved_sym.s_value
+ end
+ end
+
+ var_to_arg.each do |var, arg|
+ user_code.references.each do |ref|
+ if ref.name == var
+ ref.name = arg
+ end
+ end
+ end
+
+ return user_code
+ end
end
end
end
diff --git a/tool/lrama/lib/lrama/grammar/parameterizing_rule/rule.rb b/tool/lrama/lib/lrama/grammar/parameterizing_rule/rule.rb
index 9c1d46e4f5..38f0fca4ea 100644
--- a/tool/lrama/lib/lrama/grammar/parameterizing_rule/rule.rb
+++ b/tool/lrama/lib/lrama/grammar/parameterizing_rule/rule.rb
@@ -2,12 +2,14 @@ module Lrama
class Grammar
class ParameterizingRule
class Rule
- attr_reader :name, :parameters, :rhs_list, :required_parameters_count
+ attr_reader :name, :parameters, :rhs_list, :required_parameters_count, :tag, :is_inline
- def initialize(name, parameters, rhs_list)
+ def initialize(name, parameters, rhs_list, tag: nil, is_inline: false)
@name = name
@parameters = parameters
@rhs_list = rhs_list
+ @tag = tag
+ @is_inline = is_inline
@required_parameters_count = parameters.count
end
end
diff --git a/tool/lrama/lib/lrama/grammar/rule.rb b/tool/lrama/lib/lrama/grammar/rule.rb
index 9281e0574f..0e06edc80d 100644
--- a/tool/lrama/lib/lrama/grammar/rule.rb
+++ b/tool/lrama/lib/lrama/grammar/rule.rb
@@ -19,7 +19,7 @@ module Lrama
# TODO: Change this to display_name
def to_s
l = lhs.id.s_value
- r = empty_rule? ? "ε" : rhs.map {|r| r.id.s_value }.join(", ")
+ r = empty_rule? ? "ε" : rhs.map {|r| r.id.s_value }.join(" ")
"#{l} -> #{r}"
end
@@ -32,6 +32,10 @@ module Lrama
"#{l}: #{r}"
end
+ def with_actions
+ "#{to_s} {#{token_code&.s_value}}"
+ end
+
# opt_nl: ε <-- empty_rule
# | '\n' <-- not empty_rule
def empty_rule?
diff --git a/tool/lrama/lib/lrama/grammar/rule_builder.rb b/tool/lrama/lib/lrama/grammar/rule_builder.rb
index b2ccc3e243..ccb41e67f8 100644
--- a/tool/lrama/lib/lrama/grammar/rule_builder.rb
+++ b/tool/lrama/lib/lrama/grammar/rule_builder.rb
@@ -16,8 +16,13 @@ module Lrama
@user_code = nil
@precedence_sym = nil
@line = nil
+ @rules = []
@rule_builders_for_parameterizing_rules = []
@rule_builders_for_derived_rules = []
+ @rule_builders_for_inline_rules = []
+ @parameterizing_rules = []
+ @inline_rules = []
+ @midrule_action_rules = []
end
def add_rhs(rhs)
@@ -52,12 +57,16 @@ module Lrama
def setup_rules(parameterizing_rule_resolver)
preprocess_references unless @skip_preprocess_references
- process_rhs(parameterizing_rule_resolver)
+ if rhs.any? { |token| parameterizing_rule_resolver.find_inline(token) }
+ resolve_inline(parameterizing_rule_resolver)
+ else
+ process_rhs(parameterizing_rule_resolver)
+ end
build_rules
end
def rules
- @parameterizing_rules + @midrule_action_rules + @rules
+ @parameterizing_rules + @inline_rules + @midrule_action_rules + @rules
end
private
@@ -73,19 +82,25 @@ module Lrama
def build_rules
tokens = @replaced_rhs
- rule = Rule.new(
- id: @rule_counter.increment, _lhs: lhs, _rhs: tokens, lhs_tag: lhs_tag, token_code: user_code,
- position_in_original_rule_rhs: @position_in_original_rule_rhs, precedence_sym: precedence_sym, lineno: line
- )
- @rules = [rule]
- @parameterizing_rules = @rule_builders_for_parameterizing_rules.map do |rule_builder|
- rule_builder.rules
- end.flatten
- @midrule_action_rules = @rule_builders_for_derived_rules.map do |rule_builder|
- rule_builder.rules
- end.flatten
- @midrule_action_rules.each do |r|
- r.original_rule = rule
+ if tokens
+ rule = Rule.new(
+ id: @rule_counter.increment, _lhs: lhs, _rhs: tokens, lhs_tag: lhs_tag, token_code: user_code,
+ position_in_original_rule_rhs: @position_in_original_rule_rhs, precedence_sym: precedence_sym, lineno: line
+ )
+ @rules = [rule]
+ @parameterizing_rules = @rule_builders_for_parameterizing_rules.map do |rule_builder|
+ rule_builder.rules
+ end.flatten
+ @midrule_action_rules = @rule_builders_for_derived_rules.map do |rule_builder|
+ rule_builder.rules
+ end.flatten
+ @midrule_action_rules.each do |r|
+ r.original_rule = rule
+ end
+ else
+ @inline_rules = @rule_builders_for_inline_rules.map do |rule_builder|
+ rule_builder.rules
+ end.flatten
end
end
@@ -103,7 +118,7 @@ module Lrama
when Lrama::Lexer::Token::Ident
@replaced_rhs << token
when Lrama::Lexer::Token::InstantiateRule
- parameterizing_rule = parameterizing_rule_resolver.find(token)
+ parameterizing_rule = parameterizing_rule_resolver.find_rule(token)
raise "Unexpected token. #{token}" unless parameterizing_rule
bindings = Binding.new(parameterizing_rule, token.args)
@@ -115,12 +130,12 @@ module Lrama
@replaced_rhs << lhs_token
parameterizing_rule_resolver.created_lhs_list << lhs_token
parameterizing_rule.rhs_list.each do |r|
- rule_builder = RuleBuilder.new(@rule_counter, @midrule_action_counter, lhs_tag: token.lhs_tag, skip_preprocess_references: true)
+ rule_builder = RuleBuilder.new(@rule_counter, @midrule_action_counter, lhs_tag: token.lhs_tag || parameterizing_rule.tag)
rule_builder.lhs = lhs_token
r.symbols.each { |sym| rule_builder.add_rhs(bindings.resolve_symbol(sym)) }
rule_builder.line = line
rule_builder.precedence_sym = r.precedence_sym
- rule_builder.user_code = r.user_code
+ rule_builder.user_code = r.resolve_user_code(bindings)
rule_builder.complete_input
rule_builder.setup_rules(parameterizing_rule_resolver)
@rule_builders_for_parameterizing_rules << rule_builder
@@ -157,6 +172,41 @@ module Lrama
"#{token.rule_name}_#{s_values.join('_')}"
end
+ def resolve_inline(parameterizing_rule_resolver)
+ rhs.each_with_index do |token, i|
+ if inline_rule = parameterizing_rule_resolver.find_inline(token)
+ inline_rule.rhs_list.each_with_index do |inline_rhs|
+ rule_builder = RuleBuilder.new(@rule_counter, @midrule_action_counter, lhs_tag: lhs_tag, skip_preprocess_references: true)
+ resolve_inline_rhs(rule_builder, inline_rhs, i)
+ rule_builder.lhs = lhs
+ rule_builder.line = line
+ rule_builder.user_code = replace_inline_user_code(inline_rhs, i)
+ rule_builder.complete_input
+ rule_builder.setup_rules(parameterizing_rule_resolver)
+ @rule_builders_for_inline_rules << rule_builder
+ end
+ end
+ end
+ end
+
+ def resolve_inline_rhs(rule_builder, inline_rhs, index)
+ rhs.each_with_index do |token, i|
+ if index == i
+ inline_rhs.symbols.each { |sym| rule_builder.add_rhs(sym) }
+ else
+ rule_builder.add_rhs(token)
+ end
+ end
+ end
+
+ def replace_inline_user_code(inline_rhs, index)
+ return user_code if inline_rhs.user_code.nil?
+ return user_code if user_code.nil?
+
+ code = user_code.s_value.gsub(/\$#{index + 1}/, inline_rhs.user_code.s_value)
+ Lrama::Lexer::Token::UserCode.new(s_value: code, location: user_code.location)
+ end
+
def numberize_references
# Bison n'th component is 1-origin
(rhs + [user_code]).compact.each.with_index(1) do |token, i|
diff --git a/tool/lrama/lib/lrama/lexer.rb b/tool/lrama/lib/lrama/lexer.rb
index db8f384fe6..40622a51b4 100644
--- a/tool/lrama/lib/lrama/lexer.rb
+++ b/tool/lrama/lib/lrama/lexer.rb
@@ -37,6 +37,7 @@ module Lrama
%code
%rule
%no-stdlib
+ %inline
)
def initialize(grammar_file)
diff --git a/tool/lrama/lib/lrama/lexer/grammar_file.rb b/tool/lrama/lib/lrama/lexer/grammar_file.rb
index 6be0767004..3d3368625d 100644
--- a/tool/lrama/lib/lrama/lexer/grammar_file.rb
+++ b/tool/lrama/lib/lrama/lexer/grammar_file.rb
@@ -1,11 +1,21 @@
module Lrama
class Lexer
class GrammarFile
+ class Text < String
+ def inspect
+ length <= 50 ? super : "#{self[0..47]}...".inspect
+ end
+ end
+
attr_reader :path, :text
def initialize(path, text)
@path = path
- @text = text.freeze
+ @text = Text.new(text).freeze
+ end
+
+ def inspect
+ "<#{self.class}: @path=#{path}, @text=#{text.inspect}>"
end
def ==(other)
diff --git a/tool/lrama/lib/lrama/option_parser.rb b/tool/lrama/lib/lrama/option_parser.rb
index 3210b091ed..1e4d448fd1 100644
--- a/tool/lrama/lib/lrama/option_parser.rb
+++ b/tool/lrama/lib/lrama/option_parser.rb
@@ -119,8 +119,9 @@ module Lrama
VALID_TRACES = %w[
none locations scan parse automaton bitsets
- closure grammar rules resource sets muscles tools
- m4-early m4 skeleton time ielr cex all
+ closure grammar rules actions resource
+ sets muscles tools m4-early m4 skeleton time
+ ielr cex all
]
def validate_trace(trace)
diff --git a/tool/lrama/lib/lrama/parser.rb b/tool/lrama/lib/lrama/parser.rb
index 0a46f759c0..04603105b4 100644
--- a/tool/lrama/lib/lrama/parser.rb
+++ b/tool/lrama/lib/lrama/parser.rb
@@ -658,7 +658,7 @@ end
module Lrama
class Parser < Racc::Parser
-module_eval(<<'...end parser.y/module_eval...', 'parser.y', 529)
+module_eval(<<'...end parser.y/module_eval...', 'parser.y', 536)
include Lrama::Report::Duration
@@ -732,314 +732,322 @@ end
##### State transition tables begin ###
racc_action_table = [
- 96, 50, 97, 156, 155, 78, 50, 50, 156, 199,
- 78, 78, 50, 50, 199, 49, 78, 158, 69, 6,
- 3, 7, 158, 200, 210, 154, 8, 50, 200, 49,
- 40, 174, 175, 176, 47, 50, 46, 49, 53, 78,
- 74, 50, 53, 49, 159, 53, 81, 98, 56, 159,
- 201, 174, 175, 176, 94, 201, 22, 24, 25, 26,
+ 98, 51, 99, 163, 88, 79, 51, 51, 180, 163,
+ 79, 79, 51, 162, 180, 156, 79, 165, 157, 51,
+ 3, 50, 181, 165, 70, 51, 8, 50, 181, 79,
+ 75, 51, 6, 50, 7, 161, 82, 47, 51, 51,
+ 50, 50, 89, 82, 82, 166, 41, 51, 100, 50,
+ 182, 166, 82, 51, 48, 50, 182, 23, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 46, 50, 50, 49, 49, 91, 81, 81, 50,
- 50, 49, 49, 50, 81, 49, 57, 78, 184, 58,
- 59, 22, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 9, 50, 60, 49,
- 13, 14, 15, 16, 17, 18, 61, 62, 19, 20,
- 21, 22, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 50, 50, 49,
- 49, 78, 184, 50, 50, 49, 49, 78, 184, 50,
- 50, 49, 49, 78, 184, 50, 50, 49, 49, 78,
- 184, 50, 50, 49, 49, 78, 184, 50, 50, 49,
- 49, 78, 78, 50, 50, 49, 49, 78, 78, 50,
- 50, 49, 49, 78, 78, 50, 50, 190, 49, 78,
- 78, 50, 50, 190, 49, 78, 78, 50, 50, 190,
- 49, 78, 50, 50, 49, 49, 152, 203, 153, 204,
- 174, 175, 176, 219, 221, 204, 204, 63, 64, 65,
- 66, 87, 88, 92, 94, 99, 99, 99, 101, 107,
- 111, 112, 115, 115, 115, 115, 118, 121, 122, 124,
- 126, 127, 128, 129, 130, 133, 137, 138, 139, 142,
- 143, 144, 146, 161, 163, 164, 165, 166, 167, 168,
- 169, 142, 171, 179, 180, 189, 194, 195, 197, 202,
- 189, 94, 194, 216, 218, 94, 194, 224, 94 ]
+ 37, 38, 47, 51, 51, 50, 50, 93, 79, 197,
+ 51, 51, 50, 50, 79, 197, 51, 51, 50, 50,
+ 79, 197, 23, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 9, 51, 54,
+ 50, 14, 15, 16, 17, 18, 19, 54, 54, 20,
+ 21, 22, 23, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 51, 51,
+ 50, 50, 79, 197, 51, 51, 50, 50, 79, 197,
+ 51, 51, 50, 50, 79, 197, 51, 51, 50, 50,
+ 79, 79, 51, 51, 50, 50, 79, 79, 51, 51,
+ 50, 50, 79, 79, 51, 51, 50, 207, 79, 79,
+ 51, 51, 207, 207, 79, 79, 51, 51, 50, 50,
+ 79, 187, 188, 189, 96, 187, 188, 189, 96, 217,
+ 221, 229, 218, 218, 218, 51, 51, 50, 50, 187,
+ 188, 189, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 67, 90, 94, 96, 101, 101, 101, 103,
+ 109, 113, 114, 117, 117, 117, 117, 120, 47, 124,
+ 125, 127, 129, 130, 131, 132, 133, 136, 140, 141,
+ 142, 143, 146, 147, 148, 150, 160, 168, 170, 171,
+ 172, 173, 174, 176, 177, 178, 146, 184, 192, 193,
+ 200, 160, 204, 176, 211, 160, 215, 216, 178, 176,
+ 226, 176, 228, 96, 96, 176 ]
racc_action_check = [
- 48, 141, 48, 141, 140, 141, 170, 188, 170, 188,
- 170, 188, 207, 32, 207, 32, 207, 141, 32, 2,
- 1, 2, 170, 188, 199, 140, 3, 14, 207, 14,
- 7, 199, 199, 199, 13, 33, 9, 33, 15, 33,
- 33, 34, 16, 34, 141, 17, 34, 48, 18, 170,
- 188, 157, 157, 157, 157, 207, 9, 9, 9, 9,
+ 49, 145, 49, 145, 39, 145, 159, 183, 159, 183,
+ 159, 183, 201, 144, 201, 139, 201, 145, 139, 33,
+ 1, 33, 159, 183, 33, 34, 3, 34, 201, 34,
+ 34, 35, 2, 35, 2, 144, 35, 9, 36, 37,
+ 36, 37, 39, 36, 37, 145, 7, 38, 49, 38,
+ 159, 183, 38, 15, 14, 15, 201, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 41, 35, 36, 35, 36, 41, 35, 36, 37,
- 68, 37, 68, 165, 37, 165, 19, 165, 165, 22,
- 24, 41, 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 41, 41, 41, 41, 41, 4, 69, 25, 69,
- 4, 4, 4, 4, 4, 4, 26, 27, 4, 4,
+ 9, 9, 42, 69, 172, 69, 172, 42, 172, 172,
+ 173, 70, 173, 70, 173, 173, 174, 81, 174, 81,
+ 174, 174, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 4, 82, 16,
+ 82, 4, 4, 4, 4, 4, 4, 17, 18, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 166, 80, 166,
- 80, 166, 166, 167, 81, 167, 81, 167, 167, 181,
- 107, 181, 107, 181, 181, 185, 109, 185, 109, 185,
- 185, 186, 115, 186, 115, 186, 186, 73, 74, 73,
- 74, 73, 74, 112, 114, 112, 114, 112, 114, 134,
- 159, 134, 159, 134, 159, 171, 201, 171, 201, 171,
- 201, 202, 204, 202, 204, 202, 204, 210, 117, 210,
- 117, 210, 131, 135, 131, 135, 136, 191, 136, 191,
- 192, 192, 192, 213, 217, 213, 217, 28, 29, 30,
- 31, 38, 39, 44, 45, 52, 54, 55, 56, 67,
- 71, 72, 79, 84, 85, 86, 87, 93, 94, 100,
- 102, 103, 104, 105, 106, 110, 118, 119, 120, 121,
- 122, 123, 125, 145, 147, 148, 149, 150, 151, 152,
- 153, 154, 156, 160, 162, 168, 173, 177, 187, 190,
- 197, 198, 203, 206, 211, 216, 220, 222, 224 ]
+ 4, 4, 4, 4, 4, 4, 4, 4, 194, 109,
+ 194, 109, 194, 194, 198, 111, 198, 111, 198, 198,
+ 199, 117, 199, 117, 199, 199, 74, 75, 74, 75,
+ 74, 75, 114, 116, 114, 116, 114, 116, 137, 166,
+ 137, 166, 137, 166, 182, 184, 182, 184, 182, 184,
+ 204, 216, 204, 216, 204, 216, 218, 119, 218, 119,
+ 218, 164, 164, 164, 164, 179, 179, 179, 179, 208,
+ 214, 223, 208, 214, 223, 134, 138, 134, 138, 209,
+ 209, 209, 19, 20, 23, 25, 26, 27, 28, 29,
+ 30, 31, 32, 40, 45, 46, 53, 55, 56, 57,
+ 68, 72, 73, 80, 85, 86, 87, 88, 89, 95,
+ 96, 102, 104, 105, 106, 107, 108, 112, 120, 121,
+ 122, 123, 124, 125, 126, 128, 141, 149, 151, 152,
+ 153, 154, 155, 156, 157, 158, 161, 163, 167, 169,
+ 175, 178, 180, 186, 190, 200, 205, 207, 213, 217,
+ 220, 221, 222, 226, 228, 230 ]
racc_action_pointer = [
- nil, 20, 9, 26, 97, nil, nil, 23, nil, 32,
- nil, nil, nil, 28, 24, 19, 23, 26, 43, 67,
- nil, nil, 70, nil, 71, 89, 97, 112, 212, 213,
- 214, 215, 10, 32, 38, 69, 70, 76, 216, 220,
- nil, 67, nil, nil, 200, 174, nil, nil, -5, nil,
- nil, nil, 206, nil, 207, 208, 209, nil, nil, nil,
- nil, nil, nil, nil, nil, nil, nil, 221, 77, 104,
- nil, 224, 223, 164, 165, nil, nil, nil, nil, 224,
- 135, 141, nil, nil, 225, 226, 227, 196, nil, nil,
- nil, nil, nil, 195, 233, nil, nil, nil, nil, nil,
- 237, nil, 238, 239, 240, 241, 242, 147, nil, 153,
- 238, nil, 170, nil, 171, 159, nil, 195, 241, 236,
- 246, 204, 199, 249, nil, 250, nil, nil, nil, nil,
- nil, 199, nil, nil, 176, 200, 165, nil, nil, nil,
- -19, -2, nil, nil, nil, 233, nil, 234, 235, 236,
- 237, 238, 217, 255, 216, nil, 222, 4, nil, 177,
- 243, nil, 244, nil, nil, 80, 134, 140, 220, nil,
- 3, 182, nil, 258, nil, nil, nil, 265, nil, nil,
- nil, 146, nil, nil, nil, 152, 158, 224, 4, nil,
- 229, 166, 163, nil, nil, nil, nil, 225, 221, -16,
- nil, 183, 188, 264, 189, nil, 253, 9, nil, nil,
- 194, 272, nil, 172, nil, nil, 225, 173, nil, nil,
- 268, nil, 257, nil, 228, nil ]
+ nil, 20, 22, 26, 98, nil, nil, 39, nil, 33,
+ nil, nil, nil, nil, 48, 50, 90, 98, 99, 207,
+ 194, nil, nil, 195, nil, 196, 197, 198, 213, 214,
+ 215, 216, 217, 16, 22, 28, 35, 36, 44, -1,
+ 221, nil, 68, nil, nil, 201, 174, nil, nil, -5,
+ nil, nil, nil, 207, nil, 208, 209, 210, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, 222, 70,
+ 78, nil, 225, 224, 153, 154, nil, nil, nil, nil,
+ 225, 84, 105, nil, nil, 226, 227, 228, 197, 234,
+ nil, nil, nil, nil, nil, 197, 235, nil, nil, nil,
+ nil, nil, 239, nil, 240, 241, 242, 243, 244, 136,
+ nil, 142, 240, nil, 159, nil, 160, 148, nil, 184,
+ 243, 207, 239, 249, 206, 201, 252, nil, 253, nil,
+ nil, nil, nil, nil, 202, nil, nil, 165, 203, -26,
+ nil, 210, nil, nil, -10, -2, nil, nil, nil, 237,
+ nil, 238, 239, 240, 241, 242, 255, 259, 220, 3,
+ nil, 220, nil, 227, 143, nil, 166, 248, nil, 249,
+ nil, nil, 71, 77, 83, 228, nil, nil, 225, 147,
+ 232, nil, 171, 4, 172, nil, 265, nil, nil, nil,
+ 272, nil, nil, nil, 135, nil, nil, nil, 141, 147,
+ 229, 9, nil, nil, 177, 274, nil, 237, 158, 161,
+ nil, nil, nil, 233, 159, nil, 178, 271, 183, nil,
+ 260, 273, 262, 160, nil, nil, 232, nil, 233, nil,
+ 277, nil, nil ]
racc_action_default = [
- -2, -136, -8, -136, -136, -3, -4, -136, 226, -136,
- -9, -10, -11, -136, -136, -136, -136, -136, -136, -136,
- -23, -24, -136, -28, -136, -136, -136, -136, -136, -136,
- -136, -136, -136, -136, -136, -136, -136, -136, -136, -136,
- -7, -121, -94, -96, -136, -118, -120, -12, -125, -92,
- -93, -124, -14, -83, -15, -16, -136, -20, -25, -29,
- -32, -35, -38, -39, -40, -41, -42, -43, -49, -136,
- -52, -69, -44, -73, -136, -76, -78, -79, -133, -45,
- -86, -136, -89, -91, -46, -47, -48, -136, -5, -1,
- -95, -122, -97, -136, -136, -13, -126, -127, -128, -80,
- -136, -17, -136, -136, -136, -136, -136, -136, -53, -50,
- -71, -70, -136, -77, -74, -136, -90, -87, -136, -136,
- -136, -102, -136, -136, -84, -136, -21, -26, -30, -33,
- -36, -51, -54, -72, -75, -88, -136, -56, -6, -123,
- -98, -99, -103, -119, -81, -136, -18, -136, -136, -136,
- -136, -136, -136, -136, -102, -101, -92, -118, -107, -136,
- -136, -85, -136, -22, -27, -136, -136, -136, -60, -57,
- -100, -136, -104, -134, -111, -112, -113, -136, -110, -82,
- -19, -31, -129, -131, -132, -34, -37, -55, -58, -61,
- -92, -136, -114, -105, -135, -108, -130, -60, -118, -92,
- -65, -136, -136, -134, -136, -116, -136, -59, -62, -63,
- -136, -136, -68, -136, -106, -115, -118, -136, -66, -117,
- -134, -64, -136, -109, -118, -67 ]
+ -2, -138, -8, -138, -138, -3, -4, -138, 233, -138,
+ -9, -10, -11, -12, -138, -138, -138, -138, -138, -138,
+ -138, -24, -25, -138, -29, -138, -138, -138, -138, -138,
+ -138, -138, -138, -138, -138, -138, -138, -138, -138, -138,
+ -138, -7, -123, -96, -98, -138, -120, -122, -13, -127,
+ -94, -95, -126, -15, -85, -16, -17, -138, -21, -26,
+ -30, -33, -36, -39, -40, -41, -42, -43, -44, -50,
+ -138, -53, -71, -45, -75, -138, -78, -80, -81, -135,
+ -46, -88, -138, -91, -93, -47, -48, -49, -138, -138,
+ -5, -1, -97, -124, -99, -138, -138, -14, -128, -129,
+ -130, -82, -138, -18, -138, -138, -138, -138, -138, -138,
+ -54, -51, -73, -72, -138, -79, -76, -138, -92, -89,
+ -138, -138, -138, -138, -104, -138, -138, -86, -138, -22,
+ -27, -31, -34, -37, -52, -55, -74, -77, -90, -138,
+ -58, -62, -6, -125, -100, -101, -105, -121, -83, -138,
+ -19, -138, -138, -138, -138, -138, -136, -138, -57, -60,
+ -63, -104, -103, -94, -120, -109, -138, -138, -87, -138,
+ -23, -28, -138, -138, -138, -138, -137, -59, -62, -120,
+ -94, -67, -138, -102, -138, -106, -136, -113, -114, -115,
+ -138, -112, -84, -20, -32, -131, -133, -134, -35, -38,
+ -62, -61, -64, -65, -138, -138, -70, -94, -138, -116,
+ -107, -110, -132, -56, -138, -68, -138, -136, -138, -118,
+ -138, -136, -138, -138, -108, -117, -120, -66, -120, -119,
+ -136, -69, -111 ]
racc_goto_table = [
- 93, 75, 51, 68, 73, 193, 116, 108, 191, 173,
- 196, 1, 117, 2, 196, 196, 141, 4, 42, 41,
- 71, 89, 83, 83, 83, 83, 188, 79, 84, 85,
- 86, 52, 54, 55, 5, 214, 181, 185, 186, 213,
- 109, 113, 75, 116, 205, 114, 135, 217, 108, 170,
- 90, 209, 223, 39, 119, 207, 71, 71, 10, 11,
- 12, 116, 48, 95, 125, 162, 102, 147, 83, 83,
- 108, 103, 148, 104, 149, 105, 150, 106, 131, 151,
- 75, 67, 113, 134, 72, 110, 132, 136, 187, 211,
- 222, 123, 160, 100, 145, 71, 140, 71, 177, 206,
- 120, nil, 113, 83, nil, 83, nil, nil, nil, 157,
- nil, nil, 172, nil, nil, nil, nil, nil, nil, 71,
- nil, nil, nil, 83, nil, nil, nil, 178, nil, nil,
- nil, nil, nil, nil, nil, nil, nil, nil, 157, 192,
- nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
- nil, nil, nil, 208, nil, nil, 198, nil, nil, nil,
- nil, nil, nil, nil, nil, nil, nil, nil, nil, 212,
- 192, 220, 215, nil, nil, 198, nil, nil, 192, 225 ]
+ 76, 95, 69, 52, 74, 158, 110, 175, 118, 119,
+ 145, 208, 1, 212, 186, 2, 43, 212, 212, 4,
+ 42, 72, 91, 84, 84, 84, 84, 5, 40, 203,
+ 122, 214, 80, 85, 86, 87, 10, 210, 11, 111,
+ 115, 76, 12, 223, 138, 116, 118, 183, 110, 92,
+ 53, 55, 56, 194, 198, 199, 13, 72, 72, 219,
+ 49, 97, 128, 169, 213, 118, 104, 151, 224, 84,
+ 84, 110, 227, 105, 152, 106, 153, 107, 134, 154,
+ 76, 232, 115, 108, 137, 155, 68, 73, 112, 135,
+ 139, 121, 201, 205, 222, 126, 167, 72, 102, 72,
+ 149, 144, 190, 115, 220, 84, 123, 84, nil, nil,
+ nil, 164, nil, nil, nil, nil, nil, nil, nil, 185,
+ nil, nil, 72, nil, nil, 179, 84, nil, nil, nil,
+ nil, nil, 191, nil, 202, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, 206, 164,
+ 209, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, 179, nil, nil,
+ 209, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, 230, 209, 231, 225 ]
racc_goto_check = [
- 41, 40, 34, 32, 46, 59, 53, 33, 43, 42,
- 63, 1, 52, 2, 63, 63, 58, 3, 54, 4,
- 34, 5, 34, 34, 34, 34, 39, 31, 31, 31,
- 31, 14, 14, 14, 6, 59, 20, 20, 20, 43,
- 32, 40, 40, 53, 42, 46, 52, 43, 33, 58,
- 54, 42, 59, 7, 8, 39, 34, 34, 9, 10,
- 11, 53, 12, 13, 15, 16, 17, 18, 34, 34,
- 33, 21, 22, 23, 24, 25, 26, 27, 32, 28,
- 40, 29, 40, 46, 30, 35, 36, 37, 38, 44,
- 45, 48, 49, 50, 51, 34, 57, 34, 60, 61,
- 62, nil, 40, 34, nil, 34, nil, nil, nil, 40,
- nil, nil, 41, nil, nil, nil, nil, nil, nil, 34,
- nil, nil, nil, 34, nil, nil, nil, 40, nil, nil,
- nil, nil, nil, nil, nil, nil, nil, nil, 40, 40,
- nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
- nil, nil, nil, 41, nil, nil, 40, nil, nil, nil,
- nil, nil, nil, nil, nil, nil, nil, nil, nil, 40,
- 40, 41, 40, nil, nil, 40, nil, nil, 40, 41 ]
+ 43, 44, 33, 35, 49, 40, 34, 39, 56, 55,
+ 60, 46, 1, 64, 45, 2, 57, 64, 64, 3,
+ 4, 35, 5, 35, 35, 35, 35, 6, 7, 45,
+ 8, 46, 32, 32, 32, 32, 9, 39, 10, 33,
+ 43, 43, 11, 46, 55, 49, 56, 60, 34, 57,
+ 15, 15, 15, 21, 21, 21, 12, 35, 35, 45,
+ 13, 14, 16, 17, 40, 56, 18, 19, 39, 35,
+ 35, 34, 39, 22, 23, 24, 25, 26, 33, 27,
+ 43, 39, 43, 28, 49, 29, 30, 31, 36, 37,
+ 38, 41, 42, 47, 48, 51, 52, 35, 53, 35,
+ 54, 59, 61, 43, 62, 35, 63, 35, nil, nil,
+ nil, 43, nil, nil, nil, nil, nil, nil, nil, 44,
+ nil, nil, 35, nil, nil, 43, 35, nil, nil, nil,
+ nil, nil, 43, nil, 44, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, 43, 43,
+ 43, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, 43, nil, nil,
+ 43, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, 44, 43, 44, 43 ]
racc_goto_pointer = [
- nil, 11, 13, 15, 10, -20, 32, 47, -34, 54,
- 55, 56, 48, 15, 16, -37, -81, 9, -59, nil,
- -129, 13, -55, 14, -54, 15, -53, 16, -51, 49,
- 51, -7, -29, -61, -12, 14, -24, -31, -80, -142,
- -32, -45, -148, -163, -111, -128, -29, nil, -8, -52,
- 40, -30, -69, -74, 9, nil, nil, -25, -105, -168,
- -60, -96, 9, -171 ]
+ nil, 12, 15, 17, 11, -20, 25, 22, -60, 32,
+ 34, 38, 52, 45, 12, 34, -41, -87, 8, -62,
+ nil, -119, 14, -56, 15, -55, 16, -53, 21, -48,
+ 53, 53, -3, -31, -63, -12, 16, -23, -30, -149,
+ -136, 2, -86, -34, -45, -150, -173, -88, -121, -30,
+ nil, -6, -52, 44, -27, -73, -73, 7, nil, -23,
+ -114, -63, -107, 13, -181 ]
racc_goto_default = [
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
- 44, nil, nil, nil, nil, nil, nil, nil, nil, 23,
- nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
- nil, nil, nil, 70, 76, nil, nil, nil, nil, nil,
- 183, nil, nil, nil, nil, nil, nil, 77, nil, nil,
- nil, nil, 80, 82, nil, 43, 45, nil, nil, nil,
- nil, nil, nil, 182 ]
+ 45, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ 24, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, 71, 77, nil, nil, nil, nil,
+ nil, 46, 159, 196, nil, nil, nil, nil, nil, nil,
+ 78, nil, nil, nil, nil, 81, 83, nil, 44, nil,
+ nil, nil, nil, nil, 195 ]
racc_reduce_table = [
0, 0, :racc_error,
- 5, 54, :_reduce_none,
- 0, 55, :_reduce_none,
- 2, 55, :_reduce_none,
- 0, 60, :_reduce_4,
- 0, 61, :_reduce_5,
- 5, 59, :_reduce_6,
- 2, 59, :_reduce_none,
- 0, 56, :_reduce_8,
+ 5, 55, :_reduce_none,
+ 0, 56, :_reduce_none,
2, 56, :_reduce_none,
- 1, 62, :_reduce_none,
- 1, 62, :_reduce_none,
- 2, 62, :_reduce_12,
- 3, 62, :_reduce_none,
- 2, 62, :_reduce_none,
- 2, 62, :_reduce_15,
- 2, 62, :_reduce_16,
- 0, 68, :_reduce_17,
- 0, 69, :_reduce_18,
- 7, 62, :_reduce_19,
- 0, 70, :_reduce_20,
- 0, 71, :_reduce_21,
- 6, 62, :_reduce_22,
- 1, 62, :_reduce_23,
- 1, 62, :_reduce_none,
- 0, 74, :_reduce_25,
- 0, 75, :_reduce_26,
- 6, 63, :_reduce_27,
- 1, 63, :_reduce_none,
- 0, 76, :_reduce_29,
- 0, 77, :_reduce_30,
- 7, 63, :_reduce_31,
- 0, 78, :_reduce_32,
- 0, 79, :_reduce_33,
- 7, 63, :_reduce_34,
- 0, 80, :_reduce_35,
- 0, 81, :_reduce_36,
- 7, 63, :_reduce_37,
- 2, 63, :_reduce_38,
- 2, 63, :_reduce_39,
- 2, 63, :_reduce_40,
- 2, 63, :_reduce_41,
- 2, 63, :_reduce_42,
- 2, 72, :_reduce_none,
- 2, 72, :_reduce_44,
- 2, 72, :_reduce_45,
- 2, 72, :_reduce_46,
- 2, 72, :_reduce_47,
- 2, 72, :_reduce_48,
- 1, 82, :_reduce_49,
- 2, 82, :_reduce_50,
- 3, 82, :_reduce_51,
- 1, 85, :_reduce_52,
- 2, 85, :_reduce_53,
- 3, 86, :_reduce_54,
- 7, 64, :_reduce_55,
- 1, 90, :_reduce_56,
- 3, 90, :_reduce_57,
- 1, 91, :_reduce_58,
- 3, 91, :_reduce_59,
- 0, 92, :_reduce_60,
- 1, 92, :_reduce_61,
- 3, 92, :_reduce_62,
- 3, 92, :_reduce_63,
- 5, 92, :_reduce_64,
- 0, 97, :_reduce_65,
- 0, 98, :_reduce_66,
- 7, 92, :_reduce_67,
- 3, 92, :_reduce_68,
- 0, 88, :_reduce_none,
- 1, 88, :_reduce_none,
- 0, 89, :_reduce_none,
- 1, 89, :_reduce_none,
- 1, 83, :_reduce_73,
- 2, 83, :_reduce_74,
- 3, 83, :_reduce_75,
- 1, 99, :_reduce_76,
- 2, 99, :_reduce_77,
- 1, 93, :_reduce_none,
- 1, 93, :_reduce_none,
- 0, 101, :_reduce_80,
- 0, 102, :_reduce_81,
- 6, 67, :_reduce_82,
- 0, 103, :_reduce_83,
- 0, 104, :_reduce_84,
- 5, 67, :_reduce_85,
- 1, 84, :_reduce_86,
- 2, 84, :_reduce_87,
- 3, 84, :_reduce_88,
- 1, 105, :_reduce_89,
- 2, 105, :_reduce_90,
- 1, 106, :_reduce_none,
- 1, 87, :_reduce_92,
- 1, 87, :_reduce_93,
- 1, 57, :_reduce_none,
+ 0, 61, :_reduce_4,
+ 0, 62, :_reduce_5,
+ 5, 60, :_reduce_6,
+ 2, 60, :_reduce_none,
+ 0, 57, :_reduce_8,
2, 57, :_reduce_none,
- 1, 107, :_reduce_none,
- 2, 107, :_reduce_none,
- 4, 108, :_reduce_98,
- 1, 110, :_reduce_99,
- 3, 110, :_reduce_100,
- 2, 110, :_reduce_none,
- 0, 111, :_reduce_102,
- 1, 111, :_reduce_103,
- 3, 111, :_reduce_104,
- 4, 111, :_reduce_105,
- 6, 111, :_reduce_106,
- 0, 113, :_reduce_107,
- 0, 114, :_reduce_108,
- 8, 111, :_reduce_109,
- 3, 111, :_reduce_110,
- 1, 95, :_reduce_111,
- 1, 95, :_reduce_112,
- 1, 95, :_reduce_113,
- 1, 96, :_reduce_114,
- 3, 96, :_reduce_115,
- 2, 96, :_reduce_116,
- 4, 96, :_reduce_117,
- 0, 94, :_reduce_none,
- 3, 94, :_reduce_119,
- 1, 109, :_reduce_none,
- 0, 58, :_reduce_none,
- 0, 115, :_reduce_122,
- 3, 58, :_reduce_123,
- 1, 65, :_reduce_none,
- 0, 66, :_reduce_none,
- 1, 66, :_reduce_none,
- 1, 66, :_reduce_none,
- 1, 66, :_reduce_none,
- 1, 73, :_reduce_129,
- 2, 73, :_reduce_130,
- 1, 116, :_reduce_none,
- 1, 116, :_reduce_none,
- 1, 100, :_reduce_133,
- 0, 112, :_reduce_none,
- 1, 112, :_reduce_none ]
-
-racc_reduce_n = 136
-
-racc_shift_n = 226
+ 1, 63, :_reduce_none,
+ 1, 63, :_reduce_none,
+ 1, 63, :_reduce_none,
+ 2, 63, :_reduce_13,
+ 3, 63, :_reduce_none,
+ 2, 63, :_reduce_none,
+ 2, 63, :_reduce_16,
+ 2, 63, :_reduce_17,
+ 0, 70, :_reduce_18,
+ 0, 71, :_reduce_19,
+ 7, 63, :_reduce_20,
+ 0, 72, :_reduce_21,
+ 0, 73, :_reduce_22,
+ 6, 63, :_reduce_23,
+ 1, 63, :_reduce_24,
+ 1, 63, :_reduce_none,
+ 0, 76, :_reduce_26,
+ 0, 77, :_reduce_27,
+ 6, 64, :_reduce_28,
+ 1, 64, :_reduce_none,
+ 0, 78, :_reduce_30,
+ 0, 79, :_reduce_31,
+ 7, 64, :_reduce_32,
+ 0, 80, :_reduce_33,
+ 0, 81, :_reduce_34,
+ 7, 64, :_reduce_35,
+ 0, 82, :_reduce_36,
+ 0, 83, :_reduce_37,
+ 7, 64, :_reduce_38,
+ 2, 64, :_reduce_39,
+ 2, 64, :_reduce_40,
+ 2, 64, :_reduce_41,
+ 2, 64, :_reduce_42,
+ 2, 64, :_reduce_43,
+ 2, 74, :_reduce_none,
+ 2, 74, :_reduce_45,
+ 2, 74, :_reduce_46,
+ 2, 74, :_reduce_47,
+ 2, 74, :_reduce_48,
+ 2, 74, :_reduce_49,
+ 1, 84, :_reduce_50,
+ 2, 84, :_reduce_51,
+ 3, 84, :_reduce_52,
+ 1, 87, :_reduce_53,
+ 2, 87, :_reduce_54,
+ 3, 88, :_reduce_55,
+ 8, 65, :_reduce_56,
+ 5, 66, :_reduce_57,
+ 1, 92, :_reduce_58,
+ 3, 92, :_reduce_59,
+ 1, 94, :_reduce_60,
+ 3, 94, :_reduce_61,
+ 0, 96, :_reduce_62,
+ 1, 96, :_reduce_63,
+ 3, 96, :_reduce_64,
+ 3, 96, :_reduce_65,
+ 6, 96, :_reduce_66,
+ 0, 101, :_reduce_67,
+ 0, 102, :_reduce_68,
+ 7, 96, :_reduce_69,
+ 3, 96, :_reduce_70,
+ 0, 90, :_reduce_none,
+ 1, 90, :_reduce_none,
+ 0, 91, :_reduce_none,
+ 1, 91, :_reduce_none,
+ 1, 85, :_reduce_75,
+ 2, 85, :_reduce_76,
+ 3, 85, :_reduce_77,
+ 1, 103, :_reduce_78,
+ 2, 103, :_reduce_79,
+ 1, 97, :_reduce_none,
+ 1, 97, :_reduce_none,
+ 0, 105, :_reduce_82,
+ 0, 106, :_reduce_83,
+ 6, 69, :_reduce_84,
+ 0, 107, :_reduce_85,
+ 0, 108, :_reduce_86,
+ 5, 69, :_reduce_87,
+ 1, 86, :_reduce_88,
+ 2, 86, :_reduce_89,
+ 3, 86, :_reduce_90,
+ 1, 109, :_reduce_91,
+ 2, 109, :_reduce_92,
+ 1, 110, :_reduce_none,
+ 1, 89, :_reduce_94,
+ 1, 89, :_reduce_95,
+ 1, 58, :_reduce_none,
+ 2, 58, :_reduce_none,
+ 1, 111, :_reduce_none,
+ 2, 111, :_reduce_none,
+ 4, 112, :_reduce_100,
+ 1, 113, :_reduce_101,
+ 3, 113, :_reduce_102,
+ 2, 113, :_reduce_none,
+ 0, 114, :_reduce_104,
+ 1, 114, :_reduce_105,
+ 3, 114, :_reduce_106,
+ 4, 114, :_reduce_107,
+ 6, 114, :_reduce_108,
+ 0, 115, :_reduce_109,
+ 0, 116, :_reduce_110,
+ 8, 114, :_reduce_111,
+ 3, 114, :_reduce_112,
+ 1, 99, :_reduce_113,
+ 1, 99, :_reduce_114,
+ 1, 99, :_reduce_115,
+ 1, 100, :_reduce_116,
+ 3, 100, :_reduce_117,
+ 2, 100, :_reduce_118,
+ 4, 100, :_reduce_119,
+ 0, 98, :_reduce_none,
+ 3, 98, :_reduce_121,
+ 1, 95, :_reduce_none,
+ 0, 59, :_reduce_none,
+ 0, 117, :_reduce_124,
+ 3, 59, :_reduce_125,
+ 1, 67, :_reduce_none,
+ 0, 68, :_reduce_none,
+ 1, 68, :_reduce_none,
+ 1, 68, :_reduce_none,
+ 1, 68, :_reduce_none,
+ 1, 75, :_reduce_131,
+ 2, 75, :_reduce_132,
+ 1, 118, :_reduce_none,
+ 1, 118, :_reduce_none,
+ 1, 104, :_reduce_135,
+ 0, 93, :_reduce_none,
+ 1, 93, :_reduce_none ]
+
+racc_reduce_n = 138
+
+racc_shift_n = 233
racc_token_table = {
false => 0,
@@ -1085,18 +1093,19 @@ racc_token_table = {
"(" => 40,
")" => 41,
":" => 42,
- "," => 43,
- "|" => 44,
- "%empty" => 45,
- "%prec" => 46,
- "?" => 47,
- "+" => 48,
- "*" => 49,
- "[" => 50,
- "]" => 51,
- "{...}" => 52 }
-
-racc_nt_base = 53
+ "%inline" => 43,
+ "," => 44,
+ "|" => 45,
+ "%empty" => 46,
+ "%prec" => 47,
+ "?" => 48,
+ "+" => 49,
+ "*" => 50,
+ "[" => 51,
+ "]" => 52,
+ "{...}" => 53 }
+
+racc_nt_base = 54
racc_use_result_var = true
@@ -1161,6 +1170,7 @@ Racc_token_to_s_table = [
"\"(\"",
"\")\"",
"\":\"",
+ "\"%inline\"",
"\",\"",
"\"|\"",
"\"%empty\"",
@@ -1183,6 +1193,7 @@ Racc_token_to_s_table = [
"bison_declaration",
"grammar_declaration",
"rule_declaration",
+ "inline_declaration",
"variable",
"value",
"params",
@@ -1209,7 +1220,9 @@ Racc_token_to_s_table = [
"int_opt",
"alias",
"rule_args",
+ "tag_opt",
"rule_rhs_list",
+ "id_colon",
"rule_rhs",
"symbol",
"named_ref_opt",
@@ -1227,10 +1240,8 @@ Racc_token_to_s_table = [
"token_declaration_for_precedence",
"rules_or_grammar_declaration",
"rules",
- "id_colon",
"rhs_list",
"rhs",
- "tag_opt",
"@21",
"@22",
"@23",
@@ -1289,19 +1300,21 @@ module_eval(<<'.,.,', 'parser.y', 27)
# reduce 11 omitted
-module_eval(<<'.,.,', 'parser.y', 32)
- def _reduce_12(val, _values, result)
+# reduce 12 omitted
+
+module_eval(<<'.,.,', 'parser.y', 33)
+ def _reduce_13(val, _values, result)
@grammar.expect = val[1]
result
end
.,.,
-# reduce 13 omitted
-
# reduce 14 omitted
-module_eval(<<'.,.,', 'parser.y', 37)
- def _reduce_15(val, _values, result)
+# reduce 15 omitted
+
+module_eval(<<'.,.,', 'parser.y', 38)
+ def _reduce_16(val, _values, result)
val[1].each {|token|
@grammar.lex_param = Grammar::Code::NoReferenceCode.new(type: :lex_param, token_code: token).token_code.s_value
}
@@ -1310,8 +1323,8 @@ module_eval(<<'.,.,', 'parser.y', 37)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 43)
- def _reduce_16(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 44)
+ def _reduce_17(val, _values, result)
val[1].each {|token|
@grammar.parse_param = Grammar::Code::NoReferenceCode.new(type: :parse_param, token_code: token).token_code.s_value
}
@@ -1320,81 +1333,81 @@ module_eval(<<'.,.,', 'parser.y', 43)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 49)
- def _reduce_17(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 50)
+ def _reduce_18(val, _values, result)
begin_c_declaration("}")
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 53)
- def _reduce_18(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 54)
+ def _reduce_19(val, _values, result)
end_c_declaration
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 57)
- def _reduce_19(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 58)
+ def _reduce_20(val, _values, result)
@grammar.add_percent_code(id: val[1], code: val[4])
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 61)
- def _reduce_20(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 62)
+ def _reduce_21(val, _values, result)
begin_c_declaration("}")
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 65)
- def _reduce_21(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 66)
+ def _reduce_22(val, _values, result)
end_c_declaration
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 69)
- def _reduce_22(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 70)
+ def _reduce_23(val, _values, result)
@grammar.initial_action = Grammar::Code::InitialActionCode.new(type: :initial_action, token_code: val[3])
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 71)
- def _reduce_23(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 72)
+ def _reduce_24(val, _values, result)
@grammar.no_stdlib = true
result
end
.,.,
-# reduce 24 omitted
+# reduce 25 omitted
-module_eval(<<'.,.,', 'parser.y', 76)
- def _reduce_25(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 77)
+ def _reduce_26(val, _values, result)
begin_c_declaration("}")
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 80)
- def _reduce_26(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 81)
+ def _reduce_27(val, _values, result)
end_c_declaration
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 84)
- def _reduce_27(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 85)
+ def _reduce_28(val, _values, result)
@grammar.set_union(
Grammar::Code::NoReferenceCode.new(type: :union, token_code: val[3]),
val[3].line
@@ -1404,26 +1417,26 @@ module_eval(<<'.,.,', 'parser.y', 84)
end
.,.,
-# reduce 28 omitted
+# reduce 29 omitted
-module_eval(<<'.,.,', 'parser.y', 92)
- def _reduce_29(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 93)
+ def _reduce_30(val, _values, result)
begin_c_declaration("}")
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 96)
- def _reduce_30(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 97)
+ def _reduce_31(val, _values, result)
end_c_declaration
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 100)
- def _reduce_31(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 101)
+ def _reduce_32(val, _values, result)
@grammar.add_destructor(
ident_or_tags: val[6],
token_code: val[3],
@@ -1434,24 +1447,24 @@ module_eval(<<'.,.,', 'parser.y', 100)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 108)
- def _reduce_32(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 109)
+ def _reduce_33(val, _values, result)
begin_c_declaration("}")
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 112)
- def _reduce_33(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 113)
+ def _reduce_34(val, _values, result)
end_c_declaration
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 116)
- def _reduce_34(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 117)
+ def _reduce_35(val, _values, result)
@grammar.add_printer(
ident_or_tags: val[6],
token_code: val[3],
@@ -1462,24 +1475,24 @@ module_eval(<<'.,.,', 'parser.y', 116)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 124)
- def _reduce_35(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 125)
+ def _reduce_36(val, _values, result)
begin_c_declaration("}")
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 128)
- def _reduce_36(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 129)
+ def _reduce_37(val, _values, result)
end_c_declaration
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 132)
- def _reduce_37(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 133)
+ def _reduce_38(val, _values, result)
@grammar.add_error_token(
ident_or_tags: val[6],
token_code: val[3],
@@ -1490,50 +1503,50 @@ module_eval(<<'.,.,', 'parser.y', 132)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 140)
- def _reduce_38(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 141)
+ def _reduce_39(val, _values, result)
@grammar.after_shift = val[1]
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 144)
- def _reduce_39(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 145)
+ def _reduce_40(val, _values, result)
@grammar.before_reduce = val[1]
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 148)
- def _reduce_40(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 149)
+ def _reduce_41(val, _values, result)
@grammar.after_reduce = val[1]
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 152)
- def _reduce_41(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 153)
+ def _reduce_42(val, _values, result)
@grammar.after_shift_error_token = val[1]
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 156)
- def _reduce_42(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 157)
+ def _reduce_43(val, _values, result)
@grammar.after_pop_stack = val[1]
result
end
.,.,
-# reduce 43 omitted
+# reduce 44 omitted
-module_eval(<<'.,.,', 'parser.y', 162)
- def _reduce_44(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 163)
+ def _reduce_45(val, _values, result)
val[1].each {|hash|
hash[:tokens].each {|id|
@grammar.add_type(id: id, tag: hash[:tag])
@@ -1544,8 +1557,8 @@ module_eval(<<'.,.,', 'parser.y', 162)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 170)
- def _reduce_45(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 171)
+ def _reduce_46(val, _values, result)
val[1].each {|hash|
hash[:tokens].each {|id|
sym = @grammar.add_term(id: id)
@@ -1558,8 +1571,8 @@ module_eval(<<'.,.,', 'parser.y', 170)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 180)
- def _reduce_46(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 181)
+ def _reduce_47(val, _values, result)
val[1].each {|hash|
hash[:tokens].each {|id|
sym = @grammar.add_term(id: id)
@@ -1572,8 +1585,8 @@ module_eval(<<'.,.,', 'parser.y', 180)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 190)
- def _reduce_47(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 191)
+ def _reduce_48(val, _values, result)
val[1].each {|hash|
hash[:tokens].each {|id|
sym = @grammar.add_term(id: id)
@@ -1586,8 +1599,8 @@ module_eval(<<'.,.,', 'parser.y', 190)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 200)
- def _reduce_48(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 201)
+ def _reduce_49(val, _values, result)
val[1].each {|hash|
hash[:tokens].each {|id|
sym = @grammar.add_term(id: id)
@@ -1600,8 +1613,8 @@ module_eval(<<'.,.,', 'parser.y', 200)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 211)
- def _reduce_49(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 212)
+ def _reduce_50(val, _values, result)
val[0].each {|token_declaration|
@grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: nil, replace: true)
}
@@ -1610,8 +1623,8 @@ module_eval(<<'.,.,', 'parser.y', 211)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 217)
- def _reduce_50(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 218)
+ def _reduce_51(val, _values, result)
val[1].each {|token_declaration|
@grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: val[0], replace: true)
}
@@ -1620,8 +1633,8 @@ module_eval(<<'.,.,', 'parser.y', 217)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 223)
- def _reduce_51(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 224)
+ def _reduce_52(val, _values, result)
val[2].each {|token_declaration|
@grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: val[1], replace: true)
}
@@ -1630,52 +1643,61 @@ module_eval(<<'.,.,', 'parser.y', 223)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 228)
- def _reduce_52(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 229)
+ def _reduce_53(val, _values, result)
result = [val[0]]
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 229)
- def _reduce_53(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 230)
+ def _reduce_54(val, _values, result)
result = val[0].append(val[1])
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 231)
- def _reduce_54(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 232)
+ def _reduce_55(val, _values, result)
result = val
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 235)
- def _reduce_55(val, _values, result)
- rule = Grammar::ParameterizingRule::Rule.new(val[1].s_value, val[3], val[6])
+module_eval(<<'.,.,', 'parser.y', 236)
+ def _reduce_56(val, _values, result)
+ rule = Grammar::ParameterizingRule::Rule.new(val[1].s_value, val[3], val[7], tag: val[5])
@grammar.add_parameterizing_rule(rule)
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 239)
- def _reduce_56(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 242)
+ def _reduce_57(val, _values, result)
+ rule = Grammar::ParameterizingRule::Rule.new(val[2].s_value, [], val[4], is_inline: true)
+ @grammar.add_parameterizing_rule(rule)
+
+ result
+ end
+.,.,
+
+module_eval(<<'.,.,', 'parser.y', 246)
+ def _reduce_58(val, _values, result)
result = [val[0]]
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 240)
- def _reduce_57(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 247)
+ def _reduce_59(val, _values, result)
result = val[0].append(val[2])
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 244)
- def _reduce_58(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 251)
+ def _reduce_60(val, _values, result)
builder = val[0]
result = [builder]
@@ -1683,8 +1705,8 @@ module_eval(<<'.,.,', 'parser.y', 244)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 249)
- def _reduce_59(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 256)
+ def _reduce_61(val, _values, result)
builder = val[2]
result = val[0].append(builder)
@@ -1692,8 +1714,8 @@ module_eval(<<'.,.,', 'parser.y', 249)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 255)
- def _reduce_60(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 262)
+ def _reduce_62(val, _values, result)
reset_precs
result = Grammar::ParameterizingRule::Rhs.new
@@ -1701,8 +1723,8 @@ module_eval(<<'.,.,', 'parser.y', 255)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 260)
- def _reduce_61(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 267)
+ def _reduce_63(val, _values, result)
reset_precs
result = Grammar::ParameterizingRule::Rhs.new
@@ -1710,8 +1732,8 @@ module_eval(<<'.,.,', 'parser.y', 260)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 265)
- def _reduce_62(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 272)
+ def _reduce_64(val, _values, result)
token = val[1]
token.alias_name = val[2]
builder = val[0]
@@ -1722,8 +1744,8 @@ module_eval(<<'.,.,', 'parser.y', 265)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 273)
- def _reduce_63(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 280)
+ def _reduce_65(val, _values, result)
builder = val[0]
builder.symbols << Lrama::Lexer::Token::InstantiateRule.new(s_value: val[2], location: @lexer.location, args: [val[1]])
result = builder
@@ -1732,18 +1754,18 @@ module_eval(<<'.,.,', 'parser.y', 273)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 279)
- def _reduce_64(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 286)
+ def _reduce_66(val, _values, result)
builder = val[0]
- builder.symbols << Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[3])
+ builder.symbols << Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[3], lhs_tag: val[5])
result = builder
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 285)
- def _reduce_65(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 292)
+ def _reduce_67(val, _values, result)
if @prec_seen
on_action_error("multiple User_code after %prec", val[0]) if @code_after_prec
@code_after_prec = true
@@ -1754,16 +1776,16 @@ module_eval(<<'.,.,', 'parser.y', 285)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 293)
- def _reduce_66(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 300)
+ def _reduce_68(val, _values, result)
end_c_declaration
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 297)
- def _reduce_67(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 304)
+ def _reduce_69(val, _values, result)
user_code = val[3]
user_code.alias_name = val[6]
builder = val[0]
@@ -1774,8 +1796,8 @@ module_eval(<<'.,.,', 'parser.y', 297)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 305)
- def _reduce_68(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 312)
+ def _reduce_70(val, _values, result)
sym = @grammar.find_symbol_by_id!(val[2])
@prec_seen = true
builder = val[0]
@@ -1786,168 +1808,168 @@ module_eval(<<'.,.,', 'parser.y', 305)
end
.,.,
-# reduce 69 omitted
-
-# reduce 70 omitted
-
# reduce 71 omitted
# reduce 72 omitted
-module_eval(<<'.,.,', 'parser.y', 320)
- def _reduce_73(val, _values, result)
+# reduce 73 omitted
+
+# reduce 74 omitted
+
+module_eval(<<'.,.,', 'parser.y', 327)
+ def _reduce_75(val, _values, result)
result = [{tag: nil, tokens: val[0]}]
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 324)
- def _reduce_74(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 331)
+ def _reduce_76(val, _values, result)
result = [{tag: val[0], tokens: val[1]}]
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 328)
- def _reduce_75(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 335)
+ def _reduce_77(val, _values, result)
result = val[0].append({tag: val[1], tokens: val[2]})
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 331)
- def _reduce_76(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 338)
+ def _reduce_78(val, _values, result)
result = [val[0]]
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 332)
- def _reduce_77(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 339)
+ def _reduce_79(val, _values, result)
result = val[0].append(val[1])
result
end
.,.,
-# reduce 78 omitted
+# reduce 80 omitted
-# reduce 79 omitted
+# reduce 81 omitted
-module_eval(<<'.,.,', 'parser.y', 339)
- def _reduce_80(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 346)
+ def _reduce_82(val, _values, result)
begin_c_declaration("}")
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 343)
- def _reduce_81(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 350)
+ def _reduce_83(val, _values, result)
end_c_declaration
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 347)
- def _reduce_82(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 354)
+ def _reduce_84(val, _values, result)
result = val[0].append(val[3])
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 351)
- def _reduce_83(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 358)
+ def _reduce_85(val, _values, result)
begin_c_declaration("}")
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 355)
- def _reduce_84(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 362)
+ def _reduce_86(val, _values, result)
end_c_declaration
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 359)
- def _reduce_85(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 366)
+ def _reduce_87(val, _values, result)
result = [val[2]]
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 364)
- def _reduce_86(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 371)
+ def _reduce_88(val, _values, result)
result = [{tag: nil, tokens: val[0]}]
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 368)
- def _reduce_87(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 375)
+ def _reduce_89(val, _values, result)
result = [{tag: val[0], tokens: val[1]}]
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 372)
- def _reduce_88(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 379)
+ def _reduce_90(val, _values, result)
result = val[0].append({tag: val[1], tokens: val[2]})
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 375)
- def _reduce_89(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 382)
+ def _reduce_91(val, _values, result)
result = [val[0]]
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 376)
- def _reduce_90(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 383)
+ def _reduce_92(val, _values, result)
result = val[0].append(val[1])
result
end
.,.,
-# reduce 91 omitted
+# reduce 93 omitted
-module_eval(<<'.,.,', 'parser.y', 380)
- def _reduce_92(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 387)
+ def _reduce_94(val, _values, result)
on_action_error("ident after %prec", val[0]) if @prec_seen
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 381)
- def _reduce_93(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 388)
+ def _reduce_95(val, _values, result)
on_action_error("char after %prec", val[0]) if @prec_seen
result
end
.,.,
-# reduce 94 omitted
-
-# reduce 95 omitted
-
# reduce 96 omitted
# reduce 97 omitted
-module_eval(<<'.,.,', 'parser.y', 391)
- def _reduce_98(val, _values, result)
+# reduce 98 omitted
+
+# reduce 99 omitted
+
+module_eval(<<'.,.,', 'parser.y', 398)
+ def _reduce_100(val, _values, result)
lhs = val[0]
lhs.alias_name = val[1]
val[3].each do |builder|
@@ -1960,8 +1982,8 @@ module_eval(<<'.,.,', 'parser.y', 391)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 402)
- def _reduce_99(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 409)
+ def _reduce_101(val, _values, result)
builder = val[0]
if !builder.line
builder.line = @lexer.line - 1
@@ -1972,8 +1994,8 @@ module_eval(<<'.,.,', 'parser.y', 402)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 410)
- def _reduce_100(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 417)
+ def _reduce_102(val, _values, result)
builder = val[2]
if !builder.line
builder.line = @lexer.line - 1
@@ -1984,10 +2006,10 @@ module_eval(<<'.,.,', 'parser.y', 410)
end
.,.,
-# reduce 101 omitted
+# reduce 103 omitted
-module_eval(<<'.,.,', 'parser.y', 420)
- def _reduce_102(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 427)
+ def _reduce_104(val, _values, result)
reset_precs
result = Grammar::RuleBuilder.new(@rule_counter, @midrule_action_counter)
@@ -1995,8 +2017,8 @@ module_eval(<<'.,.,', 'parser.y', 420)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 425)
- def _reduce_103(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 432)
+ def _reduce_105(val, _values, result)
reset_precs
result = Grammar::RuleBuilder.new(@rule_counter, @midrule_action_counter)
@@ -2004,8 +2026,8 @@ module_eval(<<'.,.,', 'parser.y', 425)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 430)
- def _reduce_104(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 437)
+ def _reduce_106(val, _values, result)
token = val[1]
token.alias_name = val[2]
builder = val[0]
@@ -2016,8 +2038,8 @@ module_eval(<<'.,.,', 'parser.y', 430)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 438)
- def _reduce_105(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 445)
+ def _reduce_107(val, _values, result)
token = Lrama::Lexer::Token::InstantiateRule.new(s_value: val[2], location: @lexer.location, args: [val[1]], lhs_tag: val[3])
builder = val[0]
builder.add_rhs(token)
@@ -2028,8 +2050,8 @@ module_eval(<<'.,.,', 'parser.y', 438)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 446)
- def _reduce_106(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 453)
+ def _reduce_108(val, _values, result)
token = Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[3], lhs_tag: val[5])
builder = val[0]
builder.add_rhs(token)
@@ -2040,8 +2062,8 @@ module_eval(<<'.,.,', 'parser.y', 446)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 454)
- def _reduce_107(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 461)
+ def _reduce_109(val, _values, result)
if @prec_seen
on_action_error("multiple User_code after %prec", val[0]) if @code_after_prec
@code_after_prec = true
@@ -2052,16 +2074,16 @@ module_eval(<<'.,.,', 'parser.y', 454)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 462)
- def _reduce_108(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 469)
+ def _reduce_110(val, _values, result)
end_c_declaration
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 466)
- def _reduce_109(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 473)
+ def _reduce_111(val, _values, result)
user_code = val[3]
user_code.alias_name = val[6]
user_code.tag = val[7]
@@ -2073,8 +2095,8 @@ module_eval(<<'.,.,', 'parser.y', 466)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 475)
- def _reduce_110(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 482)
+ def _reduce_112(val, _values, result)
sym = @grammar.find_symbol_by_id!(val[2])
@prec_seen = true
builder = val[0]
@@ -2085,70 +2107,70 @@ module_eval(<<'.,.,', 'parser.y', 475)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 482)
- def _reduce_111(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 489)
+ def _reduce_113(val, _values, result)
result = "option"
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 483)
- def _reduce_112(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 490)
+ def _reduce_114(val, _values, result)
result = "nonempty_list"
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 484)
- def _reduce_113(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 491)
+ def _reduce_115(val, _values, result)
result = "list"
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 486)
- def _reduce_114(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 493)
+ def _reduce_116(val, _values, result)
result = [val[0]]
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 487)
- def _reduce_115(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 494)
+ def _reduce_117(val, _values, result)
result = val[0].append(val[2])
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 488)
- def _reduce_116(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 495)
+ def _reduce_118(val, _values, result)
result = [Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[0])]
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 489)
- def _reduce_117(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 496)
+ def _reduce_119(val, _values, result)
result = [Lrama::Lexer::Token::InstantiateRule.new(s_value: val[0].s_value, location: @lexer.location, args: val[2])]
result
end
.,.,
-# reduce 118 omitted
+# reduce 120 omitted
-module_eval(<<'.,.,', 'parser.y', 492)
- def _reduce_119(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 499)
+ def _reduce_121(val, _values, result)
result = val[1].s_value
result
end
.,.,
-# reduce 120 omitted
+# reduce 122 omitted
-# reduce 121 omitted
+# reduce 123 omitted
-module_eval(<<'.,.,', 'parser.y', 499)
- def _reduce_122(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 506)
+ def _reduce_124(val, _values, result)
begin_c_declaration('\Z')
@grammar.epilogue_first_lineno = @lexer.line + 1
@@ -2156,8 +2178,8 @@ module_eval(<<'.,.,', 'parser.y', 499)
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 504)
- def _reduce_123(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 511)
+ def _reduce_125(val, _values, result)
end_c_declaration
@grammar.epilogue = val[2].s_value
@@ -2165,44 +2187,44 @@ module_eval(<<'.,.,', 'parser.y', 504)
end
.,.,
-# reduce 124 omitted
-
-# reduce 125 omitted
-
# reduce 126 omitted
# reduce 127 omitted
# reduce 128 omitted
-module_eval(<<'.,.,', 'parser.y', 515)
- def _reduce_129(val, _values, result)
+# reduce 129 omitted
+
+# reduce 130 omitted
+
+module_eval(<<'.,.,', 'parser.y', 522)
+ def _reduce_131(val, _values, result)
result = [val[0]]
result
end
.,.,
-module_eval(<<'.,.,', 'parser.y', 516)
- def _reduce_130(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 523)
+ def _reduce_132(val, _values, result)
result = val[0].append(val[1])
result
end
.,.,
-# reduce 131 omitted
+# reduce 133 omitted
-# reduce 132 omitted
+# reduce 134 omitted
-module_eval(<<'.,.,', 'parser.y', 521)
- def _reduce_133(val, _values, result)
+module_eval(<<'.,.,', 'parser.y', 528)
+ def _reduce_135(val, _values, result)
result = Lrama::Lexer::Token::Ident.new(s_value: val[0])
result
end
.,.,
-# reduce 134 omitted
+# reduce 136 omitted
-# reduce 135 omitted
+# reduce 137 omitted
def _reduce_none(val, _values, result)
val[0]
diff --git a/tool/lrama/lib/lrama/state.rb b/tool/lrama/lib/lrama/state.rb
index 45bfe5acf6..ceb74d856a 100644
--- a/tool/lrama/lib/lrama/state.rb
+++ b/tool/lrama/lib/lrama/state.rb
@@ -70,38 +70,16 @@ module Lrama
reduce.look_ahead = look_ahead
end
- # Returns array of [Shift, next_state]
def nterm_transitions
- return @nterm_transitions if @nterm_transitions
-
- @nterm_transitions = []
-
- shifts.each do |shift|
- next if shift.next_sym.term?
-
- @nterm_transitions << [shift, @items_to_state[shift.next_items]]
- end
-
- @nterm_transitions
+ @nterm_transitions ||= transitions.select {|shift, _| shift.next_sym.nterm? }
end
- # Returns array of [Shift, next_state]
def term_transitions
- return @term_transitions if @term_transitions
-
- @term_transitions = []
-
- shifts.each do |shift|
- next if shift.next_sym.nterm?
-
- @term_transitions << [shift, @items_to_state[shift.next_items]]
- end
-
- @term_transitions
+ @term_transitions ||= transitions.select {|shift, _| shift.next_sym.term? }
end
def transitions
- term_transitions + nterm_transitions
+ @transitions ||= shifts.map {|shift| [shift, @items_to_state[shift.next_items]] }
end
def selected_term_transitions
diff --git a/tool/lrama/lib/lrama/version.rb b/tool/lrama/lib/lrama/version.rb
index ccd593f344..ef840ce435 100644
--- a/tool/lrama/lib/lrama/version.rb
+++ b/tool/lrama/lib/lrama/version.rb
@@ -1,3 +1,3 @@
module Lrama
- VERSION = "0.6.5".freeze
+ VERSION = "0.6.9".freeze
end
diff --git a/tool/merger.rb b/tool/merger.rb
index d181a77f84..0d9957074f 100755
--- a/tool/merger.rb
+++ b/tool/merger.rb
@@ -57,11 +57,11 @@ class << Merger
yield if block_given?
STDERR.puts "\e[1;33m#{str} ([y]es|[a]bort|[r]etry#{'|[e]dit' if editfile})\e[0m"
case STDIN.gets
- when /\Aa/i then exit
+ when /\Aa/i then exit 1
when /\Ar/i then redo
when /\Ay/i then break
when /\Ae/i then system(ENV['EDITOR'], editfile)
- else exit
+ else exit 1
end
end
end
@@ -324,7 +324,10 @@ else
end
patch = resp.body.sub(/^diff --git a\/version\.h b\/version\.h\nindex .*\n--- a\/version\.h\n\+\+\+ b\/version\.h\n@@ .* @@\n(?:[-\+ ].*\n|\n)+/, '')
- message = "\n\n#{(patch[/^Subject: (.*)\n\ndiff --git/m, 1] || "Message not found for revision: #{git_rev}\n")}"
+ message = "#{(patch[/^Subject: (.*)\n---\n /m, 1] || "Message not found for revision: #{git_rev}\n")}"
+ message.gsub!(/\G(.*)\n( .*)/, "\\1\\2")
+ message = "\n\n#{message}"
+
puts '+ git apply'
IO.popen(['git', 'apply', '--3way'], 'wb') { |f| f.write(patch) }
else
diff --git a/tool/rdoc-srcdir b/tool/rdoc-srcdir
index 10c63caf9e..10c63caf9e 100644..100755
--- a/tool/rdoc-srcdir
+++ b/tool/rdoc-srcdir
diff --git a/tool/rubyspec_temp.rb b/tool/rubyspec_temp.rb
deleted file mode 100644
index 339bfce211..0000000000
--- a/tool/rubyspec_temp.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-require "tmpdir"
-require "fileutils"
-
-if (tmpdir = Dir.mktmpdir("rubyspec_temp.")).size > 80
- # On macOS, the default TMPDIR is very long, inspite of UNIX socket
- # path length is limited.
- Dir.rmdir(tmpdir)
- tmpdir = Dir.mktmpdir("rubyspec_temp.", "/tmp")
-end
-# warn "tmpdir(#{tmpdir.size}) = #{tmpdir}"
-END {FileUtils.rm_rf(tmpdir)}
-
-ENV["TMPDIR"] = ENV["SPEC_TEMP_DIR"] = tmpdir
diff --git a/tool/test/testunit/test_assertion.rb b/tool/test/testunit/test_assertion.rb
index 709b495572..1e19c102b8 100644
--- a/tool/test/testunit/test_assertion.rb
+++ b/tool/test/testunit/test_assertion.rb
@@ -50,4 +50,17 @@ class TestAssertion < Test::Unit::TestCase
assert_pattern_list(pattern_list, actual, message)
end
end
+
+ def test_caller_bactrace_location
+ begin
+ line = __LINE__; assert_fail_for_backtrace_location
+ rescue Test::Unit::AssertionFailedError => e
+ end
+ location = Test::Unit::Runner.new.location(e)
+ assert_equal "#{__FILE__}:#{line}", location
+ end
+
+ def assert_fail_for_backtrace_location
+ assert false
+ end
end
diff --git a/tool/test_for_warn_bundled_gems/test.sh b/tool/test_for_warn_bundled_gems/test.sh
index 2404571daf..a14d5bcedc 100755
--- a/tool/test_for_warn_bundled_gems/test.sh
+++ b/tool/test_for_warn_bundled_gems/test.sh
@@ -32,6 +32,10 @@ echo "* Show warning with bootsnap"
ruby test_warn_bootsnap.rb
echo
+echo "* Show warning with bootsnap for gem with native extension"
+ruby test_warn_bootsnap_rubyarchdir_gem.rb
+echo
+
echo "* Show warning with zeitwerk"
ruby test_warn_zeitwerk.rb
echo
diff --git a/tool/test_for_warn_bundled_gems/test_warn_bootsnap_rubyarchdir_gem.rb b/tool/test_for_warn_bundled_gems/test_warn_bootsnap_rubyarchdir_gem.rb
new file mode 100644
index 0000000000..477933f6f2
--- /dev/null
+++ b/tool/test_for_warn_bundled_gems/test_warn_bootsnap_rubyarchdir_gem.rb
@@ -0,0 +1,11 @@
+require "bundler/inline"
+
+gemfile do
+ source "https://rubygems.org"
+ gem "bootsnap", require: false
+end
+
+require 'bootsnap'
+Bootsnap.setup(cache_dir: 'tmp/cache')
+
+require 'syslog'