]> git.localhorst.tv Git - l2e.git/commitdiff
revised array type notation
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Tue, 11 Sep 2012 18:34:29 +0000 (20:34 +0200)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Tue, 11 Sep 2012 18:34:29 +0000 (20:34 +0200)
src/loader/ParsedSource.cpp
src/loader/ParsedSource.h
src/loader/Parser.cpp
test-data/test.l2s

index c0d3a411782fea5e840b97720b2222c8d120a416..e1a1d0aa030e3100e0a831205407e611443fb4aa 100644 (file)
@@ -191,11 +191,14 @@ Literal::Literal(const vector<Value *> &v)
 , i3(0), i4(0)
 , b(false)
 , type(ARRAY_VALUES) {
-
+       if (!v.empty()) {
+               typeName = v.front()->GetLiteral().GetTypeName();
+       }
 }
 
-Literal::Literal(const std::vector<PropertyList *> &pls)
+Literal::Literal(const string &typeName, const vector<PropertyList *> &pls)
 : props(0)
+, typeName(typeName)
 , propertyLists(pls)
 , i1(0), i2(0)
 , i3(0), i4(0)
@@ -206,6 +209,7 @@ Literal::Literal(const std::vector<PropertyList *> &pls)
 
 Literal::Literal(bool b)
 : props(0)
+, typeName("Boolean")
 , i1(0), i2(0)
 , i3(0), i4(0)
 , b(b)
@@ -215,6 +219,7 @@ Literal::Literal(bool b)
 
 Literal::Literal(int r, int g, int b, int a)
 : props(0)
+, typeName("Color")
 , i1(r), i2(g)
 , i3(b), i4(a)
 , b(false)
@@ -224,6 +229,7 @@ Literal::Literal(int r, int g, int b, int a)
 
 Literal::Literal(int number)
 : props(0)
+, typeName("Number")
 , i1(number), i2(0)
 , i3(0), i4(0)
 , b(false)
@@ -233,6 +239,7 @@ Literal::Literal(int number)
 
 Literal::Literal(const string &dir, const string &path)
 : props(0)
+, typeName("Path")
 , str(CatPath(dir, path))
 , i1(0), i2(0)
 , i3(0), i4(0)
@@ -243,6 +250,7 @@ Literal::Literal(const string &dir, const string &path)
 
 Literal::Literal(const string &str)
 : props(0)
+, typeName("String")
 , str(str)
 , i1(0), i2(0)
 , i3(0), i4(0)
@@ -253,6 +261,7 @@ Literal::Literal(const string &str)
 
 Literal::Literal(int x, int y)
 : props(0)
+, typeName("Vector")
 , i1(x), i2(y)
 , i3(0), i4(0)
 , b(false)
@@ -262,7 +271,7 @@ Literal::Literal(int x, int y)
 
 Literal::Literal(const string &typeName, PropertyList *properties)
 : props(properties)
-, str(typeName)
+, typeName(typeName)
 , i1(0), i2(0)
 , i3(0), i4(0)
 , b(false)
