ssa

package
v1.2.8-sp5 Latest Latest
Warning

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

Go to latest
Published: Nov 24, 2023 License: AGPL-3.0 Imports: 8 Imported by: 0

Documentation

Index

Constants

View Source
const (
	OpUnknown Opcode = "unknown"

	OpFunction     = "Function"
	OpBasicBlock   = "BasicBlock"
	OpParameter    = "Parameter"
	OpPhi          = "Phi"
	OpConstInst    = "ConstInst"
	OpUndefined    = "Undefined"
	OpBinOp        = "BinOp"
	OpUnOp         = "UnOp"
	OpCall         = "Call"
	OpSideEffect   = "SideEffect"
	OpReturn       = "Return"
	OpMake         = "Make"
	OpField        = "Field"
	OpUpdate       = "Update"
	OpNext         = "Next"
	OpAssert       = "Assert"
	OpTypeCast     = "TypeCast"
	OpTypeValue    = "TypeValue"
	OpErrorHandler = "ErrorHandler"
	OpPanic        = "Panic"
	OpRecover      = "Recover"
	OpJump         = "Jump"
	OpIf           = "If"
	OpLoop         = "Loop"
	OpSwitch       = "Switch"
)
View Source
const (
	// loop
	LoopHeader = "loop.header"
	LoopBody   = "loop.body"
	LoopExit   = "loop.exit"
	LoopLatch  = "loop.latch"

	// if
	IfDone  = "if.done"
	IfTrue  = "if.true"
	IfFalse = "if.false"
	IfElif  = "if.elif"

	// try-catch
	TryStart   = "error.try"
	TryCatch   = "error.catch"
	TryFinally = "error.final"
	TryDone    = ""

	// switch
	SwitchDone    = "switch.done"
	SwitchDefault = "switch.default"
	SwitchHandler = "switch.handler"
)
View Source
const (
	MAXTYPELEVEL = 15
)
View Source
const MAXTypeCompareDepth = 10

Variables

View Source
var (
	ConstMap      = make(map[any]*Const)
	ConstMapMutex = &sync.RWMutex{}
)
View Source
var BasicTypes = []*BasicType{
	Number:        {Number, "number", make(map[string]*FunctionType, 0)},
	String:        {String, "string", make(map[string]*FunctionType, 0)},
	Bytes:         {Bytes, "bytes", make(map[string]*FunctionType, 0)},
	Boolean:       {Boolean, "boolean", make(map[string]*FunctionType, 0)},
	UndefinedType: {UndefinedType, "undefined", make(map[string]*FunctionType, 0)},
	Null:          {Null, "null", make(map[string]*FunctionType, 0)},
	Any:           {Any, "any", make(map[string]*FunctionType, 0)},
	ErrorType:     {ErrorType, "error", make(map[string]*FunctionType, 0)},
}
View Source
var BinaryOpcodeName = map[BinaryOpcode]string{
	OpLogicAnd: `LogicAnd`,
	OpLogicOr:  `LogicOr`,

	OpAnd:    `and`,
	OpAndNot: `and-not`,
	OpOr:     `or`,
	OpXor:    `xor`,
	OpShl:    `shl`,
	OpShr:    `shr`,
	OpAdd:    `add`,
	OpSub:    `sub`,
	OpMod:    `mod`,
	OpMul:    `mul`,
	OpDiv:    `div`,
	OpGt:     `gt`,
	OpLt:     `lt`,
	OpLtEq:   `ltEq`,
	OpGtEq:   `gtEq`,
	OpNotEq:  `neq`,
	OpEq:     `eq`,
	OpIn:     `in`,
	OpSend:   `send`,
}
View Source
var UnaryOpcodeName = map[UnaryOpcode]string{
	OpNone:       ``,
	OpNot:        `not`,
	OpPlus:       `plus`,
	OpNeg:        `neg`,
	OpChan:       `chan`,
	OpBitwiseNot: `bitwise-not`,
}

Functions

func BindingNotFound added in v1.2.8

func BindingNotFound(v string) string

func ContAssignExtern added in v1.2.8

func ContAssignExtern(name string) string

func DeleteInst added in v1.2.8

func DeleteInst(i Instruction)

func ExternFieldError added in v1.2.8

func ExternFieldError(instance, name, key, want string) string

func GetAllKey added in v1.2.9

func GetAllKey(t Type) []string

func GetIdByBlockSymbolTable added in v1.2.8

func GetIdByBlockSymbolTable(id string, symbolEnter *blockSymbolTable) string

func GetMethodsName added in v1.2.9

func GetMethodsName(t Type) []string

func GetTypeStr

func GetTypeStr(n Value) string

func InsertValueReplaceOriginal added in v1.2.9

func InsertValueReplaceOriginal(original Value, insert Value)

func IsControlInstruction added in v1.2.9

func IsControlInstruction(i Instruction) bool

func IsObjectType added in v1.2.9

func IsObjectType(t Type) bool

func NewInstruction added in v1.2.8

func NewInstruction() anInstruction

func NewValue added in v1.2.8

func NewValue() anValue

func NoCheckMustInFirst added in v1.2.8

func NoCheckMustInFirst() string

func ReplaceAllValue added in v1.2.9

func ReplaceAllValue(v Value, to Value)

func ReplaceValue

func ReplaceValue(v Value, to Value, skip func(Instruction) bool)

func ReplaceValueInSymbolTable added in v1.2.9

func ReplaceValueInSymbolTable(v, to Value)

func RunOnCoverOr added in v1.2.8

func RunOnCoverOr[T, U Instruction](insts []U, cover func(Instruction) (T, bool), f func(T), or func(U))

func TryGetSimilarityKey added in v1.2.8

func TryGetSimilarityKey(table []string, name string) string

func TypeCompare added in v1.2.9

func TypeCompare(t1, t2 Type) bool

func TypeCompareEx added in v1.2.9

func TypeCompareEx(t1, t2 Type, depth int) bool

Types

type AliasType added in v1.2.8

type AliasType struct {
	Name string
	// contains filtered or unexported fields
}

====================== alias type

func NewAliasType added in v1.2.8

func NewAliasType(name string, elem Type) *AliasType

func (*AliasType) AddMethod added in v1.2.9

func (b *AliasType) AddMethod(id string, f *FunctionType)

func (*AliasType) GetMethod added in v1.2.8

func (a *AliasType) GetMethod() map[string]*FunctionType

func (*AliasType) GetTypeKind added in v1.2.8

func (a *AliasType) GetTypeKind() TypeKind

func (*AliasType) RawString added in v1.2.8

func (a *AliasType) RawString() string

func (*AliasType) SetMethod added in v1.2.8

func (a *AliasType) SetMethod(m map[string]*FunctionType)

func (*AliasType) String added in v1.2.8

func (a *AliasType) String() string

type Assert added in v1.2.8

type Assert struct {
	Cond     Value
	Msg      string
	MsgValue Value
	// contains filtered or unexported fields
}

----------- assert

func NewAssert added in v1.2.8

func NewAssert(cond, msgValue Value, msg string) *Assert

func (*Assert) AddLeftPositions added in v1.2.8

func (a *Assert) AddLeftPositions(pos *Position)

func (*Assert) AddLeftVariables added in v1.2.8

func (a *Assert) AddLeftVariables(name string)

func (*Assert) GetBlock added in v1.2.8

func (a *Assert) GetBlock() *BasicBlock

func (*Assert) GetFunc added in v1.2.8

func (a *Assert) GetFunc() *Function

func (*Assert) GetLeftItem added in v1.2.8

func (a *Assert) GetLeftItem() LeftInstruction

func (*Assert) GetLeftPosition added in v1.2.8

func (a *Assert) GetLeftPosition() *Position

func (*Assert) GetLeftPositions added in v1.2.8

func (a *Assert) GetLeftPositions() []*Position

left-instruction: left-position

func (*Assert) GetLeftVariables added in v1.2.8

func (a *Assert) GetLeftVariables() []string

left-instruction: variable

func (*Assert) GetOpcode added in v1.2.8

func (i *Assert) GetOpcode() Opcode

func (*Assert) GetOperand added in v1.2.8

func (a *Assert) GetOperand(i int) Value

func (*Assert) GetOperandNum added in v1.2.8

func (a *Assert) GetOperandNum() int

func (*Assert) GetOperands added in v1.2.8

func (a *Assert) GetOperands() Values

func (*Assert) GetPosition added in v1.2.8

func (c *Assert) GetPosition() *Position

source code position

func (*Assert) GetSymbolTable added in v1.2.8

func (a *Assert) GetSymbolTable() *blockSymbolTable

symbol-table

func (*Assert) GetUsers added in v1.2.8

func (r *Assert) GetUsers() Users

func (*Assert) GetValues added in v1.2.8

func (a *Assert) GetValues() Values

func (*Assert) GetVariable added in v1.2.8

func (a *Assert) GetVariable() string

func (*Assert) HasLeftVariable added in v1.2.8

func (a *Assert) HasLeftVariable() bool

has left-instruction

func (*Assert) HasUsers added in v1.2.8

func (r *Assert) HasUsers() bool

func (*Assert) HasValues added in v1.2.8

func (a *Assert) HasValues() bool

----------- Assert

func (*Assert) IsExtern added in v1.2.8

func (c *Assert) IsExtern() bool

func (*Assert) LineDisasm added in v1.2.8

func (a *Assert) LineDisasm() string

func (*Assert) NewError added in v1.2.8

func (c *Assert) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*Assert) ReplaceValue added in v1.2.8

func (a *Assert) ReplaceValue(v, to Value)

func (*Assert) SetBlock added in v1.2.8

func (a *Assert) SetBlock(block *BasicBlock)

func (*Assert) SetExtern added in v1.2.8

func (c *Assert) SetExtern(b bool)

func (*Assert) SetFunc added in v1.2.8

func (a *Assert) SetFunc(f *Function)

ssa function and block

func (*Assert) SetPosition added in v1.2.8

func (c *Assert) SetPosition(pos *Position)

func (*Assert) SetSymbolTable added in v1.2.8

func (a *Assert) SetSymbolTable(symbol *blockSymbolTable)

func (*Assert) SetVariable added in v1.2.8

func (a *Assert) SetVariable(v string)

variable

func (*Assert) String added in v1.2.8

func (a *Assert) String() string

type BasicBlock

type BasicBlock struct {
	Index int
	// BasicBlock graph
	Preds, Succs []*BasicBlock

	/*
		if Condition == true: this block reach
	*/
	Condition Value

	// instruction list
	Insts []Instruction
	Phis  []*Phi

	// error catch
	Handler *ErrorHandler

	Skip bool // for phi build, avoid recursive
	// contains filtered or unexported fields
}

implement Value

func (*BasicBlock) AddLeftPositions added in v1.2.8

func (a *BasicBlock) AddLeftPositions(pos *Position)

func (*BasicBlock) AddLeftVariables added in v1.2.8

func (a *BasicBlock) AddLeftVariables(name string)

func (*BasicBlock) AddSucc

func (b *BasicBlock) AddSucc(succ *BasicBlock)

func (*BasicBlock) AddUser

func (n *BasicBlock) AddUser(u User)

for Value

func (*BasicBlock) EmitInst added in v1.2.8

func (b *BasicBlock) EmitInst(i Instruction)

func (*BasicBlock) GetBlock added in v1.2.8

func (a *BasicBlock) GetBlock() *BasicBlock

func (*BasicBlock) GetBlockById added in v1.2.8

func (b *BasicBlock) GetBlockById(name string) *BasicBlock

func (*BasicBlock) GetFunc added in v1.2.8

func (a *BasicBlock) GetFunc() *Function

func (*BasicBlock) GetLeftItem added in v1.2.8

func (a *BasicBlock) GetLeftItem() LeftInstruction

func (*BasicBlock) GetLeftPosition added in v1.2.8

func (a *BasicBlock) GetLeftPosition() *Position

func (*BasicBlock) GetLeftPositions added in v1.2.8

func (a *BasicBlock) GetLeftPositions() []*Position

left-instruction: left-position

func (*BasicBlock) GetLeftVariables added in v1.2.8

func (a *BasicBlock) GetLeftVariables() []string

left-instruction: variable

func (*BasicBlock) GetOpcode added in v1.2.8

func (i *BasicBlock) GetOpcode() Opcode

func (*BasicBlock) GetOperand added in v1.2.8

func (a *BasicBlock) GetOperand(i int) Value

func (*BasicBlock) GetOperandNum added in v1.2.8

func (a *BasicBlock) GetOperandNum() int

func (*BasicBlock) GetOperands added in v1.2.8

func (a *BasicBlock) GetOperands() Values

func (*BasicBlock) GetPosition added in v1.2.8

func (c *BasicBlock) GetPosition() *Position

source code position

func (*BasicBlock) GetSymbolTable added in v1.2.8

func (a *BasicBlock) GetSymbolTable() *blockSymbolTable

symbol-table

func (*BasicBlock) GetType

func (b *BasicBlock) GetType() Type

func (*BasicBlock) GetUsers

func (n *BasicBlock) GetUsers() Users

func (*BasicBlock) GetValues

func (b *BasicBlock) GetValues() Values

func (*BasicBlock) GetVariable added in v1.2.8

func (a *BasicBlock) GetVariable() string

func (*BasicBlock) HasLeftVariable added in v1.2.8

func (a *BasicBlock) HasLeftVariable() bool

has left-instruction

func (*BasicBlock) HasUsers added in v1.2.8

func (n *BasicBlock) HasUsers() bool

has/get user and value

func (*BasicBlock) HasValues added in v1.2.8

func (b *BasicBlock) HasValues() bool

----------- BasicBlock

func (*BasicBlock) IsBlock added in v1.2.8

func (b *BasicBlock) IsBlock(name string) bool

func (*BasicBlock) IsExtern added in v1.2.8

func (c *BasicBlock) IsExtern() bool

func (*BasicBlock) LastInst

func (b *BasicBlock) LastInst() Instruction

func (*BasicBlock) LineDisasm added in v1.2.8

func (b *BasicBlock) LineDisasm() string

func (*BasicBlock) NewError added in v1.2.8

func (c *BasicBlock) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*BasicBlock) Reachable added in v1.2.8

func (b *BasicBlock) Reachable() int

func (*BasicBlock) RemoveUser

func (n *BasicBlock) RemoveUser(u User)

func (*BasicBlock) Sealed

func (b *BasicBlock) Sealed()

func (*BasicBlock) SetBlock added in v1.2.8

func (a *BasicBlock) SetBlock(block *BasicBlock)

func (*BasicBlock) SetExtern added in v1.2.8

func (c *BasicBlock) SetExtern(b bool)

func (*BasicBlock) SetFunc added in v1.2.8

func (a *BasicBlock) SetFunc(f *Function)

ssa function and block

func (*BasicBlock) SetPosition added in v1.2.8

func (c *BasicBlock) SetPosition(pos *Position)

func (*BasicBlock) SetSymbolTable added in v1.2.8

func (a *BasicBlock) SetSymbolTable(symbol *blockSymbolTable)

func (*BasicBlock) SetType

func (b *BasicBlock) SetType(ts Type)

func (*BasicBlock) SetVariable added in v1.2.8

func (a *BasicBlock) SetVariable(v string)

variable

func (*BasicBlock) String

func (b *BasicBlock) String() string

----------- basic block

type BasicType

type BasicType struct {
	Kind TypeKind
	// contains filtered or unexported fields
}

func (*BasicType) AddMethod added in v1.2.9

func (b *BasicType) AddMethod(id string, f *FunctionType)

func (*BasicType) GetMethod added in v1.2.8

func (b *BasicType) GetMethod() map[string]*FunctionType

func (*BasicType) GetTypeKind added in v1.2.8

func (b *BasicType) GetTypeKind() TypeKind

func (*BasicType) RawString added in v1.2.8

func (b *BasicType) RawString() string

func (*BasicType) SetMethod added in v1.2.8

func (b *BasicType) SetMethod(method map[string]*FunctionType)

func (*BasicType) String

func (b *BasicType) String() string

type BinOp

type BinOp struct {
	Op   BinaryOpcode
	X, Y Value
	// contains filtered or unexported fields
}

----------- BinOp

func NewBinOpOnly added in v1.2.8

func NewBinOpOnly(op BinaryOpcode, x, y Value) *BinOp

func ToBinOp added in v1.2.8

func ToBinOp(v Instruction) (*BinOp, bool)

func (*BinOp) AddLeftPositions added in v1.2.8

func (a *BinOp) AddLeftPositions(pos *Position)

func (*BinOp) AddLeftVariables added in v1.2.8

func (a *BinOp) AddLeftVariables(name string)

func (*BinOp) AddUser

func (n *BinOp) AddUser(u User)

for Value

func (*BinOp) GetBlock

func (a *BinOp) GetBlock() *BasicBlock

func (*BinOp) GetFunc added in v1.2.8

func (a *BinOp) GetFunc() *Function

func (*BinOp) GetLeftItem added in v1.2.8

func (a *BinOp) GetLeftItem() LeftInstruction

func (*BinOp) GetLeftPosition added in v1.2.8

func (a *BinOp) GetLeftPosition() *Position

func (*BinOp) GetLeftPositions added in v1.2.8

func (a *BinOp) GetLeftPositions() []*Position

left-instruction: left-position

func (*BinOp) GetLeftVariables added in v1.2.8

func (a *BinOp) GetLeftVariables() []string

left-instruction: variable

func (*BinOp) GetOpcode added in v1.2.8

func (i *BinOp) GetOpcode() Opcode

func (*BinOp) GetOperand added in v1.2.8

func (a *BinOp) GetOperand(i int) Value

func (*BinOp) GetOperandNum added in v1.2.8

func (a *BinOp) GetOperandNum() int

func (*BinOp) GetOperands added in v1.2.8

