+Module *ProgramCompiler::create_builtins_module()
+{
+ ProgramParser parser;
+ Module *module = new Module(parser.parse(builtins_src));
+ for(list<Stage>::iterator i=module->stages.begin(); i!=module->stages.end(); ++i)
+ {
+ VariableResolver resolver;
+ i->content.visit(resolver);
+ for(map<string, VariableDeclaration *>::iterator j=i->content.variables.begin(); j!=i->content.variables.end(); ++j)
+ j->second->linked_declaration = j->second;
+ }
+ return module;
+}
+
+Module &ProgramCompiler::get_builtins_module()
+{
+ static RefPtr<Module> builtins_module = create_builtins_module();
+ return *builtins_module;
+}
+
+Stage *ProgramCompiler::get_builtins(StageType type)
+{
+ Module &module = get_builtins_module();
+ for(list<Stage>::iterator i=module.stages.begin(); i!=module.stages.end(); ++i)
+ if(i->type==type)
+ return &*i;
+ return 0;
+}
+