15#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_REORDER_FIELDS_UTILS_DESIGNATOR_H
16#define LLVM_CLANG_TOOLS_EXTRA_CLANG_REORDER_FIELDS_UTILS_DESIGNATOR_H
18#include "clang/AST/Decl.h"
19#include "clang/AST/Expr.h"
20#include "clang/AST/Type.h"
33 Designator(
const QualType Type, RecordDecl::field_iterator Field,
37 Designator(
const QualType Type, uint64_t Idx, uint64_t Size)
40 Designator(
const QualType Type, uint64_t Start, uint64_t End, uint64_t Size)
53 assert(Tag ==
STRUCT &&
"Must be a field designator");
58 assert(Tag ==
STRUCT &&
"Must be a field designator");
63 assert(Tag ==
ARRAY &&
"Must be an array designator");
68 assert(Tag ==
ARRAY_RANGE &&
"Must be an array range designator");
73 assert(Tag ==
ARRAY_RANGE &&
"Must be an array range designator");
79 "Must be an array or range designator");
95 RecordDecl::field_iterator Field;
96 const RecordDecl *Record;
106 struct ArrayRangeIter {
124 Designators(
const Expr *Init,
const InitListExpr *ILE,
125 const ASTContext *Context);
128 Designators(
const DesignatedInitExpr *DIE,
const InitListExpr *ILE,
129 const ASTContext *Context);
132 bool isValid()
const {
return !DesignatorList.empty(); }
143 size_t size()
const {
return DesignatorList.size(); }
145 SmallVector<Designator>::const_iterator
begin()
const {
146 return DesignatorList.begin();
148 SmallVector<Designator>::const_iterator
end()
const {
149 return DesignatorList.end();
155 bool enterImplicitInitLists(
const Expr *Init);
157 const ASTContext *Context;
158 SmallVector<Designator, 1> DesignatorList;
bool isFinished()
Checks if the iterator has iterated through all elements.
const RecordDecl * getStructDecl() const
uint64_t getArrayIndex() const
uint64_t getArrayRangeStart() const
Designator(const QualType Type, uint64_t Start, uint64_t End, uint64_t Size)
void advanceToNextField()
Moves the iterator to the next element.
uint64_t getArraySize() const
ArrayRangeIter ArrayRangeIt
Designator(const QualType Type, uint64_t Idx, uint64_t Size)
uint64_t getArrayRangeEnd() const
Designator(const QualType Type, RecordDecl::field_iterator Field, const RecordDecl *RD)
const RecordDecl::field_iterator getStructIter() const
std::string toString() const
Gets a string representation from a list of designators.
bool advanceToNextField(const Expr *Init)
Moves the designators to the next initializer in the struct/array.
SmallVector< Designator >::const_iterator begin() const
Designators(const Expr *Init, const InitListExpr *ILE, const ASTContext *Context)
Initialize to the first member of the struct/array.
bool isValid() const
Return whether this designator list is valid.
SmallVector< Designator >::const_iterator end() const
===– Representation.cpp - ClangDoc Representation --------—*- C++ -*-===//