Skip to content
Snippets Groups Projects
  • Douglas Gregor's avatar
    249d7a56
    Stop back-patching 'readonly' Objective-C properties with 'readwrite' ones. · 249d7a56
    Douglas Gregor authored
    A 'readonly' Objective-C property declared in the primary class can
    effectively be shadowed by a 'readwrite' property declared within an
    extension of that class, so long as the types and attributes of the
    two property declarations are compatible.
    
    Previously, this functionality was implemented by back-patching the
    original 'readonly' property to make it 'readwrite', destroying source
    information and causing some hideously redundant, incorrect
    code. Simplify the implementation to express how this should actually
    be modeled: as a separate property declaration in the extension that
    shadows (via the name lookup rules) the declaration in the primary
    class. While here, correct some broken Fix-Its, eliminate a pile of
    redundant code, clean up the ARC migrator's handling of properties
    declared in extensions, and fix debug info's naming of methods that
    come from categories.
    
    A wonderous side effect of doing this write is that it eliminates the
    "AddedObjCPropertyInClassExtension" method from the AST mutation
    listener, which in turn eliminates the last place where we rewrite
    entire declarations in a chained PCH file or a module file. This
    change (which fixes rdar://problem/18475765) will allow us to
    eliminate the rewritten-decls logic from the serialization library,
    and fixes a crash (rdar://problem/23247794) illustrated by the
    test/PCH/chain-categories.m example.
    
    
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@251874 91177308-0d34-0410-b5e6-96231b3b80d8
    249d7a56
    History
    Stop back-patching 'readonly' Objective-C properties with 'readwrite' ones.
    Douglas Gregor authored
    A 'readonly' Objective-C property declared in the primary class can
    effectively be shadowed by a 'readwrite' property declared within an
    extension of that class, so long as the types and attributes of the
    two property declarations are compatible.
    
    Previously, this functionality was implemented by back-patching the
    original 'readonly' property to make it 'readwrite', destroying source
    information and causing some hideously redundant, incorrect
    code. Simplify the implementation to express how this should actually
    be modeled: as a separate property declaration in the extension that
    shadows (via the name lookup rules) the declaration in the primary
    class. While here, correct some broken Fix-Its, eliminate a pile of
    redundant code, clean up the ARC migrator's handling of properties
    declared in extensions, and fix debug info's naming of methods that
    come from categories.
    
    A wonderous side effect of doing this write is that it eliminates the
    "AddedObjCPropertyInClassExtension" method from the AST mutation
    listener, which in turn eliminates the last place where we rewrite
    entire declarations in a chained PCH file or a module file. This
    change (which fixes rdar://problem/18475765) will allow us to
    eliminate the rewritten-decls logic from the serialization library,
    and fixes a crash (rdar://problem/23247794) illustrated by the
    test/PCH/chain-categories.m example.
    
    
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@251874 91177308-0d34-0410-b5e6-96231b3b80d8
Code owners
Assign users and groups as approvers for specific file changes. Learn more.