class RubyParserStuff::StackState
def initialize name, debug=false
def initialize name, debug=false @name = name @stack = [false] @debug = debug end
def inspect
def inspect "StackState(#{@name}, #{@stack.inspect})" end
def is_in_state
def is_in_state log :is_in_state if debug @stack.last end
def lexpop
def lexpop raise if @stack.size == 0 a = @stack.pop b = @stack.pop @stack.push(a || b) log :lexpop if debug end
def log action
def log action c = caller[1] c = caller[2] if c =~ /expr_result/ warn "%s_stack.%s: %p at %s" % [name, action, @stack, c.clean_caller] nil end
def pop
def pop r = @stack.pop @stack.push false if @stack.empty? log :pop if debug r end
def push val
def push val @stack.push val log :push if debug end
def reset
def reset @stack = [false] log :reset if debug end
def restore oldstate
def restore oldstate @stack.replace oldstate log :restore if debug end
def store base = false
def store base = false result = @stack.dup @stack.replace [base] log :store if debug result end