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);
            }
Example #7
0
        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);
            }
Example #10
0
        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);
        }
Example #11
0
        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 + ";");
        }
Example #12
0
        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);
            }