Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SR-802] Cannot implement objc protocol extension method #43414

Closed
swift-ci opened this issue Feb 23, 2016 · 1 comment
Closed

[SR-802] Cannot implement objc protocol extension method #43414

swift-ci opened this issue Feb 23, 2016 · 1 comment
Labels
bug A deviation from expected or documented behavior. Also: expected but undesirable behavior. compiler The Swift compiler in itself

Comments

@swift-ci
Copy link
Collaborator

Previous ID SR-802
Radar None
Original Reporter jerrymarino (JIRA User)
Type Bug
Status Resolved
Resolution Won't Do

Attachment: Download

Additional Detail from JIRA
Votes 0
Component/s Compiler
Labels Bug
Assignee None
Priority Medium

md5: 1775f8d8031620acfb2de1c7bbadbddd

relates to:

  • SR-3349 @objc methods cannot be contained in protocol extensions

Issue Description:

I'd like to implement methods on all classes that implement a given protocol, which seems to work fine, unless I export this protocol to objc via the @objc annotation.

@objc (FFNCanonicalAnimal)
public class CanonicalAnimal : NSObject {
    let animalId: CLongLong;
    let text: String!;
    init (animalId:CLongLong, text:String){
        self.text = text;
        self.animalId = animalId;
    }
}

@objc public
protocol Animal : NSObjectProtocol {
    var canonicalAnimal: CanonicalAnimal { get };
    var animalId: CLongLong { get }
    var text: String! { get }
}

@objc (F1FarmAnimal)
class FarmAnimal : NSObject, Animal {
    let promoted:Bool;
    let canonicalAnimal:CanonicalAnimal;

    init (promoted:Bool, canonicalAnimal:CanonicalAnimal){
        self.promoted = promoted;
        self.canonicalAnimal = canonicalAnimal;
    }
}

