36 lines
1015 B
Ruby
36 lines
1015 B
Ruby
module Vm
|
|
# Word is an abstract base class for the obvious values, ie those that fit into a register
|
|
# Marked as abstract by private constructor
|
|
#
|
|
# Integer and (Object) References are the main derived classes, but float will come and ...
|
|
# The Mystery Value has unknown type and has only casting methods. So it must be cast to be useful.
|
|
# Types are stored at runtime when needed in TYPE_REGISTER (r1 on arm), which is mostly before calls,
|
|
# so that the called function can do casts / branching correctly
|
|
class Word < Value
|
|
attr_accessor :register
|
|
def register_symbol
|
|
@register.symbol
|
|
end
|
|
def inspect
|
|
"#{self.class.name} (#{register_symbol})"
|
|
end
|
|
def to_s
|
|
inspect
|
|
end
|
|
def length
|
|
4
|
|
end
|
|
# aka to string
|
|
def to_asm
|
|
"#{register_symbol}"
|
|
end
|
|
private
|
|
def initialize reg
|
|
if reg.is_a? RegisterReference
|
|
@register = reg
|
|
else
|
|
@register = RegisterReference.new(reg)
|
|
end
|
|
end
|
|
end
|
|
end |