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();
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");
string token = peek_token();
if(token=="{")
{
- func->definition = true;
+ func->definition = func.get();
parse_block(func->body, true);
}
else if(token==";")