package object // Type represents the type of an object type ObjectType string const ( INTEGER_OBJ = "int" BOOLEAN_OBJ = "bool" NULL_OBJ = "null" RETURN_VALUE_OBJ = "return" ERROR_OBJ = "error" FUNCTION_OBJ = "fn" STRING_OBJ = "str" BUILTIN_OBJ = "builtin" ARRAY_OBJ = "array" HASH_OBJ = "hash" COMPILED_FUNCTION_OBJ = "COMPILED_FUNCTION" CLOSURE_OBJ = "closure" ) // Comparable is the interface for comparing two Object and their underlying // values. It is the responsibility of the caller (left) to check for types. // Returns `true` iif the types and values are identical, `false` otherwise. type Comparable interface { Compare(other Object) int } // Immutable is the interface for all immutable objects which must implement // the Clone() method used by binding names to values. type Immutable interface { Clone() Object } // Object represents a value and implementations are expected to implement // `Type()` and `Inspect()` functions type Object interface { Type() ObjectType String() string Inspect() string } // Hashable is the interface for all hashable objects which must implement // the HashKey() method which returns a HashKey result. type Hashable interface { HashKey() HashKey } // BuiltinFunction represents the builtin function type type BuiltinFunction func(args ...Object) Object