jweinst1
5/5/2016 - 7:16 PM

virtual machine in go

virtual machine in go

package main
//go program to implement a portable VM

import (
    "fmt"
    "reflect"
)

type RegisterStack struct {
	registers map[int]interface{}
	
	//stores records of amount of registers and locations
	records map[string]int
}

//creates a new register set
func CreateRStk() RegisterStack {
	rs := RegisterStack{registers:make(map[int]interface{}), records:map[string]int{"last":-1, "next":0}}
	return rs
}
//initializes a new register space
func (rs RegisterStack) Addregister() {
	rs.registers[rs.records["next"]] = nil
	rs.records["last"] += 1
	rs.records["next"] += 1
}

//deletes the last register in the stack
func (rs RegisterStack) Removeregister() {
	delete(rs.registers, rs.records["last"])
	rs.records["last"] -= 1
	rs.records["next"] -= 1
}
//sets a value to a register
func (rs RegisterStack) SetValue(val interface{}, register int) {
	if register >= 0 && register < rs.records["next"] {
		rs.registers[register] = val
	}
}
//gets a value from a register
func (rs RegisterStack) GetValue(register int) interface{} {
	return rs.registers[register]
}

type VirtM struct {
	regstack RegisterStack
	//map for extra memory
	names map[string]interface{}
	//extra slice
	storage int[]
}

func main() {
  fmt.Println("Hello World");
}