X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Floader%2FParser.cpp;h=d6abcc39561e4b70f8fce0ced7ce880580701ad0;hb=322be5954c0f8df6a9e3aaeb2456783a814d52c3;hp=68fb32674dcebcbae2464d6fc55c24c7d2ede687;hpb=4b3deb01b66307f5025938538d27e6ad86cfea13;p=l2e.git diff --git a/src/loader/Parser.cpp b/src/loader/Parser.cpp index 68fb326..d6abcc3 100644 --- a/src/loader/Parser.cpp +++ b/src/loader/Parser.cpp @@ -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(ParsePropertyList()); + auto_ptr 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(ParseLiteral()); + auto_ptr dfn(new Definition(typeName, identifier)); + dfn->SetValue(literal.release()); + product.AddDefinition(dfn.get()); + return dfn.release(); } else { return new Declaration(typeName, identifier); }