rubyx/lib/parfait/data_object.rb

73 lines
1.7 KiB
Ruby
Raw Normal View History

#
#
# In rubyx everything truely is an object. (most smalltalk/ruby systems use a union
# for integers/pointers that are called objects, but are really very different)
#
# Objects have type as their first member. No exception.
#
# So where is the data? In DataObjects. DataObjects are opague carriers of data.
# Opague to rubyx that is. There is no way to get at it or pass the data around.
#
# To use Data, Risc instructions have to be used. Luckily there is not soo much one
# actually wants to do with data, moving it between DataObject , comparing and
# logical and math operation that are bundled into the OperatorInstruction.
#
# For safe access the access code needs to know the length of the data, which is
# encoded in the class/type name. Ie An Integer derives from Data2, which is 2 long
# (minus one for the type, so exactly the one word for the integer)
#
# DataObjects still have a type, and so can have objects before the data starts
#
# A marker class
module Parfait
class DataObject < Object
def initialize
@memory = []
end
def data_length
raise "called #{self}"
end
def data_start
return type.length
end
# 1 -based index
def get_internal_word(index)
@memory[index]
end
# 1 -based index
def set_internal_word(index , value)
raise "Word[#{index}] = nil" if( value.nil? )
@memory[index] = value
value
end
end
class Data2 < DataObject
def data_length
1
end
2018-03-29 16:38:59 +02:00
def padded_length
2018-03-29 17:03:21 +02:00
2 * 4
2018-03-29 16:38:59 +02:00
end
end
class Data8 < DataObject
def data_length
7
end
2018-03-29 16:38:59 +02:00
def padded_length
2018-03-29 17:03:21 +02:00
8 * 4
2018-03-29 16:38:59 +02:00
end
end
class Data16 < DataObject
def data_length
15
end
2018-03-29 16:38:59 +02:00
def padded_length
2018-03-29 17:03:21 +02:00
16 * 4
2018-03-29 16:38:59 +02:00
end
end
end