]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/binaryparser.cpp
Make use of KeyError's key parameter
[libs/datafile.git] / source / binaryparser.cpp
index 298770a50f3ccbf2b02d3113f0163daea0dfefa7..ba6414bc77a369a7eb2d7c51e06e412aee16fb0a 100644 (file)
@@ -19,7 +19,7 @@ BinaryParser::BinaryParser(Input &i, const string &s):
        ParserMode(i, s),
        first(true)
 {
-       dict[1]=DictEntry("__kw", "iss");
+       dict[1]=DictEntry("__st", "iss");
        dict[2]=DictEntry("__enum", "is");
 }
 
@@ -28,7 +28,7 @@ Statement BinaryParser::parse()
        while(1)
        {
                Statement st=parse_statement();
-               if(st.keyword=="__kw")
+               if(st.keyword=="__st")
                {
                        if(st.args.size()!=3)
                                throw TypeError(src+": Keyword definition must have three arguments");
@@ -87,7 +87,7 @@ Statement BinaryParser::parse_statement()
                        result.args.push_back(parse_bool());
                        break;
                case 'e':
-                       result.args.push_back(parse_enum());
+                       result.args.push_back(Value(ENUM, parse_enum()));
                        break;
                }
        }
@@ -132,7 +132,7 @@ float BinaryParser::parse_float()
        };
 
 #if BYTE_ORDER == LITTLE_ENDIAN
-       for(unsigned i=sizeof(float)-1; i--;)
+       for(unsigned i=sizeof(float); i--;)
                d[i]=in.get();
 #else
        for(unsigned i=0; i<sizeof(float); ++i)
@@ -162,7 +162,7 @@ string BinaryParser::parse_enum()
        unsigned id=parse_int();
        EnumMap::iterator i=enums.find(id);
        if(i==enums.end())
-               throw KeyError("Unknown enum");
+               throw KeyError("Unknown enum", lexical_cast(id));
        return i->second;
 }