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}, "bool": {Name: "bool", Fn: Bool}, "int": {Name: "int", Fn: Int}, "str": {Name: "str", Fn: Str}, "typeof": {Name: "typeof", Fn: TypeOf}, "args": {Name: "args", Fn: Args}, "lower": {Name: "lower", Fn: Lower}, "upper": {Name: "upper", Fn: Upper}, "join": {Name: "join", Fn: Join}, "split": {Name: "split", Fn: Split}, "find": {Name: "find", Fn: Find}, "read": {Name: "read", Fn: Read}, "write": {Name: "write", Fn: Write}, } // 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...)} }