Commit Graph

8779 Commits

Author SHA1 Message Date
Joe Groff
59fd141457 Validate opaque return types for properties and subscripts. 2019-04-17 14:46:22 -07:00
Joe Groff
5bb22b0b42 Allow OpaqueTypeDecls to be (de)mangled as contexts, rdar://problem/49831658 2019-04-17 14:46:22 -07:00
Joe Groff
399332b75b Parsable interface and type reconstruction support for opaque types.
When printing a swiftinterface, represent opaque result types using an attribute that refers to
the mangled name of the defining decl for the opaque type. To turn this back into a reference
to the right decl's implicit OpaqueTypeDecl, use type reconstruction. Since type reconstruction
doesn't normally concern itself with non-type decls, set up a lookup table in SourceFiles and
ModuleFiles to let us handle the mapping from mangled name to opaque type decl in type
reconstruction.

(Since we're invoking type reconstruction during type checking, when the module hasn't yet been
fully validated, we need to plumb a LazyResolver into the ASTBuilder in an unsightly way. Maybe
there's a better way to do this... Longer term, at least, this surface design gives space for
doing things more the right way--a more request-ified decl validator ought to be able to naturally
lazily service this request without the LazyResolver reference, and if type reconstruction in
the future learns how to reconstruct non-type decls, then the lookup tables can go away.)
2019-04-17 14:46:22 -07:00
Joe Groff
455f060967 fix rdar://problem/49230987 2019-04-17 14:46:21 -07:00
Joe Groff
be0140fe56 Switch __opaque to some, per the latest rev of the proposal 2019-04-17 14:46:21 -07:00
Joe Groff
95c43f4e18 Decode opaque types in the runtime demangler. 2019-04-17 14:44:40 -07:00
Joe Groff
42e1824a30 Mangle opaque result types. 2019-04-17 14:43:32 -07:00
Joe Groff
0255baa97f SILGen: Start supporting opaque result types resiliently.
Tear out the hacks to pre-substitute opaque types before they enter the SIL type system.
Implement UnderlyingToOpaqueExpr as bitcasting the result of the underlying expression from the
underlying type to the opaque type.
2019-04-17 14:43:32 -07:00
Joe Groff
e3bbd8ce9e Remove ResilienceExpansion from substOpaqueTypes for now.
It's currently meaningless, and it'll require thought to pass the correct value when it becomes
meaningful.
2019-04-17 14:43:32 -07:00
Joe Groff
a6c9254612 Mangle opaque types without underlying types as ErrorType for now. 2019-04-17 14:43:32 -07:00
Joe Groff
7a8b9401ab Respond to Slava's feedback 2019-04-17 14:43:32 -07:00
Joe Groff
a419754fe9 Support nested types on opaque archetypes (and maybe opened ones). 2019-04-17 14:43:32 -07:00
Joe Groff
c771a7e71b SILGen: Substitute away opaque types. 2019-04-17 14:43:32 -07:00
Joe Groff
f008019bda Sema: Infer the underlying type for opaque return types from function bodies. 2019-04-17 14:43:32 -07:00
Joe Groff
dd2b51d6dc Add an OpaqueTypeArchetypeType subclass. 2019-04-17 14:43:32 -07:00
Joe Groff
71912bbfd6 AST: Represent OpaqueTypeDecls.
To represent the abstracted interface of an opaque type, we need a generic signature that refines
the outer context generic signature with an additional generic parameter representing the underlying
type and its exposed constraints. Opaque types also need to be keyed by their originating decl, so
that we can treat values of the same opaque type as the same. When we check a FuncDecl with an
opaque type specified as its return type, create an OpaqueTypeDecl and associate it with the
originating decl. (A representation for *types* derived from the opaque decl will come next.)
2019-04-17 14:43:32 -07:00
Joe Groff
5e1497967a Parse opaque types. 2019-04-17 14:43:32 -07:00
Brent Royal-Gordon
713a2ab747 Reformat and colorize KeyPathExpr AST dumps 2019-04-17 14:34:45 -07:00
Brent Royal-Gordon
d5f70d9de7 [ConstraintSolver] Dump key path component types
ASTDumper doesn’t have any way to look up key path component types in the constraint solver, so they’re currently shown as null. This change adds a hook to look them up and looks in the key path component’s FunctionResult locator, which is where subscripts already keep their return type.
2019-04-17 14:32:16 -07:00
Alexis Laferrière
b48eabd0c3 Sema: keep FinalAttr in decl->getAttrs for print order compatibility 2019-04-17 09:19:00 -07:00
Alexis Laferrière
c50280f104 Sema: don’t print ‘final’ on accessors 2019-04-17 09:18:57 -07:00
Alexis Laferrière
34dc07d656 AST: don’t print ‘final’ on a ‘let’ 2019-04-17 09:17:59 -07:00
Alexis Laferrière
98059831c9 Sema: implement isFinal using a request evaluator
Add the request evaluator `IsFinalRequest` to lazily determine if a
`ValueDecl` is final.
2019-04-17 09:17:44 -07:00
Slava Pestov
6972f8345e Merge pull request #24082 from slavapestov/typevar-noescape-fix
Introduce "can bind to noescape" bit on TypeVariableType
2019-04-17 03:38:56 -04:00
Slava Pestov
5062a81e3d AST: Start returning SelfProtocolConformances from ModuleDecl::lookupConformance()
Fixes <rdar://problem/49241923>, <https://bugs.swift.org/browse/SR-10015>.
2019-04-16 23:02:50 -04:00
Slava Pestov
2728f4038c Review feedback from @xedin for ParameterTypeFlags::Escaping removal 2019-04-16 22:10:22 -04:00
Nathan Hawes
c95252e1e5 Change from using the @_inheritedDefaultValue attribute to mark parameters with an inherited default argument to using '= super' 2019-04-16 15:21:25 -07:00
Nathan Hawes
9639bceded Add an attribute to inhert a param's default value from the overridden decl in module interfaces 2019-04-16 11:22:36 -07:00
Robert Widmann
f192b92799 Merge pull request #23785 from Azoy/context-cleanups
AST NFC: Minor cleanups around ASTContext
2019-04-16 13:50:35 -04:00
Slava Pestov
189a38dea4 Merge pull request #23985 from slavapestov/dynamic-self-thunks
SILGen: Fix function conversions involving DynamicSelfType
2019-04-15 07:42:48 -04:00
Slava Pestov
39a22f3d6a AST: Remove ParameterTypeFlags::Escaping
Escapingness is a property of the type of a value, not a property of a function
parameter. Having it as a separate parameter flag just meant one more piece of
state that could get out of sync and cause weird problems.

