private:
Stage *stage = 0;
std::map<TypeDeclaration *, TypeDeclaration *> alias_map;
- std::map<TypeDeclaration *, TypeDeclaration *> array_types;
+ std::map<std::pair<TypeDeclaration *, bool>, TypeDeclaration *> array_types;
NodeList<Statement>::iterator type_insert_point;
- InterfaceBlock *iface_block = 0;
+ NodeList<Statement>::iterator block_member_type_ins_pt;
+ VariableDeclaration *iface_block = 0;
bool r_any_resolved = false;
public:
virtual void visit(ImageTypeDeclaration &);
virtual void visit(StructDeclaration &);
virtual void visit(VariableDeclaration &);
- virtual void visit(InterfaceBlock &);
virtual void visit(FunctionDeclaration &);
};
-/** Resolves variable references. Variable references which match the name
-of an interface block are turned into interface block references. */
+/** Resolves variable references. */
class VariableResolver: private TraversingVisitor
{
private:
virtual void visit(RefPtr<Expression> &);
void check_assignment_target(Statement *);
virtual void visit(VariableReference &);
- virtual void visit(InterfaceBlockReference &);
virtual void visit(MemberAccess &);
virtual void visit(Swizzle &);
virtual void visit(BinaryExpression &);
void merge_layouts(Layout &, const Layout &);
void redeclare_builtin(VariableDeclaration &, VariableDeclaration &);
virtual void visit(VariableDeclaration &);
- virtual void visit(InterfaceBlock &);
};
/** Resolves types and lvalueness of expressions. */
virtual void visit(Block &);
virtual void visit(Literal &);
virtual void visit(VariableReference &);
- virtual void visit(InterfaceBlockReference &);
virtual void visit(MemberAccess &);
virtual void visit(Swizzle &);
virtual void visit(UnaryExpression &);