Search in sources :

Example 21 with Node

use of org.eclipse.n4js.flowgraphs.model.Node in project n4js by eclipse.

the class VariableStatementFactory method buildComplexNode.

static ComplexNode buildComplexNode(ReentrantASTIterator astpp, VariableStatement varDeclStmt) {
    ComplexNode cNode = new ComplexNode(astpp.container(), varDeclStmt);
    Node entryNode = new HelperNode(NodeNames.ENTRY, astpp.pos(), varDeclStmt);
    List<Node> varDeclNodes = new LinkedList<>();
    for (int n = 0; n < varDeclStmt.getVarDeclsOrBindings().size(); n++) {
        VariableDeclarationOrBinding varDOB = varDeclStmt.getVarDeclsOrBindings().get(n);
        Node varDeclNode = DelegatingNodeFactory.create(astpp, "declaration_" + n, varDeclStmt, varDOB);
        varDeclNodes.add(varDeclNode);
    }
    Node exitNode = new RepresentingNode(NodeNames.EXIT, astpp.pos(), varDeclStmt);
    cNode.addNode(entryNode);
    for (Node varDeclNode : varDeclNodes) cNode.addNode(varDeclNode);
    cNode.addNode(exitNode);
    List<Node> nodes = new LinkedList<>();
    nodes.add(entryNode);
    nodes.addAll(varDeclNodes);
    nodes.add(exitNode);
    cNode.connectInternalSucc(nodes);
    cNode.setEntryNode(entryNode);
    cNode.setExitNode(exitNode);
    return cNode;
}
Also used : HelperNode(org.eclipse.n4js.flowgraphs.model.HelperNode) ComplexNode(org.eclipse.n4js.flowgraphs.model.ComplexNode) ComplexNode(org.eclipse.n4js.flowgraphs.model.ComplexNode) HelperNode(org.eclipse.n4js.flowgraphs.model.HelperNode) RepresentingNode(org.eclipse.n4js.flowgraphs.model.RepresentingNode) Node(org.eclipse.n4js.flowgraphs.model.Node) RepresentingNode(org.eclipse.n4js.flowgraphs.model.RepresentingNode) VariableDeclarationOrBinding(org.eclipse.n4js.n4JS.VariableDeclarationOrBinding) LinkedList(java.util.LinkedList)

Example 22 with Node

use of org.eclipse.n4js.flowgraphs.model.Node in project n4js by eclipse.

the class WithFactory method buildComplexNode.

static ComplexNode buildComplexNode(ReentrantASTIterator astpp, WithStatement withStmt) {
    ComplexNode cNode = new ComplexNode(astpp.container(), withStmt);
    Node entryNode = new HelperNode(NodeNames.ENTRY, astpp.pos(), withStmt);
    Node expressionNode = DelegatingNodeFactory.create(astpp, NodeNames.EXPRESSION, withStmt, withStmt.getExpression());
    Node statementNode = DelegatingNodeFactory.create(astpp, NodeNames.STATEMENT, withStmt, withStmt.getStatement());
    Node exitNode = new HelperNode(NodeNames.EXIT, astpp.pos(), withStmt);
    cNode.addNode(entryNode);
    cNode.addNode(expressionNode);
    cNode.addNode(statementNode);
    cNode.addNode(exitNode);
    List<Node> nodes = new LinkedList<>();
    nodes.add(entryNode);
    nodes.add(expressionNode);
    nodes.add(statementNode);
    nodes.add(exitNode);
    cNode.connectInternalSucc(nodes);
    cNode.setEntryNode(entryNode);
    cNode.setExitNode(exitNode);
    return cNode;
}
Also used : HelperNode(org.eclipse.n4js.flowgraphs.model.HelperNode) ComplexNode(org.eclipse.n4js.flowgraphs.model.ComplexNode) ComplexNode(org.eclipse.n4js.flowgraphs.model.ComplexNode) HelperNode(org.eclipse.n4js.flowgraphs.model.HelperNode) Node(org.eclipse.n4js.flowgraphs.model.Node) LinkedList(java.util.LinkedList)

Example 23 with Node

use of org.eclipse.n4js.flowgraphs.model.Node in project n4js by eclipse.

the class WhileFactory method buildComplexNode.

