public override void CaseAWhileStm(AWhileStm node)
 {
     //Create graph node
     Node graphNode = GetNode(node);
     //Processes inner while
     node.GetBody().Apply(this);
     //Add successor and predessors
     PStm stm = GetFirst(node.GetBody());
     if (stm != null)
         graphNode.AddSucc(GetNode(stm));
     List<PStm> stms = GetLast(node.GetBody());
     foreach (PStm pStm in stms)
     {
         graphNode.AddPred(GetNode(pStm));
     }
 }
Ejemplo n.º 2
0
 public override void CaseAWhileStm(AWhileStm node)
 {
     InAWhileStm(node);
     if (node.GetBody() != null)
     {
         node.GetBody().Apply(this);
     }
     if (node.GetCondition() != null)
     {
         node.GetCondition().Apply(this);
     }
     if (node.GetToken() != null)
     {
         node.GetToken().Apply(this);
     }
     OutAWhileStm(node);
 }
 public override void CaseAWhileStm(AWhileStm node)
 {
     Write("while(");
     node.GetCondition().Apply(this);
     Write(")\n");
     node.GetBody().Apply(this);
 }
 public override void CaseAWhileStm(AWhileStm node)
 {
     node.GetBody().Apply(this);
 }
            public override void CaseAWhileStm(AWhileStm node)
            {
                /*
                 * while(...){...}
                 * ->
                 * while(...){...}
                 * if (hasMethodReturnedVar)
                 * {
                 *      break;
                 * }
                 */
                if (neededWhile)
                {
                    ALocalLvalue lvalue = new ALocalLvalue(new TIdentifier(hasMethodReturnedVar.GetName().Text));
                    data.LvalueTypes[lvalue] = hasMethodReturnedVar.GetType();
                    data.LocalLinks[lvalue] = hasMethodReturnedVar;
                    ALvalueExp exp = new ALvalueExp(lvalue);
                    data.ExpTypes[exp] = hasMethodReturnedVar.GetType();

                    AABlock ifBlock = new AABlock();
                    ifBlock.GetStatements().Add(new ABreakStm(new TBreak("break")));
                    ABlockStm ifBlockStm = new ABlockStm(new TLBrace("{"), ifBlock);

                    AIfThenStm ifStm = new AIfThenStm(new TLParen("("), exp, ifBlockStm);

                    AABlock pBlock = (AABlock) node.Parent();
                    pBlock.GetStatements().Insert(pBlock.GetStatements().IndexOf(node) + 1, ifStm);
                }
                node.GetBody().Apply(this);
            }