Torsten Rüger
f87526f86f
Class, Method and Lambda (was block) are expressions. Just making things clearer, especially for the blocks (ahem, lambdas) is matters. wip
115 lines
2.5 KiB
Ruby
115 lines
2.5 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 SuperExpression < Statement
|
|
def to_s(depth = 0)
|
|
"super"
|
|
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
|
|
end
|
|
end
|