void TBDGenVisitor::visitVarDecl(VarDecl *VD) { // Variables inside non-resilient modules have some additional symbols. if (!VD->isResilient()) { // Non-global variables might have an explicit initializer symbol, in // non-resilient modules. if (VD->getAttrs().hasAttribute<HasInitialValueAttr>() && !isGlobalOrStaticVar(VD)) { auto declRef = SILDeclRef(VD, SILDeclRef::Kind::StoredPropertyInitializer); // Stored property initializers for public properties are currently // public. addSymbol(declRef); } // statically/globally stored variables have some special handling. if (VD->hasStorage() && isGlobalOrStaticVar(VD)) { if (getDeclLinkage(VD) == FormalLinkage::PublicUnique) { // The actual variable has a symbol. Mangle::ASTMangler mangler; addSymbol(mangler.mangleEntity(VD, false)); } if (VD->isLazilyInitializedGlobal()) addSymbol(SILDeclRef(VD, SILDeclRef::Kind::GlobalAccessor)); } } visitAbstractStorageDecl(VD); }
void TBDGenVisitor::visitVarDecl(VarDecl *VD) { // statically/globally stored variables have some special handling. if (VD->hasStorage() && isGlobalOrStaticVar(VD)) { // The actual variable has a symbol. Mangle::ASTMangler mangler; addSymbol(mangler.mangleEntity(VD, false)); // Top-level variables (*not* statics) in the main file don't get accessors, // despite otherwise looking like globals. if (!FileHasEntryPoint || VD->isStatic()) addSymbol(SILDeclRef(VD, SILDeclRef::Kind::GlobalAccessor)); } visitAbstractStorageDecl(VD); }
void TBDGenVisitor::visitVarDecl(VarDecl *VD) { if (isPrivateDecl(VD)) return; // statically/globally stored variables have some special handling. if (VD->hasStorage() && isGlobalOrStaticVar(VD)) { // The actual variable has a symbol. Mangle::ASTMangler mangler; addSymbol(mangler.mangleEntity(VD, false)); addSymbol(SILDeclRef(VD, SILDeclRef::Kind::GlobalAccessor)); } visitMembers(VD); }
void TBDGenVisitor::visitVarDecl(VarDecl *VD) { if (isPrivateDecl(VD)) return; // statically/globally stored variables have some special handling. if (VD->hasStorage() && isGlobalOrStaticVar(VD)) { // The actual variable has a symbol. Mangle::ASTMangler mangler; addSymbol(mangler.mangleEntity(VD, false)); // Variables in the main file don't get accessors, despite otherwise looking // like globals. if (!FileHasEntryPoint) addSymbol(SILDeclRef(VD, SILDeclRef::Kind::GlobalAccessor)); } visitMembers(VD); }