[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]