object

package
v0.0.12 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 18, 2022 License: MIT Imports: 15 Imported by: 0

Documentation

Overview

Package object defines all available object types in Tamarin.

For external users of Tamarin, most often an object.Object interface will be type asserted to a specific object type, such as *object.Float.

For example:

switch obj := obj.(type) {
case *object.String:
	// do something with obj.Value
case *object.Float:
	// do something with obj.Value
}

The Type() method of each object may also be used to get a string name of the object type, such as "STRING" or "FLOAT".

Index

Constants

View Source
const (
	INT           = "int"
	FLOAT         = "float"
	BOOL          = "bool"
	NIL           = "nil"
	ERROR         = "error"
	FUNCTION      = "function"
	STRING        = "string"
	BUILTIN       = "builtin"
	LIST          = "list"
	MAP           = "map"
	FILE          = "file"
	REGEXP        = "regexp"
	SET           = "set"
	MODULE        = "module"
	RESULT        = "result"
	HTTP_RESPONSE = "http_response"
	DB_CONNECTION = "db_connection"
	TIME          = "time"
	PROXY         = "proxy"
	RETURN_VALUE  = "return_value"
	BREAK_VALUE   = "break_value"
)

Type constants

Variables

View Source
var (
	Nil   = &NilType{}
	True  = &Bool{Value: true}
	False = &Bool{Value: false}
)

Functions

func AsList added in v0.0.10

func AsList(obj Object) (*List, *Error)

func AsMap added in v0.0.11

func AsMap(obj Object) (*Map, *Error)

func AsSet added in v0.0.9

func AsSet(obj Object) (*Set, *Error)

func CompareTypes added in v0.0.9

func CompareTypes(a, b Object) int

func Equals added in v0.0.12

func Equals(a, b Object) bool

func IsError

func IsError(obj Object) bool

func IsTruthy added in v0.0.12

func IsTruthy(obj Object) bool

func ToGoType

func ToGoType(obj Object) interface{}

func WithCallFunc added in v0.0.12

func WithCallFunc(ctx context.Context, fn CallFunc) context.Context

WithCallFunc adds an CallFunc to the context, which can be used by objects to call a Tamarin function at runtime.

Types

type Bool added in v0.0.11

type Bool struct {
	// Value holds the boolean value we wrap.
	Value bool
}

Bool wraps bool and implements Object and Hashable interface.

func NewBool added in v0.0.12

func NewBool(value bool) *Bool

func Not added in v0.0.12

func Not(b *Bool) *Bool

func (*Bool) Compare added in v0.0.11

func (b *Bool) Compare(other Object) (int, error)

func (*Bool) Equals added in v0.0.12

func (b *Bool) Equals(other Object) Object

func (*Bool) GetAttr added in v0.0.12

func (b *Bool) GetAttr(name string) (Object, bool)

func (*Bool) HashKey added in v0.0.11

func (b *Bool) HashKey() Key

func (*Bool) Inspect added in v0.0.11

func (b *Bool) Inspect() string

func (*Bool) String added in v0.0.11

func (b *Bool) String() string

func (*Bool) ToInterface added in v0.0.11

func (b *Bool) ToInterface() interface{}

func (*Bool) Type added in v0.0.11

func (b *Bool) Type() Type

type BooleanConverter added in v0.0.9

type BooleanConverter struct{}

BooleanConverter converts between bool and Bool.

func (*BooleanConverter) From added in v0.0.9

func (c *BooleanConverter) From(obj interface{}) (Object, error)

func (*BooleanConverter) To added in v0.0.9

func (c *BooleanConverter) To(obj Object) (interface{}, error)

func (*BooleanConverter) Type added in v0.0.9

func (c *BooleanConverter) Type() reflect.Type

type BreakValue added in v0.0.6

type BreakValue struct{}

BreakValue is an implementation detail used to handle break statements

func (*BreakValue) Equals added in v0.0.12

func (rv *BreakValue) Equals(other Object) Object

func (*BreakValue) GetAttr added in v0.0.12

func (rv *BreakValue) GetAttr(name string) (Object, bool)

func (*BreakValue) Inspect added in v0.0.6

func (rv *BreakValue) Inspect() string

func (*BreakValue) ToInterface added in v0.0.6

func (rv *BreakValue) ToInterface() interface{}

func (*BreakValue) Type added in v0.0.6

func (rv *BreakValue) Type() Type

type Builtin

