Example #1
0
        public void ReplaceJumpToIf()
        {
            var cu = new CompilationUnit().AddStatements(new Statement[]
                {
                    new JumpStatement(
                        new BinaryExpression(
                            new SimpleName("Var1"), Operator.Greater, 0.ToLiteral()),
                        10){ StartOffset = 0, EndOffset = 5 },
                    new ExpressionStatement(
                        new MethodInvocation("Print").AddArgument("Var1 is lower or equals to 0".ToLiteral())) { StartOffset = 5, EndOffset = 10 },
                    new ExpressionStatement(
                        new MethodInvocation("Print").AddArgument("End".ToLiteral())) { StartOffset = 10, EndOffset = 15 }
                });
            var expectedCu = new CompilationUnit().AddStatements(new Statement[]
                {
                    new IfStatement(
                        new BinaryExpression(
                            new SimpleName("Var1"), Operator.LowerOrEquals, 0.ToLiteral()),
                        new BlockStatement().AddStatement(
                            new ExpressionStatement(
                                new MethodInvocation("Print").AddArgument("Var1 is lower or equals to 0".ToLiteral())) { StartOffset = 5, EndOffset = 10 })
                    ){ StartOffset = 0, EndOffset = 10 },
                    new ExpressionStatement(
                        new MethodInvocation("Print").AddArgument("End".ToLiteral())) { StartOffset = 10, EndOffset = 15 }
                });

            var actualCu = new ReplaceJumpToIf().Replace(cu);

            AstHelper.AstEquals(expectedCu, actualCu);
        }
Example #2
0
        public void ReplaceJumpToIf()
        {
            var cu = new CompilationUnit().AddStatements(new Statement[]
            {
                new JumpStatement(
                    new BinaryExpression(
                        new SimpleName("Var1"), Operator.Greater, 0.ToLiteral()),
                    10)
                {
                    StartOffset = 0, EndOffset = 5
                },
                new ExpressionStatement(
                    new MethodInvocation("Print").AddArgument("Var1 is lower or equals to 0".ToLiteral()))
                {
                    StartOffset = 5, EndOffset = 10
                },
                new ExpressionStatement(
                    new MethodInvocation("Print").AddArgument("End".ToLiteral()))
                {
                    StartOffset = 10, EndOffset = 15
                }
            });
            var expectedCu = new CompilationUnit().AddStatements(new Statement[]
            {
                new IfStatement(
                    new BinaryExpression(
                        new SimpleName("Var1"), Operator.LowerOrEquals, 0.ToLiteral()),
                    new BlockStatement().AddStatement(
                        new ExpressionStatement(
                            new MethodInvocation("Print").AddArgument("Var1 is lower or equals to 0".ToLiteral()))
                {
                    StartOffset = 5, EndOffset = 10
                })
                    )
                {
                    StartOffset = 0, EndOffset = 10
                },
                new ExpressionStatement(
                    new MethodInvocation("Print").AddArgument("End".ToLiteral()))
                {
                    StartOffset = 10, EndOffset = 15
                }
            });

            var actualCu = new ReplaceJumpToIf().Replace(cu);

            AstHelper.AstEquals(expectedCu, actualCu);
        }
