Files
swift-mirror/include/swift/IDE/ModuleInterfacePrinting.h
Doug Gregor b8995b0aa3 Transform the Module class into ModuleDecl.
Modules occupy a weird space in the AST now: they can be treated like
types (Swift.Int), which is captured by ModuleType. They can be
treated like values for disambiguation (Swift.print), which is
captured by ModuleExpr. And we jump through hoops in various places to
store "either a module or a decl".

Start cleaning this up by transforming Module into ModuleDecl, a
TypeDecl that's implicitly created to describe a module. Subsequent
changes will start folding away the special cases (ModuleExpr ->
DeclRefExpr, name lookup results stop having a separate Module case,
etc.).

Note that the Module -> ModuleDecl typedef is there to limit the
changes needed. Much of this patch is actually dealing with the fact
that Module used to have Ctx and Name public members that now need to
be accessed via getASTContext() and getName(), respectively.

Swift SVN r28284
2015-05-07 21:10:50 +00:00

61 lines
2.1 KiB
C++

//===--- ModuleInterfacePrinting.h - Routines to print module interface ---===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
#ifndef SWIFT_IDE_MODULE_INTERFACE_PRINTING_H
#define SWIFT_IDE_MODULE_INTERFACE_PRINTING_H
#include "swift/Basic/LLVM.h"
#include "swift/Basic/OptionSet.h"
namespace swift {
class ASTContext;
class ASTPrinter;
class ModuleDecl;
struct PrintOptions;
namespace ide {
/// Flags used when traversing a module for printing.
enum class ModuleTraversal : unsigned {
/// Visit modules even if their contents wouldn't be visible to name lookup.
VisitHidden = 0x01,
/// Visit submodules.
VisitSubmodules = 0x02,
/// Skip the declarations in a Swift overlay module.
SkipOverlay = 0x04,
};
/// Options used to describe the traversal of a module for printing.
typedef OptionSet<ModuleTraversal> ModuleTraversalOptions;
void printModuleInterface(ModuleDecl *M,
ModuleTraversalOptions TraversalOptions,
ASTPrinter &Printer, const PrintOptions &Options);
// FIXME: this API should go away when Swift can represent Clang submodules as
// 'swift::Module *' objects.
void printSubmoduleInterface(ModuleDecl *M, ArrayRef<StringRef> FullModuleName,
ModuleTraversalOptions TraversalOptions,
ASTPrinter &Printer, const PrintOptions &Options);
/// Print the interface for a header that has been imported via the implicit
/// objc header importing feature.
void printHeaderInterface(StringRef Filename, ASTContext &Ctx,
ASTPrinter &Printer, const PrintOptions &Options);
} // namespace ide
} // namespace swift
#endif // SWIFT_IDE_MODULE_INTERFACE_PRINTING_H