]> git.localhorst.tv Git - l2e.git/blobdiff - src/loader/Parser.cpp
added support for arrays of property lists
[l2e.git] / src / loader / Parser.cpp
index 39f0f876ef819c6f15ae27514c94e4497e50a9c0..68fb32674dcebcbae2464d6fc55c24c7d2ede687 100644 (file)
@@ -216,19 +216,34 @@ Literal *Parser::ParseArray() {
        Tokenizer::Token t(GetToken());
        AssertTokenType(t.type, Tokenizer::Token::BRACKET_OPEN);
 
-       vector<Value *> values;
-
-       while (t.type != Tokenizer::Token::ANGLE_BRACKET_CLOSE) {
-               Value *value(ParseValue());
-               values.push_back(value);
-
-               t = GetToken();
-               if (t.type != Tokenizer::Token::BRACKET_CLOSE && t.type != Tokenizer::Token::COMMA) {
-                       throw Error(file, tok.Line(), string("unexpected token ") + TokenTypeToString(t.type) + ", expected , or ]");
+       Tokenizer::Token probe(GetToken());
+       tok.Putback(probe);
+
+       if (probe.type == Tokenizer::Token::ANGLE_BRACKET_OPEN) {
+               vector<PropertyList *> values;
+               while (t.type != Tokenizer::Token::BRACKET_CLOSE) {
+                       PropertyList *value(ParsePropertyList());
+                       values.push_back(value);
+
+                       t = GetToken();
+                       if (t.type != Tokenizer::Token::BRACKET_CLOSE && t.type != Tokenizer::Token::COMMA) {
+                               throw Error(file, tok.Line(), string("unexpected token ") + TokenTypeToString(t.type) + ", expected , or ]");
+                       }
                }
+               return new Literal(values);
+       } else {
+               vector<Value *> values;
+               while (t.type != Tokenizer::Token::BRACKET_CLOSE) {
+                       Value *value(ParseValue());
+                       values.push_back(value);
+
+                       t = GetToken();
+                       if (t.type != Tokenizer::Token::BRACKET_CLOSE && t.type != Tokenizer::Token::COMMA) {
+                               throw Error(file, tok.Line(), string("unexpected token ") + TokenTypeToString(t.type) + ", expected , or ]");
+                       }
+               }
+               return new Literal(values);
        }
-
-       return new Literal(values);
 }
 
 Literal *Parser::ParseColor() {