delete module;
}
-Module &Parser::parse(const string &s, const string &n, unsigned i)
+Module &Parser::parse(const string &s, const string &n, int i)
{
source = s;
parse_source(n, i);
return *module;
}
-Module &Parser::parse(IO::Base &io, const string &n, unsigned i)
+Module &Parser::parse(IO::Base &io, const string &n, int i)
{
source = string();
while(!io.eof())
return *module;
}
-void Parser::parse_source(const string &name, unsigned index)
+void Parser::parse_source(const string &name, int index)
{
delete module;
module = new Module;
cur_stage = &module->shared;
base_index = index;
source_index = index;
- source_reference(1, name);
+ if(index>=0)
+ source_reference(1, name);
tokenizer.begin(name, source);
allow_stage_change = true;
while(!tokenizer.peek_token().empty())
void Parser::source_reference(unsigned index, const string &name)
{
- if(index<1)
+ if(index<1 || base_index<0)
throw invalid_shader_source(tokenizer.get_location(), "Invalid source reference");
module->source_map.set_name(base_index+index-1, name);