if(pass==RENAME)
{
+ /* Check against conflicts with the other context as well as variables
+ already renamed here. */
+ bool conflict = (staging_block.variables.count(var.name) || referenced_names.count(var.name));
staging_block.variables[var.name] = &var;
- if(referenced_names.count(var.name))
+ if(conflict)
{
string mapped_name = get_unused_variable_name(staging_block, var.name);
if(mapped_name!=var.name)
void FunctionInliner::visit(FunctionCall &call)
{
+ for(NodeArray<Expression>::iterator i=call.arguments.begin(); (!r_inlined_here && i!=call.arguments.end()); ++i)
+ visit(*i);
+
if(r_inlined_here)
return;
- for(NodeArray<Expression>::iterator i=call.arguments.begin(); i!=call.arguments.end(); ++i)
- visit(*i);
-
FunctionDeclaration *def = call.declaration;
if(def)
def = def->definition;
--- /dev/null
+uniform mat4 mvp;
+
+#pragma MSP stage(vertex)
+layout(location=0) in vec4 position;
+layout(location=1) in vec4 offset;
+vec4 transform_position(vec4 pos)
+{
+ vec4 pos_1 = offset;
+ return mvp*(pos+pos_1);
+}
+void main()
+{
+ vec4 pos = vec4(0.0);
+ gl_Position = transform_position(pos+position);
+}
+
+/* Expected output: vertex
+uniform mat4 mvp;
+layout(location=0) in vec4 position;
+layout(location=1) in vec4 offset;
+void main()
+{
+ gl_Position = mvp*(vec4(0.0)+position+offset);
+}
+*/
--- /dev/null
+uniform mat4 mvp;
+
+#pragma MSP stage(vertex)
+layout(location=0) in vec4 position;
+vec4 get_position()
+{
+ return position;
+}
+vec4 transform_position(vec4 pos)
+{
+ return mvp*pos;
+}
+void main()
+{
+ gl_Position = transform_position(get_position());
+}
+
+/* Expected output: vertex
+uniform mat4 mvp;
+layout(location=0) in vec4 position;
+void main()
+{
+ gl_Position = mvp*position;
+}
+*/