From 306d892076c831131ebe47125b1dfe41f736e1b0 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Wed, 22 Oct 2014 23:50:56 +0000 Subject: [modules] Add support for 'textual header' directives. This allows a module to specify that it logically contains a file, but that said file is non-modular and intended for textual inclusion. This allows layering checks to work properly in the presence of such files. llvm-svn: 220448 --- clang/lib/Basic/Module.cpp | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) (limited to 'clang/lib/Basic/Module.cpp') diff --git a/clang/lib/Basic/Module.cpp b/clang/lib/Basic/Module.cpp index 65c8b1b..c0f5a6a 100644 --- a/clang/lib/Basic/Module.cpp +++ b/clang/lib/Basic/Module.cpp @@ -338,27 +338,23 @@ void Module::print(raw_ostream &OS, unsigned Indent) const { OS << "\n"; } - for (unsigned I = 0, N = NormalHeaders.size(); I != N; ++I) { - OS.indent(Indent + 2); - OS << "header \""; - OS.write_escaped(NormalHeaders[I]->getName()); - OS << "\"\n"; - } - - for (unsigned I = 0, N = ExcludedHeaders.size(); I != N; ++I) { - OS.indent(Indent + 2); - OS << "exclude header \""; - OS.write_escaped(ExcludedHeaders[I]->getName()); - OS << "\"\n"; + struct HeaderKind { + StringRef Prefix; + const SmallVectorImpl &Headers; + } Kinds[] = {{"", NormalHeaders}, + {"exclude ", ExcludedHeaders}, + {"textual ", TextualHeaders}, + {"private ", PrivateHeaders}}; + + for (auto &K : Kinds) { + for (auto *H : K.Headers) { + OS.indent(Indent + 2); + OS << K.Prefix << "header \""; + OS.write_escaped(H->getName()); + OS << "\"\n"; + } } - for (unsigned I = 0, N = PrivateHeaders.size(); I != N; ++I) { - OS.indent(Indent + 2); - OS << "private header \""; - OS.write_escaped(PrivateHeaders[I]->getName()); - OS << "\"\n"; - } - for (submodule_const_iterator MI = submodule_begin(), MIEnd = submodule_end(); MI != MIEnd; ++MI) // Print inferred subframework modules so that we don't need to re-infer -- cgit v1.1