namespace GL {
namespace SL {
-Formatter::Formatter():
- stage(0),
- source_index(0),
- source_line(1),
- indent(0),
- parameter_list(false),
- omit_builtin(false)
-{ }
-
-const string &Formatter::apply(Stage &s)
+string Formatter::apply(Stage &s)
{
stage = &s;
omit_builtin = true;
if(ver)
{
append(format("#version %d%02d", ver.major, ver.minor));
- if(s.required_features.gl_api==OPENGL_ES2 && ver>=Version(3, 0))
+ if(s.required_features.target_api==OPENGL_ES && ver>=Version(3, 0))
append(" es");
formatted += '\n';
}
void Formatter::append(const string &text)
{
formatted += text;
- for(string::const_iterator i=text.begin(); i!=text.end(); ++i)
- if(*i=='\n')
+ for(char c: text)
+ if(c=='\n')
++source_line;
}
SetForScope<unsigned> set(indent, indent+(indent>0 || use_braces));
string spaces(indent*2, ' ');
bool first = true;
- for(NodeList<Statement>::iterator i=block.body.begin(); i!=block.body.end(); ++i)
+ for(const RefPtr<Statement> &s: block.body)
{
- if(omit_builtin && (*i)->source<=BUILTIN_SOURCE)
+ if(omit_builtin && s->source<=BUILTIN_SOURCE)
continue;
if(!first)
append('\n');
first = false;
- set_source((*i)->source, (*i)->line);
+ set_source(s->source, s->line);
append(spaces);
- (*i)->visit(*this);
+ s->visit(*this);
}
if(use_braces)
void Formatter::visit(VariableReference &var)
{
append(var.name);
+ r_empty_name = false;
}
void Formatter::visit(InterfaceBlockReference &iface)
{
- append(iface.name);
+ r_empty_name = iface.declaration->instance_name.empty();
+ if(!r_empty_name)
+ append(iface.declaration->instance_name);
}
void Formatter::visit(MemberAccess &memacc)
{
visit_expression(*memacc.left, memacc.oper, false);
- append(format(".%s", memacc.member));
+ if(!r_empty_name)
+ append('.');
+ append(memacc.member);
+ r_empty_name = false;
}
void Formatter::visit(Swizzle &swizzle)
void Formatter::visit(FunctionCall &call)
{
append(format("%s(", call.name));
- for(NodeArray<Expression>::iterator i=call.arguments.begin(); i!=call.arguments.end(); ++i)
+ for(auto i=call.arguments.begin(); i!=call.arguments.end(); ++i)
{
if(i!=call.arguments.begin())
append(", ");
void Formatter::visit(Layout &layout)
{
append("layout(");
- for(vector<Layout::Qualifier>::const_iterator i=layout.qualifiers.begin(); i!=layout.qualifiers.end(); ++i)
+ for(auto i=layout.qualifiers.begin(); i!=layout.qualifiers.end(); ++i)
{
if(i!=layout.qualifiers.begin())
append(", ");
void Formatter::visit(FunctionDeclaration &func)
{
append(format("%s %s(", func.return_type_declaration->name, func.name));
- for(NodeArray<VariableDeclaration>::iterator i=func.parameters.begin(); i!=func.parameters.end(); ++i)
+ for(auto i=func.parameters.begin(); i!=func.parameters.end(); ++i)
{
if(i!=func.parameters.begin())
append(", ");