Documentation ¶
Index ¶
- Constants
- Variables
- func AddOpenedModule(m *Module)
- func AddTopModule(m *Module)
- func Debug(format string, arg ...interface{})
- func ErrorName(ty int) string
- func GetOpName(op int) string
- func Init()
- func InstallLibCore()
- func InstallModules()
- func NodeDesc(node Node) string
- func StrToInt(s string) (int, error)
- func TestCompiledCodeFizzBuzzCompare()
- func TestCompiledCodeFizzBuzzMatch()
- func TestCompiledCodeHelloWorld()
- func Verbose(format string, arg ...interface{})
- type AnonFunExpNode
- type BlockNode
- type Bool
- type BoolExpNode
- type BoolPtnNode
- type CaseClauNode
- type CaseStatNode
- type ChunkNode
- type Closure
- type CommentNode
- type CompiledCode
- func (code *CompiledCode) AddLit(value Value)
- func (code *CompiledCode) Apply(ip *Interp, ctx *Context, env *Env) (Value, error)
- func (code *CompiledCode) Arity() int
- func (code *CompiledCode) Desc() string
- func (code *CompiledCode) Inspect() string
- func (code *CompiledCode) LiteralDesc(i int) string
- func (code *CompiledCode) Type() int
- type CondOpExpNode
- type ConsPtnNode
- type Context
- type DefStatNode
- type EltListNode
- type EltPtnListNode
- type Env
- type ExpNode
- type ForStatNode
- type FunCallExpNode
- type IfCondNode
- type IfStatNode
- type Int
- type IntExpNode
- type IntPtnNode
- type Interp
- type Iter
- type LetStatNode
- type List
- type ListExpNode
- type ListPtnNode
- type Loc
- type Module
- type Node
- type NoneExpNode
- type ObjectAttr
- type ObjectCode
- type ObjectFile
- type ObjectValue
- type Opcode
- type Option
- type ParamListNode
- type ParenExpNode
- type Pattern
- type Pos
- type PrimFun
- type Primitive
- type ProgCounter
- type Program
- type PtnNode
- type Range
- type RangeExpNode
- type RangeIter
- type Ref
- type RetStatNode
- type RuntimeError
- type ShortDefStatNode
- type SomeExpNode
- type Stack
- type StatNode
- type StrExpNode
- type StrPtnNode
- type String
- type Token
- type Tuple
- type TupleExpNode
- type TuplePtnNode
- type Unit
- type UnitExpNode
- type UnitPtnNode
- type Value
- type VarExpNode
- type VarPtnNode
Constants ¶
View Source
const ( GenericError = iota InvalidArityError KeyError )
View Source
const ( OpNop = iota OpLoadUnit OpLoadTrue OpLoadFalse OpLoadZero // load 0 OpLoadOne // load 1 OpLoadNegOne // load -1 OpLoadInt // int OpLoadNone OpLoadRef OpLoadLit // index of value in literal list OpLoadLocal // index OpLoadAttr // index of literal string OpLoadArg // index OpLoadModule OpStoreLocal // index of literal string OpStoreRef OpStoreAttr // index of literal string OpPop OpDup OpReturn OpReturnUnit OpLabel // label number OpJump // index OpBranchTrue // index OpBranchFalse // index OpBranchNext // label OpBegin OpEnd OpCall // length OpPanic // kind OpEq OpNe OpLt OpLe OpGt OpGe OpMatch OpAdd OpSub OpMul OpDiv OpMod OpSome OpList // length OpTuple // length OpClosedRange OpHalfOpenRange OpIter )
View Source
const ( OpPanicFatal = iota OpPanicMatch )
View Source
const ( ValueTypeUnit = iota ValueTypeBool ValueTypeInt ValueTypeString ValueTypeList ValueTypeTuple ValueTypeClos ValueTypeOption ValueTypeRange ValueTypeIter ValueTypePattern ValueTypeRef )
Variables ¶
View Source
var DebugMode = false
View Source
var ListNil = &List{nil, nil}
View Source
var ObjectValueTypeBool = "bool"
View Source
var ObjectValueTypeCode = "code"
View Source
var ObjectValueTypeFloat = "float"
View Source
var ObjectValueTypeInt = "int"
View Source
var ObjectValueTypeString = "string"
View Source
var ObjectValueTypeUnit = "unit"
View Source
var OpenedModules []*Module
View Source
var VerboseMode = false
View Source
var Version = "0.0.1"
Functions ¶
func AddOpenedModule ¶
func AddOpenedModule(m *Module)
func AddTopModule ¶
func AddTopModule(m *Module)
func InstallLibCore ¶
func InstallLibCore()
func InstallModules ¶
func InstallModules()
func TestCompiledCodeFizzBuzzCompare ¶
func TestCompiledCodeFizzBuzzCompare()
if arg1 == 3 then
show("Fizz")
else if arg1 == 5 then
show("Buzz")
else if arg1 == 15 then
show("FizzBuzz")
else
show(arg1)
end
func TestCompiledCodeFizzBuzzMatch ¶
func TestCompiledCodeFizzBuzzMatch()
Types ¶
type AnonFunExpNode ¶
type AnonFunExpNode struct { Open Loc Close Loc Params *ParamListNode In Loc Stats []StatNode Exp ExpNode }
func (*AnonFunExpNode) Loc ¶
func (exp *AnonFunExpNode) Loc() *Loc
func (*AnonFunExpNode) WriteTo ¶
func (exp *AnonFunExpNode) WriteTo(buf *bytes.Buffer)
type BoolExpNode ¶
type BoolExpNode struct { Value bool // contains filtered or unexported fields }
func (*BoolExpNode) Loc ¶
func (exp *BoolExpNode) Loc() *Loc
func (*BoolExpNode) WriteTo ¶
func (exp *BoolExpNode) WriteTo(buf *bytes.Buffer)
type BoolPtnNode ¶
type BoolPtnNode struct { Value bool // contains filtered or unexported fields }
func (*BoolPtnNode) Loc ¶
func (ptn *BoolPtnNode) Loc() *Loc
func (*BoolPtnNode) WriteTo ¶
func (ptn *BoolPtnNode) WriteTo(buf *bytes.Buffer)
type CaseClauNode ¶
func (*CaseClauNode) Loc ¶
func (clau *CaseClauNode) Loc() *Loc
func (*CaseClauNode) WriteTo ¶
func (clau *CaseClauNode) WriteTo(buf *bytes.Buffer)
type CaseStatNode ¶
type CaseStatNode struct { Case Loc Cond ExpNode Claus []CaseClauNode Else *Loc ElseAction *BlockNode }
func (*CaseStatNode) Loc ¶
func (stat *CaseStatNode) Loc() *Loc
func (*CaseStatNode) WriteTo ¶
func (stat *CaseStatNode) WriteTo(buf *bytes.Buffer)
type ChunkNode ¶
type ChunkNode struct { Block *BlockNode // contains filtered or unexported fields }
type Closure ¶
func ValueToClos ¶
type CommentNode ¶
type CompiledCode ¶
func Compile ¶
func Compile(path string, node Node) *CompiledCode
func NewCompiledCode ¶
func NewCompiledCode() *CompiledCode
func (*CompiledCode) AddLit ¶
func (code *CompiledCode) AddLit(value Value)
func (*CompiledCode) Arity ¶
func (code *CompiledCode) Arity() int
func (*CompiledCode) Desc ¶
func (code *CompiledCode) Desc() string
func (*CompiledCode) Inspect ¶
func (code *CompiledCode) Inspect() string
func (*CompiledCode) LiteralDesc ¶
func (code *CompiledCode) LiteralDesc(i int) string
func (*CompiledCode) Type ¶
func (code *CompiledCode) Type() int
type CondOpExpNode ¶
func (*CondOpExpNode) Loc ¶
func (exp *CondOpExpNode) Loc() *Loc
func (*CondOpExpNode) WriteTo ¶
func (exp *CondOpExpNode) WriteTo(buf *bytes.Buffer)
type ConsPtnNode ¶
func (*ConsPtnNode) Loc ¶
func (ptn *ConsPtnNode) Loc() *Loc
func (*ConsPtnNode) WriteTo ¶
func (ptn *ConsPtnNode) WriteTo(buf *bytes.Buffer)
type DefStatNode ¶
type DefStatNode struct { Def Loc Name Token Open Loc Params *ParamListNode Close Loc Block BlockNode End Loc }
func (*DefStatNode) Loc ¶
func (stat *DefStatNode) Loc() *Loc
func (*DefStatNode) WriteTo ¶
func (stat *DefStatNode) WriteTo(buf *bytes.Buffer)
type EltListNode ¶
func (*EltListNode) Loc ¶
func (exp *EltListNode) Loc() *Loc
func (*EltListNode) WriteTo ¶
func (elts *EltListNode) WriteTo(buf *bytes.Buffer)
type EltPtnListNode ¶
func (*EltPtnListNode) Loc ¶
func (elts *EltPtnListNode) Loc() *Loc
func (*EltPtnListNode) WriteTo ¶
func (elts *EltPtnListNode) WriteTo(buf *bytes.Buffer)
type ForStatNode ¶
func (*ForStatNode) Loc ¶
func (stat *ForStatNode) Loc() *Loc
func (*ForStatNode) WriteTo ¶
func (stat *ForStatNode) WriteTo(buf *bytes.Buffer)
type FunCallExpNode ¶
type FunCallExpNode struct { Callable Node Args EltListNode }
func (*FunCallExpNode) Loc ¶
func (exp *FunCallExpNode) Loc() *Loc
func (*FunCallExpNode) WriteTo ¶
func (exp *FunCallExpNode) WriteTo(buf *bytes.Buffer)
type IfCondNode ¶
func (*IfCondNode) Loc ¶
func (cond *IfCondNode) Loc() *Loc
func (*IfCondNode) WriteTo ¶
func (cond *IfCondNode) WriteTo(buf *bytes.Buffer)
type IfStatNode ¶
type IfStatNode struct { Cond []IfCondNode Else *Loc ElseAction *BlockNode End Loc }
func (*IfStatNode) Loc ¶
func (stat *IfStatNode) Loc() *Loc
func (*IfStatNode) WriteTo ¶
func (stat *IfStatNode) WriteTo(buf *bytes.Buffer)
type IntExpNode ¶
type IntExpNode struct {
Value Token
}
func (*IntExpNode) Loc ¶
func (exp *IntExpNode) Loc() *Loc
func (*IntExpNode) WriteTo ¶
func (exp *IntExpNode) WriteTo(buf *bytes.Buffer)
type IntPtnNode ¶
type IntPtnNode struct {
Value Token
}
func (*IntPtnNode) Loc ¶
func (ptn *IntPtnNode) Loc() *Loc
func (*IntPtnNode) WriteTo ¶
func (ptn *IntPtnNode) WriteTo(buf *bytes.Buffer)
type Iter ¶
func ValueToIter ¶
type LetStatNode ¶
func (*LetStatNode) Loc ¶
func (stat *LetStatNode) Loc() *Loc
func (*LetStatNode) WriteTo ¶
func (stat *LetStatNode) WriteTo(buf *bytes.Buffer)
type List ¶
func ValueToList ¶
type ListExpNode ¶
type ListExpNode struct {
Elts EltListNode
}
func (*ListExpNode) Loc ¶
func (exp *ListExpNode) Loc() *Loc
func (*ListExpNode) WriteTo ¶
func (exp *ListExpNode) WriteTo(buf *bytes.Buffer)
type ListPtnNode ¶
type ListPtnNode struct {
Elts EltPtnListNode
}
func (*ListPtnNode) Loc ¶
func (ptn *ListPtnNode) Loc() *Loc
func (*ListPtnNode) WriteTo ¶
func (ptn *ListPtnNode) WriteTo(buf *bytes.Buffer)
type Loc ¶
func NewLocAntlr ¶
type NoneExpNode ¶
type NoneExpNode struct {
// contains filtered or unexported fields
}
func (*NoneExpNode) Loc ¶
func (exp *NoneExpNode) Loc() *Loc
func (*NoneExpNode) WriteTo ¶
func (exp *NoneExpNode) WriteTo(buf *bytes.Buffer)
type ObjectAttr ¶
type ObjectAttr struct { Name string `json:"name"` Value *ObjectValue `json:"value"` }
func NewObjectAttr ¶
func NewObjectAttr(name string, value *ObjectValue) *ObjectAttr
type ObjectCode ¶
type ObjectCode struct { Id int `json:"id"` Syms []string `json:"symbols"` Lits []*ObjectValue `json:"literals"` Ops []int `json:"opcodes"` }
func NewObjectCode ¶
func NewObjectCode(id int, ops []Opcode) *ObjectCode
func (*ObjectCode) AddLit ¶
func (code *ObjectCode) AddLit(value *ObjectValue)
func (*ObjectCode) AddOp ¶
func (code *ObjectCode) AddOp(op int)
func (*ObjectCode) AddSym ¶
func (code *ObjectCode) AddSym(name string)
func (*ObjectCode) Decode ¶
func (objCode *ObjectCode) Decode(file *ObjectFile)
type ObjectFile ¶
type ObjectFile struct { Name string `json:"name"` Attrs []*ObjectAttr `json:"attrs"` Codes []*ObjectCode `json:"codes"` CodeVals map[int]*CompiledCode // contains filtered or unexported fields }
func NewObjectFile ¶
func NewObjectFile(name string) *ObjectFile
func UnmarshalObjectFile ¶
func UnmarshalObjectFile(data []byte) (*ObjectFile, error)
func (*ObjectFile) AddAttr ¶
func (file *ObjectFile) AddAttr(attr *ObjectAttr)
func (*ObjectFile) AddCode ¶
func (file *ObjectFile) AddCode(code *ObjectCode)
func (*ObjectFile) AddCompiledCode ¶
func (file *ObjectFile) AddCompiledCode(code *CompiledCode)
func (*ObjectFile) Decode ¶
func (file *ObjectFile) Decode() *Module
func (*ObjectFile) Marshal ¶
func (file *ObjectFile) Marshal() ([]byte, error)
type ObjectValue ¶
func NewObjectValue ¶
func NewObjectValue(ty string, value string) *ObjectValue
func NewObjectValueBool ¶
func NewObjectValueBool(value bool) *ObjectValue
func NewObjectValueCode ¶
func NewObjectValueCode(i int) *ObjectValue
func (*ObjectValue) Decode ¶
func (value *ObjectValue) Decode(file *ObjectFile) Value
type ParamListNode ¶
func (*ParamListNode) Loc ¶
func (params *ParamListNode) Loc() *Loc
func (*ParamListNode) NameStrs ¶
func (params *ParamListNode) NameStrs() []string
func (*ParamListNode) WriteTo ¶
func (params *ParamListNode) WriteTo(buf *bytes.Buffer)
type ParenExpNode ¶
func (*ParenExpNode) Loc ¶
func (exp *ParenExpNode) Loc() *Loc
func (*ParenExpNode) WriteTo ¶
func (exp *ParenExpNode) WriteTo(buf *bytes.Buffer)
type Primitive ¶
type Primitive struct { Func PrimFun // contains filtered or unexported fields }
type ProgCounter ¶
type ProgCounter struct { Count int Code *CompiledCode Labels map[int]int // contains filtered or unexported fields }
TODO: private
func NewProgCounter ¶
func NewProgCounter(code *CompiledCode) ProgCounter
func (*ProgCounter) AddLabel ¶
func (pc *ProgCounter) AddLabel(n int)
func (*ProgCounter) HasNext ¶
func (pc *ProgCounter) HasNext() bool
func (*ProgCounter) Jump ¶
func (pc *ProgCounter) Jump(n int)
func (*ProgCounter) Next ¶
func (pc *ProgCounter) Next() int
type Program ¶
type Program struct { Path string Code *CompiledCode }
type RangeExpNode ¶
func (*RangeExpNode) Loc ¶
func (exp *RangeExpNode) Loc() *Loc
func (*RangeExpNode) WriteTo ¶
func (exp *RangeExpNode) WriteTo(buf *bytes.Buffer)
type Ref ¶
type Ref struct { Path string // contains filtered or unexported fields }
func ValueToRef ¶
type RetStatNode ¶
func (*RetStatNode) Loc ¶
func (stat *RetStatNode) Loc() *Loc
func (*RetStatNode) WriteTo ¶
func (stat *RetStatNode) WriteTo(buf *bytes.Buffer)
type RuntimeError ¶
func NewInvalidArityError ¶
func NewInvalidArityError(ctx *Context, nargs int) *RuntimeError
func NewKeyError ¶
func NewKeyError(ctx *Context, name string) *RuntimeError
func NewRuntimeError ¶
func NewRuntimeError(ctx *Context, ty int, reason string) *RuntimeError
func ValidateArity ¶
func ValidateArity(ctx *Context, expected int, actual int) *RuntimeError
func (*RuntimeError) Error ¶
func (err *RuntimeError) Error() string
type ShortDefStatNode ¶
type ShortDefStatNode struct { Def Loc Name Token Open Loc Params *ParamListNode Close Loc Eq Loc Exp ExpNode }
func (*ShortDefStatNode) Loc ¶
func (stat *ShortDefStatNode) Loc() *Loc
func (*ShortDefStatNode) WriteTo ¶
func (stat *ShortDefStatNode) WriteTo(buf *bytes.Buffer)
type SomeExpNode ¶
func (*SomeExpNode) Loc ¶
func (exp *SomeExpNode) Loc() *Loc
func (*SomeExpNode) WriteTo ¶
func (exp *SomeExpNode) WriteTo(buf *bytes.Buffer)
type StrExpNode ¶
type StrExpNode struct {
Value Token
}
func (*StrExpNode) Loc ¶
func (exp *StrExpNode) Loc() *Loc
func (*StrExpNode) WriteTo ¶
func (exp *StrExpNode) WriteTo(buf *bytes.Buffer)
type StrPtnNode ¶
type StrPtnNode struct {
Value Token
}
func (*StrPtnNode) Loc ¶
func (ptn *StrPtnNode) Loc() *Loc
func (*StrPtnNode) WriteTo ¶
func (ptn *StrPtnNode) WriteTo(buf *bytes.Buffer)
type Token ¶
func NewTokenAntlr ¶
type TupleExpNode ¶
type TupleExpNode struct {
Elts EltListNode
}
func (*TupleExpNode) Loc ¶
func (exp *TupleExpNode) Loc() *Loc
func (*TupleExpNode) WriteTo ¶
func (exp *TupleExpNode) WriteTo(buf *bytes.Buffer)
type TuplePtnNode ¶
type TuplePtnNode struct {
Elts EltPtnListNode
}
func (*TuplePtnNode) Loc ¶
func (ptn *TuplePtnNode) Loc() *Loc
func (*TuplePtnNode) WriteTo ¶
func (ptn *TuplePtnNode) WriteTo(buf *bytes.Buffer)
type UnitExpNode ¶
func (*UnitExpNode) Loc ¶
func (exp *UnitExpNode) Loc() *Loc
func (*UnitExpNode) WriteTo ¶
func (exp *UnitExpNode) WriteTo(buf *bytes.Buffer)
type UnitPtnNode ¶
func (*UnitPtnNode) Loc ¶
func (ptn *UnitPtnNode) Loc() *Loc
func (*UnitPtnNode) WriteTo ¶
func (ptn *UnitPtnNode) WriteTo(buf *bytes.Buffer)
type Value ¶
func GetModuleAttr ¶
type VarExpNode ¶
type VarExpNode struct {
Name Token
}
func NewVarExpNode ¶
func NewVarExpNode(name Token) VarExpNode
func (*VarExpNode) Loc ¶
func (exp *VarExpNode) Loc() *Loc
func (*VarExpNode) WriteTo ¶
func (exp *VarExpNode) WriteTo(buf *bytes.Buffer)
type VarPtnNode ¶
type VarPtnNode struct {
Name Token
}
func (*VarPtnNode) Loc ¶
func (ptn *VarPtnNode) Loc() *Loc
func (*VarPtnNode) WriteTo ¶
func (ptn *VarPtnNode) WriteTo(buf *bytes.Buffer)
Source Files ¶
Click to show internal directories.
Click to hide internal directories.