public void BodyPropertyReturnsPassedBody2() { var name = new IdentifierExpr(RandomGenerator.String()); var arguments = new VarDefinitionStmt[0]; var body = new ScopeBlockStmt(new [] { 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 ArgumentsPropertyReturnsPassedArguments() { 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(arguments, target.Arguments); }
public void BodyPropertyReturnsPassedBody() { var name = new IdentifierExpr(RandomGenerator.String()); var arguments = new VarDefinitionStmt[0]; var body = new ConstantExpr(RandomGenerator.Int()); var returnType = new IdentifierExpr(RandomGenerator.String()); var target = new LambdaDefinitionExpr(name, arguments, body, returnType); Assert.AreSame(body, target.Body); }
public void BodyPropertyReturnsPassedBody2() { var name = new IdentifierExpr(RandomGenerator.String()); var arguments = new VarDefinitionStmt[0]; var body = new ScopeBlockStmt(new [] { 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 ConstantExpr(RandomGenerator.Int()); var returnType = new IdentifierExpr(RandomGenerator.String()); var target = new LambdaDefinitionExpr(name, arguments, body, returnType); Assert.AreSame(returnType, target.ReturnType); }
public Value Visit(VarDefinitionStmt stmt, Scope scope) { Value value = null; if (stmt.InitialValue != null) { value = stmt.InitialValue.Accept(this, scope); } scope.DefineIdentifier(stmt.Name.Name, value, stmt.Type.Name); return(value); }
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 ValueType Visit(VarDefinitionStmt stmt, Scope scope) { ValueType type; if (stmt.Type.Name != null) { if (!ValueType.TryParse(stmt.Type.Name, true, out type)) { throw new TypeCheckException("Unknown type " + stmt.Type.Name); } } else { type = stmt.InitialValue.Accept(this, scope); } return(type); }
public string Visit(VarDefinitionStmt varDefinitionStmt, Scope scope) { var definition = (varDefinitionStmt.IsConst) ? "val" : "var"; definition += " "; definition += varDefinitionStmt.Name.Name; if (varDefinitionStmt.Type.Name != null) { definition += " : " + varDefinitionStmt.Type.Name; } if (varDefinitionStmt.InitialValue != null) { definition += " = " + varDefinitionStmt.InitialValue.Accept(this, scope); } return(definition + ";"); }
public IDisposable PushArguments(VarDefinitionStmt[] arguments, Value[] values) { var scopePopper = PushScope(); try { for (var i = 0; i < arguments.Length; i++) { _scope.DefineIdentifier(arguments[i].Name.Name, values[i]); } } catch (Exception) { scopePopper.Dispose(); throw; } return scopePopper; }
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); }