ruby-changes:65304
From: nagachika <ko1@a...>
Date: Sat, 20 Feb 2021 18:47:10 +0900 (JST)
Subject: [ruby-changes:65304] 931815bfd8 (ruby_2_7): merge revision(s) eeacdcb9a073c7d8ad703e0dc9faf229a5ebbe3c: [Backport #17558]
https://git.ruby-lang.org/ruby.git/commit/?id=931815bfd8 From 931815bfd86df603337194f3fcefb46bfe3e7940 Mon Sep 17 00:00:00 2001 From: nagachika <nagachika@r...> Date: Sat, 20 Feb 2021 18:46:40 +0900 Subject: merge revision(s) eeacdcb9a073c7d8ad703e0dc9faf229a5ebbe3c: [Backport #17558] Fixed premature return After setting ruby2_keywords for bmethod, the rest of arguments had been ignored. [Bug #17558] --- test/ruby/test_keyword.rb | 9 +++++++++ vm_method.c | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) --- lib/exe/bundle | 47 +++++++ lib/exe/bundler | 4 + lib/exe/irb | 11 ++ lib/exe/racc | 306 +++++++++++++++++++++++++++++++++++++++++ lib/exe/racc2y | 195 ++++++++++++++++++++++++++ lib/exe/rdoc | 44 ++++++ lib/exe/ri | 12 ++ lib/exe/y2racc | 339 ++++++++++++++++++++++++++++++++++++++++++++++ test/ruby/test_keyword.rb | 9 ++ version.h | 2 +- vm_method.c | 2 +- 11 files changed, 969 insertions(+), 2 deletions(-) create mode 100755 lib/exe/bundle create mode 100755 lib/exe/bundler create mode 100755 lib/exe/irb create mode 100755 lib/exe/racc create mode 100755 lib/exe/racc2y create mode 100755 lib/exe/rdoc create mode 100755 lib/exe/ri create mode 100755 lib/exe/y2racc diff --git a/lib/exe/bundle b/lib/exe/bundle new file mode 100755 index 0000000..b3b1b69 --- /dev/null +++ b/lib/exe/bundle @@ -0,0 +1,47 @@ https://github.com/ruby/ruby/blob/trunk/lib/exe/bundle#L1 +#!/usr/bin/env ruby +# frozen_string_literal: true + +# Exit cleanly from an early interrupt +Signal.trap("INT") do + Bundler.ui.debug("\n#{caller.join("\n")}") if defined?(Bundler) + exit 1 +end + +base_path = File.expand_path("../lib", __dir__) + +if File.exist?(base_path) + require_relative "../lib/bundler" +else + require "bundler" +end + +# Check if an older version of bundler is installed +$LOAD_PATH.each do |path| + next unless path =~ %r{/bundler-0\.(\d+)} && $1.to_i < 9 + err = String.new + err << "Looks like you have a version of bundler that's older than 0.9.\n" + err << "Please remove your old versions.\n" + err << "An easy way to do this is by running `gem cleanup bundler`." + abort(err) +end + +if File.exist?(base_path) + require_relative "../lib/bundler/friendly_errors" +else + require "bundler/friendly_errors" +end + +Bundler.with_friendly_errors do + if File.exist?(base_path) + require_relative "../lib/bundler/cli" + else + require "bundler/cli" + end + + # Allow any command to use --help flag to show help for that command + help_flags = %w[--help -h] + help_flag_used = ARGV.any? {|a| help_flags.include? a } + args = help_flag_used ? Bundler::CLI.reformatted_help_args(ARGV) : ARGV + + Bundler::CLI.start(args, :debug => true) +end diff --git a/lib/exe/bundler b/lib/exe/bundler new file mode 100755 index 0000000..d9131fe --- /dev/null +++ b/lib/exe/bundler @@ -0,0 +1,4 @@ https://github.com/ruby/ruby/blob/trunk/lib/exe/bundler#L1 +#!/usr/bin/env ruby +# frozen_string_literal: true + +load File.expand_path("../bundle", __FILE__) diff --git a/lib/exe/irb b/lib/exe/irb new file mode 100755 index 0000000..c64ee85 --- /dev/null +++ b/lib/exe/irb @@ -0,0 +1,11 @@ https://github.com/ruby/ruby/blob/trunk/lib/exe/irb#L1 +#!/usr/bin/env ruby +# +# irb.rb - interactive ruby +# $Release Version: 0.9.6 $ +# $Revision$ +# by Keiju ISHITSUKA(keiju@r...) +# + +require "irb" + +IRB.start(__FILE__) diff --git a/lib/exe/racc b/lib/exe/racc new file mode 100755 index 0000000..5656b25 --- /dev/null +++ b/lib/exe/racc @@ -0,0 +1,306 @@ https://github.com/ruby/ruby/blob/trunk/lib/exe/racc#L1 +#!/usr/bin/env ruby +# +# $Id$ +# +# Copyright (c) 1999-2006 Minero Aoki +# +# This program is free software. +# You can distribute/modify this program under the same terms of ruby. +# see the file "COPYING". + +require 'racc/static' +require 'optparse' + +def main + output = nil + debug_parser = false + make_logfile = false + logfilename = nil + make_executable = false + rubypath = nil + embed_runtime = false + debug_flags = Racc::DebugFlags.new + line_convert = true + line_convert_all = false + omit_action_call = true + superclass = nil + check_only = false + verbose = false + profiler = RaccProfiler.new(false) + + parser = OptionParser.new + parser.banner = "Usage: #{File.basename($0)} [options] <input>" + parser.on('-o', '--output-file=PATH', + 'output file name [<input>.tab.rb]') {|name| + output = name + } + parser.on('-t', '--debug', 'Outputs debugging parser.') {|fl| + debug_parser = fl + } + parser.on('-g', 'Equivalent to -t (obsolete).') {|fl| + $stderr.puts "racc -g is obsolete. Use racc -t instead." if $VERBOSE + debug_parser = fl + } + parser.on('-v', '--verbose', + 'Creates <filename>.output log file.') {|fl| + make_logfile = fl + } + parser.on('-O', '--log-file=PATH', + 'Log file name [<input>.output]') {|path| + make_logfile = true + logfilename = path + } + parser.on('-e', '--executable [RUBYPATH]', 'Makes executable parser.') {|path| + executable = true + rubypath = (path == 'ruby' ? nil : path) + } + parser.on('-E', '--embedded', "Embeds Racc runtime in output.") { + embed_runtime = true + } + parser.on('--line-convert-all', 'Converts line numbers of user codes.') { + line_convert_all = true + } + parser.on('-l', '--no-line-convert', 'Never convert line numbers.') { + line_convert = false + line_convert_all = false + } + parser.on('-a', '--no-omit-actions', 'Never omit actions.') { + omit_action_call = false + } + parser.on('--superclass=CLASSNAME', + 'Uses CLASSNAME instead of Racc::Parser.') {|name| + superclass = name + } + parser.on('--runtime=FEATURE', + "Uses FEATURE instead of 'racc/parser'") {|feat| + runtime = feature + } + parser.on('-C', '--check-only', 'Checks syntax and quit immediately.') {|fl| + check_only = fl + } + parser.on('-S', '--output-status', 'Outputs internal status time to time.') { + verbose = true + } + parser.on('-P', 'Enables generator profile') { + profiler = RaccProfiler.new(true) + } + parser.on('-D flags', "Flags for Racc debugging (do not use).") {|flags| + debug_flags = Racc::DebugFlags.parse_option_string(flags) + } + #parser.on('--no-extensions', 'Run Racc without any Ruby extension.') { + # Racc.const_set :Racc_No_Extentions, true + #} + parser.on('--version', 'Prints version and quit.') { + puts "racc version #{Racc::Version}" + exit 0 + } + parser.on('--runtime-version', 'Prints runtime version and quit.') { + printf "racc runtime version %s (rev. %s); %s\n", + Racc::Parser::Racc_Runtime_Version, + Racc::Parser::Racc_Runtime_Revision, + if Racc::Parser.racc_runtime_type == 'ruby' + sprintf('ruby core version %s (rev. %s)', + Racc::Parser::Racc_Runtime_Core_Version_R, + Racc::Parser::Racc_Runtime_Core_Revision_R) + else + sprintf('c core version %s (rev. %s)', + Racc::Parser::Racc_Runtime_Core_Version_C, + Racc::Parser::Racc_Runtime_Core_Revision_C) + end + exit 0 + } + parser.on('--copyright', 'Prints copyright and quit.') { + puts Racc::Copyright + exit 0 + } + parser.on('--help', 'Prints this message and quit.') { + puts parser.help + exit 1 + } + begin + parser.parse! + rescue OptionParser::ParseError => err + $stderr.puts err.message + $stderr.puts parser.help + exit 1 + end + if ARGV.empty? + $stderr.puts 'no input' + exit 1 + end + if ARGV.size > 1 + $stderr.puts 'too many input' + exit 1 + end + input = ARGV[0] + + begin + $stderr.puts 'Parsing grammar file...' if verbose + result = profiler.section('parse') { + parser = Racc::GrammarFileParser.new(debug_flags) + parser.parse(File.read(input), File.basename(input)) + } + if check_only + $stderr.puts 'syntax ok' + exit 0 + end + + $stderr.puts 'Generating LALR states...' if verbose + states = profiler.section('nfa') { + Racc::States.new(result.grammar).nfa + } + + $stderr.puts "Resolving #{states.size} states..." if verbose + profiler.section('dfa') { + states.dfa + } + + $stderr.puts 'Creating parser file...' if verbose + params = result.params.dup + # Overwrites parameters given by a grammar file with command line options. + params.superclass = superclass if superclass + params.omit_action_call = true if omit_action_call + # From command line option + if make_executable + params.make_executable = true + params.interpreter = rubypath + end + params.debug_parser = debug_parser + params.convert_line = line_convert + params.convert_line_all = line_convert_all + params.embed_runtime = embed_runtime + profiler.section('generation') { + generator = Racc::ParserFileGenerator.new(states, params) + generator.generate_parser_file(output || make_filename(input, '.tab.rb')) + } + + if make_logfile + profiler.section('logging') { + $stderr.puts 'Creating log file...' if verbose + logfilename ||= make_filename(output || File.basename(input), '.output') + File.open(logfilename, 'w') {|f| + Racc::LogFileGenerator.new(states, debug_flags).output f + } + } + end + if debug_flags.status_logging + log_useless states.grammar + log_conflict states + else + report_useless states.grammar + report_conflict states + end + + profiler.report + rescue Racc::Error, Errno::ENOENT, Errno::EPERM => err + raise if $DEBUG or debug_flags.any? + lineno = err.message.slice(/\A\d+:/).to_s + $stderr.puts "#{File.basename $0}: #{input}:#{lineno} #{err.message.strip}" + exit 1 + end +end + +def make_filen (... truncated) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/