Files
monkey/internal/vm/frame.go
Chuck Smith fc6ceee02c
Some checks failed
Build / build (push) Failing after 5m21s
Publish Image / publish (push) Failing after 32s
Test / build (push) Failing after 5m8s
restructure project
2024-03-28 16:20:09 -04:00

47 lines
749 B
Go

package vm
import (
"monkey/internal/code"
"monkey/internal/object"
"unsafe"
)
var cache = NewFrameCache(32)
type Frame struct {
cl *object.Closure
ip int
basePointer int
}
func NewFrame(cl *object.Closure, basePointer int) *Frame {
key := uint(uintptr(unsafe.Pointer(cl))) + uint(basePointer)
if frame, ok := cache.Get(key); ok {
frame.Reset()
return frame
}
frame := &Frame{
cl: cl,
ip: -1,
basePointer: basePointer,
}
cache.Put(key, frame)
return frame
}
// NextOp ...
func (f *Frame) NextOp() code.Opcode {
return code.Opcode(f.Instructions()[f.ip+1])
}
func (f *Frame) Reset() {
f.ip = -1
}
func (f *Frame) Instructions() code.Instructions {
return f.cl.Fn.Instructions
}