From 691ae96d71dfca167efdb6fd9a9192bda9660ed0 Mon Sep 17 00:00:00 2001 From: Torsten Ruger Date: Wed, 4 Nov 2015 20:22:03 +0200 Subject: [PATCH] fix names of branch codes also store objects in register, avoid the whole object_id thing which just lead to unclarity about class --- lib/interpreter/interpreter.rb | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/interpreter/interpreter.rb b/lib/interpreter/interpreter.rb index e8a0c342..f56d4d13 100644 --- a/lib/interpreter/interpreter.rb +++ b/lib/interpreter/interpreter.rb @@ -18,8 +18,8 @@ module Interpreter @state = :stopped @stdout = "" @registers = {} - @flags = { :zero => false , :positive => false , - :negative=> false , :overflow => false } + @flags = { :zero => false , :plus => false , + :minus => false , :overflow => false } @clock = 0 (0...12).each do |r| set_register "r#{r}".to_sym , "r#{r}:unknown" @@ -55,11 +55,14 @@ module Interpreter def set_register reg , val old = get_register( reg ) # also ensures format - unless val.is_a? String + if val.is_a? Fixnum @flags[:zero] = (val == 0) - @flags[:positive] = (val > 0) - @flags[:negative] = (val < 0) + @flags[:plus] = (val > 0) + @flags[:minus] = (val < 0) #puts "Set_flags #{val} :#{@flags.inspect}" + else + @flags[:zero] = @flags[:plus] = true + @flags[:minus] = false end return if old === val reg = reg.symbol if reg.is_a? Register::RegisterValue @@ -78,9 +81,7 @@ module Interpreter end def object_for reg - id = get_register(reg) - object = Register.machine.objects[id] - object.nil? ? id : object + get_register(reg) end # Label is a noop. @@ -110,7 +111,7 @@ module Interpreter def execute_LoadConstant to = @instruction.register value = @instruction.constant - value = value.object_id unless value.is_a?(Fixnum) + #value = value.object_id unless value.is_a?(Fixnum) set_register( to , value ) true end @@ -118,7 +119,7 @@ module Interpreter def execute_GetSlot object = object_for( @instruction.array ) value = object.internal_object_get( @instruction.index ) - value = value.object_id unless value.is_a? Fixnum + #value = value.object_id unless value.is_a? Fixnum set_register( @instruction.register , value ) true end