예제 #1
0
        public override int VisitIf(CIf node)
        {
            ExtractSubgraphs(node, CIf.CT_CONDITION, CIf.ContextNames);
            ExtractSubgraphs(node, CIf.CT_IFCLAUSE, CIf.ContextNames);
            ExtractSubgraphs(node, CIf.CT_ELSECLAUSE, CIf.ContextNames);

            base.VisitIf(node);

            m_ostream.WriteLine("{0}->{1}", currentParent.M_GraphVizName, node.M_GraphVizName);

            return(0);
        }
예제 #2
0
        public override int VisitIf(CIf node)
        {
            CEmmitableCodeContainer parent = m_parents.Peek() as CEmmitableCodeContainer;
            CIfStatement            rep    = new CIfStatement(CodeBlockType.CB_IFSTATEMENTS, 3, parent);

            parent.AddCode(rep, m_parentContexts.Peek());

            m_parents.Push(rep);
            m_parentContexts.Push(CIfStatement.CC_IFSTATEMENT_CONDITION);

            foreach (ASTVisitableElement child in
                     node.GetChildrenContext(CIf.CT_CONDITION))
            {
                Visit(child);
            }

            m_parents.Pop();
            m_parentContexts.Pop();

            m_parents.Push(rep);
            m_parentContexts.Push(CIfStatement.CC_IFSTATEMENT_IFBODY);

            // Visit Function Definitions and emmit code to distinct functions
            foreach (ASTVisitableElement child in node.GetChildrenContext(CIf.CT_IFCLAUSE))
            {
                Visit(child);
            }

            m_parents.Pop();
            m_parentContexts.Pop();

            if (node.GetChildrenContext(CIf.CT_ELSECLAUSE).Count() == 0)
            {
                return(0);
            }

            m_parents.Push(rep);
            m_parentContexts.Push(CIfStatement.CC_IFSTATEMENT_ELSEBODY);

            // Visit Function Definitions and emmit code to distinct functions
            foreach (ASTVisitableElement child in node.GetChildrenContext(CIf.CT_ELSECLAUSE))
            {
                Visit(child);
            }

            m_parents.Pop();
            m_parentContexts.Pop();

            return(0);
        }
예제 #3
0
 public virtual T VisitIf(CIf node)
 {
     return(VisitChildren(node));
 }