class Whitespace::VM

Attributes

cstack[R]
instructions[R]
memory[R]
pc[R]
vstack[R]

Public Class Methods

new() click to toggle source
# File lib/whitespace/vm.rb, line 10
def initialize
  @instructions = []
  reset
end

Public Instance Methods

load(instructions) click to toggle source
# File lib/whitespace/vm.rb, line 15
def load(instructions)
  @instructions = Array(instructions)
end
run() click to toggle source
# File lib/whitespace/vm.rb, line 19
def run
  reset

  loop do
    instruction = instructions.fetch pc
    pc.increment
    execute instruction
  end
end

Private Instance Methods

execute(instruction) click to toggle source
# File lib/whitespace/vm.rb, line 38
def execute(instruction)
  instruction.execute
rescue Halt
  raise StopIteration
end
reset() click to toggle source
# File lib/whitespace/vm.rb, line 31
def reset
  @vstack = Stack.new   # a value stack
  @cstack = Stack.new   # a call stack
  @memory = Memory.new  # heap memory
  @pc     = Counter.new # program counter
end