Commit Graph

4 Commits

Author SHA1 Message Date
Puyan Lotfi
936990864d [cxx-interop] Add-on commits to previous NS_OPTIONS fix PR
Add-on to address comments from #67036

Addresses some nits, test addons, and some code cleanups/improvement.
2023-07-03 15:41:50 -04:00
Puyan Lotfi
7cef628f94 [cxx-interop] Import ObjCPropertyDecl of type NS_OPTIONS fields a struct type
Try importing ObjCPropertyDecl field types the C++-Interop-NS_OPTIONS
way. This will fix cases such as:

```
import UIKit

func f(gesture: UISwipeGestureRecognizer,
       direction: UISwipeGestureRecognizer.Direction) {
  gesture.direction = direction // error
}
```

because it will make sure the field inside class UIGestureRecognizer is
of the enum-struct type and not the typedef-rawValue type when importing
an ObjC class.
2023-06-30 17:51:37 -04:00
zoecarver
3f45c172cc [cxx-interop] Correctly import fields with type NS_Option. 2023-06-08 13:12:38 -07:00
Puyan Lotfi
dd4cdfb653 [C++-Interop] Fix EffectiveClangContext for NS_OPTIONS EnumDecl lookup.
This patch fixes an issue with C++-Interop that has been making it so
that enums under interop were not getting properly looked up and
therefore not getting imported. The reason for this was that the proper
DeclContext was not getting applied when grabbing the decls use by
VisitDecls later in the ClangImporter.

The lookup code at SwiftLookupTable::lookup is given a clang TU which is
what implcitly gets turned into an EffectiveClangContext. The
EffectiveClangContext is the piece that decides which DeclContext to
use. In the case of an extern "C" (ie LinkageSpecDecl), the
EffectiveClangContext was not traversing inside the lexical scope of the
extern "C" as the context for searching the EnumDecl (the NS_OPTIONS
Enum).

This patch adds new behavior when EffectiveClangContext is given a
LinkageSpecDecl. It sets the DeclContext to the lexical decl context.

With this fix in place in the presence of C++-Interop we not only import
the NS_OPTIONS typedef properly, but we also import the enum (and
therefore the EnumConstants) correctly (which are used for getting to
the flags for populating the NS_OPTIONS bitfields.
2022-05-23 20:10:36 -07:00