type Builtin struct {
	// The function that this object wraps.
	Fn BuiltinFunction

	// The name of the function.
	Name string

	// The module the function originates from (optional)
	Module *Module

	// The name of the module this function origiantes from.
	// This is only used for overriding builtins.
	ModuleName string
}

Builtin wraps func and implements Object interface.

func NewNoopBuiltin added in v0.0.6

func NewNoopBuiltin(Name string, Module *Module) *Builtin

NewNoopBuiltin creates a builtin function that has no effect.

func (*Builtin) Equals added in v0.0.12

func (b *Builtin) Equals(other Object) Object

func (*Builtin) GetAttr added in v0.0.12

func (b *Builtin) GetAttr(name string) (Object, bool)

func (*Builtin) Inspect

func (b *Builtin) Inspect() string

Inspect returns a string-representation of the given object.

func (*Builtin) Key added in v0.0.6

func (b *Builtin) Key() string

Returns a string that uniquely identifies this builtin function.

func (*Builtin) String added in v0.0.6

func (b *Builtin) String() string

func (*Builtin) ToInterface

func (b *Builtin) ToInterface() interface{}

ToInterface converts this object to a go-interface, which will allow it to be used naturally in our sprintf/printf primitives.

It might also be helpful for embedded users.

func (*Builtin) Type

func (b *Builtin) Type() Type

Type returns the type of this object.

type BuiltinFunction

type BuiltinFunction func(ctx context.Context, args ...Object) Object

BuiltinFunction holds the type of a built-in function.

type CallFunc added in v0.0.12

type CallFunc func(ctx context.Context, scope interface{}, fn Object, args []Object) Object

CallFunc defines a type signature for a function that can call a Tamarin function. In part, this type definition is useful to avoid a circular dependency with the evaluator package.

func GetCallFunc added in v0.0.12

func GetCallFunc(ctx context.Context) (CallFunc, bool)

GetCallFunc returns the CallFunc from the context, if it exists.

type Comparable added in v0.0.9

type Comparable interface {
	Compare(other Object) (int, error)
}

Comparable is an interface used to compare two objects.

-1 if this < other
 0 if this == other
 1 if this > other

type ContextConverter added in v0.0.12

type ContextConverter struct{}

ContextConverter converts between context.Context and Context.

func (*ContextConverter) From added in v0.0.12

func (c *ContextConverter) From(obj interface{}) (Object, error)

func (*ContextConverter) To added in v0.0.12

func (c *ContextConverter) To(obj Object) (interface{}, error)

func (*ContextConverter) Type added in v0.0.12

func (c *ContextConverter) Type() reflect.Type

type DatabaseConnection

type DatabaseConnection struct {
	Conn interface{}
}

func (*DatabaseConnection) Equals added in v0.0.12

func (c *DatabaseConnection) Equals(other Object) Object

func (*DatabaseConnection) GetAttr added in v0.0.12

func (c *DatabaseConnection) GetAttr(name string) (Object, bool)

func (*DatabaseConnection) Inspect

func (c *DatabaseConnection) Inspect() string

func (*DatabaseConnection) ToInterface

func (c *DatabaseConnection) ToInterface() interface{}

func (*DatabaseConnection) Type

func (c *DatabaseConnection) Type() Type

type DefaultTypeRegistry added in v0.0.12

type DefaultTypeRegistry struct {
	// contains filtered or unexported fields
}

DefaultTypeRegistry implements the GoTypeRegistry interface.

func NewTypeRegistry added in v0.0.12

func NewTypeRegistry(opts ...TypeRegistryOpts) (*DefaultTypeRegistry, error)

NewTypeRegistry creates a GoTypeRegistry that can be used to proxy method calls to various struct types. The provided type conversion functions are used to translate between Go and Tamarin types.

func (*DefaultTypeRegistry) GetAttr added in v0.0.12

func (p *DefaultTypeRegistry) GetAttr(obj interface{}, name string) (GoAttr, bool)

func (*DefaultTypeRegistry) GetType added in v0.0.12

func (p *DefaultTypeRegistry) GetType(obj interface{}) (*GoType, bool)

func (*DefaultTypeRegistry) Register added in v0.0.12

func (p *DefaultTypeRegistry) Register(obj interface{}) (*GoType, error)

type Error

type Error struct {
	// Message contains the error-message we're wrapping
	Message string
}

Error wraps string and implements Object interface.

func AsFloat added in v0.0.4

func AsFloat(obj Object) (float64, *Error)

func AsInteger added in v0.0.4

func AsInteger(obj Object) (int64, *Error)

func AsString added in v0.0.4

func AsString(obj Object) (result string, err *Error)

