stage(0),
r_members(0),
record_target(false),
- r_assignment_target(0),
- r_self_referencing(false)
+ r_self_referencing(false),
+ r_assignment_target(0)
{ }
void VariableResolver::apply(Stage &s)
}
}
+void VariableResolver::visit(UnaryExpression &unary)
+{
+ TraversingVisitor::visit(unary);
+ r_members = 0;
+ r_iface_ref = 0;
+}
+
void VariableResolver::visit(BinaryExpression &binary)
{
if(binary.oper->token[0]=='[')
{
{
- SetForScope<bool> set(record_target, false);
+ SetFlag set(record_target, false);
binary.right->visit(*this);
}
r_members = 0;
binary.left->visit(*this);
if(r_iface_ref)
binary.left = r_iface_ref;
- r_iface_ref = 0;
}
else
{
TraversingVisitor::visit(binary);
r_members = 0;
}
+
+ r_iface_ref = 0;
}
void VariableResolver::visit(Assignment &assign)
SetFlag set(record_target);
r_assignment_target = 0;
assign.left->visit(*this);
+ assign.target_declaration = r_assignment_target;
}
r_self_referencing = false;
assign.right->visit(*this);
-
assign.self_referencing = (r_self_referencing || assign.oper->token[0]!='=');
- assign.target_declaration = r_assignment_target;
+
+ r_members = 0;
+ r_iface_ref = 0;
+}
+
+void VariableResolver::visit(FunctionCall &call)
+{
+ TraversingVisitor::visit(call);
+ r_members = 0;
+ r_iface_ref = 0;
}
void VariableResolver::visit(StructDeclaration &strct)
iface_var->sampling = var.sampling;
iface_var->interface = iface;
iface_var->type = var.type;
- iface_var->type_declaration = var.type_declaration;
iface_var->name = name;
if(stage->type==Stage::GEOMETRY && !copy_block)
iface_var->array = ((var.array && var.interface!="in") || iface=="in");