From e8bfb9a58cfc947cd5fcc92c703190acf8a877c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torsten=20R=C3=BCger?= Date: Wed, 11 Sep 2019 18:53:20 +0300 Subject: [PATCH] tests for word macros --- lib/mom/builtin/get_internal_byte.rb | 17 ++++++++++++- lib/mom/builtin/putstring.rb | 12 +++++++++ lib/mom/builtin/set_internal_byte.rb | 16 +++++++++++- lib/mom/builtin/set_internal_word.rb | 13 ++++++++++ test/rubyx/builtin/helper.rb | 3 ++- test/rubyx/builtin/test_object_exit.rb | 5 ---- test/rubyx/builtin/test_object_init.rb | 5 ---- test/rubyx/builtin/test_word_get.rb | 30 +++++++++++++++++++++++ test/rubyx/builtin/test_word_putstring.rb | 30 +++++++++++++++++++++++ test/rubyx/builtin/test_word_set.rb | 30 +++++++++++++++++++++++ 10 files changed, 148 insertions(+), 13 deletions(-) create mode 100644 test/rubyx/builtin/test_word_get.rb create mode 100644 test/rubyx/builtin/test_word_putstring.rb create mode 100644 test/rubyx/builtin/test_word_set.rb diff --git a/lib/mom/builtin/get_internal_byte.rb b/lib/mom/builtin/get_internal_byte.rb index 66951662..cbf1e791 100644 --- a/lib/mom/builtin/get_internal_byte.rb +++ b/lib/mom/builtin/get_internal_byte.rb @@ -6,7 +6,7 @@ module Mom integer_tmp = builder.allocate_int builder.build do object! << message[:receiver] - integer! << message[:arg1] #"at" + integer! << message[:arg1] #"at" integer.reduce_int object <= object[integer] integer_tmp[Parfait::Integer.integer_index] << object @@ -16,4 +16,19 @@ module Mom end end end + class GetInternalByte < ::Mom::Instruction + def to_risc(compiler) + builder = compiler.builder(compiler.source) + integer_tmp = builder.allocate_int + builder.build do + object! << message[:receiver] + integer! << message[:arg1] #"at" + integer.reduce_int + object <= object[integer] + integer_tmp[Parfait::Integer.integer_index] << object + message[:return_value] << integer_tmp + end + return compiler + end + end end diff --git a/lib/mom/builtin/putstring.rb b/lib/mom/builtin/putstring.rb index 4bfc7b81..7d4dba01 100644 --- a/lib/mom/builtin/putstring.rb +++ b/lib/mom/builtin/putstring.rb @@ -13,4 +13,16 @@ module Mom end end end + class Putstring < ::Mom::Instruction + def to_risc(compiler) + builder = compiler.builder(compiler.source) + builder.prepare_int_return # makes integer_tmp variable as return + builder.build do + word! << message[:receiver] + integer! << word[Parfait::Word.get_length_index] + end + Mom::Builtin.emit_syscall( builder , :putstring ) + compiler + end + end end diff --git a/lib/mom/builtin/set_internal_byte.rb b/lib/mom/builtin/set_internal_byte.rb index c606e86a..1872dc40 100644 --- a/lib/mom/builtin/set_internal_byte.rb +++ b/lib/mom/builtin/set_internal_byte.rb @@ -6,7 +6,7 @@ module Mom word! << message[:receiver] integer_reg! << message[:arg2] #VALUE message[:return_value] << integer_reg - integer! << message[:arg1] #"index" + integer! << message[:arg1] #"index" integer.reduce_int integer_reg.reduce_int word[integer] <= integer_reg @@ -15,4 +15,18 @@ module Mom end end end + class SetInternalByte < ::Mom::Instruction + def to_risc(compiler) + compiler.builder(compiler.source).build do + word! << message[:receiver] + integer_reg! << message[:arg2] #VALUE + message[:return_value] << integer_reg + integer! << message[:arg1] #"index" + integer.reduce_int + integer_reg.reduce_int + word[integer] <= integer_reg + end + return compiler + end + end end diff --git a/lib/mom/builtin/set_internal_word.rb b/lib/mom/builtin/set_internal_word.rb index 6cae8376..81f87c98 100644 --- a/lib/mom/builtin/set_internal_word.rb +++ b/lib/mom/builtin/set_internal_word.rb @@ -14,4 +14,17 @@ module Mom end end end + class SetInternalWord < ::Mom::Instruction + def to_risc(compiler) + compiler.builder(compiler.source).build do + object! << message[:receiver] + integer! << message[:arg1] # "index" + object_reg! << message[:arg2]#"value" + integer.reduce_int + object[integer] << object_reg + message[:return_value] << object_reg + end + return compiler + end + end end diff --git a/test/rubyx/builtin/helper.rb b/test/rubyx/builtin/helper.rb index 1a8a1e43..937e3d63 100644 --- a/test/rubyx/builtin/helper.rb +++ b/test/rubyx/builtin/helper.rb @@ -3,7 +3,8 @@ require_relative "../helper" module RubyX module BuiltinHelper def setup - @mom = RubyXCompiler.new(RubyX.default_test_options).ruby_to_mom(source) + whole ="class Space;def main(arg);return;end;end;" + source + @mom = RubyXCompiler.new(RubyX.default_test_options).ruby_to_mom(whole) @mom.method_compilers.first assert_equal Mom::MomCollection , @mom.class assert_equal Mom::MethodCompiler , compiler.class diff --git a/test/rubyx/builtin/test_object_exit.rb b/test/rubyx/builtin/test_object_exit.rb index af0bd5d1..07323e95 100644 --- a/test/rubyx/builtin/test_object_exit.rb +++ b/test/rubyx/builtin/test_object_exit.rb @@ -6,11 +6,6 @@ module RubyX include BuiltinHelper def source <