func AsTime added in v0.0.4

func AsTime(obj Object) (result time.Time, err *Error)

func NewArgsError added in v0.0.12

func NewArgsError(fn string, takes, given int) *Error

func NewArgsRangeError added in v0.0.12

func NewArgsRangeError(fn string, takesMin, takesMax, given int) *Error

func NewError

func NewError(format string, a ...interface{}) *Error

func Sort added in v0.0.12

func Sort(items []Object) *Error

Sort a list in place. If the list contains a non-comparable object, an error is returned.

func (*Error) Compare added in v0.0.9

func (e *Error) Compare(other Object) (int, error)

func (*Error) Equals added in v0.0.12

func (e *Error) Equals(other Object) Object

func (*Error) GetAttr added in v0.0.12

func (e *Error) GetAttr(name string) (Object, bool)

func (*Error) Inspect

func (e *Error) Inspect() string

func (*Error) ToInterface

func (e *Error) ToInterface() interface{}

func (*Error) Type

func (e *Error) Type() Type

type ErrorConverter added in v0.0.9

type ErrorConverter struct{}

func (*ErrorConverter) From added in v0.0.9

func (c *ErrorConverter) From(obj interface{}) (Object, error)

func (*ErrorConverter) To added in v0.0.9

func (c *ErrorConverter) To(obj Object) (interface{}, error)

func (*ErrorConverter) Type added in v0.0.9

func (c *ErrorConverter) Type() reflect.Type

type Float

type Float struct {
	// Value holds the float64 wrapped by this object.
	Value float64
}

Float wraps float64 and implements Object and Hashable interfaces.

func NewFloat added in v0.0.4

func NewFloat(value float64) *Float

func (*Float) Compare added in v0.0.9

func (f *Float) Compare(other Object) (int, error)

func (*Float) Equals added in v0.0.12

func (f *Float) Equals(other Object) Object

func (*Float) GetAttr added in v0.0.12

func (f *Float) GetAttr(name string) (Object, bool)

func (*Float) HashKey

func (f *Float) HashKey() Key

func (*Float) Inspect

func (f *Float) Inspect() string

func (*Float) String

func (f *Float) String() string

func (*Float) ToInterface

func (f *Float) ToInterface() interface{}

func (*Float) Type

func (f *Float) Type() Type

type Float32Converter added in v0.0.9

type Float32Converter struct{}

Float32Converter converts between float32 and Float.

func (*Float32Converter) From added in v0.0.9

func (c *Float32Converter) From(obj interface{}) (Object, error)

func (*Float32Converter) To added in v0.0.9

func (c *Float32Converter) To(obj Object) (interface{}, error)

func (*Float32Converter) Type added in v0.0.9

func (c *Float32Converter) Type() reflect.Type

type Float64Converter added in v0.0.9

type Float64Converter struct{}

Float64Converter converts between float64 and Float.

func (*Float64Converter) From added in v0.0.9

func (c *Float64Converter) From(obj interface{}) (Object, error)

func (*Float64Converter) To added in v0.0.9

func (c *Float64Converter) To(obj Object) (interface{}, error)

func (*Float64Converter) Type added in v0.0.9

func (c *Float64Converter) Type() reflect.Type

type Function

type Function struct {
	Parameters []*ast.Identifier
	Body       *ast.BlockStatement
	Defaults   map[string]ast.Expression
	Scope      interface{} // avoids circular package dependency; is a scope.Scope
}

Function wraps ast.Identifier array and ast.BlockStatement and implements Object interface.

func (*Function) Equals added in v0.0.12

func (f *Function) Equals(other Object) Object

func (*Function) GetAttr added in v0.0.12

func (f *Function) GetAttr(name string) (Object, bool)

func (*Function) Inspect

func (f *Function) Inspect() string

func (*Function) ToInterface

func (f *Function) ToInterface() interface{}

func (*Function) Type

func (f *Function) Type() Type

type GoAttr added in v0.0.12

type GoAttr interface {

	// Name of the attribute.
	Name() string

	// Type indicates whether the attribute is a method or a field.
	AttrType() GoAttrType
}

GoAttr is an interface to represent an attribute on a Go type. This could be either a field or a method.

type GoAttrType added in v0.0.12

type GoAttrType string

GoAttrType is used to indicate whether a GoAttr is a field or a method.

const (
	// GoAttrTypeMethod indicates that the GoAttr is a method.
	GoAttrTypeMethod GoAttrType = "method"

	// GoAttrTypeField indicates that the GoAttr is a field.
	GoAttrTypeField GoAttrType = "field"
)