func (a *BinOp) GetOperands() Values

func (*BinOp) GetPosition added in v1.2.8

func (c *BinOp) GetPosition() *Position

source code position

func (*BinOp) GetSymbolTable added in v1.2.8

func (a *BinOp) GetSymbolTable() *blockSymbolTable

symbol-table

func (*BinOp) GetType

func (n *BinOp) GetType() Type

for Value : type

func (*BinOp) GetUsers

func (n *BinOp) GetUsers() Users

func (*BinOp) GetValues

func (b *BinOp) GetValues() Values

func (*BinOp) GetVariable added in v1.2.8

func (a *BinOp) GetVariable() string

func (*BinOp) HasLeftVariable added in v1.2.8

func (a *BinOp) HasLeftVariable() bool

has left-instruction

func (*BinOp) HasUsers added in v1.2.8

func (n *BinOp) HasUsers() bool

has/get user and value

func (*BinOp) HasValues added in v1.2.8

func (b *BinOp) HasValues() bool

----------- BinOp

func (*BinOp) IsExtern added in v1.2.8

func (c *BinOp) IsExtern() bool

func (*BinOp) LineDisasm added in v1.2.8

func (b *BinOp) LineDisasm() string

func (*BinOp) NewError

func (c *BinOp) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*BinOp) RemoveUser

func (n *BinOp) RemoveUser(u User)

func (*BinOp) ReplaceValue

func (b *BinOp) ReplaceValue(v Value, to Value)

func (*BinOp) SetBlock added in v1.2.8

func (a *BinOp) SetBlock(block *BasicBlock)

func (*BinOp) SetExtern added in v1.2.8

func (c *BinOp) SetExtern(b bool)

func (*BinOp) SetFunc added in v1.2.8

func (a *BinOp) SetFunc(f *Function)

ssa function and block

func (*BinOp) SetPosition added in v1.2.8

func (c *BinOp) SetPosition(pos *Position)

func (*BinOp) SetSymbolTable added in v1.2.8

func (a *BinOp) SetSymbolTable(symbol *blockSymbolTable)

func (*BinOp) SetType

func (n *BinOp) SetType(typ Type)

func (*BinOp) SetVariable added in v1.2.8

func (a *BinOp) SetVariable(v string)

variable

func (*BinOp) String

func (b *BinOp) String() string

----------- BinOp

type BinaryOpcode

type BinaryOpcode int
const (
	// Binary
	OpShl BinaryOpcode = iota // <<

	OpLogicAnd // &&
	OpLogicOr  // ||

	OpShr    // >>
	OpAnd    // &
	OpAndNot // &^
	OpOr     // |
	OpXor    // ^
	OpAdd    // +
	OpSub    // -
	OpDiv    // /
	OpMod    // %
	// mul
	OpMul // *

	// boolean opcode
	OpGt    // >
	OpLt    // <
	OpGtEq  // >=
	OpLtEq  // <=
	OpEq    // ==
	OpNotEq // != <>
	OpIn    //  a in b

	OpSend // <-
)

type Builder

type Builder interface {
	Build()
}

type Call

type Call struct {

	// for call function
	Method Value
	Args   []Value

	// go function
	Async  bool
	Unpack bool

	// caller
	// caller Value
	// ~ drop error
	IsDropError bool
	IsEllipsis  bool
	// contains filtered or unexported fields
}

----------- Call call instruction call method function with args as argument

func NewCall added in v1.2.8

func NewCall(target Value, args, binding []Value, block *BasicBlock) *Call

func ToCall added in v1.2.8

func ToCall(v Instruction) (*Call, bool)

func (*Call) AddLeftPositions added in v1.2.8

func (a *Call) AddLeftPositions(pos *Position)

func (*Call) AddLeftVariables added in v1.2.8

func (a *Call) AddLeftVariables(name string)

func (*Call) AddUser

func (n *Call) AddUser(u User)

for Value

func (*Call) GetBlock

func (a *Call) GetBlock() *BasicBlock

func (*Call) GetFunc added in v1.2.8

func (a *Call) GetFunc() *Function

func (*Call) GetLeftItem added in v1.2.8

func (a *Call) GetLeftItem() LeftInstruction

func (*Call) GetLeftPosition added in v1.2.8

func (a *Call) GetLeftPosition() *Position

func (*Call) GetLeftPositions added in v1.2.8

func (a *Call) GetLeftPositions() []*Position

left-instruction: left-position

func (*Call) GetLeftVariables added in v1.2.8

func (a *Call) GetLeftVariables() []string

left-instruction: variable

func (*Call) GetOpcode added in v1.2.8

func (i *Call) GetOpcode() Opcode

func (*Call) GetOperand added in v1.2.8

func (a *Call) GetOperand(i int) Value

func (*Call) GetOperandNum added in v1.2.8

func (a *Call) GetOperandNum() int

func (*Call) GetOperands added in v1.2.8

func (a *Call) GetOperands() Values

func (*Call) GetPosition added in v1.2.8

func (c *Call) GetPosition() *Position

source code position

func (*Call) GetSymbolTable added in v1.2.8

func (a *Call) GetSymbolTable() *blockSymbolTable

symbol-table

func (*Call) GetType

func (n *Call) GetType() Type

for Value : type

func (*Call) GetUsers

func (n *Call) GetUsers() Users

func (*Call) GetValues

func (c *Call) GetValues() Values

func (*Call) GetVariable added in v1.2.8

func (a *Call) GetVariable() string

func (*Call) HandleFreeValue added in v1.2.8

func (c *Call) HandleFreeValue(fvs []string, sideEffect []string)

func (*Call) HasLeftVariable added in v1.2.8

func (a *Call) HasLeftVariable() bool

has left-instruction

func (*Call) HasUsers added in v1.2.8

func (n *Call) HasUsers() bool

has/get user and value

func (*Call) HasValues added in v1.2.8

func (c *Call) HasValues() bool

----------- Call

func (*Call) IsExtern added in v1.2.8

func (c *Call) IsExtern() bool

func (*Call) LineDisasm added in v1.2.8

func (c *Call) LineDisasm() string

func (*Call) NewError

func (c *Call) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*Call) RemoveUser

func (n *Call) RemoveUser(u User)

func (*Call) ReplaceValue

func (c *Call) ReplaceValue(v Value, to Value)

func (*Call) SetBlock added in v1.2.8

func (a *Call) SetBlock(block *BasicBlock)

func (*Call) SetExtern added in v1.2.8

func (c *Call) SetExtern(b bool)

func (*Call) SetFunc added in v1.2.8

func (a *Call) SetFunc(f *Function)

ssa function and block

func (*Call) SetPosition added in v1.2.8

func (c *Call) SetPosition(pos *Position)

func (*Call) SetSymbolTable added in v1.2.8

func (a *Call) SetSymbolTable(symbol *blockSymbolTable)

func (*Call) SetType

func (n *Call) SetType(typ Type)

func (*Call) SetVariable added in v1.2.8

func (a *Call) SetVariable(v string)

variable

func (*Call) String

func (c *Call) String() string

----------- Call

type ChanType

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

====================== chan type

func NewChanType

func NewChanType(elem Type) *ChanType

func (*ChanType) AddMethod added in v1.2.9

func (b *ChanType) AddMethod(id string, f *FunctionType)

func (*ChanType) GetMethod added in v1.2.8

func (c *ChanType) GetMethod() map[string]*FunctionType

func (*ChanType) GetTypeKind added in v1.2.8

func (c *ChanType) GetTypeKind() TypeKind

func (ChanType) RawString added in v1.2.8

func (c ChanType) RawString() string

func (*ChanType) SetMethod added in v1.2.8

func (c *ChanType) SetMethod(m map[string]*FunctionType)

func (ChanType) String

func (c ChanType) String() string

type Const

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

func (*Const) Boolean added in v1.2.8

func (c *Const) Boolean() bool

func (*Const) Float added in v1.2.8

func (c *Const) Float() float64

func (*Const) GetRawValue added in v1.2.9

func (c *Const) GetRawValue() any

func (*Const) GetType

func (c *Const) GetType() Type

get type

func (*Const) GetTypeKind added in v1.2.8

func (c *Const) GetTypeKind() TypeKind

func (*Const) IsBoolean added in v1.2.8

func (c *Const) IsBoolean() bool

func (*Const) IsFloat added in v1.2.8

func (c *Const) IsFloat() bool

func (*Const) IsNumber added in v1.2.8

func (c *Const) IsNumber() bool

func (*Const) IsString added in v1.2.8

func (c *Const) IsString() bool

func (*Const) Number added in v1.2.8

func (c *Const) Number() int64

func (*Const) SetType

func (c *Const) SetType(ts Type)

func (Const) String

func (c Const) String() string

----------- const

func (*Const) VarString added in v1.2.8

func (c *Const) VarString() string

type ConstInst added in v1.2.8

type ConstInst struct {
	*Const

	Unary int
	// contains filtered or unexported fields
}

----------- Const ConstInst also have block pointer, which block set this const to variable

func CalcConstBinary added in v1.2.8

func CalcConstBinary(x, y *ConstInst, op BinaryOpcode) *ConstInst

func CalcConstUnary added in v1.2.8

func CalcConstUnary(x *ConstInst, op UnaryOpcode) *ConstInst

OpNone UnaryOpcode = iota OpNot // ! OpPlus // + OpNeg // - OpChan // ->

func NewAny added in v1.2.8

func NewAny() *ConstInst

func NewConst

func NewConst(i any) *ConstInst

func NewConstInst added in v1.2.8

func NewConstInst(c *Const) *ConstInst

func NewConstWithUnary

func NewConstWithUnary(i any, un int) *ConstInst

create const

func NewNil added in v1.2.8

func NewNil() *ConstInst

func ToConst added in v1.2.8

func ToConst(v Instruction) (*ConstInst, bool)

value

func (*ConstInst) AddLeftPositions added in v1.2.8

func (a *ConstInst) AddLeftPositions(pos *Position)

func (*ConstInst) AddLeftVariables added in v1.2.8

func (a *ConstInst) AddLeftVariables(name string)

func (*ConstInst) AddUser added in v1.2.8

func (n *ConstInst) AddUser(u User)

for Value

func (*ConstInst) GetBlock added in v1.2.8

func (a *ConstInst) GetBlock() *BasicBlock

func (*ConstInst) GetFunc added in v1.2.8

func (a *ConstInst) GetFunc() *Function

func (*ConstInst) GetLeftItem added in v1.2.8

func (a *ConstInst) GetLeftItem() LeftInstruction

func (*ConstInst) GetLeftPosition added in v1.2.8

func (a *ConstInst) GetLeftPosition() *Position

func (*ConstInst) GetLeftPositions added in v1.2.8

func (a *ConstInst) GetLeftPositions() []*Position

left-instruction: left-position

func (*ConstInst) GetLeftVariables added in v1.2.8

func (a *ConstInst) GetLeftVariables() []string

left-instruction: variable

func (*ConstInst) GetOpcode added in v1.2.8

func (i *ConstInst) GetOpcode() Opcode

func (*ConstInst) GetOperand added in v1.2.8

func (a *ConstInst) GetOperand(i int) Value

func (*ConstInst) GetOperandNum added in v1.2.8

func (a *ConstInst) GetOperandNum() int

func (*ConstInst) GetOperands added in v1.2.8

func (a *ConstInst) GetOperands() Values

func (*ConstInst) GetPosition added in v1.2.8

func (c *ConstInst) GetPosition() *Position

source code position

func (*ConstInst) GetSymbolTable added in v1.2.8

func (a *ConstInst) GetSymbolTable() *blockSymbolTable

symbol-table

func (*ConstInst) GetType added in v1.2.8

func (c *ConstInst) GetType() Type

ConstInst cont set Type

func (*ConstInst) GetUsers added in v1.2.8

func (n *ConstInst) GetUsers() Users

func (*ConstInst) GetValues added in v1.2.8

func (c *ConstInst) GetValues() Values

func (*ConstInst) GetVariable added in v1.2.8

func (a *ConstInst) GetVariable() string

func (*ConstInst) HasLeftVariable added in v1.2.8

func (a *ConstInst) HasLeftVariable() bool

has left-instruction

func (*ConstInst) HasUsers added in v1.2.8

func (n *ConstInst) HasUsers() bool

has/get user and value

func (*ConstInst) HasValues added in v1.2.8

func (c *ConstInst) HasValues() bool

----------- ConstInst

func (*ConstInst) IsExtern added in v1.2.8

func (c *ConstInst) IsExtern() bool

func (*ConstInst) LineDisasm added in v1.2.8

func (c *ConstInst) LineDisasm() string

func (*ConstInst) NewError added in v1.2.8

func (c *ConstInst) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*ConstInst) RemoveUser added in v1.2.8

func (n *ConstInst) RemoveUser(u User)

func (*ConstInst) SetBlock added in v1.2.8

func (a *ConstInst) SetBlock(block *BasicBlock)

func (*ConstInst) SetExtern added in v1.2.8

func (c *ConstInst) SetExtern(b bool)

func (*ConstInst) SetFunc added in v1.2.8

func (a *ConstInst) SetFunc(f *Function)

ssa function and block

func (*ConstInst) SetPosition added in v1.2.8

func (c *ConstInst) SetPosition(pos *Position)

func (*ConstInst) SetSymbolTable added in v1.2.8

func (a *ConstInst) SetSymbolTable(symbol *blockSymbolTable)

func (*ConstInst) SetType added in v1.2.8

func (c *ConstInst) SetType(ts Type)

func (*ConstInst) SetVariable added in v1.2.8

func (a *ConstInst) SetVariable(v string)

variable

func (*ConstInst) String added in v1.2.8

func (c *ConstInst) String() string

----------- const instruction

type ErrorComment added in v1.2.8

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

func (ErrorComment) Skip added in v1.2.8

func (ec ErrorComment) Skip(pos *Position) bool

type ErrorCommentId added in v1.2.8

type ErrorCommentId string
const (
	SSAIgnore  ErrorCommentId = "// @ssa-ignore"
	SSANoCheck ErrorCommentId = "// @ssa-nocheck"
)

type ErrorHandler added in v1.2.8

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

------------- ErrorHandler

func NewErrorHandler added in v1.2.8

func NewErrorHandler(try, catch *BasicBlock) *ErrorHandler

func (*ErrorHandler) AddDone added in v1.2.8

func (e *ErrorHandler) AddDone(d *BasicBlock)

func (*ErrorHandler) AddFinal added in v1.2.8

func (e *ErrorHandler) AddFinal(f *BasicBlock)

func (*ErrorHandler) AddLeftPositions added in v1.2.8

func (a *ErrorHandler) AddLeftPositions(pos *Position)

func (*ErrorHandler) AddLeftVariables added in v1.2.8

func (a *ErrorHandler) AddLeftVariables(name string)

func (*ErrorHandler) GetBlock added in v1.2.8

func (a *ErrorHandler) GetBlock() *BasicBlock

func (*ErrorHandler) GetFunc added in v1.2.8

func (a *ErrorHandler) GetFunc() *Function

func (*ErrorHandler) GetLeftItem added in v1.2.8

func (a *ErrorHandler) GetLeftItem() LeftInstruction

func (*ErrorHandler) GetLeftPosition added in v1.2.8

func (a *ErrorHandler) GetLeftPosition() *Position

func (*ErrorHandler) GetLeftPositions added in v1.2.8

func (a *ErrorHandler) GetLeftPositions() []*Position

left-instruction: left-position

func (*ErrorHandler) GetLeftVariables added in v1.2.8

func (a *ErrorHandler) GetLeftVariables() []string

left-instruction: variable

func (*ErrorHandler) GetOpcode added in v1.2.8

func (i *ErrorHandler) GetOpcode() Opcode

func (*ErrorHandler) GetOperand added in v1.2.8

func (a *ErrorHandler) GetOperand(i int) Value

func (*ErrorHandler) GetOperandNum added in v1.2.8

func (a *ErrorHandler) GetOperandNum() int

func (*ErrorHandler) GetOperands added in v1.2.8

func (a *ErrorHandler) GetOperands() Values

func (*ErrorHandler) GetPosition added in v1.2.8

func (c *ErrorHandler) GetPosition() *Position

source code position

func (*ErrorHandler) GetSymbolTable added in v1.2.8

func (a *ErrorHandler) GetSymbolTable() *blockSymbolTable

symbol-table

func (*ErrorHandler) GetVariable added in v1.2.8

func (a *ErrorHandler) GetVariable() string

func (*ErrorHandler) HasLeftVariable added in v1.2.8

func (a *ErrorHandler) HasLeftVariable() bool

has left-instruction

func (*ErrorHandler) IsExtern added in v1.2.8

func (c *ErrorHandler) IsExtern() bool

func (*ErrorHandler) LineDisasm added in v1.2.8

func (p *ErrorHandler) LineDisasm() string

func (*ErrorHandler) NewError added in v1.2.8

func (c *ErrorHandler) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*ErrorHandler) SetBlock added in v1.2.8

func (a *ErrorHandler) SetBlock(block *BasicBlock)

func (*ErrorHandler) SetExtern added in v1.2.8

func (c *ErrorHandler) SetExtern(b bool)

func (*ErrorHandler) SetFunc added in v1.2.8

func (a *ErrorHandler) SetFunc(f *Function)

ssa function and block

func (*ErrorHandler) SetPosition added in v1.2.8

func (c *ErrorHandler) SetPosition(pos *Position)

func (*ErrorHandler) SetSymbolTable added in v1.2.8

func (a *ErrorHandler) SetSymbolTable(symbol *blockSymbolTable)

func (*ErrorHandler) SetVariable added in v1.2.8

func (a *ErrorHandler) SetVariable(v string)

variable

func (*ErrorHandler) String added in v1.2.8

