X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fprogramparser.cpp;h=ddea96409dea4475e911e94fac01fda171451b57;hp=f11b5bf2e73bb570981072de07cf69d6c32e1824;hb=a0caabaed3aeb8947133d78986bfb4ae5ae3c893;hpb=7434b80c452eb8f7ac8200a6f693a9eb668421f0 diff --git a/source/programparser.cpp b/source/programparser.cpp index f11b5bf2..ddea9640 100644 --- a/source/programparser.cpp +++ b/source/programparser.cpp @@ -332,7 +332,9 @@ bool ProgramParser::is_identifier(const string &token) Node *ProgramParser::parse_global_declaration() { string token = peek_token(); - if(token=="layout") + if(token=="import") + return parse_import(); + else if(token=="layout") return parse_layout(); else if(token=="struct") return parse_struct_declaration(); @@ -383,6 +385,18 @@ Node *ProgramParser::parse_statement() throw runtime_error(format("Syntax error at '%s': expected a statement", token)); } +Import *ProgramParser::parse_import() +{ + if(cur_stage->type!=SHARED) + throw runtime_error("Imports are only allowed in the shared section"); + + expect("import"); + RefPtr import = new Import; + import->module = parse_token(); + expect(";"); + return import.release(); +} + Layout *ProgramParser::parse_layout() { expect("layout"); @@ -628,7 +642,7 @@ FunctionDeclaration *ProgramParser::parse_function_declaration() string token = peek_token(); if(token=="{") { - func->definition = true; + func->definition = func.get(); parse_block(func->body, true); } else if(token==";")