Example #3
0
        public void ReplaceJumpToIfWithRealExample2()
        {
            // cu =
            //[0,65]{
            //[0, 3]  jump 59 if !ActiveObject.Locked
            //[3, 7]  Variables[1] = Actors[VariableEgo].GetBitVar(1)
            //[7,12]  jump 25 if Variables[1] != 1
            //[12,19] PrintEgo("Easy!")
            //[19,22] jump 59 if True
            //[22,25] jump 56 if True
            //[25,56] PrintEgo("I can't budge it. It's rusted shut.")
            //[56,59] jump 64 if True
            //[59,60] ActiveObject.State8 = True
            //[60,62] Objects[213].State8 = True
            //[62,64] StartSound(7)
            //[64,65] StopObjectCode()
            //[ 0,65]
            //    }

            var cu = new CompilationUnit().AddStatements(new Statement[]
            {
                new JumpStatement(new UnaryExpression(new MemberAccess("ActiveObject","Locked"),Operator.Not),59,0,3),
                new BinaryExpression(new ElementAccess("Variables", 1), Operator.Assignment,
                    new MethodInvocation(new MemberAccess(new ElementAccess("Actors","VariableEgo"),"GetBitVar")).AddArgument(1)).ToStatement(3, 7),
                new JumpStatement(new BinaryExpression(new ElementAccess("Variables",1),Operator.Inequals,1.ToLiteral()),25,7,12),
                new MethodInvocation("PrintEgo").AddArgument("Easy!").ToStatement(12, 19),
                new JumpStatement(true.ToLiteral(),59,19,22),
                new JumpStatement(true.ToLiteral(),56,19,22),
                new MethodInvocation("PrintEgo").AddArgument("I can't budge it. It's rusted shut.!").ToStatement(256, 56),
                new JumpStatement(true.ToLiteral(),64,56,59),
                new BinaryExpression(new MemberAccess("ActiveObject","State8"),Operator.Assignment,true.ToLiteral()).ToStatement(59,60),
                new BinaryExpression(new ElementAccess("Objects",213),Operator.Assignment,true.ToLiteral()).ToStatement(60,62),
                new MethodInvocation("StartSound").AddArgument(7).ToStatement(62,64),
                new MethodInvocation("StopObjectCode").ToStatement(64,65)
            });

            // expectedCu =
            //  if ActiveObject.Locked
            //  {
            //      Variables[1] = Actors[VariableEgo].GetBitVar(1)
            //      if Variables[1] == 1
            //      {
            //          PrintEgo("Easy!")
            //      }
            //      else
            //      {
            //          PrintEgo("I can't budge it. It's rusted shut.")
            //          StopObjectCode();
            //      }
            //  }
            //  ActiveObject.State8 = True
            //  213.State8 = True
            //  StartSound(7)
            //  StopObjectCode()

            var expectedCu = new CompilationUnit().AddStatements(new Statement[]
            {
                new IfStatement(new MemberAccess("ActiveObject","Locked")).SetTrueStatement(
                    new BinaryExpression(new ElementAccess("Variables", 1), Operator.Assignment,
                        new MethodInvocation(new MemberAccess(new ElementAccess("Actors","VariableEgo"),"GetBitVar")).AddArgument(1)).ToStatement(),
                    new IfStatement(new BinaryExpression(new ElementAccess("Variables",1),Operator.Equals,1.ToLiteral()))
                        .SetTrueStatement(new MethodInvocation("PrintEgo").AddArgument("Easy!").ToStatement())
                        .SetFalseStatement(
                            new MethodInvocation("PrintEgo").AddArgument("I can't budge it. It's rusted shut.!").ToStatement(),
                            new MethodInvocation("StopObjectCode").ToStatement())),
                new BinaryExpression(new MemberAccess("ActiveObject","State8"),Operator.Assignment,true.ToLiteral()).ToStatement(),
                new BinaryExpression(new ElementAccess("Objects",213),Operator.Assignment,true.ToLiteral()).ToStatement(),
                new MethodInvocation("StartSound").AddArgument(7).ToStatement(),
                new MethodInvocation("StopObjectCode").ToStatement()
            });

            var actualCu = new ReplaceJumpToIf().Replace(cu);
            Console.WriteLine(AstHelper.ToString(actualCu, false));

            AstHelper.AstEquals(expectedCu, actualCu);

        }
