| //===--- AccessScopeChecker.h - Access calculation helpers -----*- C++ -*-===// |
| // |
| // This source file is part of the Swift.org open source project |
| // |
| // Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors |
| // Licensed under Apache License v2.0 with Runtime Library Exception |
| // |
| // See https://swift.org/LICENSE.txt for license information |
| // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file defines helpers for access-control calculation. |
| // |
| //===----------------------------------------------------------------------===// |
| #ifndef SWIFT_ACCESS_SCOPE_CHECKER_H |
| #define SWIFT_ACCESS_SCOPE_CHECKER_H |
| |
| #include "swift/AST/AccessScope.h" |
| #include "swift/AST/AttrKind.h" |
| #include "swift/AST/ASTWalker.h" |
| #include "swift/AST/TypeWalker.h" |
| |
| namespace swift { |
| |
| class AbstractStorageDecl; |
| class ExtensionDecl; |
| class SourceFile; |
| class ValueDecl; |
| |
| class AccessScopeChecker { |
| const SourceFile *File; |
| bool TreatUsableFromInlineAsPublic; |
| |
| protected: |
| ASTContext &Context; |
| Optional<AccessScope> Scope = AccessScope::getPublic(); |
| |
| AccessScopeChecker(const DeclContext *useDC, |
| bool treatUsableFromInlineAsPublic); |
| bool visitDecl(ValueDecl *VD); |
| }; |
| |
| class TypeReprAccessScopeChecker : private ASTWalker, AccessScopeChecker { |
| TypeReprAccessScopeChecker(const DeclContext *useDC, |
| bool treatUsableFromInlineAsPublic); |
| |
| bool walkToTypeReprPre(TypeRepr *TR) override; |
| bool walkToTypeReprPost(TypeRepr *TR) override; |
| |
| public: |
| static Optional<AccessScope> |
| getAccessScope(TypeRepr *TR, const DeclContext *useDC, |
| bool treatUsableFromInlineAsPublic = false); |
| }; |
| |
| class TypeAccessScopeChecker : private TypeWalker, AccessScopeChecker { |
| bool CanonicalizeParentTypes; |
| |
| TypeAccessScopeChecker(const DeclContext *useDC, |
| bool treatUsableFromInlineAsPublic, |
| bool canonicalizeParentTypes); |
| |
| Action walkToTypePre(Type T); |
| |
| public: |
| static Optional<AccessScope> |
| getAccessScope(Type T, const DeclContext *useDC, |
| bool treatUsableFromInlineAsPublic = false, |
| bool canonicalizeParentTypes = false); |
| }; |
| |
| } |
| |
| #endif |