type GoField added in v0.0.12

type GoField struct {
	// contains filtered or unexported fields
}

GoField represents a single field on a Go type that can be read or written.

func (*GoField) AttrType added in v0.0.12

func (f *GoField) AttrType() GoAttrType

func (*GoField) Converter added in v0.0.12

func (f *GoField) Converter() TypeConverter

func (*GoField) Name added in v0.0.12

func (f *GoField) Name() string

func (*GoField) Tag added in v0.0.12

func (f *GoField) Tag() reflect.StructTag

func (*GoField) Type added in v0.0.12

func (f *GoField) Type() reflect.Type

type GoMethod added in v0.0.12

type GoMethod struct {
	// contains filtered or unexported fields
}

GoMethod represents a single method on a Go type that can be proxied.

func (*GoMethod) AttrType added in v0.0.12

func (m *GoMethod) AttrType() GoAttrType

func (*GoMethod) Name added in v0.0.12

func (m *GoMethod) Name() string

type GoType added in v0.0.12

type GoType struct {
	// contains filtered or unexported fields
}

GoType represents a single Go type whose methods and fields can be proxied.

func (*GoType) AttrByName added in v0.0.12

func (gt *GoType) AttrByName(name string) (GoAttr, bool)

func (*GoType) Attrs added in v0.0.12

func (gt *GoType) Attrs() []GoAttr

func (*GoType) FieldByName added in v0.0.12

func (gt *GoType) FieldByName(name string) (*GoField, bool)

func (*GoType) Fields added in v0.0.12

func (gt *GoType) Fields() []*GoField

func (*GoType) MethodByName added in v0.0.12

func (gt *GoType) MethodByName(name string) (*GoMethod, bool)

func (*GoType) Methods added in v0.0.12

func (gt *GoType) Methods() []*GoMethod

func (*GoType) Name added in v0.0.12

func (gt *GoType) Name() string

func (*GoType) StructType added in v0.0.12

func (gt *GoType) StructType() reflect.Type

func (*GoType) Type added in v0.0.12

func (gt *GoType) Type() reflect.Type

type GoTypeRegistry added in v0.0.12

type GoTypeRegistry interface {

	// Register determines type and method information for the provided
	// object and saves that information for use in later method call proxying.
	Register(obj interface{}) (*GoType, error)

	// GetType returns the GoType for the given object and a boolean that
	// indicates whether the type was found. Only types that were previously
	// registered will be found.
	GetType(obj interface{}) (*GoType, bool)

	// GetAttr returns the GoAttr for the given object and name.
	GetAttr(obj interface{}, name string) (GoAttr, bool)
}

GoTypeRegistry is an interface that defines a way to register Go types and call methods on instances of those types.

type Hashable

type Hashable interface {

	// HashKey returns a hash key for the given object.
	HashKey() Key
}

Hashable types can be hashed and consequently used in a set.

type HttpResponse

type HttpResponse struct {
	Response *http.Response
}

func (*HttpResponse) Equals added in v0.0.12

func (r *HttpResponse) Equals(other Object) Object

func (*HttpResponse) GetAttr added in v0.0.12

func (r *HttpResponse) GetAttr(name string) (Object, bool)

func (*HttpResponse) Inspect

func (r *HttpResponse) Inspect() string

func (*HttpResponse) JSON

func (r *HttpResponse) JSON() (target interface{}, err error)

func (*HttpResponse) Text

func (r *HttpResponse) Text() (string, error)

func (*HttpResponse) ToInterface

func (r *HttpResponse) ToInterface() interface{}

func (*HttpResponse) Type

func (r *HttpResponse) Type() Type

type Int added in v0.0.11

type Int struct {
	// Value holds the int64 wrapped by this object.
	Value int64
}

Int wraps int64 and implements Object and Hashable interfaces.

func NewInt added in v0.0.11

func NewInt(value int64) *Int

func (*Int) Compare added in v0.0.11

func (i *Int) Compare(other Object) (int, error)

func (*Int) Equals added in v0.0.12

func (i *Int) Equals(other Object) Object

func (*Int) GetAttr added in v0.0.12

func (i *Int) GetAttr(name string) (Object, bool)

func (*Int) HashKey added in v0.0.11

func (i *Int) HashKey() Key

func (*Int) Inspect added in v0.0.11

func (i *Int) Inspect() string

func (*Int) String added in v0.0.11

func (i *Int) String() string

func (*Int) ToInterface added in v0.0.11

func (i *Int) ToInterface() interface{}