func (e *ErrorHandler) String() string

type ErrorKind

type ErrorKind int
const (
	Warn ErrorKind = iota
	Error
)

type ErrorLogger added in v1.2.8

type ErrorLogger interface {
	NewError(ErrorKind, ErrorTag, string)
}

type ErrorTag added in v1.2.8

type ErrorTag string
const (
	SSATAG ErrorTag = "ssa"
)

type Field

type Field struct {

	// field
	Key Value
	Obj Value

	// Method or Field
	IsMethod bool
	// capture by other function
	OutCapture bool
	// contains filtered or unexported fields
}

instruction ----------- Field

func GetField added in v1.2.8

func GetField(u, key Value) *Field

func GetFields added in v1.2.8

func GetFields(u Node) []*Field

func NewFieldOnly added in v1.2.8

func NewFieldOnly(key, obj Value, block *BasicBlock) *Field

func ToField added in v1.2.8

func ToField(v Instruction) (*Field, bool)

func (*Field) AddLeftPositions added in v1.2.8

func (a *Field) AddLeftPositions(pos *Position)

func (*Field) AddLeftVariables added in v1.2.8

func (a *Field) AddLeftVariables(name string)

func (*Field) AddUser

func (n *Field) AddUser(u User)

for Value

func (*Field) Assign

func (field *Field) Assign(v Value, f *FunctionBuilder)

--------------- point variable to value `f.symbol[variable]value` --------------- it's memory address, not SSA value

func (*Field) GetBlock

func (a *Field) GetBlock() *BasicBlock

func (*Field) GetFunc added in v1.2.8

func (a *Field) GetFunc() *Function

func (*Field) GetLeftItem added in v1.2.8

func (a *Field) GetLeftItem() LeftInstruction

func (*Field) GetLeftPosition added in v1.2.8

func (a *Field) GetLeftPosition() *Position

func (*Field) GetLeftPositions added in v1.2.8

func (a *Field) GetLeftPositions() []*Position

left-instruction: left-position

func (*Field) GetLeftVariables added in v1.2.8

func (a *Field) GetLeftVariables() []string

left-instruction: variable

func (*Field) GetOpcode added in v1.2.8

func (i *Field) GetOpcode() Opcode

func (*Field) GetOperand added in v1.2.8

func (a *Field) GetOperand(i int) Value

func (*Field) GetOperandNum added in v1.2.8

func (a *Field) GetOperandNum() int

func (*Field) GetOperands added in v1.2.8

func (a *Field) GetOperands() Values

func (*Field) GetPosition added in v1.2.8

func (c *Field) GetPosition() *Position

source code position

func (*Field) GetSymbolTable added in v1.2.8

func (a *Field) GetSymbolTable() *blockSymbolTable

symbol-table

func (*Field) GetType

func (n *Field) GetType() Type

for Value : type

func (*Field) GetUsers

func (n *Field) GetUsers() Users

func (*Field) GetValue

func (f *Field) GetValue(_ *FunctionBuilder) Value

func (*Field) GetValues

func (f *Field) GetValues() Values

func (*Field) GetVariable added in v1.2.8

func (a *Field) GetVariable() string

func (*Field) HasLeftVariable added in v1.2.8

func (a *Field) HasLeftVariable() bool

has left-instruction

func (*Field) HasUsers added in v1.2.8

func (n *Field) HasUsers() bool

has/get user and value

func (*Field) HasValues added in v1.2.8

func (f *Field) HasValues() bool

// ----------- Field

func (*Field) IsExtern added in v1.2.8

func (c *Field) IsExtern() bool

func (*Field) LineDisasm added in v1.2.8

func (f *Field) LineDisasm() string

func (*Field) NewError

func (c *Field) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*Field) RemoveUser

func (n *Field) RemoveUser(u User)

func (*Field) ReplaceValue

func (f *Field) ReplaceValue(v, to Value)

func (*Field) SetBlock added in v1.2.8

func (a *Field) SetBlock(block *BasicBlock)

func (*Field) SetExtern added in v1.2.8

func (c *Field) SetExtern(b bool)

func (*Field) SetFunc added in v1.2.8

func (a *Field) SetFunc(f *Function)

ssa function and block

func (*Field) SetPosition added in v1.2.8

func (c *Field) SetPosition(pos *Position)

func (*Field) SetSymbolTable added in v1.2.8

func (a *Field) SetSymbolTable(symbol *blockSymbolTable)

func (*Field) SetType

func (n *Field) SetType(typ Type)

func (*Field) SetVariable added in v1.2.8

func (a *Field) SetVariable(v string)

variable

func (*Field) String

func (f *Field) String() string

----------- Field

type Function

type Function struct {

	// package
	Package *Package

	Param  []*Parameter
	Return []*Return

	// BasicBlock list
	Blocks     []*BasicBlock
	EnterBlock *BasicBlock
	ExitBlock  *BasicBlock
	DeferBlock *BasicBlock

	// anonymous function in this function
	AnonFuncs []*Function

	// if this function is anonFunc
	FreeValues  []Value          // the value, captured variable form parent-function,
	SideEffects map[string]Value // closure function side effects

	// for instruction
	InstReg map[Instruction]string // instruction -> virtual register
	// contains filtered or unexported fields
}

implement Value

func NewFunctionWithType added in v1.2.8

func NewFunctionWithType(name string, typ *FunctionType) *Function

just create a function define, only function parameter type \ return type \ ellipsis

func ToFunction added in v1.2.8

func ToFunction(n Node) (*Function, bool)

func (*Function) AddErrorComment added in v1.2.8

func (f *Function) AddErrorComment(str string, line int) error

func (*Function) AddLeftPositions added in v1.2.8

func (a *Function) AddLeftPositions(pos *Position)

func (*Function) AddLeftVariables added in v1.2.8

func (a *Function) AddLeftVariables(name string)

func (*Function) AddSideEffect added in v1.2.9

func (f *Function) AddSideEffect(name string, v Value)

func (*Function) AddUser

func (n *Function) AddUser(u User)

for Value

func (*Function) DisAsm

func (f *Function) DisAsm(flag FunctionAsmFlag) string

func (*Function) Finish

func (f *Function) Finish()

current function finish

func (*Function) GetBlock added in v1.2.8

func (a *Function) GetBlock() *BasicBlock

func (*Function) GetDeferBlock added in v1.2.9

func (f *Function) GetDeferBlock() *BasicBlock

func (*Function) GetFunc added in v1.2.8

func (a *Function) GetFunc() *Function

func (*Function) GetLeftItem added in v1.2.8

func (a *Function) GetLeftItem() LeftInstruction

func (*Function) GetLeftPosition added in v1.2.8

func (a *Function) GetLeftPosition() *Position

func (*Function) GetLeftPositions added in v1.2.8

func (a *Function) GetLeftPositions() []*Position

left-instruction: left-position

func (*Function) GetLeftVariables added in v1.2.8

func (a *Function) GetLeftVariables() []string

left-instruction: variable

func (*Function) GetOpcode added in v1.2.8

func (i *Function) GetOpcode() Opcode

func (*Function) GetOperand added in v1.2.8

func (a *Function) GetOperand(i int) Value

func (*Function) GetOperandNum added in v1.2.8

func (a *Function) GetOperandNum() int

func (*Function) GetOperands added in v1.2.8

func (a *Function) GetOperands() Values

func (*Function) GetParent

func (f *Function) GetParent() *Function

func (*Function) GetPosition added in v1.2.8

func (c *Function) GetPosition() *Position

source code position

func (*Function) GetSymbol

func (f *Function) GetSymbol() *Make

func (*Function) GetSymbolTable added in v1.2.8

func (a *Function) GetSymbolTable() *blockSymbolTable

symbol-table

func (*Function) GetType

func (n *Function) GetType() Type

for Value : type

func (*Function) GetUsers

func (n *Function) GetUsers() Users

func (*Function) GetValues

func (f *Function) GetValues() Values

func (*Function) GetValuesByName added in v1.2.8

func (f *Function) GetValuesByName(name string) InstructionNodes

func (*Function) GetVariable added in v1.2.8

func (a *Function) GetVariable() string

func (*Function) HasLeftVariable added in v1.2.8

func (a *Function) HasLeftVariable() bool

has left-instruction

func (*Function) HasUsers added in v1.2.8

func (n *Function) HasUsers() bool

has/get user and value

func (*Function) HasValues added in v1.2.8

func (f *Function) HasValues() bool

----------- Function

func (*Function) InspectVariable

func (f *Function) InspectVariable(varName string) *InspectVariableResult

func (*Function) IsExtern added in v1.2.8

func (c *Function) IsExtern() bool

func (*Function) IsMain added in v1.2.8

func (f *Function) IsMain() bool

func (*Function) LineDisasm added in v1.2.8

func (f *Function) LineDisasm() string

func (*Function) NewBasicBlock

func (f *Function) NewBasicBlock(name string) *BasicBlock

func (*Function) NewBasicBlockNotAddBlocks added in v1.2.9

func (f *Function) NewBasicBlockNotAddBlocks(name string) *BasicBlock

func (*Function) NewBasicBlockNotAddUnSealed added in v1.2.9

func (f *Function) NewBasicBlockNotAddUnSealed(name string) *BasicBlock

func (*Function) NewBasicBlockUnSealed

func (f *Function) NewBasicBlockUnSealed(name string) *BasicBlock

func (*Function) NewError added in v1.2.8

func (c *Function) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*Function) NewErrorWithPos

func (f *Function) NewErrorWithPos(kind ErrorKind, tag ErrorTag, Pos *Position, message string)

func (*Function) NewParam

func (f *Function) NewParam(name string) *Parameter

func (*Function) RemoveUser

func (n *Function) RemoveUser(u User)

func (*Function) ReplaceVariable added in v1.2.8

func (b *Function) ReplaceVariable(variable string, v, to Value)

func (*Function) ReturnValue

func (f *Function) ReturnValue() []Value

func (*Function) SetBlock added in v1.2.8

func (a *Function) SetBlock(block *BasicBlock)

func (*Function) SetExtern added in v1.2.8

func (c *Function) SetExtern(b bool)

func (*Function) SetFunc added in v1.2.8

func (a *Function) SetFunc(f *Function)

ssa function and block

func (*Function) SetPosition added in v1.2.8

func (c *Function) SetPosition(pos *Position)

func (*Function) SetReg

func (f *Function) SetReg(i Instruction)

func (*Function) SetSymbolTable added in v1.2.8

func (a *Function) SetSymbolTable(symbol *blockSymbolTable)

func (*Function) SetType

func (n *Function) SetType(typ Type)

func (*Function) SetVariable added in v1.2.8

func (a *Function) SetVariable(v string)

variable

func (*Function) String

func (f *Function) String() string

implement value

type FunctionAsmFlag

type FunctionAsmFlag int
const (
	DisAsmDefault FunctionAsmFlag = 1 << iota
	DisAsmWithSource
)

type FunctionBuilder

type FunctionBuilder struct {
	*Function

	// for build
	CurrentBlock *BasicBlock // current block to build
	CurrentPos   *Position   // current position in source code

	ExternInstance map[string]any
	ExternLib      map[string]map[string]any
	// contains filtered or unexported fields
}

Function builder API

func NewBuilder

func NewBuilder(f *Function, parent *FunctionBuilder) *FunctionBuilder

func (*FunctionBuilder) AddDefer

func (b *FunctionBuilder) AddDefer(call *Call)

add current function defer function

func (*FunctionBuilder) AddLabel added in v1.2.8

func (b *FunctionBuilder) AddLabel(name string, block *BasicBlock)

for goto and label

func (FunctionBuilder) AddLeftPositions added in v1.2.8

func (a FunctionBuilder) AddLeftPositions(pos *Position)

func (FunctionBuilder) AddLeftVariables added in v1.2.8

func (a FunctionBuilder) AddLeftVariables(name string)

func (*FunctionBuilder) AddSubFunction added in v1.2.8

func (b *FunctionBuilder) AddSubFunction(builder func())

sub-function builder

func (*FunctionBuilder) AddToCmap added in v1.2.8

func (b *FunctionBuilder) AddToCmap(key string)

func (*FunctionBuilder) AddToLmap added in v1.2.8

func (b *FunctionBuilder) AddToLmap(key string)

func (*FunctionBuilder) AddUnsealedBlock added in v1.2.8

func (b *FunctionBuilder) AddUnsealedBlock(block *BasicBlock)

func (FunctionBuilder) AddUser added in v1.2.8

func (n FunctionBuilder) AddUser(u User)

for Value

func (*FunctionBuilder) BuildFreeValue

func (b *FunctionBuilder) BuildFreeValue(variable string) Value

func (*FunctionBuilder) BuildIf added in v1.2.8

func (b *FunctionBuilder) BuildIf() *IfBuilder

func (*FunctionBuilder) BuildLoop added in v1.2.8

func (b *FunctionBuilder) BuildLoop() *LoopBuilder

func (*FunctionBuilder) BuildSwitch added in v1.2.8

func (b *FunctionBuilder) BuildSwitch() *SwitchBuilder

func (*FunctionBuilder) BuildTry added in v1.2.8

func (b *FunctionBuilder) BuildTry() *TryBuilder

func (*FunctionBuilder) BuildValueFromAny added in v1.2.8

func (b *FunctionBuilder) BuildValueFromAny(id string, v any) (value Value)

func (*FunctionBuilder) CanBuildFreeValue

func (b *FunctionBuilder) CanBuildFreeValue(variable string) bool

func (*FunctionBuilder) CoverReflectFunctionType added in v1.2.8

func (f *FunctionBuilder) CoverReflectFunctionType(itype reflect.Type, level int) *FunctionType

func (*FunctionBuilder) CreateInterfaceWithVs

func (b *FunctionBuilder) CreateInterfaceWithVs(keys []Value, vs []Value) *Make

func (*FunctionBuilder) DeleteLabel added in v1.2.8

func (b *FunctionBuilder) DeleteLabel(name string)

func (*FunctionBuilder) EmitAssert added in v1.2.8

func (f *FunctionBuilder) EmitAssert(cond, msgValue Value, msg string) *Assert

func (*FunctionBuilder) EmitBinOp added in v1.2.8

func (f *FunctionBuilder) EmitBinOp(op BinaryOpcode, x, y Value) Value

func (*FunctionBuilder) EmitCall

func (f *FunctionBuilder) EmitCall(c *Call) *Call

func (*FunctionBuilder) EmitConstInst added in v1.2.8

func (f *FunctionBuilder) EmitConstInst(i any) *ConstInst

func (*FunctionBuilder) EmitConstInstAny added in v1.2.8

func (f *FunctionBuilder) EmitConstInstAny() *ConstInst

func (*FunctionBuilder) EmitConstInstNil added in v1.2.8

func (f *FunctionBuilder) EmitConstInstNil() *ConstInst

func (*FunctionBuilder) EmitConstInstWithUnary added in v1.2.8

func (f *FunctionBuilder) EmitConstInstWithUnary(i any, un int) *ConstInst

func (*FunctionBuilder) EmitErrorHandler added in v1.2.8

func (f *FunctionBuilder) EmitErrorHandler(try, catch *BasicBlock) *ErrorHandler

func (*FunctionBuilder) EmitField

func (f *FunctionBuilder) EmitField(i, key Value) Value

func (*FunctionBuilder) EmitFieldMust added in v1.2.8

func (f *FunctionBuilder) EmitFieldMust(i, key Value) *Field

func (*FunctionBuilder) EmitIf

func (f *FunctionBuilder) EmitIf(cond Value) *If

func (*FunctionBuilder) EmitInstructionAfter added in v1.2.8

func (f *FunctionBuilder) EmitInstructionAfter(i, after Instruction)

func (*FunctionBuilder) EmitInstructionBefore added in v1.2.8

func (f *FunctionBuilder) EmitInstructionBefore(i, before Instruction)

func (*FunctionBuilder) EmitJump

func (f *FunctionBuilder) EmitJump(to *BasicBlock) *Jump

func (*FunctionBuilder) EmitLoop added in v1.2.8

func (f *FunctionBuilder) EmitLoop(body, exit *BasicBlock, cond Value) *Loop

func (*FunctionBuilder) EmitMakeBuildWithType added in v1.2.8

func (f *FunctionBuilder) EmitMakeBuildWithType(typ Type, Len, Cap Value) *Make

func (*FunctionBuilder) EmitMakeSlice added in v1.2.8

func (f *FunctionBuilder) EmitMakeSlice(i Value, low, high, max Value) *Make

func (*FunctionBuilder) EmitMakeWithoutType added in v1.2.8

func (f *FunctionBuilder) EmitMakeWithoutType(Len, Cap Value) *Make

func (*FunctionBuilder) EmitNext added in v1.2.8

func (f *FunctionBuilder) EmitNext(iter Value, isIn bool) (key, field, ok Value)

func (*FunctionBuilder) EmitNextOnly added in v1.2.8

func (f *FunctionBuilder) EmitNextOnly(iter Value, isIn bool) *Next

func (*FunctionBuilder) EmitOnly added in v1.2.9

func (f *FunctionBuilder) EmitOnly(i Instruction)

func (*FunctionBuilder) EmitPanic added in v1.2.8

func (f *FunctionBuilder) EmitPanic(info Value) *Panic

func (*FunctionBuilder) EmitRecover added in v1.2.8

func (f *FunctionBuilder) EmitRecover() *Recover

func (*FunctionBuilder) EmitReturn

func (f *FunctionBuilder) EmitReturn(vs []Value) *Return

func (*FunctionBuilder) EmitSwitch

func (f *FunctionBuilder) EmitSwitch(cond Value, defaultb *BasicBlock, label []SwitchLabel) *Switch

func (*FunctionBuilder) EmitToBlock added in v1.2.8

