Esempio n. 1
0
        public LiteralValueNode ParseLitealValue(Token token)
        {
            if (token.Type == TokenType.LiteralValue)
            {
                LiteralValueNode value      = null;
                CobaltType       cobaltType = token.GetData <CobaltType>(TokenDataKeys.COBALT_TYPE);
                switch (cobaltType)
                {
                case CobaltType.Boolean:
                    value = new BooleanValueNode(token.SourceLine, token.GetData <bool>(TokenDataKeys.LITERAL_VALUE));
                    break;

                case CobaltType.Float:
                    value = new FloatValueNode(token.SourceLine, token.GetData <float>(TokenDataKeys.LITERAL_VALUE));
                    break;

                case CobaltType.Integer:
                    value = new IntegerValueNode(token.SourceLine, token.GetData <int>(TokenDataKeys.LITERAL_VALUE));
                    break;

                default:
                    throw new CompilerException($"`{MethodBase.GetCurrentMethod().Name}` called with unknown Cobalt type `{cobaltType}`.");
                }
                return(value);
            }
            else
            {
                throw new CompilerException($"`{MethodBase.GetCurrentMethod().Name}` called with a bad token. Expected a token of type `{TokenType.LiteralValue}`, got token of type `{token.Type}` instead.");
            }
        }
Esempio n. 2
0
        public void ShouldParseLiteralValues(object value, CobaltType type)
        {
            // Arrange
            Token token = new Token(TokenType.LiteralValue, 1, 0);

            token.SetData(TokenDataKeys.LITERAL_VALUE, value);
            token.SetData(TokenDataKeys.COBALT_TYPE, type);

            // Act
            LiteralValueNode node = Parser.ParseLitealValue(token);

            // Assert
            switch (type)
            {
            case CobaltType.Boolean:
                if (node is BooleanValueNode booleanValue)
                {
                    Assert.Equal((bool)value, booleanValue.Value);
                }
                else
                {
                    throw new XunitException("Wrong Cobalt type.");
                }
                break;

            case CobaltType.Float:
                if (node is FloatValueNode floatValue)
                {
                    Assert.Equal((float)value, floatValue.Value);
                }
                else
                {
                    throw new XunitException("Wrong Cobalt type.");
                }
                break;

            case CobaltType.Integer:
                if (node is IntegerValueNode integerValue)
                {
                    Assert.Equal((int)value, integerValue.Value);
                }
                else
                {
                    throw new XunitException("Wrong Cobalt type.");
                }
                break;

            default:
                throw new XunitException("No test implemented for this type.");
            }
        }
Esempio n. 3
0
        public override void Init(AstContext context, ParseTreeNode treeNode)
        {
            base.Init(context, treeNode);

            foreach (var childNode in treeNode.ChildNodes)
            {
                if (childNode.AstNode is IdentifierNode)
                {
                    Identifier = childNode.AstNode as IdentifierNode;
                }
                else if (childNode.AstNode is LiteralValueNode)
                {
                    Value = childNode.AstNode as LiteralValueNode;
                }
            }

            AsString = string.Join(" ", "const", Identifier, "=", Value);
        }
Esempio n. 4
0
        private void GenerateLiteralValueCode(StringBuilder builder, LiteralValueNode literalValue)
        {
            switch (literalValue)
            {
            case BooleanValueNode booleanValue:
                builder.Append(booleanValue.Value);
                break;

            case FloatValueNode floatValue:
                builder.Append(floatValue.Value);
                break;

            case IntegerValueNode integerValue:
                builder.Append(integerValue.Value);
                break;

            default:
                throw new CompilerException($"`{MethodBase.GetCurrentMethod().Name}` called with bad AST stucture. Expected a literal value node.");
            }
        }
Esempio n. 5
0
        private string GetExpression(LiteralValueNode litValueNode)
        {
            var value = litValueNode.Value;

            return(ObjectReference(value));
        }
Esempio n. 6
0
        public override void Init(AstContext context, ParseTreeNode treeNode)
        {
            base.Init(context, treeNode);

            Route = ((LiteralValueNode)treeNode.ChildNodes.Last().AstNode);
        }