ast

package
v0.5.0 Latest Latest
Warning

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

Go to latest
Published: May 14, 2021 License: MIT Imports: 5 Imported by: 2

Documentation

Index

Constants

View Source
const (
	SigExternalExit = iota + 1
	SigOutOfMemory
)
View Source
const GoStackframeEstimate = 8 * 1024

Variables

This section is empty.

Functions

func BoolOf added in v0.5.0

func BoolOf(v Val) bool

func CheckSize added in v0.5.0

func CheckSize(m map[Var]Val) (total int64)

func FreeVars added in v0.5.0

func FreeVars(e Expr) map[string]struct{}

func FuncParamsPrepend added in v0.2.0

func FuncParamsPrepend(p, ps Attrib) ([]string, error)

func HasSideEffects added in v0.5.0

func HasSideEffects(e Expr) bool

func UsedVars added in v0.5.0

func UsedVars(b Block) map[string]struct{}

Types

type And

type And struct {
	A Expr
	B Expr
}

func (And) Eval

func (a And) Eval(c *Context) Val

func (And) String

func (a And) String() string

type Arg

type Arg int

func (Arg) Eval

func (a Arg) Eval(c *Context) Val

func (Arg) String

func (a Arg) String() string

type Assn

type Assn struct {
	V Var
	E Expr
}

func (Assn) Eval

func (a Assn) Eval(c *Context) Val

func (Assn) String

func (a Assn) String() string

type Attrib

type Attrib interface{}

type Block added in v0.2.0

type Block []Expr

func (Block) Eval added in v0.2.0

func (b Block) Eval(c *Context) Val

func (Block) String added in v0.2.0

func (b Block) String() string

type Call

type Call struct {
	Fn   Expr
	Args CallArgs
}

func (Call) Eval

func (ca Call) Eval(c *Context) Val

func (Call) String

func (ca Call) String() string

type CallArgs added in v0.2.0

type CallArgs []Expr

CallArgs is not an Expr, since it can never appear on its own

func CallArgsPrepend added in v0.2.0

func CallArgsPrepend(e, a Attrib) (CallArgs, error)

func NewCallArgs added in v0.2.0

func NewCallArgs() (CallArgs, error)

type Concat

type Concat struct {
	A Expr
	B Expr
}

func (Concat) Eval

func (cc Concat) Eval(c *Context) Val

func (Concat) String

func (cc Concat) String() string

type Context

type Context struct {
	Args            []string
	VariableMap     map[Var]Val
	FunctionMap     map[string]func([]string) string
	UserFunctionMap map[string]FuncDecl
	MaxStackSize    int64
	// contains filtered or unexported fields
}

func NewContext

func NewContext(args []string, funcs map[string]func([]string) string, parseFn func([]byte) (Expr, error)) *Context

func (*Context) GetExitChannel added in v0.3.0

func (c *Context) GetExitChannel() chan int

func (*Context) SetMaxStackSize added in v0.3.2

func (c *Context) SetMaxStackSize(sz int64)

type Equals

type Equals struct {
	A Expr
	B Expr
}

func (Equals) Eval

func (e Equals) Eval(c *Context) Val

func (Equals) String

func (e Equals) String() string

type Expr

type Expr interface {
	Eval(*Context) Val
	String() string
}

func BlockPrepend added in v0.2.0

func BlockPrepend(e, b Attrib) (Expr, error)

func NewAnd

func NewAnd(a, b Attrib) (Expr, error)

func NewArg

func NewArg(i Attrib) (Expr, error)

func NewAssn

func NewAssn(v, e Attrib) (Expr, error)

func NewBlock added in v0.2.0

func NewBlock() (Expr, error)

func NewCall

func NewCall(f, as Attrib) (Expr, error)

func NewConcat

func NewConcat(a, b Attrib) (Expr, error)

func NewEquals

func NewEquals(a, b Attrib) (Expr, error)

func NewIfElse

func NewIfElse(c, t, e Attrib) (Expr, error)

func NewIndex

func NewIndex(s, i Attrib) (Expr, error)

func NewIndexInt

func NewIndexInt(s, i Attrib) (Expr, error)

func NewLambda added in v0.5.0

func NewLambda(ps, b Attrib) (Expr, error)

func NewNotEquals

func NewNotEquals(a, b Attrib) (Expr, error)

func NewOr

func NewOr(a, b Attrib) (Expr, error)

func NewProgram added in v0.2.0

func NewProgram(f, b Attrib) (Expr, error)

func NewVal

func NewVal(a Attrib) (Expr, error)

func NewVar

func NewVar(a Attrib) (Expr, error)

func NewWhile

func NewWhile(c, b Attrib) (Expr, error)

type FuncDecl added in v0.2.0

type FuncDecl struct {
	Params     []string
	Code       Block
	Identifier string
}

FuncDecl is not an Expr, since it can never appear on its own

func FuncDeclsAppend added in v0.2.0

func FuncDeclsAppend(f, fs Attrib) ([]FuncDecl, error)

func NewFuncDecl added in v0.2.0

func NewFuncDecl(i, p, b Attrib) (FuncDecl, error)

func (FuncDecl) Call added in v0.2.0

func (f FuncDecl) Call(c *Context, args []Val) Val

func (FuncDecl) String added in v0.2.0

func (f FuncDecl) String() string

type IfElse

type IfElse struct {
	Cond Expr
	Then Expr
	Else Expr
}

func (IfElse) Eval

func (e IfElse) Eval(c *Context) Val

func (IfElse) String

func (e IfElse) String() string

type Index

type Index struct {
	Source Expr
	I      Expr
}

func (Index) Eval

func (i Index) Eval(c *Context) Val

func (Index) String

func (i Index) String() string

type Lambda added in v0.5.0

type Lambda struct {
	Params []string
	Code   Block
}

func (Lambda) Call added in v0.5.0

func (l Lambda) Call(c *Context, args []Val) Val

func (Lambda) Eval added in v0.5.0

func (l Lambda) Eval(c *Context) Val

func (Lambda) String added in v0.5.0

func (l Lambda) String() string

type NotEquals

type NotEquals struct {
	A Expr
	B Expr
}

func (NotEquals) Eval

func (e NotEquals) Eval(c *Context) Val

func (NotEquals) String

func (e NotEquals) String() string

type Or

type Or struct {
	A Expr
	B Expr
}

func (Or) Eval

func (o Or) Eval(c *Context) Val

func (Or) String

func (o Or) String() string

type Program added in v0.2.0

type Program struct {
	Funcs []FuncDecl
	Code  Block
}

func EmptyProgram added in v0.4.0

func EmptyProgram() Program

Useful for building ASTs manually

func (Program) Eval added in v0.2.0

func (p Program) Eval(c *Context) Val

func (Program) String added in v0.2.0

func (p Program) String() string

type Val

type Val string

func (Val) Eval

func (v Val) Eval(c *Context) Val

func (Val) String

func (v Val) String() string

type Var

type Var string

func (Var) Eval

func (v Var) Eval(c *Context) Val

TODO: Make Vars and FuncDecls/Calls be linked: if you call a Var that isn't a function, interpret it as one Multiple possibilities: allow reusing same context, maybe instead of fun(a, b, c) args you just use $0, $1, $3 etc

func (Var) String

func (v Var) String() string

type While

type While struct {
	Cond Expr
	Body Expr
}

func (While) Eval

func (e While) Eval(c *Context) Val

func (While) String

func (e While) String() string

Jump to

Keyboard shortcuts

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