func (f *FunctionBuilder) EmitToBlock(i Instruction, block *BasicBlock)

func (*FunctionBuilder) EmitTypeCast added in v1.2.8

func (f *FunctionBuilder) EmitTypeCast(v Value, typ Type) *TypeCast

func (*FunctionBuilder) EmitTypeValue added in v1.2.8

func (f *FunctionBuilder) EmitTypeValue(typ Type) *TypeValue

func (*FunctionBuilder) EmitUnOp added in v1.2.8

func (f *FunctionBuilder) EmitUnOp(op UnaryOpcode, v Value) Value

func (*FunctionBuilder) EmitUndefine added in v1.2.8

func (f *FunctionBuilder) EmitUndefine(name string) *Undefined

func (*FunctionBuilder) EmitUpdate added in v1.2.8

func (f *FunctionBuilder) EmitUpdate(address, v Value) *Update

func (*FunctionBuilder) Finish

func (b *FunctionBuilder) Finish()

finish current function builder

func (FunctionBuilder) GetBlock added in v1.2.8

func (a FunctionBuilder) GetBlock() *BasicBlock

func (*FunctionBuilder) GetBreak

func (b *FunctionBuilder) GetBreak() *BasicBlock

func (*FunctionBuilder) GetContinue

func (b *FunctionBuilder) GetContinue() *BasicBlock

func (*FunctionBuilder) GetFallthrough

func (b *FunctionBuilder) GetFallthrough() *BasicBlock

func (*FunctionBuilder) GetFromCmap added in v1.2.8

func (b *FunctionBuilder) GetFromCmap(key string) bool

func (*FunctionBuilder) GetFromLmap added in v1.2.8

func (b *FunctionBuilder) GetFromLmap(key string) bool

func (FunctionBuilder) GetFunc added in v1.2.8

func (a FunctionBuilder) GetFunc() *Function

func (*FunctionBuilder) GetIdByBlockSymbolTable added in v1.2.8

func (b *FunctionBuilder) GetIdByBlockSymbolTable(id string) string

func (*FunctionBuilder) GetLabel added in v1.2.8

func (b *FunctionBuilder) GetLabel(name string) *BasicBlock

func (FunctionBuilder) GetLeftItem added in v1.2.8

func (a FunctionBuilder) GetLeftItem() LeftInstruction

func (FunctionBuilder) GetLeftPosition added in v1.2.8

func (a FunctionBuilder) GetLeftPosition() *Position

func (FunctionBuilder) GetLeftPositions added in v1.2.8

func (a FunctionBuilder) GetLeftPositions() []*Position

left-instruction: left-position

func (FunctionBuilder) GetLeftVariables added in v1.2.8

func (a FunctionBuilder) GetLeftVariables() []string

left-instruction: variable

func (FunctionBuilder) GetOperand added in v1.2.8

func (a FunctionBuilder) GetOperand(i int) Value

func (FunctionBuilder) GetOperandNum added in v1.2.8

func (a FunctionBuilder) GetOperandNum() int

func (FunctionBuilder) GetOperands added in v1.2.8

func (a FunctionBuilder) GetOperands() Values

func (FunctionBuilder) GetParentBuilder

func (b FunctionBuilder) GetParentBuilder() *FunctionBuilder

get parent function

func (FunctionBuilder) GetPosition added in v1.2.8

func (c FunctionBuilder) GetPosition() *Position

source code position

func (FunctionBuilder) GetSymbolTable added in v1.2.8

func (a FunctionBuilder) GetSymbolTable() *blockSymbolTable

symbol-table

func (FunctionBuilder) GetType added in v1.2.8

func (n FunctionBuilder) GetType() Type

for Value : type

func (FunctionBuilder) GetUsers added in v1.2.8

func (n FunctionBuilder) GetUsers() Users

func (FunctionBuilder) GetVariable added in v1.2.8

func (a FunctionBuilder) GetVariable() string

func (FunctionBuilder) HandlerEllipsis

func (b FunctionBuilder) HandlerEllipsis()

function param

func (FunctionBuilder) HasLeftVariable added in v1.2.8

func (a FunctionBuilder) HasLeftVariable() bool

has left-instruction

func (FunctionBuilder) HasUsers added in v1.2.8

func (n FunctionBuilder) HasUsers() bool

has/get user and value

func (FunctionBuilder) IsExtern added in v1.2.8

func (c FunctionBuilder) IsExtern() bool

func (*FunctionBuilder) MapBlockSymbolTable

func (b *FunctionBuilder) MapBlockSymbolTable(text string) string

use block symbol table map variable -> variable+blockId

func (*FunctionBuilder) NewBlockId added in v1.2.8

func (b *FunctionBuilder) NewBlockId() string

func (*FunctionBuilder) NewCall

func (f *FunctionBuilder) NewCall(target Value, args []Value) *Call

func (*FunctionBuilder) NewError

func (b *FunctionBuilder) NewError(kind ErrorKind, tag ErrorTag, format string, arg ...any)

func (*FunctionBuilder) NewFunc

func (b *FunctionBuilder) NewFunc(name string) (*Function, *blockSymbolTable)

new function

func (*FunctionBuilder) PopBlockSymbolTable

func (b *FunctionBuilder) PopBlockSymbolTable()

func (*FunctionBuilder) PopFunction

func (b *FunctionBuilder) PopFunction() *FunctionBuilder

func (*FunctionBuilder) PopTarget

func (b *FunctionBuilder) PopTarget() bool

func (*FunctionBuilder) PushBlockSymbolTable

func (b *FunctionBuilder) PushBlockSymbolTable()

block symbol-table stack

func (*FunctionBuilder) PushFunction

func (b *FunctionBuilder) PushFunction(newFunc *Function, symbol *blockSymbolTable, block *BasicBlock) *FunctionBuilder

function stack

func (*FunctionBuilder) PushTarget

func (b *FunctionBuilder) PushTarget(_break, _continue, _fallthrough *BasicBlock)

target stack

func (*FunctionBuilder) ReadVariable

func (b *FunctionBuilder) ReadVariable(variable string, create bool) Value

* first check builder.currentDef

* if block sealed; just create a phi * if len(block.preds) == 0: undefined * if len(block.preds) == 1: just recursive * if len(block.preds) > 1: create phi and builder

func (*FunctionBuilder) ReadVariableBefore added in v1.2.8

func (b *FunctionBuilder) ReadVariableBefore(variable string, create bool, before Instruction) Value

func (*FunctionBuilder) ReadVariableEx added in v1.2.8

func (b *FunctionBuilder) ReadVariableEx(variable string, create bool, fun func([]Value))

func (FunctionBuilder) RemoveUser added in v1.2.8

func (n FunctionBuilder) RemoveUser(u User)

func (FunctionBuilder) SetBlock added in v1.2.8

func (a FunctionBuilder) SetBlock(block *BasicBlock)

func (*FunctionBuilder) SetCurrent added in v1.2.8

func (f *FunctionBuilder) SetCurrent(i Instruction) func()

func (FunctionBuilder) SetExtern added in v1.2.8

func (c FunctionBuilder) SetExtern(b bool)

func (FunctionBuilder) SetFunc added in v1.2.8

func (a FunctionBuilder) SetFunc(f *Function)

ssa function and block

func (*FunctionBuilder) SetInstructionPosition added in v1.2.9

func (f *FunctionBuilder) SetInstructionPosition(i Instruction)

func (*FunctionBuilder) SetPosition

func (b *FunctionBuilder) SetPosition(pos *Position) *Position

handler position: set new position and return original position for backup

func (FunctionBuilder) SetSymbolTable added in v1.2.8

func (a FunctionBuilder) SetSymbolTable(symbol *blockSymbolTable)

func (FunctionBuilder) SetType added in v1.2.8

func (n FunctionBuilder) SetType(typ Type)

func (FunctionBuilder) SetVariable added in v1.2.8

func (a FunctionBuilder) SetVariable(v string)

variable

func (*FunctionBuilder) TryBuildExternValue added in v1.2.8

func (b *FunctionBuilder) TryBuildExternValue(id string) Value

func (*FunctionBuilder) TryGetSimilarityKey added in v1.2.8

func (b *FunctionBuilder) TryGetSimilarityKey(name, key string) string

func (*FunctionBuilder) WithExternLib added in v1.2.8

func (b *FunctionBuilder) WithExternLib(lib map[string]map[string]any)

func (*FunctionBuilder) WithExternMethod added in v1.2.9

func (b *FunctionBuilder) WithExternMethod(builder MethodBuilder)

func (*FunctionBuilder) WithExternValue added in v1.2.8

func (b *FunctionBuilder) WithExternValue(vs map[string]any)

func (*FunctionBuilder) WriteVariable added in v1.2.8

func (f *FunctionBuilder) WriteVariable(variable string, value Value)

--------------- `f.currentDef` handler, read && write

type FunctionType added in v1.2.8

type FunctionType struct {
	Name         string
	ReturnType   Type
	Parameter    Types
	FreeValue    []string
	SideEffects  []string
	IsVariadic   bool
	IsMethod     bool
	IsModifySelf bool // if this is method function
}

func GetMethod added in v1.2.9

func GetMethod(t Type, id string) *FunctionType

func NewFunctionType added in v1.2.8

func NewFunctionType(name string, Parameter []Type, ReturnType Type, IsVariadic bool) *FunctionType

func NewFunctionTypeDefine added in v1.2.9

func NewFunctionTypeDefine(name string, Parameter []Type, ReturnType []Type, IsVariadic bool) *FunctionType

func ToFunctionType added in v1.2.8

func ToFunctionType(t Type) (*FunctionType, bool)

func (*FunctionType) AddMethod added in v1.2.9

func (b *FunctionType) AddMethod(id string, f *FunctionType)

func (*FunctionType) GetMethod added in v1.2.8

func (f *FunctionType) GetMethod() map[string]*FunctionType

func (*FunctionType) GetParamString added in v1.2.8

func (s *FunctionType) GetParamString() string

func (*FunctionType) GetTypeKind added in v1.2.8

func (s *FunctionType) GetTypeKind() TypeKind

func (*FunctionType) RawString added in v1.2.8

func (s *FunctionType) RawString() string

func (*FunctionType) SetFreeValue added in v1.2.8

func (s *FunctionType) SetFreeValue(fv []string)

func (*FunctionType) SetMethod added in v1.2.8

func (f *FunctionType) SetMethod(m map[string]*FunctionType)

func (*FunctionType) SetModifySelf added in v1.2.9

func (f *FunctionType) SetModifySelf(b bool)

func (*FunctionType) SetName added in v1.2.8

func (s *FunctionType) SetName(name string)

func (*FunctionType) SetSideEffect added in v1.2.9

func (s *FunctionType) SetSideEffect(se []string)

func (*FunctionType) String added in v1.2.8

func (s *FunctionType) String() string

type IdentifierLV

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

--------------- only point variable to value with `f.currentDef` --------------- is SSA value

func NewIdentifierLV added in v1.2.8

func NewIdentifierLV(variable string, pos *Position) *IdentifierLV

func (*IdentifierLV) Assign

func (i *IdentifierLV) Assign(v Value, f *FunctionBuilder)

func (*IdentifierLV) GetPosition added in v1.2.8

func (i *IdentifierLV) GetPosition() *Position

func (*IdentifierLV) GetValue

func (i *IdentifierLV) GetValue(f *FunctionBuilder) Value

func (*IdentifierLV) SetIsSideEffect added in v1.2.9

func (i *IdentifierLV) SetIsSideEffect(b bool)

type If

type If struct {
	Cond  Value
	True  *BasicBlock
	False *BasicBlock
	// contains filtered or unexported fields
}

----------- IF The If instruction transfers control to one of the two successors of its owning block, depending on the boolean Cond: the first if true, the second if false.

func NewIf added in v1.2.8

func NewIf(cond Value) *If

func (*If) AddFalse

func (i *If) AddFalse(f *BasicBlock)

func (*If) AddLeftPositions added in v1.2.8

func (a *If) AddLeftPositions(pos *Position)

func (*If) AddLeftVariables added in v1.2.8

func (a *If) AddLeftVariables(name string)

func (*If) AddTrue

func (i *If) AddTrue(t *BasicBlock)

func (*If) GetBlock

func (a *If) GetBlock() *BasicBlock

func (*If) GetFunc added in v1.2.8

func (a *If) GetFunc() *Function

func (*If) GetLeftItem added in v1.2.8

func (a *If) GetLeftItem() LeftInstruction

func (*If) GetLeftPosition added in v1.2.8

func (a *If) GetLeftPosition() *Position

func (*If) GetLeftPositions added in v1.2.8

func (a *If) GetLeftPositions() []*Position

left-instruction: left-position

func (*If) GetLeftVariables added in v1.2.8

func (a *If) GetLeftVariables() []string

left-instruction: variable

func (*If) GetOpcode added in v1.2.8

func (i *If) GetOpcode() Opcode

func (*If) GetOperand added in v1.2.8

func (a *If) GetOperand(i int) Value

func (*If) GetOperandNum added in v1.2.8

func (a *If) GetOperandNum() int

func (*If) GetOperands added in v1.2.8

func (a *If) GetOperands() Values

func (*If) GetPosition added in v1.2.8

func (c *If) GetPosition() *Position

source code position

func (*If) GetSymbolTable added in v1.2.8

func (a *If) GetSymbolTable() *blockSymbolTable

symbol-table

func (*If) GetUsers

func (r *If) GetUsers() Users

func (*If) GetValues

func (i *If) GetValues() Values

func (*If) GetVariable added in v1.2.8

func (a *If) GetVariable() string

func (*If) HasLeftVariable added in v1.2.8

func (a *If) HasLeftVariable() bool

has left-instruction

func (*If) HasUsers added in v1.2.8

func (r *If) HasUsers() bool

func (*If) HasValues added in v1.2.8

func (i *If) HasValues() bool

----------- IF

func (*If) IsExtern added in v1.2.8

func (c *If) IsExtern() bool

func (*If) LineDisasm added in v1.2.8

func (i *If) LineDisasm() string

func (*If) NewError

func (c *If) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*If) ReplaceValue

func (i *If) ReplaceValue(v Value, to Value)

func (*If) SetBlock added in v1.2.8

func (a *If) SetBlock(block *BasicBlock)

func (*If) SetExtern added in v1.2.8

func (c *If) SetExtern(b bool)

func (*If) SetFunc added in v1.2.8

func (a *If) SetFunc(f *Function)

ssa function and block

func (*If) SetPosition added in v1.2.8

func (c *If) SetPosition(pos *Position)

func (*If) SetSymbolTable added in v1.2.8

func (a *If) SetSymbolTable(symbol *blockSymbolTable)

func (*If) SetVariable added in v1.2.8

func (a *If) SetVariable(v string)

variable

func (*If) String

func (i *If) String() string

----------- IF

type IfBuilder added in v1.2.8

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

func (*IfBuilder) BuildChild added in v1.2.8

func (i *IfBuilder) BuildChild(child *IfBuilder)

func (*IfBuilder) BuildCondition added in v1.2.8

func (i *IfBuilder) BuildCondition(condition func() Value)

func (*IfBuilder) BuildElif added in v1.2.8

func (i *IfBuilder) BuildElif(condition func() Value, body func())

func (*IfBuilder) BuildFalse added in v1.2.8

func (i *IfBuilder) BuildFalse(body func())

func (*IfBuilder) BuildTrue added in v1.2.8

func (i *IfBuilder) BuildTrue(body func())

func (*IfBuilder) Finish added in v1.2.8

func (i *IfBuilder) Finish()

type InspectVariableResult

type InspectVariableResult struct {
	VariableName   string
	ProbablyTypes  Types
	ProbablyValues Values
}

func (*InspectVariableResult) Merge

type Instruction

type Instruction interface {
	ErrorLogger

	LineDisasm() string

	GetOpcode() Opcode

	// function
	GetFunc() *Function
	SetFunc(*Function)
	// block
	GetBlock() *BasicBlock
	SetBlock(*BasicBlock)

	GetVariable() string
	SetVariable(variable string)

	// position
	GetPosition() *Position
	SetPosition(*Position)

	// symbol-table
	SetSymbolTable(*blockSymbolTable)
	GetSymbolTable() *blockSymbolTable

	// extern
	IsExtern() bool
	SetExtern(bool)

	// has left-value
	HasLeftVariable() bool
}

type InstructionNode added in v1.2.8

type InstructionNode interface {
	Node
	Instruction
}

type InstructionNodes added in v1.2.8

type InstructionNodes []InstructionNode

type InterfaceType

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

====================== interface type

func NewInterfaceType

func NewInterfaceType(name string) *InterfaceType

func (*InterfaceType) AddMethod added in v1.2.9

func (b *InterfaceType) AddMethod(id string, f *FunctionType)

func (*InterfaceType) GetMethod added in v1.2.8

func (i *InterfaceType) GetMethod() map[string]*FunctionType

func (*InterfaceType) GetTypeKind added in v1.2.8

func (i *InterfaceType) GetTypeKind() TypeKind

func (*InterfaceType) RawString added in v1.2.8

func (i *InterfaceType) RawString() string

func (*InterfaceType) SetMethod added in v1.2.8

func (i *InterfaceType) SetMethod(m map[string]*FunctionType)

func (*InterfaceType) String

func (i *InterfaceType) String() string

type Jump

type Jump struct {
	To *BasicBlock
	// contains filtered or unexported fields
}

----------- Jump The Jump instruction transfers control to the sole successor of its owning block.

the block containing Jump instruction only have one successor block

func NewJump added in v1.2.8

func NewJump(to *BasicBlock) *Jump

func (*Jump) AddLeftPositions added in v1.2.8

func (a *Jump) AddLeftPositions(pos *Position)

func (*Jump) AddLeftVariables added in v1.2.8

func (a *Jump) AddLeftVariables(name string)