func (*Int) Type added in v0.0.11

func (i *Int) Type() Type

type Int64Converter added in v0.0.9

type Int64Converter struct{}

Int64Converter converts between int64 and Integer.

func (*Int64Converter) From added in v0.0.9

func (c *Int64Converter) From(obj interface{}) (Object, error)

func (*Int64Converter) To added in v0.0.9

func (c *Int64Converter) To(obj Object) (interface{}, error)

func (*Int64Converter) Type added in v0.0.9

func (c *Int64Converter) Type() reflect.Type

type IntConverter added in v0.0.9

type IntConverter struct{}

IntConverter converts between int and Integer.

func (*IntConverter) From added in v0.0.9

func (c *IntConverter) From(obj interface{}) (Object, error)

func (*IntConverter) To added in v0.0.9

func (c *IntConverter) To(obj Object) (interface{}, error)

func (*IntConverter) Type added in v0.0.9

func (c *IntConverter) Type() reflect.Type

type Key added in v0.0.9

type Key struct {
	// Type of the object being referenced.
	Type Type
	// FltValue is used as the key for floats.
	FltValue float64
	// IntValue is used as the key for integers.
	IntValue int64
	// StrValue is used as the key for strings.
	StrValue string
}

Key is used to identify unique values in a set.

type List added in v0.0.10

type List struct {
	// Items holds the list of objects
	Items []Object
}

List of objects

func NewList added in v0.0.10

func NewList(items []Object) *List

func NewStringList added in v0.0.10

func NewStringList(s []string) *List

func (*List) Append added in v0.0.12

func (ls *List) Append(obj Object)

Append adds an item at the end of the list.

func (*List) Clear added in v0.0.12

func (ls *List) Clear()

Clear removes all the items from the list.

func (*List) Compare added in v0.0.10

func (ls *List) Compare(other Object) (int, error)

func (*List) Copy added in v0.0.12

func (ls *List) Copy() *List

Copy returns a shallow copy of the list.

func (*List) Count added in v0.0.12

func (ls *List) Count(obj Object) int64

Count returns the number of items with the specified value.

func (*List) Each added in v0.0.12

func (ls *List) Each(ctx context.Context, fn Object) Object

func (*List) Equals added in v0.0.12

func (ls *List) Equals(other Object) Object

func (*List) Extend added in v0.0.12

func (ls *List) Extend(other *List)

Extend adds the items of a list to the end of the current list.

func (*List) Filter added in v0.0.12

func (ls *List) Filter(ctx context.Context, fn Object) Object

func (*List) GetAttr added in v0.0.12

func (ls *List) GetAttr(name string) (Object, bool)

func (*List) Index added in v0.0.12

func (ls *List) Index(obj Object) int64

Index returns the index of the first item with the specified value.

func (*List) Insert added in v0.0.12

func (ls *List) Insert(index int64, obj Object)

Insert adds an item at the specified position.

func (*List) Inspect added in v0.0.10

func (ls *List) Inspect() string

func (*List) Keys added in v0.0.12

func (ls *List) Keys() Object

func (*List) Map added in v0.0.12

func (ls *List) Map(ctx context.Context, fn Object) Object

func (*List) Pop added in v0.0.12

func (ls *List) Pop(index int64) Object

Pop removes the item at the specified position.

func (*List) Remove added in v0.0.12

func (ls *List) Remove(obj Object)

Remove removes the first item with the specified value.

func (*List) Reverse added in v0.0.12

func (ls *List) Reverse()

Reverse reverses the order of the list.

func (*List) Reversed added in v0.0.10

func (ls *List) Reversed() *List

func (*List) String added in v0.0.10

func (ls *List) String() string

func (*List) ToInterface added in v0.0.10

func (ls *List) ToInterface() interface{}

func (*List) Type added in v0.0.10

func (ls *List) Type() Type

type Map added in v0.0.11

type Map struct {
	Items map[string]Object
}

func NewMap added in v0.0.11

func NewMap(m map[string]interface{}) *Map

func (*Map) Clear added in v0.0.12

func (m *Map) Clear()

func (*Map) Contains added in v0.0.12

func (m *Map) Contains(key string) Object

func (*Map) Copy added in v0.0.12

func (m *Map) Copy() *Map

func (*Map) Delete added in v0.0.11

func (m *Map) Delete(key string) Object

func (*Map) Equals added in v0.0.12

func (m *Map) Equals(other Object) Object

func (*Map) Get added in v0.0.11

func (m *Map) Get(key string) Object