static ComplexNode buildComplexNode(ReentrantASTIterator astpp, WhileStatement whileStmt) {
    ComplexNode cNode = new ComplexNode(astpp.container(), whileStmt);
    Node entryNode = new HelperNode(NodeNames.ENTRY, astpp.pos(), whileStmt);
    Node conditionNode = DelegatingNodeFactory.createOrHelper(astpp, NodeNames.CONDITION, whileStmt, whileStmt.getExpression());
    Node conditionForkNode = new HelperNode(NodeNames.CONDITION_FORK, astpp.pos(), whileStmt);
    Node bodyNode = DelegatingNodeFactory.createOrHelper(astpp, NodeNames.BODY, whileStmt, whileStmt.getStatement());
    Node continueCatchNode = new HelperNode(NodeNames.CONTINUE_CATCH, astpp.pos(), whileStmt);
    Node exitNode = new HelperNode(NodeNames.EXIT, astpp.pos(), whileStmt);
    cNode.addNode(entryNode);
    cNode.addNode(conditionNode);
    cNode.addNode(conditionForkNode);
    cNode.addNode(bodyNode);
    cNode.addNode(continueCatchNode);
    cNode.addNode(exitNode);
    cNode.connectInternalSucc(entryNode, conditionNode, conditionForkNode);
    cNode.connectInternalSucc(ControlFlowType.LoopEnter, conditionForkNode, bodyNode);
    cNode.connectInternalSucc(ControlFlowType.LoopExit, conditionForkNode, exitNode);
    cNode.connectInternalSucc(bodyNode, continueCatchNode);
    cNode.connectInternalSucc(ControlFlowType.LoopRepeat, continueCatchNode, conditionNode);
    cNode.setEntryNode(entryNode);
    cNode.setExitNode(exitNode);
    // catch for short-circuits
    conditionForkNode.addCatchToken(new CatchToken(ControlFlowType.IfTrue));
    exitNode.addCatchToken(new CatchToken(ControlFlowType.IfFalse, ControlFlowType.LoopExit));
    LabelledStatement lblStmt = ASTUtils.getLabelledStatement(whileStmt);
    exitNode.addCatchToken(new CatchToken(ControlFlowType.Break, lblStmt));
    continueCatchNode.addCatchToken(new CatchToken(ControlFlowType.Continue, lblStmt));
    return cNode;
}
Also used : HelperNode(org.eclipse.n4js.flowgraphs.model.HelperNode) ComplexNode(org.eclipse.n4js.flowgraphs.model.ComplexNode) LabelledStatement(org.eclipse.n4js.n4JS.LabelledStatement) ComplexNode(org.eclipse.n4js.flowgraphs.model.ComplexNode) HelperNode(org.eclipse.n4js.flowgraphs.model.HelperNode) Node(org.eclipse.n4js.flowgraphs.model.Node) CatchToken(org.eclipse.n4js.flowgraphs.model.CatchToken)

Example 24 with Node

use of org.eclipse.n4js.flowgraphs.model.Node in project n4js by eclipse.

the class SuccessorPredecessorAnalysis method getSuccessorsSkipInternal.

/**
 * see {@link N4JSFlowAnalyser#getSuccessorsSkipInternal(ControlFlowElement)}
 */
public Set<ControlFlowElement> getSuccessorsSkipInternal(ControlFlowElement cfe) {
    NextEdgesProvider nextEdgesProvider = new NextEdgesProvider.Forward();
    Node nextNode = getNextNode(cfe, true, nextEdgesProvider);
    Set<ControlFlowElement> successors = getNextCFEs(nextEdgesProvider, cfe, nextNode);
    return successors;
}
Also used : RepresentingNode(org.eclipse.n4js.flowgraphs.model.RepresentingNode) ComplexNode(org.eclipse.n4js.flowgraphs.model.ComplexNode) Node(org.eclipse.n4js.flowgraphs.model.Node) ControlFlowElement(org.eclipse.n4js.n4JS.ControlFlowElement)

Example 25 with Node

use of org.eclipse.n4js.flowgraphs.model.Node in project n4js by eclipse.

the class SuccessorPredecessorAnalysis method getSuccessors.

/**
 * see {@link N4JSFlowAnalyser#getSuccessors(ControlFlowElement)}
 */
public Set<ControlFlowElement> getSuccessors(ControlFlowElement cfe) {
    NextEdgesProvider nextEdgesProvider = new NextEdgesProvider.Forward();
    Node nextNode = getNextNode(cfe, false, nextEdgesProvider);
    Set<ControlFlowElement> successors = getNextCFEs(nextEdgesProvider, cfe, nextNode);
    return successors;
}
Also used : RepresentingNode(org.eclipse.n4js.flowgraphs.model.RepresentingNode) ComplexNode(org.eclipse.n4js.flowgraphs.model.ComplexNode) Node(org.eclipse.n4js.flowgraphs.model.Node) ControlFlowElement(org.eclipse.n4js.n4JS.ControlFlowElement)

Aggregations

Node (org.eclipse.n4js.flowgraphs.model.Node)41 ComplexNode (org.eclipse.n4js.flowgraphs.model.ComplexNode)34 HelperNode (org.eclipse.n4js.flowgraphs.model.HelperNode)17 RepresentingNode (org.eclipse.n4js.flowgraphs.model.RepresentingNode)17 LinkedList (java.util.LinkedList)16 CatchToken (org.eclipse.n4js.flowgraphs.model.CatchToken)11 ControlFlowEdge (org.eclipse.n4js.flowgraphs.model.ControlFlowEdge)8 ControlFlowElement (org.eclipse.n4js.n4JS.ControlFlowElement)8 LabelledStatement (org.eclipse.n4js.n4JS.LabelledStatement)6 DelegatingNode (org.eclipse.n4js.flowgraphs.model.DelegatingNode)5 ControlFlowType (org.eclipse.n4js.flowgraphs.ControlFlowType)4 HashSet (java.util.HashSet)3 VariableDeclarationOrBinding (org.eclipse.n4js.n4JS.VariableDeclarationOrBinding)3 AbstractCaseClause (org.eclipse.n4js.n4JS.AbstractCaseClause)2 CaseClause (org.eclipse.n4js.n4JS.CaseClause)2 FinallyBlock (org.eclipse.n4js.n4JS.FinallyBlock)2 Statement (org.eclipse.n4js.n4JS.Statement)2 LinkedHashSet (java.util.LinkedHashSet)1 List (java.util.List)1 DummyBackwardVisitor (org.eclipse.n4js.flowgraphs.analysers.DummyBackwardVisitor)1