diff options
Diffstat (limited to 'pkg/lang/vm/value/data.go')
| -rw-r--r-- | pkg/lang/vm/value/data.go | 20 |
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 |