func (*Map) GetAttr added in v0.0.12

func (m *Map) GetAttr(name string) (Object, bool)

func (*Map) GetWithObject added in v0.0.11

func (m *Map) GetWithObject(key *String) Object

func (*Map) Inspect added in v0.0.11

func (m *Map) Inspect() string

func (*Map) Keys added in v0.0.11

func (m *Map) Keys() *List

func (*Map) ListItems added in v0.0.12

func (m *Map) ListItems() *List

func (*Map) Pop added in v0.0.12

func (m *Map) Pop(key string, def Object) Object

func (*Map) Set added in v0.0.11

func (m *Map) Set(key string, value Object)

func (*Map) SetDefault added in v0.0.12

func (m *Map) SetDefault(key string, value Object) Object

func (*Map) Size added in v0.0.11

func (m *Map) Size() int

func (*Map) SortedKeys added in v0.0.12

func (m *Map) SortedKeys() []string

func (*Map) ToInterface added in v0.0.11

func (m *Map) ToInterface() interface{}

func (*Map) Type added in v0.0.11

func (m *Map) Type() Type

func (*Map) Update added in v0.0.12

func (m *Map) Update(other *Map)

func (*Map) Values added in v0.0.11

func (m *Map) Values() *List

type MapStringIfaceConverter added in v0.0.9

type MapStringIfaceConverter struct{}

MapStringIfaceConverter converts between map[string]interface{} and Hash.

func (*MapStringIfaceConverter) From added in v0.0.9

func (c *MapStringIfaceConverter) From(obj interface{}) (Object, error)

func (*MapStringIfaceConverter) To added in v0.0.9

func (c *MapStringIfaceConverter) To(obj Object) (interface{}, error)

func (*MapStringIfaceConverter) Type added in v0.0.9

type Module

type Module struct {
	Name  string
	Scope Scope
}

func (*Module) Compare added in v0.0.9

func (m *Module) Compare(other Object) (int, error)

func (*Module) Equals added in v0.0.12

func (m *Module) Equals(other Object) Object

func (*Module) GetAttr added in v0.0.12

func (m *Module) GetAttr(name string) (Object, bool)

func (*Module) Inspect

func (m *Module) Inspect() string

func (*Module) String

func (m *Module) String() string

func (*Module) ToInterface

func (m *Module) ToInterface() interface{}

func (*Module) Type

func (m *Module) Type() Type

type NilType added in v0.0.11

type NilType struct{}

func (*NilType) Compare added in v0.0.11

func (n *NilType) Compare(other Object) (int, error)

func (*NilType) Equals added in v0.0.12

func (n *NilType) Equals(other Object) Object

func (*NilType) GetAttr added in v0.0.12

func (n *NilType) GetAttr(name string) (Object, bool)

func (*NilType) Inspect added in v0.0.11

func (n *NilType) Inspect() string

func (*NilType) ToInterface added in v0.0.11

func (n *NilType) ToInterface() interface{}

func (*NilType) Type added in v0.0.11

func (n *NilType) Type() Type

type Object

type Object interface {

	// Type of this object.
	Type() Type

	// Inspect returns a string-representation of the given object.
	Inspect() string

	// ToInterface converts the given object to a "native" golang value,
	// which is required to ensure that we can use the object in our
	// `sprintf` or `printf` primitives.
	ToInterface() interface{}

	// Returns True if the given object is equal to this object.
	Equals(other Object) Object

	// GetAttr returns the attribute with the given name from this object.
	GetAttr(name string) (Object, bool)
}

Object is the interface that all object types in Tamarin must implement.

func FromGoType

func FromGoType(obj interface{}) Object

type Proxy added in v0.0.9

type Proxy struct {
	// contains filtered or unexported fields
}

Proxy is a Tamarin type that proxies method calls to a wrapped Go struct. Only the public methods of the Go type are proxied.

func NewProxy added in v0.0.9

func NewProxy(reg GoTypeRegistry, obj interface{}) (*Proxy, error)

NewProxy returns a new Tamarin proxy object that wraps the given Go object. The Go type is registered with the type registry, which has no effect if the type is already registered. This operation may fail if the Go type has attributes whose types cannot be converted to Tamarin types.

func (*Proxy) Equals added in v0.0.12

func (p *Proxy) Equals(other Object) Object

func (*Proxy) GetAttr added in v0.0.12

func (p *Proxy) GetAttr(name string) (Object, bool)

func (*Proxy) Inspect added in v0.0.9

func (p *Proxy) Inspect() string

func (*Proxy) String added in v0.0.9

