================ @@ -0,0 +1,164 @@ +//===- ModuleMapFile.h - Parsing and representation -------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_LEX_MODULEMAPFILE_H +#define LLVM_CLANG_LEX_MODULEMAPFILE_H + +#include "clang/Basic/LLVM.h" +// TODO: Consider moving ModuleId to another header, parsing a modulemap file is +// intended to not depend on anything about the clang::Module class. +#include "clang/Basic/Module.h" +#include "clang/Basic/SourceLocation.h" +#include "llvm/ADT/StringRef.h" + +#include <optional> +#include <variant> + +namespace clang { + +class DiagnosticsEngine; +class SourceManager; + +namespace modulemap { + +struct ExportDecl; + +/// All declarations that can appear in a `module` declaration. +using Decl = + std::variant<struct RequiresDecl, struct HeaderDecl, struct UmbrellaDirDecl, + struct ModuleDecl, struct ExcludeDecl, struct ExportDecl, + struct ExportAsDecl, struct ExternModuleDecl, struct UseDecl, + struct LinkDecl, struct ConfigMacrosDecl, struct ConflictDecl>; + +struct RequiresFeature { + SourceLocation Location; + StringRef Feature; + bool RequiredState = true; /// False if preceded by '!'. +}; + +struct RequiresDecl { + SourceLocation Location; + std::vector<RequiresFeature> Features; +}; + +struct HeaderDecl { + SourceLocation Location; + StringRef Path; + SourceLocation PathLoc; + std::optional<int64_t> Size; + std::optional<int64_t> MTime; + LLVM_PREFERRED_TYPE(bool) + unsigned Private : 1; + LLVM_PREFERRED_TYPE(bool) + unsigned Textual : 1; + LLVM_PREFERRED_TYPE(bool) + unsigned Umbrella : 1; + LLVM_PREFERRED_TYPE(bool) + unsigned Excluded : 1; +}; + +struct UmbrellaDirDecl { + SourceLocation Location; + StringRef Path; +}; + +struct ModuleDecl { + SourceLocation Location; /// Points to the first keyword in the decl. + ModuleId Id; + ModuleAttributes Attrs; + std::vector<Decl> Decls; ---------------- jansvoboda11 wrote:
You can shrink the size from 128B to 120B by moving `ModuleId ` up. https://github.com/llvm/llvm-project/pull/119740 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits