rewriter

package
v0.0.0-...-9a26220 Latest Latest
Warning

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

Go to latest
Published: Apr 6, 2025 License: AGPL-3.0 Imports: 18 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CalcEnd

func CalcEnd(domTree map[*core.Node][]*core.Node, ifNode *core.Node) error

func CalcMergeNode1

func CalcMergeNode1(ifNode *core.Node) *core.Node

func CheckIsPreNode

func CheckIsPreNode(infoGetter func(node *core.Node) *NodeExtInfo, node, pre *core.Node) bool

func CheckNodesIsValid

func CheckNodesIsValid(node *core.Node) error

func GenerateDominatorTree

func GenerateDominatorTree(rootNode *core.Node) map[*core.Node][]*core.Node

func IfRewriter

func IfRewriter(manager *RewriteManager, ifNode *core.Node) error

func IsEndNode

func IsEndNode(node *core.Node) bool

func LoopJmpRewriter

func LoopJmpRewriter(manager *RewriteManager, circleNode *core.Node) error

func LoopRewriter

func LoopRewriter(manager *RewriteManager, node *core.Node) error

func NodeDeduplication

func NodeDeduplication(nodes []*core.Node) []*core.Node

func RebuildLoopNode

func RebuildLoopNode(manager *RewriteManager) error

func SwitchRewriter

func SwitchRewriter(manager *RewriteManager, node *core.Node) error

func SwitchRewriter1

func SwitchRewriter1(manager *RewriteManager, node *core.Node) error

func SynchronizeRewriter

func SynchronizeRewriter(manager *RewriteManager, node *core.Node) error

func TryRewriter

func TryRewriter(manager *RewriteManager, node *core.Node) error

func WalkNodeToList

func WalkNodeToList(node *core.Node) []*core.Node

Types

type LoopStatement

type LoopStatement struct {
	Condition values.JavaValue
	BodyStart *core.Node
}

type NodeExtInfo

type NodeExtInfo struct {
	PreNodeRoute    *NodeRoute
	AllPreNodeRoute []*NodeRoute
	AllCircleRoute  []*NodeRoute
	CircleRoute     *utils.Set[*core.Node]
}

type NodeRoute

type NodeRoute struct {
	ConditionNode *core.Node
	SwitchNode    *core.Node
	TryNode       *core.Node
	Parent        []*NodeRoute
	NodeMap       *utils.Set[*core.Node]
	Children      []*NodeRoute
}

func NewRootNodeRoute

func NewRootNodeRoute() *NodeRoute

func (*NodeRoute) Add

func (s *NodeRoute) Add(node *core.Node)

func (*NodeRoute) AddParent

func (s *NodeRoute) AddParent(nodeMap *NodeRoute)

func (*NodeRoute) ChildrenHas

func (s *NodeRoute) ChildrenHas(node *core.Node) bool

func (*NodeRoute) GetFirstSameParentCondition

func (s *NodeRoute) GetFirstSameParentCondition(m *NodeRoute) *core.Node

func (*NodeRoute) Has

func (s *NodeRoute) Has(node *core.Node) (*NodeRoute, bool)

func (*NodeRoute) HasPre

func (s *NodeRoute) HasPre(node *core.Node) (*utils.Set[*core.Node], bool)

func (*NodeRoute) NewChild

func (s *NodeRoute) NewChild(conditionNode *core.Node) *NodeRoute

type RewriteManager

type RewriteManager struct {
	RootNode         *core.Node
	PreNode          *core.Node
	CircleEntryPoint []*core.Node
	WhileNode        []*core.Node
	IfNodes          []*core.Node
	SwitchNode       []*core.Node
	TryNodes         []*core.Node
	DominatorMap     map[*core.Node][]*core.Node
	LabelId          int
	// contains filtered or unexported fields
}

func NewRootStatementManager

func NewRootStatementManager(node *core.Node) *RewriteManager

func (*RewriteManager) CheckVisitedNode

func (s *RewriteManager) CheckVisitedNode(node *core.Node) error

func (*RewriteManager) DumpDominatorTree

func (s *RewriteManager) DumpDominatorTree()

func (*RewriteManager) GetNewNodeId

func (s *RewriteManager) GetNewNodeId() int

func (*RewriteManager) MergeIf

func (s *RewriteManager) MergeIf()

func (*RewriteManager) NewLoopLabel

func (s *RewriteManager) NewLoopLabel() string

func (*RewriteManager) NewNode

func (s *RewriteManager) NewNode(st statements.Statement) *core.Node

func (*RewriteManager) Rewrite

func (s *RewriteManager) Rewrite() error

func (*RewriteManager) ScanCoreInfo

func (s *RewriteManager) ScanCoreInfo() error

func (*RewriteManager) ScanStatement

func (s *RewriteManager) ScanStatement(handle func(node *core.Node) (error, bool)) error

func (*RewriteManager) ScanStatementSimple

func (s *RewriteManager) ScanStatementSimple(handle func(node *core.Node) error) error

func (*RewriteManager) SetId

func (s *RewriteManager) SetId(id int)

func (*RewriteManager) ToStatements

func (s *RewriteManager) ToStatements(stopCheck func(node *core.Node) bool) ([]*core.Node, error)

func (*RewriteManager) ToStatementsFromNode

func (s *RewriteManager) ToStatementsFromNode(node *core.Node, stopCheck func(node *core.Node) bool) ([]*core.Node, error)

func (*RewriteManager) TopologicalSortReverse

func (s *RewriteManager) TopologicalSortReverse(nodes []*core.Node) []*core.Node

Jump to

Keyboard shortcuts

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