rubyx/lib/risc/instructions/label.rb
Torsten Ruger ce3cc72f9e move all position setting into position
Position and subclasses handle the logic, external to
the classes, so it can be swapped out later
(at runtime positions can’t change)
2018-05-07 22:30:43 +03:00

58 lines
1.1 KiB
Ruby

module Risc
# A label is a placeholder for it's next Instruction
# It's function is not to turn into code, but to be a valid brnch target
#
# So branches and Labels are pairs, fan out, fan in
#
#
class Label < Instruction
def initialize( source , name , nekst = nil)
super(source , nekst)
@name = name
end
attr_reader :name
def to_cpu(translator)
@cpu_label ||= super
end
def to_s
class_source "#{@name} (next: #{self.next.class.name.split("::").last})"
end
def sof_reference_name
@name
end
# a method start has a label of the form Class.method , test for that
def is_method
@name.split(".").length == 2
end
def assemble_all( io )
self.each {|ins| ins.assemble(io)}
end
def assemble io
end
def total_byte_length
ret = 0
self.each{|ins| ret += ins.byte_length}
ret
end
# shame we need this, just for logging
def byte_length
0
end
alias :padded_length :byte_length
end
def self.label( source , name , nekst = nil)
Label.new( source , name , nekst = nil)
end
end