func (*Jump) GetBlock

func (a *Jump) GetBlock() *BasicBlock

func (*Jump) GetFunc added in v1.2.8

func (a *Jump) GetFunc() *Function

func (*Jump) GetLeftItem added in v1.2.8

func (a *Jump) GetLeftItem() LeftInstruction

func (*Jump) GetLeftPosition added in v1.2.8

func (a *Jump) GetLeftPosition() *Position

func (*Jump) GetLeftPositions added in v1.2.8

func (a *Jump) GetLeftPositions() []*Position

left-instruction: left-position

func (*Jump) GetLeftVariables added in v1.2.8

func (a *Jump) GetLeftVariables() []string

left-instruction: variable

func (*Jump) GetOpcode added in v1.2.8

func (i *Jump) GetOpcode() Opcode

func (*Jump) GetOperand added in v1.2.8

func (a *Jump) GetOperand(i int) Value

func (*Jump) GetOperandNum added in v1.2.8

func (a *Jump) GetOperandNum() int

func (*Jump) GetOperands added in v1.2.8

func (a *Jump) GetOperands() Values

func (*Jump) GetPosition added in v1.2.8

func (c *Jump) GetPosition() *Position

source code position

func (*Jump) GetSymbolTable added in v1.2.8

func (a *Jump) GetSymbolTable() *blockSymbolTable

symbol-table

func (*Jump) GetVariable added in v1.2.8

func (a *Jump) GetVariable() string

func (*Jump) HasLeftVariable added in v1.2.8

func (a *Jump) HasLeftVariable() bool

has left-instruction

func (*Jump) IsExtern added in v1.2.8

func (c *Jump) IsExtern() bool

func (*Jump) LineDisasm added in v1.2.8

func (p *Jump) LineDisasm() string

func (*Jump) NewError

func (c *Jump) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*Jump) SetBlock added in v1.2.8

func (a *Jump) SetBlock(block *BasicBlock)

func (*Jump) SetExtern added in v1.2.8

func (c *Jump) SetExtern(b bool)

func (*Jump) SetFunc added in v1.2.8

func (a *Jump) SetFunc(f *Function)

ssa function and block

func (*Jump) SetPosition added in v1.2.8

func (c *Jump) SetPosition(pos *Position)

func (*Jump) SetSymbolTable added in v1.2.8

func (a *Jump) SetSymbolTable(symbol *blockSymbolTable)

func (*Jump) SetVariable added in v1.2.8

func (a *Jump) SetVariable(v string)

variable

func (*Jump) String

func (j *Jump) String() string

----------- Jump

type LeftInstruction added in v1.2.8

type LeftInstruction interface {
	// Instruction
	// variable
	GetLeftVariables() []string
	AddLeftVariables(variable string)

	// must
	// left-value position
	// get all left position
	GetLeftPositions() []*Position
	// get last left position
	GetLeftPosition() *Position
	AddLeftPositions(*Position) // add left position
}

type LeftValue

type LeftValue interface {
	Assign(Value, *FunctionBuilder)
	GetPosition() *Position
	GetValue(*FunctionBuilder) Value
}

--------------- for assign

type Loop added in v1.2.8

type Loop struct {
	Body, Exit *BasicBlock

	Init, Cond, Step Value
	Key              Value
	// contains filtered or unexported fields
}

----------- For for loop

func NewLoop added in v1.2.8

func NewLoop(cond Value) *Loop

func (*Loop) AddLeftPositions added in v1.2.8

func (a *Loop) AddLeftPositions(pos *Position)

func (*Loop) AddLeftVariables added in v1.2.8

func (a *Loop) AddLeftVariables(name string)

func (*Loop) Finish added in v1.2.8

func (l *Loop) Finish(init, step []Value)

func (*Loop) GetBlock added in v1.2.8

func (a *Loop) GetBlock() *BasicBlock

func (*Loop) GetFunc added in v1.2.8

func (a *Loop) GetFunc() *Function

func (*Loop) GetLeftItem added in v1.2.8

func (a *Loop) GetLeftItem() LeftInstruction

func (*Loop) GetLeftPosition added in v1.2.8

func (a *Loop) GetLeftPosition() *Position

func (*Loop) GetLeftPositions added in v1.2.8

func (a *Loop) GetLeftPositions() []*Position

left-instruction: left-position

func (*Loop) GetLeftVariables added in v1.2.8

func (a *Loop) GetLeftVariables() []string

left-instruction: variable

func (*Loop) GetOpcode added in v1.2.8

func (i *Loop) GetOpcode() Opcode

func (*Loop) GetOperand added in v1.2.8

func (a *Loop) GetOperand(i int) Value

func (*Loop) GetOperandNum added in v1.2.8

func (a *Loop) GetOperandNum() int

func (*Loop) GetOperands added in v1.2.8

func (a *Loop) GetOperands() Values

func (*Loop) GetPosition added in v1.2.8

func (c *Loop) GetPosition() *Position

source code position

func (*Loop) GetSymbolTable added in v1.2.8

func (a *Loop) GetSymbolTable() *blockSymbolTable

symbol-table

func (*Loop) GetUsers added in v1.2.8

func (r *Loop) GetUsers() Users

func (*Loop) GetValues added in v1.2.8

func (l *Loop) GetValues() Values

func (*Loop) GetVariable added in v1.2.8

func (a *Loop) GetVariable() string

func (*Loop) HasLeftVariable added in v1.2.8

func (a *Loop) HasLeftVariable() bool

has left-instruction

func (*Loop) HasUsers added in v1.2.8

func (r *Loop) HasUsers() bool

func (*Loop) HasValues added in v1.2.8

func (l *Loop) HasValues() bool

----------- Loop

func (*Loop) IsExtern added in v1.2.8

func (c *Loop) IsExtern() bool

func (*Loop) LineDisasm added in v1.2.8

func (l *Loop) LineDisasm() string

func (*Loop) NewError added in v1.2.8

func (c *Loop) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*Loop) ReplaceValue added in v1.2.8

func (l *Loop) ReplaceValue(v Value, to Value)

func (*Loop) SetBlock added in v1.2.8

func (a *Loop) SetBlock(block *BasicBlock)

func (*Loop) SetExtern added in v1.2.8

func (c *Loop) SetExtern(b bool)

func (*Loop) SetFunc added in v1.2.8

func (a *Loop) SetFunc(f *Function)

ssa function and block

func (*Loop) SetPosition added in v1.2.8

func (c *Loop) SetPosition(pos *Position)

func (*Loop) SetSymbolTable added in v1.2.8

func (a *Loop) SetSymbolTable(symbol *blockSymbolTable)

func (*Loop) SetVariable added in v1.2.8

func (a *Loop) SetVariable(v string)

variable

func (*Loop) String added in v1.2.8

func (l *Loop) String() string

----------- Loop

type LoopBuilder added in v1.2.8

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

func (*LoopBuilder) BuildBody added in v1.2.8

func (lb *LoopBuilder) BuildBody(f func())

func (*LoopBuilder) BuildCondition added in v1.2.8

func (lb *LoopBuilder) BuildCondition(f func() Value)

func (*LoopBuilder) BuildFirstExpr added in v1.2.8

func (lb *LoopBuilder) BuildFirstExpr(f func() []Value)

func (*LoopBuilder) BuildThird added in v1.2.8

func (lb *LoopBuilder) BuildThird(f func() []Value)

func (*LoopBuilder) Finish added in v1.2.8

func (lb *LoopBuilder) Finish()

type Make added in v1.2.8

type Make struct {

	// when slice or map
	Len, Cap Value
	// contains filtered or unexported fields
}

----------- Make

func NewMake added in v1.2.8

func NewMake(parentI Value, typ Type, low, high, step, Len, Cap Value) *Make

func ToObject added in v1.2.8

func ToObject(v Instruction) (*Make, bool)

memory

func (*Make) AddLeftPositions added in v1.2.8

func (a *Make) AddLeftPositions(pos *Position)

func (*Make) AddLeftVariables added in v1.2.8

func (a *Make) AddLeftVariables(name string)

func (*Make) AddUser added in v1.2.8

func (n *Make) AddUser(u User)

for Value

func (*Make) GetBlock added in v1.2.8

func (a *Make) GetBlock() *BasicBlock

func (*Make) GetFunc added in v1.2.8

func (a *Make) GetFunc() *Function

func (*Make) GetLeftItem added in v1.2.8

func (a *Make) GetLeftItem() LeftInstruction

func (*Make) GetLeftPosition added in v1.2.8

func (a *Make) GetLeftPosition() *Position

func (*Make) GetLeftPositions added in v1.2.8

func (a *Make) GetLeftPositions() []*Position

left-instruction: left-position

func (*Make) GetLeftVariables added in v1.2.8

func (a *Make) GetLeftVariables() []string

left-instruction: variable

func (*Make) GetOpcode added in v1.2.8

func (i *Make) GetOpcode() Opcode

func (*Make) GetOperand added in v1.2.8

func (a *Make) GetOperand(i int) Value

func (*Make) GetOperandNum added in v1.2.8

func (a *Make) GetOperandNum() int

func (*Make) GetOperands added in v1.2.8

func (a *Make) GetOperands() Values

func (*Make) GetPosition added in v1.2.8

func (c *Make) GetPosition() *Position

source code position

func (*Make) GetSymbolTable added in v1.2.8

func (a *Make) GetSymbolTable() *blockSymbolTable

symbol-table

func (*Make) GetType added in v1.2.8

func (n *Make) GetType() Type

for Value : type

func (*Make) GetUsers added in v1.2.8

func (n *Make) GetUsers() Users

func (*Make) GetValues added in v1.2.8

func (i *Make) GetValues() Values

func (*Make) GetVariable added in v1.2.8

func (a *Make) GetVariable() string

func (*Make) HasLeftVariable added in v1.2.8

func (a *Make) HasLeftVariable() bool

has left-instruction

func (*Make) HasUsers added in v1.2.8

func (n *Make) HasUsers() bool

has/get user and value

func (*Make) HasValues added in v1.2.8

func (i *Make) HasValues() bool

// ----------- Make

func (*Make) IsExtern added in v1.2.8

func (c *Make) IsExtern() bool

func (*Make) LineDisasm added in v1.2.8

func (m *Make) LineDisasm() string

func (*Make) NewError added in v1.2.8

func (c *Make) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*Make) RemoveUser added in v1.2.8

func (n *Make) RemoveUser(u User)

func (*Make) ReplaceValue added in v1.2.8

func (i *Make) ReplaceValue(v, to Value)

func (*Make) SetBlock added in v1.2.8

func (a *Make) SetBlock(block *BasicBlock)

func (*Make) SetExtern added in v1.2.8

func (c *Make) SetExtern(b bool)

func (*Make) SetFunc added in v1.2.8

func (a *Make) SetFunc(f *Function)

ssa function and block

func (*Make) SetPosition added in v1.2.8

func (c *Make) SetPosition(pos *Position)

func (*Make) SetSymbolTable added in v1.2.8

func (a *Make) SetSymbolTable(symbol *blockSymbolTable)

func (*Make) SetType added in v1.2.8

func (n *Make) SetType(typ Type)

func (*Make) SetVariable added in v1.2.8

func (a *Make) SetVariable(v string)

variable

func (*Make) String added in v1.2.8

func (i *Make) String() string

----------- Interface

type MethodBuilder added in v1.2.9

type MethodBuilder interface {
	Build(Type, string) *FunctionType
	GetMethodNames(Type) []string
}
var ExternMethodBuilder MethodBuilder

type Next added in v1.2.8

type Next struct {
	Iter   Value
	InNext bool // "in" grammar
	// contains filtered or unexported fields
}

------------- Next

func NewNext added in v1.2.8

func NewNext(iter Value, isIn bool) *Next

func (*Next) AddLeftPositions added in v1.2.8

func (a *Next) AddLeftPositions(pos *Position)

func (*Next) AddLeftVariables added in v1.2.8

func (a *Next) AddLeftVariables(name string)

func (*Next) AddUser added in v1.2.8

func (n *Next) AddUser(u User)

for Value

func (*Next) GetBlock added in v1.2.8

func (a *Next) GetBlock() *BasicBlock

func (*Next) GetFunc added in v1.2.8

func (a *Next) GetFunc() *Function

func (*Next) GetLeftItem added in v1.2.8

func (a *Next) GetLeftItem() LeftInstruction

func (*Next) GetLeftPosition added in v1.2.8

func (a *Next) GetLeftPosition() *Position

func (*Next) GetLeftPositions added in v1.2.8

func (a *Next) GetLeftPositions() []*Position

left-instruction: left-position

func (*Next) GetLeftVariables added in v1.2.8

func (a *Next) GetLeftVariables() []string

left-instruction: variable

func (*Next) GetOpcode added in v1.2.8

func (i *Next) GetOpcode() Opcode

func (*Next) GetOperand added in v1.2.8

func (a *Next) GetOperand(i int) Value

func (*Next) GetOperandNum added in v1.2.8

func (a *Next) GetOperandNum() int

func (*Next) GetOperands added in v1.2.8

func (a *Next) GetOperands() Values

func (*Next) GetPosition added in v1.2.8

func (c *Next) GetPosition() *Position

source code position

func (*Next) GetSymbolTable added in v1.2.8

func (a *Next) GetSymbolTable() *blockSymbolTable

symbol-table

func (*Next) GetType added in v1.2.8

func (n *Next) GetType() Type

for Value : type

func (*Next) GetUsers added in v1.2.8

func (n *Next) GetUsers() Users

func (*Next) GetValues added in v1.2.8

func (n *Next) GetValues() Values

func (*Next) GetVariable added in v1.2.8

func (a *Next) GetVariable() string

func (*Next) HasLeftVariable added in v1.2.8

func (a *Next) HasLeftVariable() bool

has left-instruction

func (*Next) HasUsers added in v1.2.8

func (n *Next) HasUsers() bool

has/get user and value

func (*Next) HasValues added in v1.2.8

func (n *Next) HasValues() bool

// ----------- Next

func (*Next) IsExtern added in v1.2.8

func (c *Next) IsExtern() bool

func (*Next) LineDisasm added in v1.2.8

func (u *Next) LineDisasm() string

func (*Next) NewError added in v1.2.8

func (c *Next) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*Next) RemoveUser added in v1.2.8

func (n *Next) RemoveUser(u User)

func (*Next) ReplaceValue added in v1.2.8

func (n *Next) ReplaceValue(v, to Value)

func (*Next) SetBlock added in v1.2.8

func (a *Next) SetBlock(block *BasicBlock)

func (*Next) SetExtern added in v1.2.8

func (c *Next) SetExtern(b bool)

func (*Next) SetFunc added in v1.2.8

func (a *Next) SetFunc(f *Function)

ssa function and block

func (*Next) SetPosition added in v1.2.8

func (c *Next) SetPosition(pos *Position)

func (*Next) SetSymbolTable added in v1.2.8

func (a *Next) SetSymbolTable(symbol *blockSymbolTable)

func (*Next) SetType added in v1.2.8

func (n *Next) SetType(typ Type)

func (*Next) SetVariable added in v1.2.8

func (a *Next) SetVariable(v string)

variable

func (*Next) String added in v1.2.8

func (n *Next) String() string

type Node

type Node interface {
	// string
	String() string

	// for graph
	HasUsers() bool
	GetUsers() Users
	HasValues() bool
	GetValues() Values
}

data-flow

func ToNode added in v1.2.8

func ToNode(a any) (Node, bool)

for DataFlowNode cover

type ObjectType added in v1.2.8

type ObjectType struct {
	Name string
	Kind TypeKind
	Len  int
	Key  []Value

	FieldTypes []Type

	AnonymousField []*ObjectType

	Combination bool // function multiple return will combined to struct

	KeyTyp    Type
	FieldType Type
	// contains filtered or unexported fields
}

==================== interface type

var NextType *ObjectType = nil

func NewMapType

func NewMapType(key, field Type) *ObjectType

func NewObjectType added in v1.2.8

func NewObjectType() *ObjectType

func NewSliceType

func NewSliceType(elem Type) *ObjectType

for slice build

func NewStructType added in v1.2.8

func NewStructType() *ObjectType

func ToObjectType added in v1.2.8

func ToObjectType(t Type) (*ObjectType, bool)

func (*ObjectType) AddField added in v1.2.8

func (s *ObjectType) AddField(key Value, field Type)

for struct build

func (*ObjectType) AddMethod added in v1.2.9

func (b *ObjectType) AddMethod(id string, f *FunctionType)

func (*ObjectType) Finish added in v1.2.8

func (s *ObjectType) Finish()

===================== Finish simply

func (*ObjectType) GetField added in v1.2.8

func (s *ObjectType) GetField(key Value) Type

return (field-type, key-type)

func (*ObjectType) GetMethod added in v1.2.8

func (i *ObjectType) GetMethod() map[string]*FunctionType

func (*ObjectType) GetTypeKind added in v1.2.8

func (i *ObjectType) GetTypeKind() TypeKind

func (ObjectType) RawString added in v1.2.8

func (itype ObjectType) RawString() string

func (*ObjectType) SetMethod added in v1.2.8

func (i *ObjectType) SetMethod(m map[string]*FunctionType)

func (*ObjectType) SetName added in v1.2.8

func (i *ObjectType) SetName(name string)

func (ObjectType) String added in v1.2.8

func (itype ObjectType) String() string

type Opcode added in v1.2.8

type Opcode string

type Package

type Package struct {
	Name string
	// point to program
	Prog *Program
	// function list
	Funcs []*Function
}

func NewPackage added in v1.2.8

func NewPackage(name string) *Package

func (*Package) NewFunction

func (p *Package) NewFunction(name string) *Function

func (*Package) NewFunctionWithParent

