From 7b9097a0b147d30935108f29c6fdae02b7c65d8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torsten=20R=C3=BCger?= Date: Tue, 24 Sep 2019 12:58:31 +0300 Subject: [PATCH] Fix word offset which had weirdly been 1 off (not weird that it was off, index bugs are common, but weird that the tests passed anyway) --- lib/arm/translator.rb | 4 ++-- lib/parfait/word.rb | 2 +- test/parfait/test_word2.rb | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/arm/translator.rb b/lib/arm/translator.rb index 791021bd..a4a6e82c 100644 --- a/lib/arm/translator.rb +++ b/lib/arm/translator.rb @@ -147,8 +147,8 @@ module Arm send( name , int_code ) end - def putstring( int_code ) - codes = ArmMachine.add( :r1 , :r1 , Parfait::Word.type_length*4 ) # adjust for object header + def putstring( int_code ) # adjust for object header (0 based, hence -1) + codes = ArmMachine.add( :r1 , :r1 , (Parfait::Word.type_length - 1)*4 ) codes.append ArmMachine.mov( :r0 , 1 ) # write to stdout == 1 syscall(int_code , codes ) end diff --git a/lib/parfait/word.rb b/lib/parfait/word.rb index 79355116..b8ce6ee6 100644 --- a/lib/parfait/word.rb +++ b/lib/parfait/word.rb @@ -139,7 +139,7 @@ module Parfait raise "index not integer #{at.class}" unless at.is_a?(::Integer) raise "index must be positive , not #{at}" if (index < 0) raise "index too large #{at} > #{self.length}" if (index >= self.length ) - return index + 8 # type_length * 4 + return index + Word.type_length * 4 end # compare the word to another diff --git a/test/parfait/test_word2.rb b/test/parfait/test_word2.rb index 67b47ee4..fc8e2e23 100644 --- a/test/parfait/test_word2.rb +++ b/test/parfait/test_word2.rb @@ -98,10 +98,10 @@ module Parfait assert_raises {one.set_char(3 , "s".ord)} end def test_max - str = "123456789012345678901234" + str = "12345678901234567890" one = Parfait.new_word(str) assert_equal str , one.to_string - assert_equal 24 , one.length + assert_equal 20 , one.length end end