about summary refs log tree commit diff
path: root/pkg/lang/vm/value/data.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/lang/vm/value/data.go')
-rw-r--r--pkg/lang/vm/value/data.go20
1 files changed, 16 insertions, 4 deletions
diff --git a/pkg/lang/vm/value/data.go b/pkg/lang/vm/value/data.go
index 4e39bc8..c0e5e9a 100644
--- a/pkg/lang/vm/value/data.go
+++ b/pkg/lang/vm/value/data.go
@@ -115,10 +115,13 @@ func (a ArrayData) Push(m mem.Mem, v Value) error {
 type NullData struct{}
 
 type FunctionData struct {
-	pc  int
-	env mem.Ptr
+	pc     int
+	env    mem.Ptr
+	native NativeFunc
 }
 
+type NativeFunc func([]Value) (Value, error)
+
 func (f FunctionData) Pc() int {
 	return f.pc
 }
@@ -127,12 +130,21 @@ func (f FunctionData) Env() mem.Ptr {
 	return f.env
 }
 
+func (f FunctionData) Native() NativeFunc {
+	return f.native
+}
+
 func (f FunctionData) WithEnv(env mem.Ptr) FunctionData {
-	return FunctionData{pc: f.pc, env: env}
+	return FunctionData{pc: f.pc, env: env, native: f.native}
 }
 
 func (f FunctionData) String(_ mem.Mem) (string, error) {
-	return fmt.Sprintf("<fn %d>", f.pc), nil
+	if f.native != nil {
+		return "<fn native>", nil
+	} else {
+		return fmt.Sprintf("<fn %d>", f.pc), nil
+	}
+}
 }
 
 type ObjectData struct{} // TODO