rubyx/lib/vool/basic_values.rb
Torsten Rüger 1ee01622c3 Builtin is no more, final conversions done
All preloading where it needs to be
(some)tests for the preload
split compiler test
remembered binary tests (usually just run on travis)
2019-09-13 20:34:41 +03:00

113 lines
2.4 KiB
Ruby

module Vool
#Marker class for different constants
class Constant < Expression
end
# An integer at the vool level
class IntegerConstant < Constant
attr_reader :value
def initialize(value)
@value = value
end
def to_slot(_)
return Mom::SlotDefinition.new(Mom::IntegerConstant.new(@value) , [])
end
def ct_type
Parfait.object_space.get_type_by_class_name(:Integer)
end
def to_s(depth = 0)
value.to_s
end
end
# An float at the vool level
class FloatConstant < Constant
attr_reader :value
def initialize(value)
@value = value
end
def ct_type
true
end
def to_s(depth = 0)
value.to_s
end
end
# True at the vool level
class TrueConstant < Constant
def ct_type
Parfait.object_space.get_type_by_class_name(:True)
end
def to_slot(_)
return Mom::SlotDefinition.new(Parfait.object_space.true_object , [])
end
def to_s(depth = 0)
"true"
end
end
# False at the vool level
class FalseConstant < Constant
def ct_type
Parfait.object_space.get_type_by_class_name(:False)
end
def to_slot(_)
return Mom::SlotDefinition.new(Parfait.object_space.false_object , [])
end
def to_s(depth = 0)
"false"
end
end
# Nil at the vool level
class NilConstant < Constant
def ct_type
Parfait.object_space.get_type_by_class_name(:Nil)
end
def to_slot(_)
return Mom::SlotDefinition.new(Parfait.object_space.nil_object , [])
end
def to_s(depth = 0)
"nil"
end
end
# Self at the vool level
class SelfExpression < Expression
attr_reader :my_type
def initialize(type = nil)
@my_type = type
end
def to_slot(compiler)
@my_type = compiler.receiver_type
Mom::SlotDefinition.new(:message , [:receiver])
end
def ct_type
@my_type
end
def to_s(depth = 0)
"self"
end
end
class StringConstant < Constant
attr_reader :value
def initialize(value)
@value = value
end
def to_slot(_)
return Mom::SlotDefinition.new(Mom::StringConstant.new(@value),[])
end
def ct_type
Parfait.object_space.get_type_by_class_name(:Word)
end
def to_s(depth = 0)
"'#{@value}'"
end
end
class SymbolConstant < StringConstant
def ct_type
Parfait.object_space.get_type_by_class_name(:Word)
end
def to_s(depth = 0)
":#{@value}"
end
end
end