adds a mom version of basic values

This commit is contained in:
Torsten Ruger
2018-03-13 12:30:51 +05:30
parent 45bfe118d1
commit b297650b78
20 changed files with 94 additions and 30 deletions

View File

@ -15,6 +15,9 @@ module Vool
def initialize(value)
@value = value
end
def to_mom(method)
return Mom::IntegerConstant.new(@value)
end
def ct_type
Parfait.object_space.get_class_by_name(:Integer).instance_type
end
@ -45,10 +48,12 @@ module Vool
end
class SelfStatement < Statement
attr_reader :clazz
def set_class(clazz)
@clazz = clazz
end
def to_mom(in_method)
Mom::SlotDefinition.new(:message , [:self])
end
def ct_type
@clazz.instance_type
end
@ -60,6 +65,9 @@ module Vool
def initialize(value)
@value = value
end
def to_mom(method)
return Mom::StringConstant.new(@value)
end
def ct_type
Parfait.object_space.get_class_by_name(:Word).instance_type
end

View File

@ -18,7 +18,7 @@ module Vool
end
def to_mom( method )
@value.slot_class.new([:message , :self , @name] , @value)
@value.slot_class.new([:message , :self , @name] , @value.to_mom(method))
end
end

View File

@ -12,7 +12,7 @@ module Vool
else
type = :frame
end
@value.slot_class.new(Mom::SlotDefinition.new(:message , [type , @name]) , @value)
@value.slot_class.new(Mom::SlotDefinition.new(:message , [type , @name]) , @value.to_mom(method))
end
end

View File

@ -11,11 +11,11 @@ module Vool
super
end
# To return form a method in mom instructions we need to do three things:
# To return form a method in mom instructions we need to do two things:
# - store the given return value, this is a SlotMove / SlotConstant
# - activate return sequence (reinstantiate old message and jump to return address)
def to_mom( method )
move = @return_value.slot_class.new( [:message , :return_value] , @return_value)
move = @return_value.slot_class.new( [:message , :return_value] , @return_value.to_mom(method))
Mom::Statements.new [move , Mom::ReturnSequence.new]
end

View File

@ -43,11 +43,11 @@ module Vool
def message_setup(in_method)
setup = [Mom::MessageSetup.new(in_method)]
receiver = @receiver.slot_class.new([:message , :next_message , :receiver] , @receiver)
receiver = @receiver.slot_class.new([:message , :next_message , :receiver] , @receiver.to_mom(in_method))
arg_target = [:message , :next_message , :arguments]
args = []
@arguments.each_with_index do |arg , index|
args << arg.slot_class.new( arg_target + [index] , arg)
args << arg.slot_class.new( arg_target + [index] , arg.to_mom(in_method))
end
setup << Mom::ArgumentTransfer.new( receiver , args )
end

View File

@ -9,8 +9,8 @@ module Vool
statements
end
def self.ruby_to_mom(source)
statements = elf.ruby_to_vool(source)
statements.to_mom
statements = self.ruby_to_vool(source)
statements.to_mom(nil)
end
end
end