51 lines
1.4 KiB
Go
51 lines
1.4 KiB
Go
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 {
|
|
Equal(other Object) bool
|
|
Less(other Object) bool
|
|
}
|
|
|
|
// 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
|