Example #4
0
        public void ReplaceJumpToIfWithRealExample2()
        {
            // cu =
            //[0,65]{
            //[0, 3]  jump 59 if !ActiveObject.Locked
            //[3, 7]  Variables[1] = Actors[VariableEgo].GetBitVar(1)
            //[7,12]  jump 25 if Variables[1] != 1
            //[12,19] PrintEgo("Easy!")
            //[19,22] jump 59 if True
            //[22,25] jump 56 if True
            //[25,56] PrintEgo("I can't budge it. It's rusted shut.")
            //[56,59] jump 64 if True
            //[59,60] ActiveObject.State8 = True
            //[60,62] Objects[213].State8 = True
            //[62,64] StartSound(7)
            //[64,65] StopObjectCode()
            //[ 0,65]
            //    }

            var cu = new CompilationUnit().AddStatements(new Statement[]
            {
                new JumpStatement(new UnaryExpression(new MemberAccess("ActiveObject", "Locked"), Operator.Not), 59, 0, 3),
                new BinaryExpression(new ElementAccess("Variables", 1), Operator.Assignment,
                                     new MethodInvocation(new MemberAccess(new ElementAccess("Actors", "VariableEgo"), "GetBitVar")).AddArgument(1)).ToStatement(3, 7),
                new JumpStatement(new BinaryExpression(new ElementAccess("Variables", 1), Operator.Inequals, 1.ToLiteral()), 25, 7, 12),
                new MethodInvocation("PrintEgo").AddArgument("Easy!").ToStatement(12, 19),
                new JumpStatement(true.ToLiteral(), 59, 19, 22),
                new JumpStatement(true.ToLiteral(), 56, 19, 22),
                new MethodInvocation("PrintEgo").AddArgument("I can't budge it. It's rusted shut.!").ToStatement(256, 56),
                new JumpStatement(true.ToLiteral(), 64, 56, 59),
                new BinaryExpression(new MemberAccess("ActiveObject", "State8"), Operator.Assignment, true.ToLiteral()).ToStatement(59, 60),
                new BinaryExpression(new ElementAccess("Objects", 213), Operator.Assignment, true.ToLiteral()).ToStatement(60, 62),
                new MethodInvocation("StartSound").AddArgument(7).ToStatement(62, 64),
                new MethodInvocation("StopObjectCode").ToStatement(64, 65)
            });

            // expectedCu =
            //  if ActiveObject.Locked
            //  {
            //      Variables[1] = Actors[VariableEgo].GetBitVar(1)
            //      if Variables[1] == 1
            //      {
            //          PrintEgo("Easy!")
            //      }
            //      else
            //      {
            //          PrintEgo("I can't budge it. It's rusted shut.")
            //          StopObjectCode();
            //      }
            //  }
            //  ActiveObject.State8 = True
            //  213.State8 = True
            //  StartSound(7)
            //  StopObjectCode()

            var expectedCu = new CompilationUnit().AddStatements(new Statement[]
            {
                new IfStatement(new MemberAccess("ActiveObject", "Locked")).SetTrueStatement(
                    new BinaryExpression(new ElementAccess("Variables", 1), Operator.Assignment,
                                         new MethodInvocation(new MemberAccess(new ElementAccess("Actors", "VariableEgo"), "GetBitVar")).AddArgument(1)).ToStatement(),
                    new IfStatement(new BinaryExpression(new ElementAccess("Variables", 1), Operator.Equals, 1.ToLiteral()))
                    .SetTrueStatement(new MethodInvocation("PrintEgo").AddArgument("Easy!").ToStatement())
                    .SetFalseStatement(
                        new MethodInvocation("PrintEgo").AddArgument("I can't budge it. It's rusted shut.!").ToStatement(),
                        new MethodInvocation("StopObjectCode").ToStatement())),
                new BinaryExpression(new MemberAccess("ActiveObject", "State8"), Operator.Assignment, true.ToLiteral()).ToStatement(),
                new BinaryExpression(new ElementAccess("Objects", 213), Operator.Assignment, true.ToLiteral()).ToStatement(),
                new MethodInvocation("StartSound").AddArgument(7).ToStatement(),
                new MethodInvocation("StopObjectCode").ToStatement()
            });

            var actualCu = new ReplaceJumpToIf().Replace(cu);

            Console.WriteLine(AstHelper.ToString(actualCu, false));

            AstHelper.AstEquals(expectedCu, actualCu);
        }