@@ -380,11 +389,7 @@ int Literal::GetY() const {
 }
 
 const string &Literal::GetTypeName() const {
-       if (type == OBJECT) {
-               return str;
-       } else {
-               throw runtime_error("tried to access type name of non-object literal");
-       }
+       return typeName;
 }
 
 const PropertyList *Literal::GetProperties() const {
index e10b287aa661fbd9b5b9cdfac71c593d0714dc47..5012729b93344e0f521b9fd79b1bf1803b384260 100644 (file)
@@ -36,7 +36,7 @@ public:
 
 public:
        explicit Literal(const std::vector<Value *> &);
-       explicit Literal(const std::vector<PropertyList *> &);
+       Literal(const std::string &, const std::vector<PropertyList *> &);
        explicit Literal(bool);
        Literal(int r, int g, int b, int a = 255);
        explicit Literal(int number);
@@ -71,7 +71,7 @@ public:
 
 private:
        PropertyList *props;
-       std::string str;
+       std::string typeName, str;
        std::vector<Value *> values;
        std::vector<PropertyList *> propertyLists;
        int i1, i2, i3, i4;
index aa770ff12a55fa1137a1a76511a3246a9d6a73e9..183accbbb728f1cdca9c672b33a2a454c43d94e6 100644 (file)
@@ -254,9 +254,8 @@ Literal *Parser::ParseArray() {
        AssertTokenType(t.type, Tokenizer::Token::BRACKET_OPEN);
 
        Tokenizer::Token probe(GetToken());
-       tok.Putback(probe);
 
-       if (probe.type == Tokenizer::Token::ANGLE_BRACKET_OPEN) {
+       if (probe.type == Tokenizer::Token::TYPE_NAME) {
                vector<PropertyList *> values;
                while (t.type != Tokenizer::Token::BRACKET_CLOSE) {
                        PropertyList *value(ParsePropertyList());
@@ -267,8 +266,10 @@ Literal *Parser::ParseArray() {
                                throw Error(file, tok.Line(), string("unexpected token ") + TokenTypeToString(t.type) + ", expected , or ]");
                        }
                }
-               return new Literal(values);
+               return new Literal(probe.str, values);
        } else {
+               tok.Putback(probe);
+
                vector<Value *> values;
                while (t.type != Tokenizer::Token::BRACKET_CLOSE) {
                        Value *value(ParseValue());
index 48817f47965aca37ae2c3df5c209edbc1f250b30..b2fc8b6efdff02a62dd4f37bfe403d2f3ca418fc 100644 (file)
@@ -48,7 +48,8 @@ export Monster lizard {
                sprite: lizardSprite,
                frametime: fourFramesTime,
                repeat: false,
-               frames: [
+               frames:
+               [ ComplexAnimationFrame
                        { column: 0, row: 1, disposition: < 0, 16> },
                        { column: 0, row: 0, disposition: < 0, 16> },
                        { column: 0, row: 1, disposition: < 0, 16> },
@@ -91,7 +92,8 @@ export Hero maxim {
                sprite: maximSprite,
                frametime: frameTime,
                repeat: false,
-               frames: [
+               frames:
+               [ ComplexAnimationFrame
                        { column: 1, row: 0, disposition: < 0, 0> },
                        { column: 1, row: 0, disposition: < 0, 0> },
                        { column: 1, row: 0, disposition: < 0, 0> },
@@ -125,7 +127,8 @@ export Hero maxim {
                sprite: maximSprite,
                frametime: fiveFramesTime,
                repeat: false,
-               frames: [
+               frames:
+               [ ComplexAnimationFrame
                        { column: 3, row: 0, disposition: < 0, 0> },
                        { column: 3, row: 0, disposition: < 0, 0> },
                        { column: 3, row: 1, disposition: < 0, 0> }
@@ -167,7 +170,8 @@ export Hero selan {
                sprite: selanSprite,
                frametime: frameTime,
                repeat: false,
-               frames: [
+               frames:
+               [ ComplexAnimationFrame
                        { column: 1, row: 0, disposition: < 4, 0> },
                        { column: 1, row: 0, disposition: < 4, 0> },
                        { column: 1, row: 0, disposition: < 8, 2> },
@@ -188,7 +192,8 @@ export Hero selan {
                sprite: selanSprite,
                frametime: frameTime,
                repeat: false,
-               frames: [
+               frames:
+               [ ComplexAnimationFrame
                        { column: 3, row: 0, disposition: < 0, 0> },
                        { column: 3, row: 0, disposition: < 0, 0> },
                        { column: 3, row: 0, disposition: < 0, 0> },
@@ -237,7 +242,8 @@ export Hero guy {
                sprite: guySprite,
                frametime: frameTime,
                repeat: false,
-               frames: [
+               frames:
+               [ ComplexAnimationFrame
                        { column: 1, row: 0, disposition: <-4, 0> },
                        { column: 1, row: 0, disposition: <-4, 0> },
                        { column: 1, row: 0, disposition: <-8, 0> },
@@ -290,7 +296,8 @@ export Hero dekar {
                sprite: dekarSprite,
                frametime: frameTime,
                repeat: false,
-               frames: [
+               frames:
+               [ ComplexAnimationFrame
                        { column: 1, row: 0, disposition: < 4, 0> },
                        { column: 1, row: 0, disposition: < 8, 2> },
                        { column: 2, row: 0, disposition: <12, 4> },
@@ -311,7 +318,8 @@ export Hero dekar {
                sprite: dekarSprite,
                frametime: twoFramesTime,
                repeat: false,
-               frames: [
+               frames:
+               [ ComplexAnimationFrame
                        { column: 3, row: 0, disposition: < 0, 0> },
                        { column: 3, row: 0, disposition: < 0, 0> },
                        { column: 3, row: 0, disposition: < 0, 0> },
@@ -389,7 +397,8 @@ export BattleResources battleResources {
        numberAnimationPrototype: ComplexAnimation {
                frametime: frameTime,
                repeat: false,
-               frames: [
+               frames:
+               [ ComplexAnimationFrame
                        { column: 0, row: 0, disposition: <  0,  0> },
                        { column: 0, row: 0, disposition: <  0,-26> },
                        { column: 0, row: 0, disposition: <  0,-42> },