func (p *Package) NewFunctionWithParent(name string, parent *Function) *Function

type Panic added in v1.2.8

type Panic struct {
	Info Value
	// contains filtered or unexported fields
}

-------------- PANIC

func (*Panic) AddLeftPositions added in v1.2.8

func (a *Panic) AddLeftPositions(pos *Position)

func (*Panic) AddLeftVariables added in v1.2.8

func (a *Panic) AddLeftVariables(name string)

func (*Panic) AddUser added in v1.2.8

func (n *Panic) AddUser(u User)

for Value

func (*Panic) GetBlock added in v1.2.8

func (a *Panic) GetBlock() *BasicBlock

func (*Panic) GetFunc added in v1.2.8

func (a *Panic) GetFunc() *Function

func (*Panic) GetLeftItem added in v1.2.8

func (a *Panic) GetLeftItem() LeftInstruction

func (*Panic) GetLeftPosition added in v1.2.8

func (a *Panic) GetLeftPosition() *Position

func (*Panic) GetLeftPositions added in v1.2.8

func (a *Panic) GetLeftPositions() []*Position

left-instruction: left-position

func (*Panic) GetLeftVariables added in v1.2.8

func (a *Panic) GetLeftVariables() []string

left-instruction: variable

func (*Panic) GetOpcode added in v1.2.8

func (i *Panic) GetOpcode() Opcode

func (*Panic) GetOperand added in v1.2.8

func (a *Panic) GetOperand(i int) Value

func (*Panic) GetOperandNum added in v1.2.8

func (a *Panic) GetOperandNum() int

func (*Panic) GetOperands added in v1.2.8

func (a *Panic) GetOperands() Values

func (*Panic) GetPosition added in v1.2.8

func (c *Panic) GetPosition() *Position

source code position

func (*Panic) GetSymbolTable added in v1.2.8

func (a *Panic) GetSymbolTable() *blockSymbolTable

symbol-table

func (*Panic) GetType added in v1.2.8

func (n *Panic) GetType() Type

for Value : type

func (*Panic) GetUsers added in v1.2.8

func (n *Panic) GetUsers() Users

func (*Panic) GetValues added in v1.2.8

func (p *Panic) GetValues() Values

func (*Panic) GetVariable added in v1.2.8

func (a *Panic) GetVariable() string

func (*Panic) HasLeftVariable added in v1.2.8

func (a *Panic) HasLeftVariable() bool

has left-instruction

func (*Panic) HasUsers added in v1.2.8

func (n *Panic) HasUsers() bool

has/get user and value

func (*Panic) HasValues added in v1.2.8

func (p *Panic) HasValues() bool

------------- PANIC

func (*Panic) IsExtern added in v1.2.8

func (c *Panic) IsExtern() bool

func (*Panic) LineDisasm added in v1.2.8

func (p *Panic) LineDisasm() string

func (*Panic) NewError added in v1.2.8

func (c *Panic) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*Panic) RemoveUser added in v1.2.8

func (n *Panic) RemoveUser(u User)

func (*Panic) ReplaceValue added in v1.2.8

func (p *Panic) ReplaceValue(v, to Value)

func (*Panic) SetBlock added in v1.2.8

func (a *Panic) SetBlock(block *BasicBlock)

func (*Panic) SetExtern added in v1.2.8

func (c *Panic) SetExtern(b bool)

func (*Panic) SetFunc added in v1.2.8

func (a *Panic) SetFunc(f *Function)

ssa function and block

func (*Panic) SetPosition added in v1.2.8

func (c *Panic) SetPosition(pos *Position)

func (*Panic) SetSymbolTable added in v1.2.8

func (a *Panic) SetSymbolTable(symbol *blockSymbolTable)

func (*Panic) SetType added in v1.2.8

func (n *Panic) SetType(typ Type)

func (*Panic) SetVariable added in v1.2.8

func (a *Panic) SetVariable(v string)

variable

func (*Panic) String added in v1.2.8

func (p *Panic) String() string

type Parameter

type Parameter struct {
	IsFreeValue bool

	// for extern lib
	BuildField func(string) Value

	//TODO: is modify , not cover
	IsModify bool
	// contains filtered or unexported fields
}

----------- Parameter

func NewParam added in v1.2.8

func NewParam(variable string, isFreeValue bool, fun *Function) *Parameter

func ToParameter added in v1.2.8

func ToParameter(v Instruction) (*Parameter, bool)

func (*Parameter) AddLeftPositions added in v1.2.8

func (a *Parameter) AddLeftPositions(pos *Position)

func (*Parameter) AddLeftVariables added in v1.2.8

func (a *Parameter) AddLeftVariables(name string)

func (*Parameter) AddUser

func (n *Parameter) AddUser(u User)

for Value

func (*Parameter) GetBlock added in v1.2.8

func (a *Parameter) GetBlock() *BasicBlock

func (*Parameter) GetFunc added in v1.2.8

func (a *Parameter) GetFunc() *Function

func (*Parameter) GetLeftItem added in v1.2.8

func (a *Parameter) GetLeftItem() LeftInstruction

func (*Parameter) GetLeftPosition added in v1.2.8

func (a *Parameter) GetLeftPosition() *Position

func (*Parameter) GetLeftPositions added in v1.2.8

func (a *Parameter) GetLeftPositions() []*Position

left-instruction: left-position

func (*Parameter) GetLeftVariables added in v1.2.8

func (a *Parameter) GetLeftVariables() []string

left-instruction: variable

func (*Parameter) GetOpcode added in v1.2.8

func (i *Parameter) GetOpcode() Opcode

func (*Parameter) GetOperand added in v1.2.8

func (a *Parameter) GetOperand(i int) Value

func (*Parameter) GetOperandNum added in v1.2.8

func (a *Parameter) GetOperandNum() int

func (*Parameter) GetOperands added in v1.2.8

func (a *Parameter) GetOperands() Values

func (*Parameter) GetPosition added in v1.2.8

func (c *Parameter) GetPosition() *Position

source code position

func (*Parameter) GetSymbolTable added in v1.2.8

func (a *Parameter) GetSymbolTable() *blockSymbolTable

symbol-table

func (*Parameter) GetType

func (n *Parameter) GetType() Type

for Value : type

func (*Parameter) GetUsers

func (n *Parameter) GetUsers() Users

func (*Parameter) GetValues

func (p *Parameter) GetValues() Values

func (*Parameter) GetVariable added in v1.2.8

func (a *Parameter) GetVariable() string

func (*Parameter) HasLeftVariable added in v1.2.8

func (a *Parameter) HasLeftVariable() bool

has left-instruction

func (*Parameter) HasUsers added in v1.2.8

func (n *Parameter) HasUsers() bool

has/get user and value

func (*Parameter) HasValues added in v1.2.8

func (p *Parameter) HasValues() bool

// ----------- param

func (*Parameter) IsExtern added in v1.2.8

func (c *Parameter) IsExtern() bool

func (*Parameter) LineDisasm added in v1.2.8

func (p *Parameter) LineDisasm() string

func (*Parameter) NewError added in v1.2.8

func (c *Parameter) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*Parameter) RemoveUser

func (n *Parameter) RemoveUser(u User)

func (*Parameter) SetBlock added in v1.2.8

func (a *Parameter) SetBlock(block *BasicBlock)

func (*Parameter) SetDefault added in v1.2.8

func (p *Parameter) SetDefault(v Value)

func (*Parameter) SetExtern added in v1.2.8

func (c *Parameter) SetExtern(b bool)

func (*Parameter) SetFunc added in v1.2.8

func (a *Parameter) SetFunc(f *Function)

ssa function and block

func (*Parameter) SetPosition added in v1.2.8

func (c *Parameter) SetPosition(pos *Position)

func (*Parameter) SetSymbolTable added in v1.2.8

func (a *Parameter) SetSymbolTable(symbol *blockSymbolTable)

func (*Parameter) SetType

func (n *Parameter) SetType(typ Type)

func (*Parameter) SetVariable added in v1.2.8

func (a *Parameter) SetVariable(v string)

variable

func (*Parameter) String

func (p *Parameter) String() string

----------- Parameter

type Phi

type Phi struct {
	Edge []Value // edge[i] from phi.Block.Preds[i]
	// contains filtered or unexported fields
}

----------- Phi

func NewPhi

func NewPhi(block *BasicBlock, variable string, create bool) *Phi

func ToPhi added in v1.2.8

func ToPhi(v Instruction) (*Phi, bool)

func (*Phi) AddEdge added in v1.2.8

func (p *Phi) AddEdge(v Value)

func (*Phi) AddLeftPositions added in v1.2.8

func (a *Phi) AddLeftPositions(pos *Position)

func (*Phi) AddLeftVariables added in v1.2.8

func (a *Phi) AddLeftVariables(name string)

func (*Phi) AddUser

func (n *Phi) AddUser(u User)

for Value

func (*Phi) Build

func (phi *Phi) Build() Value

func (*Phi) GetBlock

func (a *Phi) GetBlock() *BasicBlock

func (*Phi) GetFunc added in v1.2.8

func (a *Phi) GetFunc() *Function

func (*Phi) GetLeftItem added in v1.2.8

func (a *Phi) GetLeftItem() LeftInstruction

func (*Phi) GetLeftPosition added in v1.2.8

func (a *Phi) GetLeftPosition() *Position

func (*Phi) GetLeftPositions added in v1.2.8

func (a *Phi) GetLeftPositions() []*Position

left-instruction: left-position

func (*Phi) GetLeftVariables added in v1.2.8

func (a *Phi) GetLeftVariables() []string

left-instruction: variable

func (*Phi) GetOpcode added in v1.2.8

func (i *Phi) GetOpcode() Opcode

func (*Phi) GetOperand added in v1.2.8

func (a *Phi) GetOperand(i int) Value

func (*Phi) GetOperandNum added in v1.2.8

func (a *Phi) GetOperandNum() int

func (*Phi) GetOperands added in v1.2.8

func (a *Phi) GetOperands() Values

func (*Phi) GetPosition added in v1.2.8

func (c *Phi) GetPosition() *Position

source code position

func (*Phi) GetSymbolTable added in v1.2.8

func (a *Phi) GetSymbolTable() *blockSymbolTable

symbol-table

func (*Phi) GetType

func (n *Phi) GetType() Type

for Value : type

func (*Phi) GetUsers

func (n *Phi) GetUsers() Users

func (*Phi) GetValues

func (p *Phi) GetValues() Values

func (*Phi) GetVariable added in v1.2.8

func (a *Phi) GetVariable() string

func (*Phi) HasLeftVariable added in v1.2.8

func (a *Phi) HasLeftVariable() bool

has left-instruction

func (*Phi) HasUsers added in v1.2.8

func (n *Phi) HasUsers() bool

has/get user and value

func (*Phi) HasValues added in v1.2.8

func (p *Phi) HasValues() bool

----------- Phi

func (*Phi) IsExtern added in v1.2.8

func (c *Phi) IsExtern() bool

func (*Phi) LineDisasm added in v1.2.8

func (p *Phi) LineDisasm() string

func (*Phi) Name

func (phi *Phi) Name() string

func (*Phi) NewError

func (c *Phi) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*Phi) RemoveUser

func (n *Phi) RemoveUser(u User)

func (*Phi) Replace added in v1.2.8

func (phi *Phi) Replace(to Value)

func (*Phi) ReplaceValue

func (p *Phi) ReplaceValue(v Value, to Value)

func (*Phi) SetBlock added in v1.2.8

func (a *Phi) SetBlock(block *BasicBlock)

func (*Phi) SetExtern added in v1.2.8

func (c *Phi) SetExtern(b bool)

func (*Phi) SetFunc added in v1.2.8

func (a *Phi) SetFunc(f *Function)

ssa function and block

func (*Phi) SetPosition added in v1.2.8

func (c *Phi) SetPosition(pos *Position)

func (*Phi) SetSymbolTable added in v1.2.8

func (a *Phi) SetSymbolTable(symbol *blockSymbolTable)

func (*Phi) SetType

func (n *Phi) SetType(typ Type)

func (*Phi) SetVariable added in v1.2.8

func (a *Phi) SetVariable(v string)

variable

func (*Phi) String

func (p *Phi) String() string

----------- Phi

type Position

type Position struct {
	SourceCode  string
	StartLine   int
	StartColumn int
	EndLine     int
	EndColumn   int
}

func (*Position) String

func (p *Position) String() string

type Program

type Program struct {
	// package list
	Packages []*Package
	// contains filtered or unexported fields
}

both instruction and value

func NewProgram

func NewProgram() *Program

func (*Program) AddPackage added in v1.2.8

func (prog *Program) AddPackage(pkg *Package)

func (*Program) Build

func (prog *Program) Build(b Builder)

build enter pointer front implement `Builder`

func (*Program) GetErrors

func (prog *Program) GetErrors() SSAErrors

func (*Program) InspectVariable

func (p *Program) InspectVariable(varName string) *InspectVariableResult

func (*Program) InspectVariableLast added in v1.2.8

func (p *Program) InspectVariableLast(varName string) *InspectVariableResult

func (*Program) Show

func (p *Program) Show()

func (*Program) ShowWithSource

func (p *Program) ShowWithSource()

type Recover added in v1.2.8

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

--------------- RECOVER

func (*Recover) AddLeftPositions added in v1.2.8

func (a *Recover) AddLeftPositions(pos *Position)

func (*Recover) AddLeftVariables added in v1.2.8

func (a *Recover) AddLeftVariables(name string)

func (*Recover) AddUser added in v1.2.8

func (n *Recover) AddUser(u User)

for Value

func (*Recover) GetBlock added in v1.2.8

func (a *Recover) GetBlock() *BasicBlock

func (*Recover) GetFunc added in v1.2.8

func (a *Recover) GetFunc() *Function

func (*Recover) GetLeftItem added in v1.2.8

func (a *Recover) GetLeftItem() LeftInstruction

func (*Recover) GetLeftPosition added in v1.2.8

func (a *Recover) GetLeftPosition() *Position

func (*Recover) GetLeftPositions added in v1.2.8

func (a *Recover) GetLeftPositions() []*Position

left-instruction: left-position

func (*Recover) GetLeftVariables added in v1.2.8

func (a *Recover) GetLeftVariables() []string

left-instruction: variable

func (*Recover) GetOpcode added in v1.2.8

func (i *Recover) GetOpcode() Opcode

func (*Recover) GetOperand added in v1.2.8

func (a *Recover) GetOperand(i int) Value

func (*Recover) GetOperandNum added in v1.2.8

func (a *Recover) GetOperandNum() int

func (*Recover) GetOperands added in v1.2.8

func (a *Recover) GetOperands() Values

func (*Recover) GetPosition added in v1.2.8

func (c *Recover) GetPosition() *Position

source code position

func (*Recover) GetSymbolTable added in v1.2.8

func (a *Recover) GetSymbolTable() *blockSymbolTable

symbol-table

func (*Recover) GetType added in v1.2.8

func (n *Recover) GetType() Type

for Value : type

func (*Recover) GetUsers added in v1.2.8

func (n *Recover) GetUsers() Users

func (*Recover) GetValues added in v1.2.8

func (r *Recover) GetValues() Values

func (*Recover) GetVariable added in v1.2.8

func (a *Recover) GetVariable() string

func (*Recover) HasLeftVariable added in v1.2.8

func (a *Recover) HasLeftVariable() bool

has left-instruction

func (*Recover) HasUsers added in v1.2.8

func (n *Recover) HasUsers() bool

has/get user and value

func (*Recover) HasValues added in v1.2.8

func (r *Recover) HasValues() bool

---------- RECOVER

func (*Recover) IsExtern added in v1.2.8

func (c *Recover) IsExtern() bool

func (*Recover) LineDisasm added in v1.2.8

func (r *Recover) LineDisasm() string

func (*Recover) NewError added in v1.2.8

func (c *Recover) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*Recover) RemoveUser added in v1.2.8

func (n *Recover) RemoveUser(u User)

func (*Recover) SetBlock added in v1.2.8

func (a *Recover) SetBlock(block *BasicBlock)

func (*Recover) SetExtern added in v1.2.8

func (c *Recover) SetExtern(b bool)

func (*Recover) SetFunc added in v1.2.8

func (a *Recover) SetFunc(f *Function)

ssa function and block

func (*Recover) SetPosition added in v1.2.8

func (c *Recover) SetPosition(pos *Position)

func (*Recover) SetSymbolTable added in v1.2.8

func (a *Recover) SetSymbolTable(symbol *blockSymbolTable)

func (*Recover) SetType added in v1.2.8

func (n *Recover) SetType(typ Type)

func (*Recover) SetVariable added in v1.2.8

func (a *Recover) SetVariable(v string)

variable

func (*Recover) String added in v1.2.8

func (r *Recover) String() string

type Return

type Return struct {
	Results []Value
	// contains filtered or unexported fields
}

----------- Return The Return instruction returns values and control back to the calling function.

func NewReturn added in v1.2.8

func NewReturn(vs []Value) *Return

func (*Return) AddLeftPositions added in v1.2.8

func (a *Return) AddLeftPositions(pos *Position)

func (*Return) AddLeftVariables added in v1.2.8

func (a *Return) AddLeftVariables(name string)

func (*Return) AddUser added in v1.2.9

func (n *Return) AddUser(u User)

for Value

func (*Return) GetBlock

func (a *Return) GetBlock() *BasicBlock

func (*Return) GetFunc added in v1.2.8

func (a *Return) GetFunc() *Function

func (*Return) GetLeftItem added in v1.2.8

func (a *Return) GetLeftItem() LeftInstruction

func (*Return) GetLeftPosition added in v1.2.8

func (a *Return) GetLeftPosition() *Position

func (*Return) GetLeftPositions added in v1.2.8

func (a *Return) GetLeftPositions() []*Position

