Change soft-fail to use the config, rather than env
[rbx.git] / lib / irb / ext / history.rb
blobb564cb692bf3ff13ab2017f9d4a85526120dcd8e
2 #   history.rb - 
3 #       $Release Version: 0.9.5$
4 #       $Revision: 11708 $
5 #       $Date: 2007-02-12 15:01:19 -0800 (Mon, 12 Feb 2007) $
6 #       by Keiju ISHITSUKA(keiju@ruby-lang.org)
8 # --
10 #   
13 module IRB
15   class Context
17     NOPRINTING_IVARS.push "@eval_history_values"
19     alias _set_last_value set_last_value
21     def set_last_value(value)
22       _set_last_value(value)
24 #      @workspace.evaluate self, "_ = IRB.CurrentContext.last_value"
25       if @eval_history #and !@eval_history_values.equal?(llv)
26         @eval_history_values.push @line_no, @last_value
27         @workspace.evaluate self, "__ = IRB.CurrentContext.instance_eval{@eval_history_values}"
28       end
30       @last_value
31     end
33     attr_reader :eval_history
34     def eval_history=(no)
35       if no
36         if defined?(@eval_history) && @eval_history
37           @eval_history_values.size(no)
38         else
39           @eval_history_values = History.new(no)
40           IRB.conf[:__TMP__EHV__] = @eval_history_values
41           @workspace.evaluate(self, "__ = IRB.conf[:__TMP__EHV__]")
42           IRB.conf.delete(:__TMP_EHV__)
43         end
44       else
45         @eval_history_values = nil
46       end
47       @eval_history = no
48     end
49   end
51   class History
52     @RCS_ID='-$Id: history.rb 11708 2007-02-12 23:01:19Z shyouhei $-'
54     def initialize(size = 16)
55       @size = size
56       @contents = []
57     end
59     def size(size)
60       if size != 0 && size < @size 
61         @contents = @contents[@size - size .. @size]
62       end
63       @size = size
64     end
66     def [](idx)
67       begin
68         if idx >= 0
69           @contents.find{|no, val| no == idx}[1]
70         else
71           @contents[idx][1]
72         end
73       rescue NameError
74         nil
75       end
76     end
78     def push(no, val)
79       @contents.push [no, val]
80       @contents.shift if @size != 0 && @contents.size > @size
81     end
82     
83     alias real_inspect inspect
85     def inspect
86       if @contents.empty?
87         return real_inspect
88       end
90       unless (last = @contents.pop)[1].equal?(self)
91         @contents.push last
92         last = nil
93       end
94       str = @contents.collect{|no, val|
95         if val.equal?(self)
96           "#{no} ...self-history..."
97         else
98           "#{no} #{val.inspect}"
99         end
100       }.join("\n")
101       if str == ""
102         str = "Empty."
103       end
104       @contents.push last if last
105       str
106     end
107   end