Beispiel #1
0
        private ObjectNode ParseObject()
        {
            Expect(TokenType.LBRACE);
            Next();

            var obj = new ObjectNode(Position(-1));

            while (More() && !Accept(TokenType.RBRACE))
            {
                Expect(TokenType.IDENT, TokenType.LBRACK);

                ExpressionNode key;
                if (Accept(TokenType.IDENT))
                {
                    key = new StringNode(Position(), ParseIdent().Value);
                }
                else
                {
                    Expect(TokenType.LBRACK);
                    Next();
                    key = ParseExpression();
                    Expect(TokenType.RBRACK);
                    Next();
                }

                Expect(TokenType.ASSIGN);
                Next();

                obj.AddDefaultElement(key, ParseExpression());

                if (Accept(TokenType.COMMA))
                {
                    ExpectNot(TokenType.RBRACE);
                    Next();
                }
                else
                {
                    Expect(TokenType.RBRACE);
                }
            }

            Expect(TokenType.RBRACE);
            Next();

            return(obj);
        }
Beispiel #2
0
        public void ObjectNodesHaveDefaultElements()
        {
            subject.AddDefaultElement(new StringNode(SourcePosition.NIL, "foo"), new IntNode(SourcePosition.NIL, 42));
            subject.AddDefaultElement(new StringNode(SourcePosition.NIL, "bar"), new IntNode(SourcePosition.NIL, 21));

            var defaultElements = subject.DefaultElements.ToList();

            Assert.AreEqual(defaultElements.Count, 2);
            Assert.AreEqual(((StringNode)defaultElements[0].Item1).Value, "foo");
            Assert.AreEqual(((StringNode)defaultElements[1].Item1).Value, "bar");
            Assert.AreEqual(((IntNode)defaultElements[0].Item2).Value, 42);
            Assert.AreEqual(((IntNode)defaultElements[1].Item2).Value, 21);
        }