left-instruction: left-position

func (*Return) GetLeftVariables added in v1.2.8

func (a *Return) GetLeftVariables() []string

left-instruction: variable

func (*Return) GetOpcode added in v1.2.8

func (i *Return) GetOpcode() Opcode

func (*Return) GetOperand added in v1.2.8

func (a *Return) GetOperand(i int) Value

func (*Return) GetOperandNum added in v1.2.8

func (a *Return) GetOperandNum() int

func (*Return) GetOperands added in v1.2.8

func (a *Return) GetOperands() Values

func (*Return) GetPosition added in v1.2.8

func (c *Return) GetPosition() *Position

source code position

func (*Return) GetSymbolTable added in v1.2.8

func (a *Return) GetSymbolTable() *blockSymbolTable

symbol-table

func (*Return) GetType

func (n *Return) GetType() Type

for Value : type

func (*Return) GetUsers

func (r *Return) GetUsers() Users

func (*Return) GetValues

func (r *Return) GetValues() Values

func (*Return) GetVariable added in v1.2.8

func (a *Return) GetVariable() string

func (*Return) HasLeftVariable added in v1.2.8

func (a *Return) HasLeftVariable() bool

has left-instruction

func (*Return) HasUsers added in v1.2.8

func (r *Return) HasUsers() bool

node

func (*Return) HasValues added in v1.2.8

func (r *Return) HasValues() bool

----------- Return

func (*Return) IsExtern added in v1.2.8

func (c *Return) IsExtern() bool

func (*Return) LineDisasm added in v1.2.8

func (r *Return) LineDisasm() string

func (*Return) NewError

func (c *Return) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*Return) RemoveUser added in v1.2.9

func (n *Return) RemoveUser(u User)

func (*Return) ReplaceValue

func (r *Return) ReplaceValue(v Value, to Value)

func (*Return) SetBlock added in v1.2.8

func (a *Return) SetBlock(block *BasicBlock)

func (*Return) SetExtern added in v1.2.8

func (c *Return) SetExtern(b bool)

func (*Return) SetFunc added in v1.2.8

func (a *Return) SetFunc(f *Function)

ssa function and block

func (*Return) SetPosition added in v1.2.8

func (c *Return) SetPosition(pos *Position)

func (*Return) SetSymbolTable added in v1.2.8

func (a *Return) SetSymbolTable(symbol *blockSymbolTable)

func (*Return) SetType

func (n *Return) SetType(typ Type)

func (*Return) SetVariable added in v1.2.8

func (a *Return) SetVariable(v string)

variable

func (*Return) String

func (r *Return) String() string

----------- Return

type SSAError

type SSAError struct {
	Pos *Position

	Message string
	Kind    ErrorKind
	// contains filtered or unexported fields
}

func (SSAError) String

func (err SSAError) String() string

type SSAErrors

type SSAErrors []*SSAError

func (SSAErrors) String

func (errs SSAErrors) String() string

type SideEffect added in v1.2.9

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

----------- SideEffect

func NewSideEffect added in v1.2.9

func NewSideEffect(variable string, target Value) *SideEffect

func (*SideEffect) AddLeftPositions added in v1.2.9

func (a *SideEffect) AddLeftPositions(pos *Position)

func (*SideEffect) AddLeftVariables added in v1.2.9

func (a *SideEffect) AddLeftVariables(name string)

func (*SideEffect) AddUser added in v1.2.9

func (n *SideEffect) AddUser(u User)

for Value

func (*SideEffect) GetBlock added in v1.2.9

func (a *SideEffect) GetBlock() *BasicBlock

func (*SideEffect) GetFunc added in v1.2.9

func (a *SideEffect) GetFunc() *Function

func (*SideEffect) GetLeftItem added in v1.2.9

func (a *SideEffect) GetLeftItem() LeftInstruction

func (*SideEffect) GetLeftPosition added in v1.2.9

func (a *SideEffect) GetLeftPosition() *Position

func (*SideEffect) GetLeftPositions added in v1.2.9

func (a *SideEffect) GetLeftPositions() []*Position

left-instruction: left-position

func (*SideEffect) GetLeftVariables added in v1.2.9

func (a *SideEffect) GetLeftVariables() []string

left-instruction: variable

func (*SideEffect) GetOpcode added in v1.2.9

func (i *SideEffect) GetOpcode() Opcode

func (*SideEffect) GetOperand added in v1.2.9

func (a *SideEffect) GetOperand(i int) Value

func (*SideEffect) GetOperandNum added in v1.2.9

func (a *SideEffect) GetOperandNum() int

func (*SideEffect) GetOperands added in v1.2.9

func (a *SideEffect) GetOperands() Values

func (*SideEffect) GetPosition added in v1.2.9

func (c *SideEffect) GetPosition() *Position

source code position

func (*SideEffect) GetSymbolTable added in v1.2.9

func (a *SideEffect) GetSymbolTable() *blockSymbolTable

symbol-table

func (*SideEffect) GetType added in v1.2.9

func (n *SideEffect) GetType() Type

for Value : type

func (*SideEffect) GetUsers added in v1.2.9

func (n *SideEffect) GetUsers() Users

func (*SideEffect) GetValues added in v1.2.9

func (s *SideEffect) GetValues() Values

func (*SideEffect) GetVariable added in v1.2.9

func (a *SideEffect) GetVariable() string

func (*SideEffect) HasLeftVariable added in v1.2.9

func (a *SideEffect) HasLeftVariable() bool

has left-instruction

func (*SideEffect) HasUsers added in v1.2.9

func (n *SideEffect) HasUsers() bool

has/get user and value

func (*SideEffect) HasValues added in v1.2.9

func (s *SideEffect) HasValues() bool

------------ SideEffect

func (*SideEffect) IsExtern added in v1.2.9

func (c *SideEffect) IsExtern() bool

func (*SideEffect) LineDisasm added in v1.2.9

func (s *SideEffect) LineDisasm() string

func (*SideEffect) NewError added in v1.2.9

func (c *SideEffect) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*SideEffect) RemoveUser added in v1.2.9

func (n *SideEffect) RemoveUser(u User)

func (*SideEffect) ReplaceValue added in v1.2.9

func (s *SideEffect) ReplaceValue(v Value, to Value)

func (*SideEffect) SetBlock added in v1.2.9

func (a *SideEffect) SetBlock(block *BasicBlock)

func (*SideEffect) SetExtern added in v1.2.9

func (c *SideEffect) SetExtern(b bool)

func (*SideEffect) SetFunc added in v1.2.9

func (a *SideEffect) SetFunc(f *Function)

ssa function and block

func (*SideEffect) SetPosition added in v1.2.9

func (c *SideEffect) SetPosition(pos *Position)

func (*SideEffect) SetSymbolTable added in v1.2.9

func (a *SideEffect) SetSymbolTable(symbol *blockSymbolTable)

func (*SideEffect) SetType added in v1.2.9

func (n *SideEffect) SetType(typ Type)

func (*SideEffect) SetVariable added in v1.2.9

func (a *SideEffect) SetVariable(v string)

variable

func (*SideEffect) String added in v1.2.9

func (s *SideEffect) String() string

type Switch

type Switch struct {
	Cond         Value
	DefaultBlock *BasicBlock

	Label []SwitchLabel
	// contains filtered or unexported fields
}

func NewSwitch added in v1.2.8

func NewSwitch(cond Value, defaultb *BasicBlock, label []SwitchLabel) *Switch

func (*Switch) AddLeftPositions added in v1.2.8

func (a *Switch) AddLeftPositions(pos *Position)

func (*Switch) AddLeftVariables added in v1.2.8

func (a *Switch) AddLeftVariables(name string)

func (*Switch) GetBlock

func (a *Switch) GetBlock() *BasicBlock

func (*Switch) GetFunc added in v1.2.8

func (a *Switch) GetFunc() *Function

func (*Switch) GetLeftItem added in v1.2.8

func (a *Switch) GetLeftItem() LeftInstruction

func (*Switch) GetLeftPosition added in v1.2.8

func (a *Switch) GetLeftPosition() *Position

func (*Switch) GetLeftPositions added in v1.2.8

func (a *Switch) GetLeftPositions() []*Position

left-instruction: left-position

func (*Switch) GetLeftVariables added in v1.2.8

func (a *Switch) GetLeftVariables() []string

left-instruction: variable

func (*Switch) GetOpcode added in v1.2.8

func (i *Switch) GetOpcode() Opcode

func (*Switch) GetOperand added in v1.2.8

func (a *Switch) GetOperand(i int) Value

func (*Switch) GetOperandNum added in v1.2.8

func (a *Switch) GetOperandNum() int

func (*Switch) GetOperands added in v1.2.8

func (a *Switch) GetOperands() Values

func (*Switch) GetPosition added in v1.2.8

func (c *Switch) GetPosition() *Position

source code position

func (*Switch) GetSymbolTable added in v1.2.8

func (a *Switch) GetSymbolTable() *blockSymbolTable

symbol-table

func (*Switch) GetUsers

func (r *Switch) GetUsers() Users

func (*Switch) GetValues

func (sw *Switch) GetValues() Values

func (*Switch) GetVariable added in v1.2.8

func (a *Switch) GetVariable() string

func (*Switch) HasLeftVariable added in v1.2.8

func (a *Switch) HasLeftVariable() bool

has left-instruction

func (*Switch) HasUsers added in v1.2.8

func (r *Switch) HasUsers() bool

func (*Switch) HasValues added in v1.2.8

func (sw *Switch) HasValues() bool

----------- Switch

func (*Switch) IsExtern added in v1.2.8

func (c *Switch) IsExtern() bool

func (Switch) LineDisasm added in v1.2.8

func (s Switch) LineDisasm() string

func (*Switch) NewError

func (c *Switch) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*Switch) ReplaceValue

func (sw *Switch) ReplaceValue(v Value, to Value)

func (*Switch) SetBlock added in v1.2.8

func (a *Switch) SetBlock(block *BasicBlock)

func (*Switch) SetExtern added in v1.2.8

func (c *Switch) SetExtern(b bool)

func (*Switch) SetFunc added in v1.2.8

func (a *Switch) SetFunc(f *Function)

ssa function and block

func (*Switch) SetPosition added in v1.2.8

func (c *Switch) SetPosition(pos *Position)

func (*Switch) SetSymbolTable added in v1.2.8

func (a *Switch) SetSymbolTable(symbol *blockSymbolTable)

func (*Switch) SetVariable added in v1.2.8

func (a *Switch) SetVariable(v string)

variable

func (*Switch) String

func (sw *Switch) String() string

----------- Switch

type SwitchBuilder added in v1.2.8

type SwitchBuilder struct {
	DefaultBreak bool
	// contains filtered or unexported fields
}

func (*SwitchBuilder) BuildBody added in v1.2.8

func (t *SwitchBuilder) BuildBody(f func(int))

func (*SwitchBuilder) BuildCondition added in v1.2.8

func (t *SwitchBuilder) BuildCondition(f func() Value)

func (*SwitchBuilder) BuildDefault added in v1.2.8

func (t *SwitchBuilder) BuildDefault(f func())

func (*SwitchBuilder) BuildHandler added in v1.2.9

func (t *SwitchBuilder) BuildHandler(f func() (int, []Value))

func (*SwitchBuilder) Finish added in v1.2.9

func (t *SwitchBuilder) Finish()

type SwitchLabel

type SwitchLabel struct {
	Value Value
	Dest  *BasicBlock
}

----------- Switch

func NewSwitchLabel

func NewSwitchLabel(v Value, dest *BasicBlock) SwitchLabel

type TryBuilder added in v1.2.8

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

func (*TryBuilder) BuildCatch added in v1.2.8

func (t *TryBuilder) BuildCatch(f func())

func (*TryBuilder) BuildError added in v1.2.9

func (t *TryBuilder) BuildError(f func() string)

func (*TryBuilder) BuildFinally added in v1.2.8

func (t *TryBuilder) BuildFinally(f func())

func (*TryBuilder) BuildTryBlock added in v1.2.8

func (t *TryBuilder) BuildTryBlock(f func())

func (*TryBuilder) Finish added in v1.2.8

func (t *TryBuilder) Finish()

type Type

type Type interface {
	String() string
	RawString() string
	GetTypeKind() TypeKind

	// set/get method
	SetMethod(map[string]*FunctionType)
	AddMethod(string, *FunctionType)
	GetMethod() map[string]*FunctionType
}

func CalculateType added in v1.2.8

func CalculateType(ts []Type) Type

func GetType

func GetType(i any) Type

func GetTypeByStr

func GetTypeByStr(typ string) Type

type TypeCast added in v1.2.8

type TypeCast struct {
	Value Value
	// contains filtered or unexported fields
}

----------- Type-cast cast value -> type

func NewTypeCast added in v1.2.8

func NewTypeCast(typ Type, v Value) *TypeCast

func (*TypeCast) AddLeftPositions added in v1.2.8

func (a *TypeCast) AddLeftPositions(pos *Position)

func (*TypeCast) AddLeftVariables added in v1.2.8

func (a *TypeCast) AddLeftVariables(name string)

func (*TypeCast) AddUser added in v1.2.8

func (n *TypeCast) AddUser(u User)

for Value

func (*TypeCast) GetBlock added in v1.2.8

func (a *TypeCast) GetBlock() *BasicBlock

func (*TypeCast) GetFunc added in v1.2.8

func (a *TypeCast) GetFunc() *Function

func (*TypeCast) GetLeftItem added in v1.2.8

func (a *TypeCast) GetLeftItem() LeftInstruction

func (*TypeCast) GetLeftPosition added in v1.2.8

func (a *TypeCast) GetLeftPosition() *Position

func (*TypeCast) GetLeftPositions added in v1.2.8

func (a *TypeCast) GetLeftPositions() []*Position

left-instruction: left-position

func (*TypeCast) GetLeftVariables added in v1.2.8

func (a *TypeCast) GetLeftVariables() []string

left-instruction: variable

func (*TypeCast) GetOpcode added in v1.2.8

func (i *TypeCast) GetOpcode() Opcode

func (*TypeCast) GetOperand added in v1.2.8

func (a *TypeCast) GetOperand(i int) Value

func (*TypeCast) GetOperandNum added in v1.2.8

func (a *TypeCast) GetOperandNum() int

func (*TypeCast) GetOperands added in v1.2.8

func (a *TypeCast) GetOperands() Values

func (*TypeCast) GetPosition added in v1.2.8

func (c *TypeCast) GetPosition() *Position

source code position

func (*TypeCast) GetSymbolTable added in v1.2.8

func (a *TypeCast) GetSymbolTable() *blockSymbolTable

symbol-table

func (*TypeCast) GetType added in v1.2.8

func (n *TypeCast) GetType() Type

for Value : type

func (*TypeCast) GetUsers added in v1.2.8

func (n *TypeCast) GetUsers() Users

func (*TypeCast) GetValues added in v1.2.8

func (t *TypeCast) GetValues() Values

func (*TypeCast) GetVariable added in v1.2.8

func (a *TypeCast) GetVariable() string

func (*TypeCast) HasLeftVariable added in v1.2.8

func (a *TypeCast) HasLeftVariable() bool

has left-instruction

func (*TypeCast) HasUsers added in v1.2.8

func (n *TypeCast) HasUsers() bool

has/get user and value

func (*TypeCast) HasValues added in v1.2.8

func (t *TypeCast) HasValues() bool

// ----------- Typecast

func (*TypeCast) IsExtern added in v1.2.8

func (c *TypeCast) IsExtern() bool

func (*TypeCast) LineDisasm added in v1.2.8

func (t *TypeCast) LineDisasm() string

func (*TypeCast) NewError added in v1.2.8

func (c *TypeCast) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*TypeCast) RemoveUser added in v1.2.8

func (n *TypeCast) RemoveUser(u User)

func (*TypeCast) ReplaceValue added in v1.2.8

func (t *TypeCast) ReplaceValue(v, to Value)

func (*TypeCast) SetBlock added in v1.2.8

func (a *TypeCast) SetBlock(block *BasicBlock)

func (*TypeCast) SetExtern added in v1.2.8

func (c *TypeCast) SetExtern(b bool)

func (*TypeCast) SetFunc added in v1.2.8

func (a *TypeCast) SetFunc(f *Function)

ssa function and block

func (*TypeCast) SetPosition added in v1.2.8

func (c *TypeCast) SetPosition(pos *Position)

func (*TypeCast) SetSymbolTable added in v1.2.8

func (a *TypeCast) SetSymbolTable(symbol *blockSymbolTable)

func (*TypeCast) SetType added in v1.2.8

func (n *TypeCast) SetType(typ Type)

func (*TypeCast) SetVariable added in v1.2.8

func (a *TypeCast) SetVariable(v string)

variable

func (*TypeCast) String added in v1.2.8

func (t *TypeCast) String() string

type TypeKind

type TypeKind int

basic type

const (
	Number TypeKind = iota
	String
	Bytes
	Boolean
	UndefinedType // undefined is nil in golang
	Null          //
	Any           // any type
	ChanTypeKind
	ErrorType

	ObjectTypeKind
	SliceTypeKind
	MapTypeKind
	StructTypeKind

	InterfaceTypeKind
	FunctionTypeKind
)

type TypeValue added in v1.2.8

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

------------- type value

func NewTypeValue added in v1.2.8

func NewTypeValue(typ Type) *TypeValue

func (*TypeValue) AddLeftPositions added in v1.2.8

func (a *TypeValue) AddLeftPositions(pos *Position)

func (*TypeValue) AddLeftVariables added in v1.2.8

func (a *TypeValue) AddLeftVariables(name string)

func (*TypeValue) AddUser added in v1.2.8

func (n *TypeValue) AddUser(u User)

for Value

func (*TypeValue) GetBlock added in v1.2.8

