]> git.localhorst.tv Git - l2e.git/blobdiff - src/loader/Parser.cpp
moved some items to l2 source files
[l2e.git] / src / loader / Parser.cpp
index 68fb32674dcebcbae2464d6fc55c24c7d2ede687..d6abcc39561e4b70f8fce0ced7ce880580701ad0 100644 (file)
@@ -17,6 +17,16 @@ using std::vector;
 
 namespace loader {
 
+Parser::Parser(const char *file, ParsedSource &product)
+: file(file)
+, in(file)
+, tok(in)
+, product(product) {
+       if (!in) {
+               throw Error(file, 0, "unable to read file");
+       }
+}
+
 void Parser::Parse() {
        while (tok.HasMore()) {
                ParseStatement();
@@ -75,15 +85,17 @@ Declaration *Parser::ProbeDefinition() {
        Tokenizer::Token t(GetToken());
        tok.Putback(t);
        if (BeginOfPropertyList(t)) {
-               PropertyList *propertyList(ParsePropertyList());
-               Definition *dfn(new Definition(typeName, identifier));
-               dfn->SetValue(propertyList);
-               return dfn;
+               auto_ptr<PropertyList> propertyList(ParsePropertyList());
+               auto_ptr<Definition> dfn(new Definition(typeName, identifier));
+               dfn->SetValue(propertyList.release());
+               product.AddDefinition(dfn.get());
+               return dfn.release();
        } else if (BeginningOfLiteral(t)) {
-               Literal *literal(ParseLiteral());
-               Definition *dfn(new Definition(typeName, identifier));
-               dfn->SetValue(literal);
-               return dfn;
+               auto_ptr<Literal> literal(ParseLiteral());
+               auto_ptr<Definition> dfn(new Definition(typeName, identifier));
+               dfn->SetValue(literal.release());
+               product.AddDefinition(dfn.get());
+               return dfn.release();
        } else {
                return new Declaration(typeName, identifier);
        }