Author: dragonking
Date: Sat Jul 26 00:58:43 2008
New Revision: 28210

URL: http://svn.gna.org/viewcvs/wesnoth?rev=28210&view=rev
Log:
Made variant_map use [] brackets instead of {} ones

Modified:
    trunk/src/formula.cpp
    trunk/src/variant.cpp

Modified: trunk/src/formula.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/formula.cpp?rev=28210&r1=28209&r2=28210&view=diff
==============================================================================
--- trunk/src/formula.cpp (original)
+++ trunk/src/formula.cpp Sat Jul 26 00:58:43 2008
@@ -221,7 +221,7 @@
        expression_ptr left_, right_;
 };
 
-class square_bracket_expression : public formula_expression { //TODO
+class square_bracket_expression : public formula_expression {
 public:
        square_bracket_expression(expression_ptr left, expression_ptr key)
           : left_(left), key_(key)
@@ -520,7 +520,7 @@
 void parse_args(const token* i1, const token* i2,
                 std::vector<expression_ptr>* res,
                                function_symbol_table* symbols)
-{
+{              
        int parens = 0;
        const token* beg = i1;
        while(i1 != i2) {
@@ -531,8 +531,10 @@
                } else if(i1->type == TOKEN_COMMA && !parens) {
                        res->push_back(parse_expression(beg,i1, symbols));
                        beg = i1+1;
-               }
-
+               } else if(i1->type == TOKEN_POINTER) {
+                               std::cerr << "Unexpected '->' operator found\n";
+                               throw formula_error();
+               }
                ++i1;
        }
 
@@ -563,7 +565,12 @@
                                throw formula_error();
                        }
                } else if( i1->type == TOKEN_COMMA && !parens ) {
-                       check_pointer = false;
+                       if (check_pointer)
+                               check_pointer = false;
+                       else {
+                               std::cerr << "Expected comma, but '->' found\n";
+                               throw formula_error();
+               }
                        res->push_back(parse_expression(beg,i1, symbols));
                        beg = i1+1;
                }
@@ -686,7 +693,7 @@
        if(op == NULL) {
                if(i1->type == TOKEN_LPARENS && (i2-1)->type == TOKEN_RPARENS) {
                        return parse_expression(i1+1,i2-1,symbols);
-               } else if( (i2-1)->type == TOKEN_RSQUARE) { //check if there is 
[ ] : either a list definition, or a operator 
+               } else if( (i2-1)->type == TOKEN_RSQUARE) { //check if there is 
[ ] : either a list/map definition, or a operator 
                                const token* tok = i2-2;
                                int square_parens = 0;
                                while ( (tok->type != TOKEN_LSQUARE || 
square_parens) && tok != i1) {
@@ -699,10 +706,15 @@
                                }       
                                if (tok->type == TOKEN_LSQUARE) {
                                        if (tok == i1) {
-                                               //create a list
+                                               //create a list or a map
                                                std::vector<expression_ptr> 
args;
-                                               
parse_args(i1+1,i2-1,&args,symbols);
-                                               return expression_ptr(new 
list_expression(args));
+                                               if ( (i1+2)->type == 
TOKEN_POINTER ) {
+                                                       parse_set_args(i1+1, 
i2-1, &args, symbols);
+                                                       return 
expression_ptr(new map_expression(args));
+                                               } else {
+                                                       
parse_args(i1+1,i2-1,&args,symbols);
+                                                       return 
expression_ptr(new list_expression(args));
+                                               }
                                        } else {
                                                //execute operator [ ]
                                                return expression_ptr(new 
square_bracket_expression(
@@ -710,12 +722,7 @@
                                                                                
                parse_expression(tok+1,i2-1,symbols)));
                                        }
                                }
-               } else if(i1->type == TOKEN_LBRACKET && (i2-1)->type == 
TOKEN_RBRACKET) {
-                               //create a map TODO: add support for a set
-                               std::vector<expression_ptr> args;
-                               parse_set_args(i1+1,i2-1,&args,symbols);
-                               return expression_ptr(new map_expression(args));
-               } else if(i2 - i1 == 1) {
+       } else if(i2 - i1 == 1) {
                        if(i1->type == TOKEN_KEYWORD) {
                                if(std::string(i1->begin,i1->end) == 
"functions") {
                                        return expression_ptr(new 
function_list_expression(symbols));

Modified: trunk/src/variant.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/variant.cpp?rev=28210&r1=28209&r2=28210&view=diff
==============================================================================
--- trunk/src/variant.cpp (original)
+++ trunk/src/variant.cpp Sat Jul 26 00:58:43 2008
@@ -683,7 +683,7 @@
                break;
        }
        case TYPE_MAP: {
-               str += "{";
+               str += "[";
                bool first_time = true;
                for(std::map<variant,variant>::const_iterator 
i=map_->elements.begin(); i != map_->elements.end(); ++i) {
                        if(!first_time) {
@@ -694,7 +694,7 @@
                        str += "->";
                        i->second.serialize_to_string(str);
                }
-               str += "}";
+               str += "]";
                break;
        }
        case TYPE_STRING:
@@ -833,7 +833,7 @@
                break;
        }
        case TYPE_MAP: {
-               s << "{";
+               s << "[";
                bool first_time = true;
                for(std::map<variant,variant>::const_iterator 
i=map_->elements.begin(); i != map_->elements.end(); ++i) {
                        if(!first_time) {
@@ -844,7 +844,7 @@
                        s << "->";
                        s << i->second.to_debug_string(seen);
                }
-               s << "}";
+               s << "]";
                break;
        }
        case TYPE_STRING: {


_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits

Reply via email to