Instead, always look at the noescape bit in a function type as the canonical
source of truth.

This does mean that '@escaping' is now printed in a few diagnostics where it was
not printed before; we can investigate these as separate issues, but it is
correct to print it there because the function types in question are, in fact,
escaping.

Fixes <https://bugs.swift.org/browse/SR-10256>, <rdar://problem/49522774>.
2019-04-15 00:25:03 -04:00
Slava Pestov
91dffc9d44 Sema: Use AnyFunctionType::printParams() to print argument lists instead of printing a tuple type
Once the '@escaping' bit is removed from TupleTypeElt, it no longer makes
sense to print argument lists as if they were TupleTypes or ParenTypes,
since function types are '@escaping' by default inside tuples but not
in argument lists.

Instead, print ArrayRef<AnyFunctionType::Param> directly. For now this
introduces some awkward usages of AnyFunctionType::decomposeInput();
these will go away once the AST is changed to represent the argument list
as a list of expressions and not a single tuple expression.
2019-04-15 00:22:29 -04:00
Slava Pestov
a5675a8edd SILGen: Fix function conversions involving DynamicSelfType
This was partially implemented but the check looked at the lowered
types and not the AST types, and DynamicSelfType is erased at the
top level of a lowered type.

Also use the new mangling for reabstraction thunks with self, to
ensure we don't emit the same symbol with two different lowered
types.

