rubyx/lib/sol/basic_values.rb
Torsten Rüger d1f8733623 Rename Vool to Sol
Simple is really the descriptive name for the layer
Sure, it is "virtual" but that is not as important as the fact that it is simple (or simplified)
Also objct (based really) is better, since orientated implies it is a little like that, but only orientated, not really it. Sol only has objects, nothing else
Just cause i was renaming anyway
2019-10-04 00:38:47 +03:00

113 lines
2.6 KiB
Ruby

module Sol
#Marker class for different constants
class Constant < Expression
end
# An integer at the sol level
class IntegerConstant < Constant
attr_reader :value
def initialize(value)
@value = value
end
def to_slot_definition(_)
return SlotMachine::SlotDefinition.new(SlotMachine::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 sol 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 sol level
class TrueConstant < Constant
def ct_type
Parfait.object_space.get_type_by_class_name(:True)
end
def to_slot_definition(_)
return SlotMachine::SlotDefinition.new(Parfait.object_space.true_object , [])
end
def to_s(depth = 0)
"true"
end
end
# False at the sol level
class FalseConstant < Constant
def ct_type
Parfait.object_space.get_type_by_class_name(:False)
end
def to_slot_definition(_)
return SlotMachine::SlotDefinition.new(Parfait.object_space.false_object , [])
end
def to_s(depth = 0)
"false"
end
end
# Nil at the sol level
class NilConstant < Constant
def ct_type
Parfait.object_space.get_type_by_class_name(:Nil)
end
def to_slot_definition(_)
return SlotMachine::SlotDefinition.new(Parfait.object_space.nil_object , [])
end
def to_s(depth = 0)
"nil"
end
end
# Self at the sol level
class SelfExpression < Expression
attr_reader :my_type
def initialize(type = nil)
@my_type = type
end
def to_slot_definition(compiler)
@my_type = compiler.receiver_type
SlotMachine::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_definition(_)
return SlotMachine::SlotDefinition.new(SlotMachine::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