コード例 #1
0
            public override void CaseAValueReturnStm(AValueReturnStm node)
            {
                /*
                 * return <exp>;
                 * ->
                 * methodReturnerVar = <exp>;
                 * hasMethodReturnedVar = true;
                 * break;
                 */
                ALocalLvalue lvalue = new ALocalLvalue(new TIdentifier(methodReturnerVar.GetName().Text));

                data.LvalueTypes[lvalue] = methodReturnerVar.GetType();
                data.LocalLinks[lvalue]  = methodReturnerVar;
                AAssignmentExp exp = new AAssignmentExp(new TAssign("="), lvalue, node.GetExp());

                data.ExpTypes[exp] = methodReturnerVar.GetType();
                PStm    stm   = new AExpStm(new TSemicolon(";"), exp);
                AABlock block = new AABlock();

                block.GetStatements().Add(stm);

                block.GetStatements().Add(new AVoidReturnStm(node.GetToken()));

                node.ReplaceBy(new ABlockStm(new TLBrace("{"), block));
                block.Apply(this);
            }
コード例 #2
0
            public override void CaseAVoidReturnStm(AVoidReturnStm node)
            {
                ABooleanConstExp trueBool = new ABooleanConstExp(new ATrueBool());
                AValueReturnStm  replacer = new AValueReturnStm(node.GetToken(), trueBool);

                node.ReplaceBy(replacer);
                data.ExpTypes[trueBool] = new ANamedType(new TIdentifier("bool"), null);
            }
コード例 #3
0
 public override void CaseAValueReturnStm(AValueReturnStm node)
 {
     GetNode(node);
 }
コード例 #4
0
ファイル: CodeGeneration.cs プロジェクト: Hsiett/galaxy-pp
 public override void CaseAValueReturnStm(AValueReturnStm node)
 {
     Write("return ");
     node.GetExp().Apply(this);
     Write(";\n");
 }