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 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); }
public string Visit(NoOpStatement stmt, Scope scope) { return(""); }
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); }
public Value Visit(NoOpStatement stmt, Scope scope) { return(Value.Unit);; }