func (a *TypeValue) GetBlock() *BasicBlock

func (*TypeValue) GetFunc added in v1.2.8

func (a *TypeValue) GetFunc() *Function

func (*TypeValue) GetLeftItem added in v1.2.8

func (a *TypeValue) GetLeftItem() LeftInstruction

func (*TypeValue) GetLeftPosition added in v1.2.8

func (a *TypeValue) GetLeftPosition() *Position

func (*TypeValue) GetLeftPositions added in v1.2.8

func (a *TypeValue) GetLeftPositions() []*Position

left-instruction: left-position

func (*TypeValue) GetLeftVariables added in v1.2.8

func (a *TypeValue) GetLeftVariables() []string

left-instruction: variable

func (*TypeValue) GetOpcode added in v1.2.8

func (i *TypeValue) GetOpcode() Opcode

func (*TypeValue) GetOperand added in v1.2.8

func (a *TypeValue) GetOperand(i int) Value

func (*TypeValue) GetOperandNum added in v1.2.8

func (a *TypeValue) GetOperandNum() int

func (*TypeValue) GetOperands added in v1.2.8

func (a *TypeValue) GetOperands() Values

func (*TypeValue) GetPosition added in v1.2.8

func (c *TypeValue) GetPosition() *Position

source code position

func (*TypeValue) GetSymbolTable added in v1.2.8

func (a *TypeValue) GetSymbolTable() *blockSymbolTable

symbol-table

func (*TypeValue) GetType added in v1.2.8

func (n *TypeValue) GetType() Type

for Value : type

func (*TypeValue) GetUsers added in v1.2.8

func (n *TypeValue) GetUsers() Users

func (*TypeValue) GetValues added in v1.2.8

func (t *TypeValue) GetValues() Values

func (*TypeValue) GetVariable added in v1.2.8

func (a *TypeValue) GetVariable() string

func (*TypeValue) HasLeftVariable added in v1.2.8

func (a *TypeValue) HasLeftVariable() bool

has left-instruction

func (*TypeValue) HasUsers added in v1.2.8

func (n *TypeValue) HasUsers() bool

has/get user and value

func (*TypeValue) HasValues added in v1.2.8

func (t *TypeValue) HasValues() bool

------------ type value

func (*TypeValue) IsExtern added in v1.2.8

func (c *TypeValue) IsExtern() bool

func (*TypeValue) LineDisasm added in v1.2.8

func (t *TypeValue) LineDisasm() string

func (*TypeValue) NewError added in v1.2.8

func (c *TypeValue) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*TypeValue) RemoveUser added in v1.2.8

func (n *TypeValue) RemoveUser(u User)

func (*TypeValue) SetBlock added in v1.2.8

func (a *TypeValue) SetBlock(block *BasicBlock)

func (*TypeValue) SetExtern added in v1.2.8

func (c *TypeValue) SetExtern(b bool)

func (*TypeValue) SetFunc added in v1.2.8

func (a *TypeValue) SetFunc(f *Function)

ssa function and block

func (*TypeValue) SetPosition added in v1.2.8

func (c *TypeValue) SetPosition(pos *Position)

func (*TypeValue) SetSymbolTable added in v1.2.8

func (a *TypeValue) SetSymbolTable(symbol *blockSymbolTable)

func (*TypeValue) SetType added in v1.2.8

func (n *TypeValue) SetType(typ Type)

func (*TypeValue) SetVariable added in v1.2.8

func (a *TypeValue) SetVariable(v string)

variable

func (*TypeValue) String added in v1.2.8

func (t *TypeValue) String() string

type TypedNode added in v1.2.8

type TypedNode interface {
	// Node
	// type
	GetType() Type
	SetType(Type)
}

type Types

type Types []Type // each value can have multiple type possible

func (Types) Compare

func (org Types) Compare(typs Types) bool

return true if org != typs return false if org == typs

func (Types) Contains added in v1.2.8

func (t Types) Contains(typ Types) bool

func (Types) Equal added in v1.2.8

func (t Types) Equal(typs Types) bool

func (Types) IsType added in v1.2.8

func (t Types) IsType(kind TypeKind) bool

func (Types) String

func (t Types) String() string

type UnOp

type UnOp struct {
	Op UnaryOpcode
	X  Value
	// contains filtered or unexported fields
}

func NewUnOpOnly added in v1.2.8

func NewUnOpOnly(op UnaryOpcode, x Value) *UnOp

func ToUnOp added in v1.2.8

func ToUnOp(v Instruction) (*UnOp, bool)

func (*UnOp) AddLeftPositions added in v1.2.8

func (a *UnOp) AddLeftPositions(pos *Position)

func (*UnOp) AddLeftVariables added in v1.2.8

func (a *UnOp) AddLeftVariables(name string)

func (*UnOp) AddUser added in v1.2.8

func (n *UnOp) AddUser(u User)

for Value

func (*UnOp) GetBlock

func (a *UnOp) GetBlock() *BasicBlock

func (*UnOp) GetFunc added in v1.2.8

func (a *UnOp) GetFunc() *Function

func (*UnOp) GetLeftItem added in v1.2.8

func (a *UnOp) GetLeftItem() LeftInstruction

func (*UnOp) GetLeftPosition added in v1.2.8

func (a *UnOp) GetLeftPosition() *Position

func (*UnOp) GetLeftPositions added in v1.2.8

func (a *UnOp) GetLeftPositions() []*Position

left-instruction: left-position

func (*UnOp) GetLeftVariables added in v1.2.8

func (a *UnOp) GetLeftVariables() []string

left-instruction: variable

func (*UnOp) GetOpcode added in v1.2.8

func (i *UnOp) GetOpcode() Opcode

func (*UnOp) GetOperand added in v1.2.8

func (a *UnOp) GetOperand(i int) Value

func (*UnOp) GetOperandNum added in v1.2.8

func (a *UnOp) GetOperandNum() int

func (*UnOp) GetOperands added in v1.2.8

func (a *UnOp) GetOperands() Values

func (*UnOp) GetPosition added in v1.2.8

func (c *UnOp) GetPosition() *Position

source code position

func (*UnOp) GetSymbolTable added in v1.2.8

func (a *UnOp) GetSymbolTable() *blockSymbolTable

symbol-table

func (*UnOp) GetType

func (n *UnOp) GetType() Type

for Value : type

func (*UnOp) GetUsers added in v1.2.8

func (n *UnOp) GetUsers() Users

func (*UnOp) GetValues added in v1.2.8

func (n *UnOp) GetValues() Values

func (*UnOp) GetVariable added in v1.2.8

func (a *UnOp) GetVariable() string

func (*UnOp) HasLeftVariable added in v1.2.8

func (a *UnOp) HasLeftVariable() bool

has left-instruction

func (*UnOp) HasUsers added in v1.2.8

func (n *UnOp) HasUsers() bool

has/get user and value

func (*UnOp) HasValues added in v1.2.8

func (n *UnOp) HasValues() bool

----------- UnOp

func (*UnOp) IsExtern added in v1.2.8

func (c *UnOp) IsExtern() bool

func (*UnOp) LineDisasm added in v1.2.8

func (u *UnOp) LineDisasm() string

func (*UnOp) NewError

func (c *UnOp) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*UnOp) RemoveUser added in v1.2.8

func (n *UnOp) RemoveUser(u User)

func (*UnOp) ReplaceValue added in v1.2.8

func (u *UnOp) ReplaceValue(v Value, to Value)

func (*UnOp) SetBlock added in v1.2.8

func (a *UnOp) SetBlock(block *BasicBlock)

func (*UnOp) SetExtern added in v1.2.8

func (c *UnOp) SetExtern(b bool)

func (*UnOp) SetFunc added in v1.2.8

func (a *UnOp) SetFunc(f *Function)

ssa function and block

func (*UnOp) SetPosition added in v1.2.8

func (c *UnOp) SetPosition(pos *Position)

func (*UnOp) SetSymbolTable added in v1.2.8

func (a *UnOp) SetSymbolTable(symbol *blockSymbolTable)

func (*UnOp) SetType

func (n *UnOp) SetType(typ Type)

func (*UnOp) SetVariable added in v1.2.8

func (a *UnOp) SetVariable(v string)

variable

func (*UnOp) String added in v1.2.8

func (u *UnOp) String() string

----------- UnOp

type UnaryOpcode

type UnaryOpcode int
const (
	OpNone       UnaryOpcode = iota
	OpNot                    // !
	OpPlus                   // +
	OpNeg                    // -
	OpChan                   // <-
	OpBitwiseNot             // ^
)

type Undefined added in v1.2.8

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

----------- Undefined

func NewUndefined added in v1.2.8

func NewUndefined(name string) *Undefined

func ToUndefined added in v1.2.8

func ToUndefined(v Instruction) (*Undefined, bool)

func (*Undefined) AddLeftPositions added in v1.2.8

func (a *Undefined) AddLeftPositions(pos *Position)

func (*Undefined) AddLeftVariables added in v1.2.8

func (a *Undefined) AddLeftVariables(name string)

func (*Undefined) AddUser added in v1.2.8

func (n *Undefined) AddUser(u User)

for Value

func (*Undefined) GetBlock added in v1.2.8

func (a *Undefined) GetBlock() *BasicBlock

func (*Undefined) GetFunc added in v1.2.8

func (a *Undefined) GetFunc() *Function

func (*Undefined) GetLeftItem added in v1.2.8

func (a *Undefined) GetLeftItem() LeftInstruction

func (*Undefined) GetLeftPosition added in v1.2.8

func (a *Undefined) GetLeftPosition() *Position

func (*Undefined) GetLeftPositions added in v1.2.8

func (a *Undefined) GetLeftPositions() []*Position

left-instruction: left-position

func (*Undefined) GetLeftVariables added in v1.2.8

func (a *Undefined) GetLeftVariables() []string

left-instruction: variable

func (*Undefined) GetOpcode added in v1.2.8

func (i *Undefined) GetOpcode() Opcode

func (*Undefined) GetOperand added in v1.2.8

func (a *Undefined) GetOperand(i int) Value

func (*Undefined) GetOperandNum added in v1.2.8

func (a *Undefined) GetOperandNum() int

func (*Undefined) GetOperands added in v1.2.8

func (a *Undefined) GetOperands() Values

func (*Undefined) GetPosition added in v1.2.8

func (c *Undefined) GetPosition() *Position

source code position

func (*Undefined) GetSymbolTable added in v1.2.8

func (a *Undefined) GetSymbolTable() *blockSymbolTable

symbol-table

func (*Undefined) GetType added in v1.2.8

func (n *Undefined) GetType() Type

for Value : type

func (*Undefined) GetUsers added in v1.2.8

func (n *Undefined) GetUsers() Users

func (*Undefined) GetValues added in v1.2.8

func (u *Undefined) GetValues() Values

func (*Undefined) GetVariable added in v1.2.8

func (a *Undefined) GetVariable() string

func (*Undefined) HasLeftVariable added in v1.2.8

func (a *Undefined) HasLeftVariable() bool

has left-instruction

func (*Undefined) HasUsers added in v1.2.8

func (n *Undefined) HasUsers() bool

has/get user and value

func (*Undefined) HasValues added in v1.2.8

func (u *Undefined) HasValues() bool

----------- undefined

func (*Undefined) IsExtern added in v1.2.8

func (c *Undefined) IsExtern() bool

func (*Undefined) LineDisasm added in v1.2.8

func (u *Undefined) LineDisasm() string

func (*Undefined) NewError added in v1.2.8

func (c *Undefined) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*Undefined) RemoveUser added in v1.2.8

func (n *Undefined) RemoveUser(u User)

func (*Undefined) SetBlock added in v1.2.8

func (a *Undefined) SetBlock(block *BasicBlock)

func (*Undefined) SetExtern added in v1.2.8

func (c *Undefined) SetExtern(b bool)

func (*Undefined) SetFunc added in v1.2.8

func (a *Undefined) SetFunc(f *Function)

ssa function and block

func (*Undefined) SetPosition added in v1.2.8

func (c *Undefined) SetPosition(pos *Position)

func (*Undefined) SetSymbolTable added in v1.2.8

func (a *Undefined) SetSymbolTable(symbol *blockSymbolTable)

func (*Undefined) SetType added in v1.2.8

func (n *Undefined) SetType(typ Type)

func (*Undefined) SetVariable added in v1.2.8

func (a *Undefined) SetVariable(v string)

variable

func (*Undefined) String added in v1.2.8

func (u *Undefined) String() string

----------- undefined

type Update

type Update struct {
	Value   Value
	Address Value // this point to field
	// contains filtered or unexported fields
}

----------- Update

func NewUpdate added in v1.2.8

func NewUpdate(address, v Value) *Update

func ToUpdate added in v1.2.8

func ToUpdate(v Instruction) (*Update, bool)

func (*Update) AddLeftPositions added in v1.2.8

func (a *Update) AddLeftPositions(pos *Position)

func (*Update) AddLeftVariables added in v1.2.8

func (a *Update) AddLeftVariables(name string)

func (*Update) GetBlock

func (a *Update) GetBlock() *BasicBlock

func (*Update) GetFunc added in v1.2.8

func (a *Update) GetFunc() *Function

func (*Update) GetLeftItem added in v1.2.8

func (a *Update) GetLeftItem() LeftInstruction

func (*Update) GetLeftPosition added in v1.2.8

func (a *Update) GetLeftPosition() *Position

func (*Update) GetLeftPositions added in v1.2.8

func (a *Update) GetLeftPositions() []*Position

left-instruction: left-position

func (*Update) GetLeftVariables added in v1.2.8

func (a *Update) GetLeftVariables() []string

left-instruction: variable

func (*Update) GetOpcode added in v1.2.8

func (i *Update) GetOpcode() Opcode

func (*Update) GetOperand added in v1.2.8

func (a *Update) GetOperand(i int) Value

func (*Update) GetOperandNum added in v1.2.8

func (a *Update) GetOperandNum() int

func (*Update) GetOperands added in v1.2.8

func (a *Update) GetOperands() Values

func (*Update) GetPosition added in v1.2.8

func (c *Update) GetPosition() *Position

source code position

func (*Update) GetSymbolTable added in v1.2.8

func (a *Update) GetSymbolTable() *blockSymbolTable

symbol-table

func (*Update) GetUsers

func (r *Update) GetUsers() Users

func (*Update) GetValues

func (s *Update) GetValues() Values

func (*Update) GetVariable added in v1.2.8

func (a *Update) GetVariable() string

func (*Update) HasLeftVariable added in v1.2.8

func (a *Update) HasLeftVariable() bool

has left-instruction

func (*Update) HasUsers added in v1.2.8

func (r *Update) HasUsers() bool

node

func (*Update) HasValues added in v1.2.8

func (s *Update) HasValues() bool

----------- Update

func (*Update) IsExtern added in v1.2.8

func (c *Update) IsExtern() bool

func (*Update) LineDisasm added in v1.2.8

func (u *Update) LineDisasm() string

func (*Update) NewError

func (c *Update) NewError(kind ErrorKind, tag ErrorTag, msg string)

error logger

func (*Update) ReplaceValue

func (s *Update) ReplaceValue(v, to Value)

func (*Update) SetBlock added in v1.2.8

func (a *Update) SetBlock(block *BasicBlock)

func (*Update) SetExtern added in v1.2.8

func (c *Update) SetExtern(b bool)

func (*Update) SetFunc added in v1.2.8

func (a *Update) SetFunc(f *Function)

ssa function and block

func (*Update) SetPosition added in v1.2.8

func (c *Update) SetPosition(pos *Position)

func (*Update) SetSymbolTable added in v1.2.8

func (a *Update) SetSymbolTable(symbol *blockSymbolTable)

func (*Update) SetVariable added in v1.2.8

func (a *Update) SetVariable(v string)

variable

func (*Update) String

func (s *Update) String() string

----------- Update

type User

type User interface {
	InstructionNode
	ReplaceValue(Value, Value)
}

func ToUser added in v1.2.8

func ToUser(n Node) (User, bool)

type Users added in v1.2.8

type Users []User

func (Users) RunOnCall added in v1.2.8

func (u Users) RunOnCall(f func(*Call))

func (Users) RunOnCallOr added in v1.2.8

func (u Users) RunOnCallOr(f func(*Call), or func(User))

func (Users) RunOnField added in v1.2.8

func (u Users) RunOnField(f func(*Field))

func (Users) RunOnFieldOr added in v1.2.8

func (u Users) RunOnFieldOr(f func(*Field), or func(User))

func (Users) RunOnUpdate added in v1.2.8

func (u Users) RunOnUpdate(f func(*Update))

func (Users) RunOnUpdateOr added in v1.2.8

func (u Users) RunOnUpdateOr(f func(*Update), or func(User))

type Value

type Value interface {
	InstructionNode
	LeftInstruction
	TypedNode
	AddUser(User)
	RemoveUser(User)

	SetType(Type)
	GetType() Type
}

basic handle item (interface)

func CalcBinary added in v1.2.8

func CalcBinary(b *BinOp) Value

func CalcConstBinarySide added in v1.2.8

func CalcConstBinarySide(c *ConstInst, v Value, op BinaryOpcode) Value

func HandlerBinOp added in v1.2.8

func HandlerBinOp(b *BinOp) Value

func HandlerUnOp added in v1.2.8

func HandlerUnOp(u *UnOp) Value

func NewBinOp added in v1.2.8

func NewBinOp(op BinaryOpcode, x, y Value) Value

func NewUnOp added in v1.2.8

func NewUnOp(op UnaryOpcode, x Value) Value

func ToValue added in v1.2.8

func ToValue(n Node) (Value, bool)

type Values added in v1.2.8

type Values []Value

func GetValues added in v1.2.8

func GetValues(n Node) Values

Jump to

Keyboard shortcuts

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