Revision: 4180 http://trac.macosforge.org/projects/ruby/changeset/4180 Author: eloy.de.enige@gmail.com Date: 2010-06-01 02:11:36 -0700 (Tue, 01 Jun 2010) Log Message: ----------- Updated IRB to DietRB 0.4.5 Modified Paths: -------------- MacRuby/trunk/bin/irb MacRuby/trunk/lib/irb/context.rb MacRuby/trunk/lib/irb/source.rb MacRuby/trunk/lib/irb/version.rb MacRuby/trunk/lib/irb.rb Added Paths: ----------- MacRuby/trunk/lib/irb/completion.rb MacRuby/trunk/lib/irb/deprecated.rb Modified: MacRuby/trunk/bin/irb =================================================================== --- MacRuby/trunk/bin/irb 2010-06-01 08:35:09 UTC (rev 4179) +++ MacRuby/trunk/bin/irb 2010-06-01 09:11:36 UTC (rev 4180) @@ -5,9 +5,12 @@ unless ARGV.empty? require 'optparse' + ignore_irbrc = false + OptionParser.new do |opt| bin = File.basename($0) opt.banner = "Usage: #{bin} [options] [programfile] [arguments]" + opt.on("-f", "Ignore ~/.irbrc") { |ignore| ignore_irbrc = ignore } opt.on("-r load-lib", "Loads the given library (same as `ruby -r')") { |lib| require lib } opt.on("-d", "Set $DEBUG to true (same as `ruby -d')") { $DEBUG = true } opt.on("-I path", "Add path to $LOAD_PATH") { |path| $LOAD_PATH.unshift(path) } @@ -20,8 +23,10 @@ end.parse!(ARGV) end -irbrc = File.expand_path("~/.irbrc") -load(irbrc) if File.exist?(irbrc) +unless ignore_irbrc + irbrc = File.expand_path("~/.irbrc") + load(irbrc) if File.exist?(irbrc) +end IRB.formatter.filter_from_backtrace << /^#{__FILE__}/ Added: MacRuby/trunk/lib/irb/completion.rb =================================================================== --- MacRuby/trunk/lib/irb/completion.rb (rev 0) +++ MacRuby/trunk/lib/irb/completion.rb 2010-06-01 09:11:36 UTC (rev 4180) @@ -0,0 +1 @@ +IRB.deprecated "The file `irb/completion' has moved to `irb/ext/ecompletion' and is loaded by default.", caller \ No newline at end of file Modified: MacRuby/trunk/lib/irb/context.rb =================================================================== --- MacRuby/trunk/lib/irb/context.rb 2010-06-01 08:35:09 UTC (rev 4179) +++ MacRuby/trunk/lib/irb/context.rb 2010-06-01 09:11:36 UTC (rev 4180) @@ -34,6 +34,7 @@ @line = 1 clear_buffer + @underscore_assigner = __evaluate__("_ = nil; proc { |val| _ = val }") @processors = self.class.processors.map { |processor| processor.new(self) } end @@ -42,10 +43,12 @@ end def evaluate(source) - result = __evaluate__("_ = (#{source})", '(irb)', @line - @source.buffer.size + 1) + result = __evaluate__(source.to_s, '(irb)', @line - @source.buffer.size + 1) + store_result(result) puts formatter.result(result) result rescue Exception => e + store_exception(e) puts formatter.exception(e) end @@ -82,7 +85,7 @@ # process_line("quit") # => false def process_line(line) @source << line - return false if @source.to_s == "quit" + return false if @source.terminate? if @source.syntax_error? puts formatter.syntax_error(@line, @source.syntax_error) @@ -108,6 +111,14 @@ def clear_buffer @source = Source.new end + + def store_result(result) + @underscore_assigner.call(result) + end + + def store_exception(exception) + $e = $EXCEPTION = exception + end end end @@ -118,4 +129,4 @@ end private :irb -end \ No newline at end of file +end Added: MacRuby/trunk/lib/irb/deprecated.rb =================================================================== --- MacRuby/trunk/lib/irb/deprecated.rb (rev 0) +++ MacRuby/trunk/lib/irb/deprecated.rb 2010-06-01 09:11:36 UTC (rev 4180) @@ -0,0 +1,43 @@ +module IRB + def self.deprecated(message, caller) + caller = caller.first.split(':')[0..-2].join(':') + warn "[!] Deprecation warning from #{caller}: #{message}" + end + + def self.deprecated_feature(old_feature, new_feature, caller) + deprecated "Usage of #{old_feature} will be deprecated, #{new_feature}", caller + end + + def self.conf + @conf ||= DeprecatedConf.new + end + + class DeprecatedConf + DEFAULT_MESSAGE = "please create a patch/ticket" + + def deprecated_conf(key, message, caller) + message ||= DEFAULT_MESSAGE + IRB.deprecated_feature("IRB.conf[:#{key}]", message, caller) + end + + def [](key) + IRB.deprecated("Usage of the IRB.conf hash for configuration is, currently, not supported", caller) + nil + end + + def []=(key, value) + message = nil + case key + when :PROMPT_MODE + message = "use `IRB.formatter.prompt = :#{value.downcase}'" + IRB.formatter.prompt = "#{value.to_s.downcase}".to_sym + when :USE_READLINE + message = "for now DietRB only has a readline module" + when :SAVE_HISTORY + message = "history is always saved" + end + deprecated_conf key, message, caller + value + end + end +end \ No newline at end of file Modified: MacRuby/trunk/lib/irb/source.rb =================================================================== --- MacRuby/trunk/lib/irb/source.rb 2010-06-01 08:35:09 UTC (rev 4179) +++ MacRuby/trunk/lib/irb/source.rb 2010-06-01 09:11:36 UTC (rev 4180) @@ -51,6 +51,11 @@ def syntax_error? reflect.syntax_error? end + + # Reflects on the accumulated source to see if it contains a terminate signal. + def terminate? + reflect.terminate? + end # Reflects on the accumulated source and returns the actual syntax error # message if one occurs. @@ -110,6 +115,20 @@ def syntax_error? !@syntax_error.nil? end + + # Returns whether or not the source contains a call to toplevel + # quit or exit, namely if the current session should be terminated + # + # For example, this would terminate the session + # + # def foo; end; quit + # + # This does not: + # + # def foo; quit; end + def terminate? + !@terminate.nil? + end UNEXPECTED_END = "syntax error, unexpected $end" @@ -120,6 +139,7 @@ end INCREASE_LEVEL_KEYWORDS = %w{ class module def begin if unless case while for do } + TERMINATE_KEYWORDS = %w{ exit quit } def on_kw(token) #:nodoc: case token @@ -145,6 +165,14 @@ @level += 1 super end + + def on_ident(token) #:nodoc: + if @level == 0 && TERMINATE_KEYWORDS.include?(token) + @terminate = true + else + super + end + end def on_lbrace(token) #:nodoc: @level += 1 @@ -157,4 +185,4 @@ end end end -end \ No newline at end of file +end Modified: MacRuby/trunk/lib/irb/version.rb =================================================================== --- MacRuby/trunk/lib/irb/version.rb 2010-06-01 08:35:09 UTC (rev 4179) +++ MacRuby/trunk/lib/irb/version.rb 2010-06-01 09:11:36 UTC (rev 4180) @@ -8,7 +8,7 @@ module VERSION #:nodoc: MAJOR = 0 MINOR = 4 - TINY = 2 + TINY = 5 STRING = [MAJOR, MINOR, TINY].join('.') DESCRIPTION = "#{STRING} (DietRB)" Modified: MacRuby/trunk/lib/irb.rb =================================================================== --- MacRuby/trunk/lib/irb.rb 2010-06-01 08:35:09 UTC (rev 4179) +++ MacRuby/trunk/lib/irb.rb 2010-06-01 09:11:36 UTC (rev 4180) @@ -8,8 +8,25 @@ require 'irb/source' require 'irb/version' +require 'irb/deprecated' + require 'irb/ext/history' +require 'irb/ext/completion' -# if !ENV['SPECCING'] && defined?(RUBY_ENGINE) && RUBY_ENGINE == "macruby" -# require 'irb/ext/macruby' -# end +if !ENV['SPECCING'] && defined?(RUBY_ENGINE) && RUBY_ENGINE == "macruby" + require 'irb/ext/macruby' +end + +module IRB + class << self + # This is just here for so the ruby 1.9 IRB will seemingly work, but actually + # loads DietRB, how cunning... + # + # This will obviously be removed once we've conquered the world. + def start(*) + warn "[!] Note that you are now actually using DietRB (#{IRB::VERSION::STRING})\n" + load File.expand_path('../../bin/dietrb', __FILE__) + end + alias_method :setup, :start + end +end \ No newline at end of file
participants (1)
-
source_changes@macosforge.org