PostOrderNode

/**
* Most of Expression and part of Statement nodes are post order nodes,
* the visit order of PostOrderNode is that:
* 1. visit it's child, ordered by child index
* 2. visit node itself
*
* PostOrderNode consist of AST nodes with the following properties:
* 1. the visit order of node's immediate children is sequential
* 2. the control flow edge label between node's immdediate children
*    only contain NormalCompletion
*
* This is a convenient way to model a node, if the node can be treat as
* PostOrderNode; the necessory control flow information including first,
* last and successor are generated automatically.
*/

Inherit from ControlFlowNode

Primary key: id: int

schema PostOrderNode extends ControlFlowNode {
  @primary id: int
}

PostOrderNode::getRelativePath

/**
* Get the relative path of this control flow node.
*/
pub fn getRelativePath(self: PostOrderNode) -> string;

PostOrderNode::getAPredecessor

/**
* Get an immediate predecessor of this node.
*/
pub fn getAPredecessor(self: PostOrderNode) -> *ControlFlowNode;

PostOrderNode::getChildNode

/**
* Gets child node with index, start from 0.
*/
pub fn getChildNode(self: PostOrderNode, index: int) -> ControlFlowNode;

PostOrderNode::getPredecessorCount

/**
* Get the count of immediate predecessor nodes/
*/
pub fn getPredecessorCount(self: PostOrderNode) -> int;

PostOrderNode::mayCompleteNormally

/**
* Holds whether this node can finish with a normalCompletion.
*/
pub fn mayCompleteNormally(self: PostOrderNode) -> bool;

PostOrderNode::getChildCount

/**
* Gets the count of the children.
*/
pub fn getChildCount(self: PostOrderNode) -> int;

PostOrderNode::getAllChild

pub fn getAllChild(self: PostOrderNode) -> *ControlFlowNode;

PostOrderNode::firstChild

/**
* Gets the first child of this node.
*/
pub fn firstChild(self: PostOrderNode) -> ControlFlowNode;

PostOrderNode::getBasicBlock

/**
* Get the basic block that contains this node.
*/
pub fn getBasicBlock(self: PostOrderNode) -> BasicBlock;

PostOrderNode::isAstNode

pub fn isAstNode(self: PostOrderNode) -> bool;

PostOrderNode::getASuccessor

/**
* Get an immediate successor of this node.
*/
pub fn getASuccessor(self: PostOrderNode) -> *ControlFlowNode;

PostOrderNode::__all__

Data constraint method.

pub fn __all__(db: JavascriptDB) -> *PostOrderNode;

PostOrderNode::getLocation

/**
* Get the location of this control flow node.
*/
pub fn getLocation(self: PostOrderNode) -> Location;

PostOrderNode::isLeafNode

/**
* Hold whether this node is leaf node.
*/
pub fn isLeafNode(self: PostOrderNode) -> bool;

PostOrderNode::getSuccessorCount

/**
* Get the count of immediate successor nodes.
*/
pub fn getSuccessorCount(self: PostOrderNode) -> int;

PostOrderNode::getASuccessorRecursive

/**
* Gets the successor of this node, and query successors recursively
*/
pub fn getASuccessorRecursive(self: PostOrderNode) -> *ControlFlowNode;

PostOrderNode::getText

/**
* Get the text of this control flow node.
*/
pub fn getText(self: PostOrderNode) -> string;

PostOrderNode::isEntryNode

pub fn isEntryNode(self: PostOrderNode) -> bool;

PostOrderNode::getASuccessorWithCompletion

/**
* Get an immediate successor of this node with the given
* type of Completion.
*/
pub fn getASuccessorWithCompletion(self: PostOrderNode, c: Completion) -> *ControlFlowNode;

PostOrderNode::isSyntheticNode

pub fn isSyntheticNode(self: PostOrderNode) -> bool;

PostOrderNode::getEnclosingFunction

/**
* Get the enclosing function of node.
* CfgEntryNode or CfgExitNode return belongs to function.
*/
pub fn getEnclosingFunction(self: PostOrderNode) -> FunctionLikeDeclaration;

PostOrderNode::getFile

/**
* Get the file of this control flow node.
*/
pub fn getFile(self: PostOrderNode) -> File;

PostOrderNode::isExitNode

pub fn isExitNode(self: PostOrderNode) -> bool;

PostOrderNode::getKindName

/**
* Get the kind name of node.
* If node is ast node, just return ast node kind name; otherwise
* return node name as CfgEntryNode or CfgExitNode.
*/
pub fn getKindName(self: PostOrderNode) -> string;