40 lines
828 B
Go
40 lines
828 B
Go
package object
|
|
|
|
import (
|
|
"fmt"
|
|
"sort"
|
|
)
|
|
|
|
// Builtins ...
|
|
var Builtins = map[string]*Builtin{
|
|
"len": {Name: "len", Fn: Len},
|
|
"input": {Name: "input", Fn: Input},
|
|
"print": {Name: "print", Fn: Print},
|
|
"first": {Name: "first", Fn: First},
|
|
"last": {Name: "last", Fn: Last},
|
|
"rest": {Name: "rest", Fn: Rest},
|
|
"push": {Name: "push", Fn: Push},
|
|
"pop": {Name: "pop", Fn: Pop},
|
|
"exit": {Name: "exit", Fn: Exit},
|
|
"assert": {Name: "assert", Fn: Assert},
|
|
}
|
|
|
|
// BuiltinsIndex ...
|
|
var BuiltinsIndex []*Builtin
|
|
|
|
func init() {
|
|
var keys []string
|
|
for k := range Builtins {
|
|
keys = append(keys, k)
|
|
}
|
|
sort.Strings(keys)
|
|
|
|
for _, k := range keys {
|
|
BuiltinsIndex = append(BuiltinsIndex, Builtins[k])
|
|
}
|
|
}
|
|
|
|
func newError(format string, a ...interface{}) *Error {
|
|
return &Error{Message: fmt.Sprintf(format, a...)}
|
|
}
|