]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programparser.cpp
Implement an import system
[libs/gl.git] / source / programparser.cpp
index f11b5bf2e73bb570981072de07cf69d6c32e1824..ddea96409dea4475e911e94fac01fda171451b57 100644 (file)
@@ -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> 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==";")