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");
}