analysis

package
v0.0.16 Latest Latest
Warning

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

Go to latest
Published: Oct 31, 2022 License: MIT Imports: 7 Imported by: 0

Documentation

Index

Constants

View Source
const (
	N_CFG_DEBUG parser.NodeType = parser.N_NODE_DEF_END + 1 + iota
)

Variables

This section is empty.

Functions

func FindEdges

func FindEdges(edges map[*Edge]*Edge, k EdgeKind, t EdgeTag) map[*Edge]*Edge

func IterBlock

func IterBlock(blk *Block, cb BlockCb)

func RemoveEdge

func RemoveEdge(edges map[*Edge]*Edge, k EdgeKind, t EdgeTag)

func SwitchCase

func SwitchCase(clauseBlk *Block) (*Block, *Block, bool)

Types

type Analysis

type Analysis struct {
	WalkCtx *walk.WalkCtx
}

func NewAnalysis

func NewAnalysis(root parser.Node, symtab *parser.SymTab, s *span.Source) *Analysis

func NewAnalysisOnlyWalk added in v0.0.15

func NewAnalysisOnlyWalk(root parser.Node, symtab *parser.SymTab, s *span.Source) *Analysis

func (*Analysis) AnalysisCtx

func (a *Analysis) AnalysisCtx() *AnalysisCtx

func (*Analysis) Analyze

func (a *Analysis) Analyze()

func (*Analysis) Graph

func (a *Analysis) Graph() *Graph

type AnalysisCtx

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

func AsAnalysisCtx

func AsAnalysisCtx(ctx *walk.VisitorCtx) *AnalysisCtx

func (*AnalysisCtx) Graph

func (a *AnalysisCtx) Graph() *Graph

func (*AnalysisCtx) GraphOf

func (a *AnalysisCtx) GraphOf(node parser.Node) *Graph

type Block

type Block struct {
	Kind    BlockKind
	Nodes   []parser.Node
	Inlets  map[*Edge]*Edge
	Outlets map[*Edge]*Edge
	// contains filtered or unexported fields
}

func (*Block) Dot

func (b *Block) Dot() string

func (*Block) DotId

func (b *Block) DotId() string

func (*Block) FindHangingInEdge

func (b *Block) FindHangingInEdge(src *Block, k EdgeKind, t EdgeTag, create bool) (*Edge, bool)

func (*Block) FindInEdge

func (b *Block) FindInEdge(k EdgeKind, t EdgeTag, create bool) (*Edge, bool)

func (*Block) FindOutEdge

func (b *Block) FindOutEdge(k EdgeKind, t EdgeTag, create bool) *Edge

func (*Block) HasOutCut

func (b *Block) HasOutCut() bool

func (*Block) Id

func (b *Block) Id() uint

func (*Block) InJmpEdge

func (b *Block) InJmpEdge(ET EdgeTag) *Edge

func (*Block) InSeqEdge

func (b *Block) InSeqEdge() *Edge

func (*Block) IsCut

func (b *Block) IsCut() bool

func (*Block) IsInCut

func (b *Block) IsInCut() bool

func (*Block) IsInCutPair

func (b *Block) IsInCutPair() (bool, bool)

func (*Block) IsOutCut

func (b *Block) IsOutCut(to *Block) bool

func (*Block) NextBlk

func (b *Block) NextBlk() *Block

func (*Block) OnlyInfo

func (b *Block) OnlyInfo() bool

func (*Block) OutEdge

func (b *Block) OutEdge(ET EdgeTag) *Edge

func (*Block) OutJmpEdge

func (b *Block) OutJmpEdge(ET EdgeTag) *Edge

func (*Block) OutSeqEdge

func (b *Block) OutSeqEdge() *Edge

type BlockCb

type BlockCb = func(blk *Block)

type BlockKind

type BlockKind uint8
const (
	BK_NONE BlockKind = iota
	BK_BASIC
	BK_GROUP
	BK_START
)

type Edge

type Edge struct {
	Kind EdgeKind
	Tag  EdgeTag
	Src  *Block
	Dst  *Block
}

func FindEdge

func FindEdge(edges map[*Edge]*Edge, k EdgeKind, t EdgeTag) *Edge

func (*Edge) Dot

func (e *Edge) Dot() string

func (*Edge) Key

func (e *Edge) Key() string

type EdgeKind

type EdgeKind uint8
const (
	EK_NONE EdgeKind = iota
	EK_SEQ
	EK_JMP
)

type EdgeTag

type EdgeTag uint16
const (
	ET_NONE  EdgeTag = 0
	ET_JMP_T EdgeTag = 1 << iota
	ET_JMP_F
	ET_JMP_E
	ET_JMP_U
	ET_JMP_P // jumps with the pair outlet
	ET_JMP_N // jumps if nil
	ET_LOOP
	ET_CUT
)

func (EdgeTag) DotColor

func (t EdgeTag) DotColor() string

func (EdgeTag) Off

func (f EdgeTag) Off(flag EdgeTag) EdgeTag

func (EdgeTag) On

func (f EdgeTag) On(flag EdgeTag) EdgeTag

func (EdgeTag) String

func (t EdgeTag) String() string

type Graph

type Graph struct {
	Id string

	Head   *Block
	Parent *Graph
	// contains filtered or unexported fields
}

func (*Graph) BlkOfNode

func (g *Graph) BlkOfNode(node parser.Node) *Block

func (*Graph) Dot

func (g *Graph) Dot() string

func (*Graph) EntryOfNode

func (g *Graph) EntryOfNode(node parser.Node) *Block

func (*Graph) ExitOfNode

func (g *Graph) ExitOfNode(node parser.Node) *Block

func (*Graph) NodesEdges

func (g *Graph) NodesEdges() (map[string]*Block, []string, map[string]*Edge, []string, map[parser.Node]*Block)

type InfoNode

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

func (*InfoNode) Range added in v0.0.10

func (n *InfoNode) Range() span.Range

func (*InfoNode) String

func (n *InfoNode) String() string

func (*InfoNode) Type

func (n *InfoNode) Type() parser.NodeType

type LinkFlag

type LinkFlag uint16
const (
	LF_NONE      LinkFlag = 0
	LF_FORCE_SEP LinkFlag = 1 << iota
	LF_FORCE_JOIN
	LF_OVERWRITE
)

Jump to

Keyboard shortcuts

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