Example #1
0
            public void VisitNoOpExpr()
            {
                var target = new TypeCheckingVisitor();

                var expression = new NoOpStatement();

                var actual = target.Visit(expression, scope);

                Assert.AreEqual(ValueType.Unit, actual);
            }
            public void BodyPropertyReturnsPassedBody()
            {
                var name = new IdentifierExpr(RandomGenerator.String());
                var arguments = new VarDefinitionStmt[0];
                var body = new NoOpStatement();
                var returnType = new IdentifierExpr(RandomGenerator.String());

                var target = new FunctionDefinitionExpr(name, arguments, body, returnType);

                Assert.AreSame(body, target.Body);
            }
            public void ReturnTypePropertyReturnsPassedReturnType()
            {
                var name       = new IdentifierExpr(RandomGenerator.String());
                var arguments  = new VarDefinitionStmt[0];
                var body       = new NoOpStatement();
                var returnType = new IdentifierExpr(RandomGenerator.String());

                var target = new FunctionDefinitionExpr(name, arguments, body, returnType);

                Assert.AreSame(returnType, target.ReturnType);
            }
            public void AcceptMethodCallsVisitOnVisitorWithThis()
            {
                var name       = new IdentifierExpr(RandomGenerator.String());
                var arguments  = new VarDefinitionStmt[0];
                var body       = new NoOpStatement();
                var returnType = new IdentifierExpr(RandomGenerator.String());

                var target = new FunctionDefinitionExpr(name, arguments, body, returnType);

                var visitor = new Mock <IExpressionVisitor <string, int> >();

                target.Accept(visitor.Object, 0);

                visitor.Verify(x => x.Visit(target, 0), Times.Once);
            }
            public void AcceptMethodCallsOnlyVisitOnVisitorWithThisAndNoOtherVisitMethods()
            {
                var name       = new IdentifierExpr(RandomGenerator.String());
                var arguments  = new VarDefinitionStmt[0];
                var body       = new NoOpStatement();
                var returnType = new IdentifierExpr(RandomGenerator.String());

                var target = new FunctionDefinitionExpr(name, arguments, body, returnType);

                // throw exception is any other methods called other than the PlusExpr overload.
                var visitor = new Mock <IExpressionVisitor <string, int> >(MockBehavior.Strict);

                visitor.Setup(x => x.Visit(target, 1234)).Returns("");

                target.Accept(visitor.Object, 1234);
            }
            public void VisitNoOpExpr()
            {
                var target = new TypeCheckingVisitor();

                var expression = new NoOpStatement();

                var actual = target.Visit(expression, scope);

                Assert.AreEqual(ValueType.Unit, actual);
            }
            public void AcceptMethodCallsOnlyVisitOnVisitorWithThisAndNoOtherVisitMethods()
            {
                var name = new IdentifierExpr(RandomGenerator.String());
                var arguments = new VarDefinitionStmt[0];
                var body = new NoOpStatement();
                var returnType = new IdentifierExpr(RandomGenerator.String());

                var target = new FunctionDefinitionExpr(name, arguments, body, returnType);

                // throw exception is any other methods called other than the PlusExpr overload.
                var visitor = new Mock<IExpressionVisitor<string, int>>(MockBehavior.Strict);
                visitor.Setup(x => x.Visit(target, 1234)).Returns("");

                target.Accept(visitor.Object, 1234);
            }
            public void AcceptMethodCallsVisitOnVisitorWithThis()
            {
                var name = new IdentifierExpr(RandomGenerator.String());
                var arguments = new VarDefinitionStmt[0];
                var body = new NoOpStatement();
                var returnType = new IdentifierExpr(RandomGenerator.String());

                var target = new FunctionDefinitionExpr(name, arguments, body, returnType);

                var visitor = new Mock<IExpressionVisitor<string, int>>();

                target.Accept(visitor.Object, 0);

                visitor.Verify(x => x.Visit(target, 0), Times.Once);
            }
Example #9
0
 public string Visit(NoOpStatement stmt, Scope scope)
 {
     return("");
 }
Example #10
0
 public Statement Parse_Statement(int indent)
 {
     if (Lookahead() == Token.EndLine)
     {
         consume(Token.EndLine);
         return(new NoOpStatement());
     }
     else if (Lookahead() == Token.Def)
     {
         consume(Token.Def);
         string id = consume(Token.ID).Item2;
         consume(Token.LParen);
         List <Expression> args = new List <Expression>();
         if (Lookahead() != Token.RParen)
         {
             args.Add(Parse_Expressison());
             while (Lookahead() == Token.Comma)
             {
                 consume(Token.Comma);
                 args.Add(Parse_Expressison());
             }
         }
         consume(Token.RParen);
         consume(Token.Colon);
         if (Lookahead() != Token.EOF)
         {
             consume(Token.EndLine);
         }
         Statement code = Parse_CodeBlock(indent + 1);
         return(new FunctionDeclarationStatement(id, args, code));
     }
     else if (Lookahead() == Token.Class)
     {
         consume(Token.Class);
         string id = consume(Token.ID).Item2;
         consume(Token.Colon);
         consume(Token.EndLine);
         Statement block = Parse_CodeBlock(indent + 1);
         return(new ClassStatement(id, block));
     }
     else if (Lookahead() == Token.Print)
     {
         consume(Token.Print);
         consume(Token.LParen);
         Expression expr = Parse_Expressison();
         consume(Token.RParen);
         if (Lookahead() != Token.EOF)
         {
             consume(Token.EndLine);
         }
         return(new PrintStatement(expr));
     }
     else if (Lookahead() == Token.Return)
     {
         consume(Token.Return);
         Expression ret = Parse_Expressison();
         if (Lookahead() != Token.EOF)
         {
             consume(Token.EndLine);
         }
         return(new ReturnStatement(ret));
     }
     else if (Lookahead() == Token.If)
     {
         consume(Token.If);
         Expression cond = Parse_Expressison();
         consume(Token.Colon);
         consume(Token.EndLine);
         Statement if_block   = Parse_CodeBlock(indent + 1);
         Statement else_block = new NoOpStatement();
         if (Lookahead() == Token.Else)
         {
             consume(Token.Else);
             else_block = Parse_CodeBlock(indent + 1);
         }
         return(new IfStatement(cond, if_block, else_block));
     }
     else if (Lookahead() == Token.While)
     {
         consume(Token.While);
         Expression cond = Parse_Expressison();
         consume(Token.Colon);
         consume(Token.EndLine);
         Statement code = Parse_CodeBlock(indent + 1);
         return(new WhileStatement(cond, code));
     }
     else if (Lookahead() == Token.For)
     {
         consume(Token.For);
         string id = consume(Token.ID).Item2;
         consume(Token.In);
         Expression iter = Parse_Expressison();
         consume(Token.Colon);
         Statement code = Parse_CodeBlock(indent + 1);
         return(new ForStatement(id, iter, code));
     }
     else
     {
         Expression expr = Parse_Expressison();
         if (Lookahead() == Token.EndLine)
         {
             consume(Token.EndLine);
             return(new CommandStatement(expr));
         }
         if (Lookahead() == Token.EOF)
         {
             return(new CommandStatement(expr));
         }
         //typeof(Array).IsInstanceOfType(arr)
         if (Lookahead() == Token.Assign)
         {
             consume(Token.Assign);
             Expression val = Parse_Expressison();
             return(new AssignStatement(expr, val));
         }
     }
     //technically unreachable
     return(null);
 }
Example #11
0
 public Value Visit(NoOpStatement stmt, Scope scope)
 {
     return(Value.Unit);;
 }