Fixes <https://bugs.swift.org/browse/SR-10309>, <rdar://problem/49703441>.
2019-04-14 19:17:32 -04:00
Adrian Prantl
8d03cb7a61 Record parseable interface imports in the debug info.
When a Swift module built with debug info imports a library without
debug info from a textual interface, the textual interface is
necessary to reconstruct types defined in the library's interface.  By
recording the Swift interface files in DWARF dsymutil can collect them
and LLDB can find them.

rdar://problem/49751363
2019-04-11 14:50:07 -07:00
Argyrios Kyrtzidis
016a055617 [CMake] Use the correct filename for adding the AST verifier macro flag 2019-04-11 13:53:13 -07:00
Brent Royal-Gordon
def1af6049 Merge pull request #23358 from brentdax/a-type-is-a-set-of-its-instances
Add static and class subscripts
2019-04-11 12:58:32 -07:00
Brent Royal-Gordon
eb0d343ea7 [ASTPrinter] Print staticness of subscripts 2019-04-10 23:17:04 -07:00
Brent Royal-Gordon
0fcb09d9ce Fix description of static subscripts in errors 2019-04-10 23:17:04 -07:00
Jordan Rose
519fa00adc Check signatures for conformances from implementation-only imports
These also create a dependency on the implementation module, even if
both the type and the protocol are public. As John puts it, a
conformance is basically a declaration that we name as part of another
declaration.

More rdar://problem/48991061
2019-04-10 11:09:07 -07:00
Jordan Rose
a15dec8774 Diagnose typealiases of non-public types in inlinable functions (#23912)
...as a warning, since we didn't check this correctly in Swift 5.
For parseable interfaces, these typealiases won't work at all.
2019-04-10 09:21:44 -07:00
Slava Pestov
3f58eb745b Merge pull request #23878 from slavapestov/reimplement-escaping-diagnostics
Reimplement escaping diagnostics
2019-04-09 16:40:04 -04:00
Slava Pestov
ae1e5b1ede AST: Remove unused TypeBase::isAssignableType() 2019-04-09 15:02:14 -04:00
Slava Pestov
1c17ccfd3c AST: Add TypeBase::isNoEscape() 2019-04-09 15:02:14 -04:00
Harlan Haskins
e172c28aca [ParseableInterfaces] Stop replacing inaccessible properties with '_' (#23782)
Turns out this isn't correct, since SROA can explode these structs into
scalars in inlinable code.

Put the logic in place to effectively disable it, and document the steps
we need to take to make it work in the future.
2019-04-09 00:12:52 -07:00
Gogul Balakrishnan
1fa3846224 Add more hooks for overriding name lookup in the DebuggerClient (#23031) 2019-04-08 15:19:31 -07:00
Michael Gottesman
91dbbc3088 Merge pull request #23204 from compnerd/silence-in-the-library
Remove custom handling in add_swift_host_library
2019-04-08 10:49:42 -07:00
Jordan Rose
be48d64697 Merge pull request #23722 from jrose-apple/type-disadvantage
Implementation-only import checking for types used in decls
2019-04-08 09:18:11 -07:00
Sam Lazarus
8ee220a560 Merge branch 'master' into slazarus/allow-access-through-existential-metatype 2019-04-06 09:03:33 -04:00
Jordan Rose
a9b0a6661a Implementation-only import checking for types used in decls
Based on the existing access checker for types used in decls. There's
a common skeleton here but we can't seem to get it out, so for now
add a third DeclVisitor to this file. On the plus side, checking this
alongside access is an easy way to make sure everything gets checked.

Part of rdar://problem/48991061
2019-04-05 20:10:10 -07:00
Jordan Rose
6c0538988d Access checking: Separate TypeDecl-finding from access scope checking
...for planned reuse in implementation-only import logic.
No intended functionality change.
2019-04-05 20:10:10 -07:00