]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programcompiler.cpp
Add file and line information to ProgramParser errors
[libs/gl.git] / source / programcompiler.cpp
index b004b08bee6f533e437f09051ca28d9bfdb22fbb..2dabd7cd8203ff0910eb97c2528e354e0b3943ff 100644 (file)
@@ -40,20 +40,25 @@ ProgramCompiler::ProgramCompiler():
        module(0)
 { }
 
-void ProgramCompiler::compile(const string &source)
+void ProgramCompiler::compile(const string &source, const string &src_name)
 {
        resources = 0;
-       module = &parser.parse(source);
+       module = &parser.parse(source, src_name);
        process();
 }
 
-void ProgramCompiler::compile(IO::Base &io, Resources *res)
+void ProgramCompiler::compile(IO::Base &io, Resources *res, const string &src_name)
 {
        resources = res;
-       module = &parser.parse(io);
+       module = &parser.parse(io, src_name);
        process();
 }
 
+void ProgramCompiler::compile(IO::Base &io, const string &src_name)
+{
+       compile(io, 0, src_name);
+}
+
 void ProgramCompiler::add_shaders(Program &program)
 {
        if(!module)
@@ -84,7 +89,7 @@ void ProgramCompiler::add_shaders(Program &program)
 Module *ProgramCompiler::create_builtins_module()
 {
        ProgramParser parser;
-       Module *module = new Module(parser.parse(builtins_src));
+       Module *module = new Module(parser.parse(builtins_src, "<builtin>"));
        for(list<Stage>::iterator i=module->stages.begin(); i!=module->stages.end(); ++i)
        {
                VariableResolver resolver;
@@ -137,7 +142,7 @@ void ProgramCompiler::import(const string &name)
        if(!io)
                throw runtime_error(format("module %s not found", name));
        ProgramParser import_parser;
-       Module &imported_module = import_parser.parse(*io);
+       Module &imported_module = import_parser.parse(*io, fn);
 
        inject_block(module->shared.content, imported_module.shared.content);
        apply<DeclarationCombiner>(module->shared);