func (p *Proxy) String() string

func (*Proxy) ToInterface added in v0.0.9

func (p *Proxy) ToInterface() interface{}

func (*Proxy) Type added in v0.0.9

func (p *Proxy) Type() Type

type Regexp

type Regexp struct {
	// Value holds the string value this object wraps.
	Value string

	// Flags holds the flags for the object
	Flags string
}

Regexp wraps regular-expressions and implements the Object interface.

func (*Regexp) Compare added in v0.0.9

func (r *Regexp) Compare(other Object) (int, error)

func (*Regexp) Equals added in v0.0.12

func (r *Regexp) Equals(other Object) Object

func (*Regexp) GetAttr added in v0.0.12

func (r *Regexp) GetAttr(name string) (Object, bool)

func (*Regexp) Inspect

func (r *Regexp) Inspect() string

func (*Regexp) ToInterface

func (r *Regexp) ToInterface() interface{}

func (*Regexp) Type

func (r *Regexp) Type() Type

type Result

type Result struct {
	Ok  Object
	Err Object
}

Result contains one of: an "ok" value or an "err" value

func NewErrorResult

func NewErrorResult(format string, a ...interface{}) *Result

func NewOkResult added in v0.0.4

func NewOkResult(value Object) *Result

func (*Result) Equals added in v0.0.12

func (rv *Result) Equals(other Object) Object

func (*Result) Expect added in v0.0.12

func (rv *Result) Expect(other Object) Object

func (*Result) GetAttr added in v0.0.12

func (rv *Result) GetAttr(name string) (Object, bool)

func (*Result) Inspect

func (rv *Result) Inspect() string

func (*Result) IsErr added in v0.0.7

func (rv *Result) IsErr() bool

func (*Result) IsOk

func (rv *Result) IsOk() bool

func (*Result) String

func (rv *Result) String() string

func (*Result) ToInterface

func (rv *Result) ToInterface() interface{}

func (*Result) Type

func (rv *Result) Type() Type

func (*Result) Unwrap added in v0.0.12

func (rv *Result) Unwrap() Object

func (*Result) UnwrapOr added in v0.0.12

func (rv *Result) UnwrapOr(other Object) Object

type ReturnValue

type ReturnValue struct {
	// Value is the object that is to be returned
	Value Object
}

ReturnValue wraps Object and implements Object interface.

func (*ReturnValue) Equals added in v0.0.12

func (rv *ReturnValue) Equals(other Object) Object

func (*ReturnValue) GetAttr added in v0.0.12

func (rv *ReturnValue) GetAttr(name string) (Object, bool)

func (*ReturnValue) Inspect

func (rv *ReturnValue) Inspect() string

func (*ReturnValue) ToInterface

func (rv *ReturnValue) ToInterface() interface{}

func (*ReturnValue) Type

func (rv *ReturnValue) Type() Type

type Scope added in v0.0.12

type Scope interface {

	// Name of the scope, to aid debugging
	Name() string

	// IsReadOnly returns true iff the scope contains a variable with the
	// given name and that variable is marked as read-only.
	IsReadOnly(name string) bool

	// Get returns the object associated with the given name, and a boolean
	// indicating whether the object was found.
	Get(name string) (Object, bool)

	// Declare adds a new variable to the scope. If the variable already
	// exists, an error is returned.
	Declare(name string, obj Object, readOnly bool) error

	// Update the variable with the given name. If the variable does not
	// exist, an error is returned.
	Update(name string, obj Object) error

	// Contents returns a map of all variables in the scope.
	Contents() map[string]Object
}

Scope is an interface that can be used to implement variable storage for a specific context.

type Set

type Set struct {
	Items map[Key]Object
}

func NewSetWithSize added in v0.0.9

func NewSetWithSize(size int) *Set

func (*Set) Add added in v0.0.9

func (s *Set) Add(items ...Object) error

func (*Set) Contains added in v0.0.9

func (s *Set) Contains(item Object) bool

func (*Set) Difference added in v0.0.9

func (s *Set) Difference(other *Set) *Set

Difference returns a new set that is the difference of the two sets.

func (*Set) Equals added in v0.0.12

func (s *Set) Equals(other Object) Object

func (*Set) GetAttr added in v0.0.12

func (s *Set) GetAttr(name string) (Object, bool)

func (*Set) Inspect

func (s *Set) Inspect() string

func (*Set) Intersection added in v0.0.9

func (s *Set) Intersection(other *Set) *Set

Intersection returns a new set that is the intersection of the two sets.

