fix word indexes on arm
which affected offsets in the ruby side too the hidden dead word needed accounting for
This commit is contained in:
parent
a8453c126d
commit
aabde4b9a6
@ -139,7 +139,7 @@ module Parfait
|
||||
index = self.length + at if at < 0
|
||||
raise "index must be positive , not #{at}" if (index <= 0)
|
||||
raise "index too large #{at} > #{self.length}" if (index > self.length )
|
||||
return index + Word.get_length_index * 4
|
||||
return index + Word.get_length_index * 4 + 4
|
||||
end
|
||||
|
||||
# compare the word to another
|
||||
|
@ -1,11 +1,11 @@
|
||||
class Word < Object
|
||||
|
||||
int correct_index(int index)
|
||||
return index + 8
|
||||
int _internal_index(int index)
|
||||
return index + 12
|
||||
end
|
||||
|
||||
int char_at(int index)
|
||||
index = correct_index(index)
|
||||
int get_char_at(int index)
|
||||
index = _internal_index(index)
|
||||
return get_internal_byte(index)
|
||||
end
|
||||
|
||||
@ -15,7 +15,7 @@ class Word < Object
|
||||
end
|
||||
|
||||
int set_char_at( int index , int val)
|
||||
index = correct_index(index)
|
||||
index = _internal_index(index)
|
||||
return set_internal_byte(index , val)
|
||||
end
|
||||
|
||||
|
@ -52,7 +52,6 @@ module RuntimeTests
|
||||
|
||||
def check_remote ret
|
||||
return unless box = connected
|
||||
return unless ret.is_a?(Numeric)
|
||||
file = write_object_file
|
||||
r_file = file.sub("./" , "salama/")
|
||||
box.file_upload file , r_file
|
||||
@ -64,7 +63,7 @@ module RuntimeTests
|
||||
end
|
||||
assert_equal @stdout , ret.stdout.join , "remote std was #{ret.stdout}" if @stdout
|
||||
assert_equal "" , ret.stderr.join , "remote had error"
|
||||
if ret
|
||||
if ret and ret.is_a?(Numeric)
|
||||
should = @interpreter.get_register(:r0).return_value
|
||||
should &= 0xFF # don't knwo why exit codes are restricted but there you are
|
||||
assert_equal should , ret.exit_status.to_i , "remote exit failed for #{@string_input}"
|
||||
@ -72,7 +71,7 @@ module RuntimeTests
|
||||
end
|
||||
|
||||
def write_object_file
|
||||
file_name = caller(3).first.split("in ").last.chop.sub("`","")
|
||||
file_name = caller(4).first.split("in ").last.chop.sub("`","")
|
||||
return if file_name.include?("run")
|
||||
file_name = "./tmp/" + file_name + ".o"
|
||||
Register.machine.translate_arm
|
||||
|
@ -14,7 +14,7 @@ HERE
|
||||
def test_space
|
||||
@main = <<HERE
|
||||
Word w = " "
|
||||
return w.char_at(1)
|
||||
return w.get_char_at(1)
|
||||
HERE
|
||||
assert_equal 32 , " ".codepoints[0] # just checking
|
||||
check_return 32
|
||||
@ -24,7 +24,7 @@ HERE
|
||||
@main = <<HERE
|
||||
Word w = " "
|
||||
w.push_char(48)
|
||||
return w.char_at(1)
|
||||
return w.get_char_at(1)
|
||||
HERE
|
||||
check_return 32
|
||||
end
|
||||
@ -33,7 +33,7 @@ HERE
|
||||
@main = <<HERE
|
||||
Word w = " "
|
||||
w.push_char(48)
|
||||
return w.char_at(2)
|
||||
return w.get_char_at(2)
|
||||
HERE
|
||||
check_return 48
|
||||
end
|
||||
@ -50,7 +50,7 @@ HERE
|
||||
def test_get1
|
||||
@main = <<HERE
|
||||
Word w = "12345"
|
||||
return w.char_at(1)
|
||||
return w.get_char_at(1)
|
||||
HERE
|
||||
check_return 49
|
||||
end
|
||||
@ -58,7 +58,7 @@ HERE
|
||||
def test_get2
|
||||
@main = <<HERE
|
||||
Word w = "12345"
|
||||
return w.char_at(2)
|
||||
return w.get_char_at(2)
|
||||
HERE
|
||||
check_return 50
|
||||
end
|
||||
@ -67,7 +67,7 @@ HERE
|
||||
@main = <<HERE
|
||||
Word w = "12345"
|
||||
w.set_char_at(2 , 51)
|
||||
return w.char_at(2)
|
||||
return w.get_char_at(2)
|
||||
HERE
|
||||
check_return 51
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user