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); }
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); }