extension Animal {
    var animalId : CLongLong { return self.canonicalAnimal.animalId; }
    var text : String! { return self.canonicalAnimal.text; }
}
0  swift                    0x00000001076aefbb llvm::sys::PrintStackTrace(__sFILE*) + 43
1  swift                    0x00000001076af6fb SignalHandler(int) + 379
2  libsystem_platform.dylib 0x00007fff9aabcf1a _sigtramp + 26
3  swift                    0x0000000105b1eee3 void llvm::impl::BCRecordCoding<llvm::BCFixed<1u>, llvm::BCFixed<1u>, llvm::BCFixed<2u>, llvm::BCFixed<1u>, llvm::BCFixed<1u>, llvm::BCFixed<1u>, llvm::BCVBR<5u>, llvm::BCFixed<31u>, llvm::BCFixed<31u>, llvm::BCFixed<31u>, llvm::BCFixed<31u>, llvm::BCFixed<31u>, llvm::BCFixed<1u>, llvm::BCFixed<3u>, llvm::BCFixed<2u>, llvm::BCArray<llvm::BCFixed<31u> > >::emit<llvm::SmallVector<unsigned long long, 64u>, bool, bool, unsigned char, bool, bool, bool, unsigned long, llvm::Fixnum<31u, unsigned int>, llvm::Fixnum<31u, unsigned int>, llvm::Fixnum<31u, unsigned int>, llvm::Fixnum<31u, unsigned int>, llvm::Fixnum<31u, unsigned int>, bool, unsigned char, unsigned char, llvm::SmallVector<llvm::Fixnum<31u, unsigned int>, 4u> >(llvm::BitstreamWriter&, llvm::SmallVector<unsigned long long, 64u>&, unsigned int, bool, bool, unsigned char, bool, bool, bool, unsigned long, llvm::Fixnum<31u, unsigned int>, llvm::Fixnum<31u, unsigned int>, llvm::Fixnum<31u, unsigned int>, llvm::Fixnum<31u, unsigned int>, llvm::Fixnum<31u, unsigned int>, bool, unsigned char, unsigned char, llvm::SmallVector<llvm::Fixnum<31u, unsigned int>, 4u>) + 387
4  swift                    0x0000000105af7fd5 swift::serialization::Serializer::writeNormalConformance(swift::NormalProtocolConformance const*) + 901
5  swift                    0x0000000105b037bb swift::serialization::Serializer::writeAllDeclsAndTypes() + 8139
6  swift                    0x0000000105b04789 swift::serialization::Serializer::writeAST(llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>) + 2505
7  swift                    0x0000000105b06d87 swift::serialization::Serializer::writeToStream(llvm::raw_ostream&, llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, swift::SILModule const*, swift::SerializationOptions const&) + 135
8  swift                    0x0000000105b079b2 withOutputFile(swift::ASTContext&, llvm::StringRef, llvm::function_ref<void (llvm::raw_ostream&)>) + 226
9  swift                    0x0000000105b07836 swift::serialize(llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, swift::SerializationOptions const&, swift::SILModule const*) + 214
10 swift                    0x000000010579ff08 performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&) + 12840
11 swift                    0x000000010579cad3 frontend_main(llvm::ArrayRef<char const*>, char const*, void*) + 2691
12 swift                    0x0000000105799154 main + 2324
13 libdyld.dylib            0x00007fff972c25c9 start + 1
14 libdyld.dylib            0x000000000000003d start + 1758714485
Stack dump:
0.  Program arguments: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -c -primary-file /Users/jmarino/Projects/SwiftyExample/Swifty/CanonicalObjects.swift -target x86_64-apple-macosx10.10 -enable-objc-interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -I /Users/jmarino/Library/Developer/Xcode/DerivedData/Swifty-ctqjhvoysweusaduiobfqjncytul/Build/Products/Debug -F /Users/jmarino/Library/Developer/Xcode/DerivedData/Swifty-ctqjhvoysweusaduiobfqjncytul/Build/Products/Debug -enable-testing -g -import-objc-header /Users/jmarino/Projects/SwiftyExample/Swifty/Swifty-Bridging-Header.h -module-cache-path /Users/jmarino/Library/Developer/Xcode/DerivedData/ModuleCache -serialize-debugging-options -Xcc -I/Users/jmarino/Library/Developer/Xcode/DerivedData/Swifty-ctqjhvoysweusaduiobfqjncytul/Build/Intermediates/Swifty.build/Debug/Swifty.build/swift-overrides.hmap -Xcc -iquote -Xcc /Users/jmarino/Library/Developer/Xcode/DerivedData/Swifty-ctqjhvoysweusaduiobfqjncytul/Build/Intermediates/Swifty.build/Debug/Swifty.build/Swifty-generated-files.hmap -Xcc -I/Users/jmarino/Library/Developer/Xcode/DerivedData/Swifty-ctqjhvoysweusaduiobfqjncytul/Build/Intermediates/Swifty.build/Debug/Swifty.build/Swifty-own-target-headers.hmap -Xcc -I/Users/jmarino/Library/Developer/Xcode/DerivedData/Swifty-ctqjhvoysweusaduiobfqjncytul/Build/Intermediates/Swifty.build/Debug/Swifty.build/Swifty-all-target-headers.hmap -Xcc -iquote -Xcc /Users/jmarino/Library/Developer/Xcode/DerivedData/Swifty-ctqjhvoysweusaduiobfqjncytul/Build/Intermediates/Swifty.build/Debug/Swifty.build/Swifty-project-headers.hmap -Xcc -I/Users/jmarino/Library/Developer/Xcode/DerivedData/Swifty-ctqjhvoysweusaduiobfqjncytul/Build/Products/Debug/include -Xcc -I/Users/jmarino/Library/Developer/Xcode/DerivedData/Swifty-ctqjhvoysweusaduiobfqjncytul/Build/Intermediates/Swifty.build/Debug/Swifty.build/DerivedSources/x86_64 -Xcc -I/Users/jmarino/Library/Developer/Xcode/DerivedData/Swifty-ctqjhvoysweusaduiobfqjncytul/Build/Intermediates/Swifty.build/Debug/Swifty.build/DerivedSources -Xcc -DDEBUG=1 -Xcc -working-directory/Users/jmarino/Projects/SwiftyExample -emit-module-doc-path /Users/jmarino/Library/Developer/Xcode/DerivedData/Swifty-ctqjhvoysweusaduiobfqjncytul/Build/Intermediates/Swifty.build/Debug/Swifty.build/Objects-normal/x86_64/CanonicalObjects~partial.swiftdoc -Onone -parse-as-library -module-name Swifty -emit-module-path /Users/jmarino/Library/Developer/Xcode/DerivedData/Swifty-ctqjhvoysweusaduiobfqjncytul/Build/Intermediates/Swifty.build/Debug/Swifty.build/Objects-normal/x86_64/CanonicalObjects~partial.swiftmodule -serialize-diagnostics-path /Users/jmarino/Library/Developer/Xcode/DerivedData/Swifty-ctqjhvoysweusaduiobfqjncytul/Build/Intermediates/Swifty.build/Debug/Swifty.build/Objects-normal/x86_64/CanonicalObjects.dia -emit-dependencies-path /Users/jmarino/Library/Developer/Xcode/DerivedData/Swifty-ctqjhvoysweusaduiobfqjncytul/Build/Intermediates/Swifty.build/Debug/Swifty.build/Objects-normal/x86_64/CanonicalObjects.d -emit-reference-dependencies-path /Users/jmarino/Library/Developer/Xcode/DerivedData/Swifty-ctqjhvoysweusaduiobfqjncytul/Build/Intermediates/Swifty.build/Debug/Swifty.build/Objects-normal/x86_64/CanonicalObjects.swiftdeps -o /Users/jmarino/Library/Developer/Xcode/DerivedData/Swifty-ctqjhvoysweusaduiobfqjncytul/Build/Intermediates/Swifty.build/Debug/Swifty.build/Objects-normal/x86_64/CanonicalObjects.o 
@belkadan
Copy link
Contributor

We now have a proper error for this (if one that still tries to insert invalid fix-its). See SR-3349 for a discussion of why this can't work.

@swift-ci swift-ci transferred this issue from apple/swift-issues Apr 25, 2022
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug A deviation from expected or documented behavior. Also: expected but undesirable behavior. compiler The Swift compiler in itself
Projects
None yet
Development

No branches or pull requests

2 participants