#ifndef SWIFT_SYNTAX_SYNTAXCOLLECTIONDATA_H #define SWIFT_SYNTAX_SYNTAXCOLLECTIONDATA_H #include "swift/Syntax/SyntaxData.h" namespace swift { namespace syntax { template class SyntaxCollection; template class SyntaxCollectionData : public SyntaxData { friend class SyntaxCollection; std::vector> CachedElements; friend struct SyntaxFactory; friend class SyntaxData; friend class FunctionCallExprSyntaxBuilder; SyntaxCollectionData(RC Raw, const SyntaxData *Parent = nullptr, CursorIndex IndexInParent = 0) : SyntaxData(Raw, Parent, IndexInParent) { assert(Raw->Kind == CollectionKind); #ifndef NDEBUG for (auto Child : Raw->Layout) { CachedElements.push_back(nullptr); } #endif } static RC> make(RC Raw, const SyntaxData *Parent = nullptr, CursorIndex IndexInParent = 0) { return RC> { new SyntaxCollectionData { Raw, Parent, IndexInParent } }; } static RC> makeBlank() { auto Raw = RawSyntax::make(CollectionKind, {}, SourcePresence::Present); return make(Raw); } public: static bool classof(const SyntaxData *SD) { return SD->getKind() == CollectionKind; } }; } // end namespace syntax } // end namespace swift #endif