func (*Set) List added in v0.0.10

func (s *Set) List() *List

func (*Set) Remove added in v0.0.9

func (s *Set) Remove(items ...Object) error

func (*Set) Size added in v0.0.9

func (s *Set) Size() int

func (*Set) SortedItems added in v0.0.12

func (s *Set) SortedItems() []Object

func (*Set) ToInterface

func (s *Set) ToInterface() interface{}

func (*Set) Type

func (s *Set) Type() Type

func (*Set) Union added in v0.0.9

func (s *Set) Union(other *Set) *Set

Union returns a new set that is the union of the two sets.

type String

type String struct {
	// Value holds the string wrapped by this object.
	Value string
}

String wraps string and implements Object and Hashable interfaces.

func NewString added in v0.0.4

func NewString(s string) *String

func (*String) Compare added in v0.0.9

func (s *String) Compare(other Object) (int, error)

func (*String) Equals added in v0.0.12

func (s *String) Equals(other Object) Object

func (*String) GetAttr added in v0.0.12

func (s *String) GetAttr(name string) (Object, bool)

func (*String) HashKey

func (s *String) HashKey() Key

func (*String) Inspect

func (s *String) Inspect() string

func (*String) Reversed added in v0.0.9

func (s *String) Reversed() *String

func (*String) String

func (s *String) String() string

func (*String) ToInterface

func (s *String) ToInterface() interface{}

func (*String) Type

func (s *String) Type() Type

type StringConverter added in v0.0.9

type StringConverter struct{}

StringConverter converts between string and String.

func (*StringConverter) From added in v0.0.9

func (c *StringConverter) From(obj interface{}) (Object, error)

func (*StringConverter) To added in v0.0.9

func (c *StringConverter) To(obj Object) (interface{}, error)

func (*StringConverter) Type added in v0.0.9

func (c *StringConverter) Type() reflect.Type

type StructConverter added in v0.0.9

type StructConverter struct {
	Prototype interface{}
	AsPointer bool
}

StructConverter converts between a struct and a Hash via JSON marshaling.

func (*StructConverter) From added in v0.0.9

func (c *StructConverter) From(obj interface{}) (Object, error)

func (*StructConverter) To added in v0.0.9

func (c *StructConverter) To(obj Object) (interface{}, error)

func (*StructConverter) Type added in v0.0.9

func (c *StructConverter) Type() reflect.Type

type Time added in v0.0.4

type Time struct {
	Value time.Time
}

func NewTime added in v0.0.9

func NewTime(t time.Time) *Time

func (*Time) Compare added in v0.0.9

func (t *Time) Compare(other Object) (int, error)

func (*Time) Equals added in v0.0.12

func (t *Time) Equals(other Object) Object

func (*Time) GetAttr added in v0.0.12

func (t *Time) GetAttr(name string) (Object, bool)

func (*Time) Inspect added in v0.0.4

func (t *Time) Inspect() string

func (*Time) String added in v0.0.4

func (t *Time) String() string

func (*Time) ToInterface added in v0.0.4

func (t *Time) ToInterface() interface{}

func (*Time) Type added in v0.0.4

func (t *Time) Type() Type

type TimeConverter added in v0.0.9

type TimeConverter struct{}

TimeConverter converts between time.Time and Time.

func (*TimeConverter) From added in v0.0.9

func (c *TimeConverter) From(obj interface{}) (Object, error)

func (*TimeConverter) To added in v0.0.9

func (c *TimeConverter) To(obj Object) (interface{}, error)

func (*TimeConverter) Type added in v0.0.9

func (c *TimeConverter) Type() reflect.Type

type Type

type Type string

Type defines the type of an object.

type TypeConverter added in v0.0.9

type TypeConverter interface {

	// To converts a Tamarin object to a Go object.
	To(Object) (interface{}, error)

	// From converts a Go object to a Tamarin object.
	From(interface{}) (Object, error)

	// Type that this TypeConverter is responsible for.
	Type() reflect.Type
}

TypeConverter is an interface used to convert between Go and Tamarin objects for a single Go type. There may be a way to use generics here...

type TypeRegistryOpts added in v0.0.12

type TypeRegistryOpts struct {
	// Converters is a list of TypeConverters that will be used to convert
	// input and output types for method calls.
	Converters []TypeConverter

	// NoDefaults indicates that the default TypeConverters should not be
	// automatically used by the registry. If this is set, the caller should
	// provide their own TypeConverters.
	NoDefaults bool
}

TypeRegistryOpts contains options used to create a GoTypeRegistry.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL