class MicroCisc::Compile::LabelGenerator
Public Class Methods
new()
click to toggle source
# File lib/micro_cisc/compile/label_generator.rb, line 4 def initialize @labels = [] @count = 0 end
Public Instance Methods
end_label()
click to toggle source
# File lib/micro_cisc/compile/label_generator.rb, line 18 def end_label last_open.sub('{', '}') end
last_open()
click to toggle source
# File lib/micro_cisc/compile/label_generator.rb, line 26 def last_open if @labels.empty? raise ArgumentException, "No open label context" end # Go backwards until we find an open that we didn't see the close for first i = @labels.size - 1 closed = nil while(i >= 0) if @labels[i].start_with?('}') closed = @labels[i] elsif !closed return @labels[i] elsif closed && @labels[i].end_with?(closed[1..-1]) closed = nil else raise 'Invalid state, contexts are out of order' end i -= 1 end end
pop_context()
click to toggle source
# File lib/micro_cisc/compile/label_generator.rb, line 14 def pop_context @labels << last_open.sub('{', '}') end
push_context()
click to toggle source
# File lib/micro_cisc/compile/label_generator.rb, line 9 def push_context @count += 1 @labels << "{#{@count}" end
start_label()
click to toggle source
# File lib/micro_cisc/compile/label_generator.rb, line 22 def start_label last_open end