Konrad `ktoso` Malawski
728c007fb9
[Distributed] Implement witnesses for sync or non-throw dist reqs
...
[Distributed] generic and inner test; without one edge case
[Distributed] fix distributed_thunk test; unsure about those extra hops, could remove later
[Distributed] Remove type pretending in getSILFunctionType; it is not needed
It seems our constant replacement in the earlier phases is enough, and
we don't need this trick at all.
[Distributed] Use thunk when calling cross-actor on DA protocols
2022-07-04 19:02:11 +09:00
Doug Gregor
1ff370bedc
Merge pull request #59869 from DougGregor/marker-protocol-assoc-type-mangling
2022-07-03 08:06:50 -07:00
Doug Gregor
e937510977
Don't consider marker protocols when mangling associated type refs.
...
Associated type references can be mangled without reference to the
protocol they are in when there is only one protocol to which the
base type conforms. Because marker protocols can never have associated
types, don't consider them in this computation. This allows marker
protocols to be added more freely to, e.g., generic type requirements.
Fixes rdar://95994469.
2022-07-02 22:46:25 -07:00
Michael Gottesman
198b974622
Merge pull request #59859 from gottesmm/pr-276c4e4220a25490659a285e8b94a36bd28ffede
...
[no-implicit-copy] Rename SILMoveOnlyType -> SILMoveOnlyWrappedType.
2022-07-01 23:17:43 -07:00
Michael Gottesman
8f3fe63fed
[no-implicit-copy] Rename SILMoveOnlyType -> SILMoveOnlyWrappedType.
...
Since I am beginning to prepare for adding real move only types to the language,
I am renaming everything that has to do with copyable types "move only wrapped"
values instead of move only. The hope is this reduces/prevents any confusion in
between the two.
2022-07-01 17:26:13 -07:00
John McCall
175f74d38f
Implement symbolic demangling for extended existential metadata
...
Fixes rdar://96268090.
2022-07-01 11:21:53 -04:00
Robert Widmann
19b27c5eb7
Merge pull request #59763 from CodaFi/mangolia
2022-06-30 20:46:38 -07:00
Robert Widmann
dde0d8f609
Generalize the Mangling of Constrained Existential Types
...
Upgrade the old mangling from a list of argument types to a
list of requiremnets. For now, only same-type requirements
may actually be mangled since those are all that are available
to the surface language.
Reconstruction of existential types now consists of demangling (a list of)
base protocol(s), decoding the constraints, and converting the same-type
constraints back into a list of arguments.
rdar://96088707
2022-06-30 15:32:37 -07:00
Pavel Yaskevich
2480c99dee
[Distributed] Generate thunk for accessor as a regular method
...
It used to be an accessor but that is not required because
SILDeclRef controls mangling which is the most imprortant
and could be used to emit the right reference.
2022-06-29 17:57:58 -07:00
Pavel Yaskevich
3f3410de00
[Distributed] Mangling: Add a comment about distributed accessor thunks
2022-06-29 14:49:10 -07:00
Pavel Yaskevich
84fa2322d3
[Distributed] Synthesize 'distributed thunk' accessor for distributed computed properties
2022-06-29 14:49:10 -07:00
Konrad `ktoso` Malawski
febfef97d4
[Distributed] Skeleton implementation of distributed computed properties
2022-06-29 14:49:04 -07:00
Konrad `ktoso` Malawski
6a2778645f
Revert "Merge pull request #59481 from xedin/distributed-computed-properties"
...
This reverts commit 8125a85a8f , reversing
changes made to 728971c5b7 .
2022-06-25 08:49:00 +09:00
Konrad `ktoso` Malawski
079bbcf517
wip
2022-06-17 12:12:16 -07:00
Xi Ge
e46b5f5966
ABIChecker: for decls with @_originallyDefinedIn, use original module names in ABI descriptors
...
rdar://93615410
2022-06-03 22:41:43 -07:00
Michael Gottesman
c66061a783
[moveOnly] Add a new SIL specific AST type called SILMoveOnly.
...
It can only be used in SIL contexts to express that a wrapped type is
MoveOnly.
2022-06-03 11:27:16 -07:00
Slava Pestov
beec309c9d
AST: Fix debug info mangling of opaque result types with @_originallyDefinedIn
...
If a function's parameter or return types involve nominal types that
have been moved across modules using @_originallyDefinedIn, we must
take care to always mangle the opaque result type's name using the
original module names and not the current module names.
This was a problem with DWARF mangling, which normally disables
@_originallyDefinedIn for other purposes. Make sure to always
temporarily re-enable it when mangling an opaque result type.
Fixes rdar://problem/93822207.
2022-06-02 18:15:31 -04:00
Doug Gregor
39edb8be89
[AST Mangler] Don't look into invalid conformances.
2022-05-25 22:38:55 -07:00
Doug Gregor
c5c1e286e0
[AST Mangler] Don't mangle marker protocols in retroactive conformances.
...
Fixes a crash in IR generation, where we would try to emit metadata
referencing a marker protocol, rdar://92285294.
2022-05-25 21:35:58 -07:00
Josh Soref
81d3ad76ac
Spelling ast ( #42463 )
...
* spelling: accessor
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: accommodates
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: argument
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: associated
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: availability
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: available
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: belongs
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: bookkeeping
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: building
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: clazz
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: clonable
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: closure
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: concatenated
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: conformance
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: context
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: conversion
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: correspondence
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: declarations
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: declared
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: defining
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: delayed
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: dependency
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: deployed
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: descendants
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: diagnose
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: diagnostic
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: equitable
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: evaluation
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: exclusivity
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: existence
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: existential
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: explicit
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: expressed
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: for
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: foreign
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: function
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: identifier
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: implicit
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: indices
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: information
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: instance
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: interchangeable
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: interface
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: introduced
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: invalid
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: kind-in
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: least
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: library
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: location
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: namespace
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: necessary
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: nonexistent
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: not
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: number
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: obtains
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: occurs
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: opaque
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: overridden
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: parameter
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: precede
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: preceding
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: property
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: protocol
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: qualified
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: recognized
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: recursively
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: references
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: relaxing
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: represented
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: request
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: requirement
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: requirements
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: retrieve
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: returned
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: satisfied
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: satisfy
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: scanner
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: siblings
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: simplified
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: something
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: source
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: specializations
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: specially
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: statement
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: stripped
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: structure
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: substitution
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: the
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: transform
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: transformed
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: transitively
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: transparent
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: typecheck
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: unknown
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: unlabeled
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: unqualified
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: whether
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: with
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: scanner
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
Co-authored-by: Josh Soref <jsoref@users.noreply.github.com >
2022-04-21 12:57:16 -07:00
John McCall
5519749ade
[NFC] Collect protocol decls, not type, in ExistentialLayout
...
Another thing that will be necessary for correctness with
compositions of parameterized protocols.
2022-04-11 22:15:16 -04:00
Pavel Yaskevich
7e182cf43d
[ASTMangler] Add a special entry point for mangling of distributed thunks
...
Distributed thunks loose all of the marker protocols associated with their
generic parameters.
2022-03-17 14:00:43 -07:00
Doug Gregor
b962b6f2c0
Merge pull request #41786 from DougGregor/opened-archetypes-back-in-your-context
...
Stop mapping opened archetypes "out of context".
2022-03-11 13:06:29 -08:00
Doug Gregor
bd6f27bd55
Stop mapping opened archetypes "out of context".
...
These opened archetypes need to be bound within their context, so any mapping out of
the context will need to be explicit and map to newly-created generic parameters.
2022-03-11 09:27:48 -08:00
Robert Widmann
3b3ff6a5db
Define Mangling for ParameterizedProtocol
2022-03-08 22:01:19 -08:00
Allan Shortlidge
ed6d69fb15
Mangling: Add a mangling for back deployment fallback functions and update the back deployment thunk mangling to use the same prefix.
2022-02-18 16:30:27 -08:00
Allan Shortlidge
ff5abc4e2f
Mangling: Use 'Tw' to mangle back deployment thunks.
2022-02-17 11:28:12 -08:00
Slava Pestov
a1c03db381
AST: Generalize ProtocolDecl::getRequirementSignature() to a new RequirementSignature type
...
The RequirementSignature generalizes the old ArrayRef<Requirement>
which stores the minimal requirements that a conforming type's
witnesses must satisfy, to also record the protocol typealiases
defined in the protocol.
2022-02-13 00:24:23 -05:00
Slava Pestov
aa67c8bf8a
Parametrized => parameterized
2022-02-03 13:27:24 -05:00
Doug Gregor
45e64e45ef
Merge pull request #40680 from DougGregor/preconcurrency-attr
2022-01-27 16:48:11 -08:00
Doug Gregor
7149702d12
Rename @_predatesConcurrency to @preconcurrency.
...
Introduce the `@preconcurrency` attribute name for `@_predatesConcurrency`,
which has been the favored name in the pitch thread so far. Retain the
old name for now to help smooth migration.
2022-01-26 08:39:01 -08:00
Slava Pestov
e7e536705e
AST: Introduce ParametrizedProtocolType
2022-01-26 00:11:38 -05:00
Xi Ge
1667c5f643
mangling: take the constness of function parameters into mangling
...
Taking constness of parameters into mangling allows us to support overloads of
functions vary on the constness of specific parameters.
rdar://87954644
2022-01-24 11:51:01 -08:00
Doug Gregor
452eccab83
Remove NestedArchetypeType.
...
Nested archetypes are represented by their base archetype kinds (primary,
opened, or opaque type) with an interface type that is a nested type,
as represented by a DependentMemberType. This provides a more uniform
representation of archetypes throughout the frontend.
2022-01-14 21:28:21 -08:00
Doug Gregor
8595ebfa60
Rework opaque archetype mangling to be representation agnostic.
2022-01-14 21:25:32 -08:00
Alex Hoppen
dcb80a2f4b
[SwiftSyntax] Remove another link dependency from swiftAST to clangAST when building the parser lib
2022-01-13 10:11:45 +01:00
Doug Gregor
61d35f07a4
Merge pull request #40766 from DougGregor/mangle-multiple-opaque-types
...
Introduce a mangling for multiple opaque types within the declaration.
2022-01-07 15:45:38 -08:00
Doug Gregor
f89ff0485f
Introduce a mangling for multiple opaque types within the declaration.
...
The `Qr` mangling is used to refer to the opaque type within the
declaration that produces the opaque type. When there are multiple
opaque types, e.g., due to structural or named opaque result types, it
does not specify which of the opaque type parameters it refers to.
Introduce a new mangling `QR INDEX` for opaque type parameters after
the first, retaining the `Qr` mangling for the first opaque type
parameter. This way, existing (non-structural) uses of opaque result
types retain the same manglings, but uses of structural or named
opaque result types (new features) will have distinct manglings.
Note that this mangling within a declaration is only used for the
declaration itself, and not for references to the opaque type of the
declaration, so there is no impact on the runtime demangler.
2022-01-07 10:43:45 -08:00
Slava Pestov
fa570fe072
ASTMangler: Respect @_originallyDefinedIn in mangleOpaqueTypeDecl()
...
mangleOpaqueTypeDecl() used to enable DWARFMangling, which
ignores @_originallyDefinedIn, which would in turn break module
interfaces.
Fixes rdar://problem/86480663.
2022-01-06 23:44:14 -05:00
Doug Gregor
e5ecc9da71
Merge pull request #40755 from DougGregor/no-bound-signatures
2022-01-06 20:22:23 -08:00
Zoe Carver
53ab3ef966
Merge pull request #34993 from zoecarver/cxx/cxxmethod-representation
...
[cxx-interop] Add SIL function representation cxx_method; Support extending C++ types.
2022-01-06 17:54:12 -08:00
zoecarver
036361d1e4
[cxx-interop] Add SIL function representation cxx_method; Support extending C++ types.
...
There are three major changes here:
1. The addition of "SILFunctionTypeRepresentation::CXXMethod".
2. C++ methods are imported with their members *last*. Then the arguments are switched when emitting the IR for an application of the function.
3. Clang decls are now marked as foreign witnesses.
These are all steps towards being able to have C++ protocol conformance.
2022-01-06 14:26:47 -08:00
Doug Gregor
bd0fa0bd0f
Eliminate the notion of a "bound signature" for opaque type archetypes.
...
The refactoring that moved the substitution of the outer environment
into an opaque type archeptype into the generic environment eliminated
the need for the bound signature entirely, so remove it.
2022-01-06 10:06:12 -08:00
Doug Gregor
99a9e95a93
Merge pull request #40747 from DougGregor/opaque-type-archetype-environment
2022-01-06 06:50:50 -08:00
Pavel Yaskevich
1c9bcc9092
Merge pull request #40699 from xedin/rename-dist-accessor-apis
...
[Distributed] NFC: Remove `Method` from accessor APIs
2022-01-06 01:03:45 -08:00
Doug Gregor
52194b2c64
Fix dependent conformance mangling for multiple opaque result types.
...
We were always mangling based on the last generic parameter, which
makes sense when there is only one opaque result type, but is
incorrect when there are multiple opaque result types, e.g., due to
named or structural opaque result types.
2022-01-05 09:03:05 -08:00
Doug Gregor
ef7df1db89
Fix mangling for named opaque result types.
2022-01-04 21:14:39 -08:00
Doug Gregor
96d486adb7
Fix name mangling for structural opaque result types.
...
We weren't using the ordinal value at all, but instead had a hard-coded
zero.
2021-12-27 20:13:34 -08:00
Pavel Yaskevich
d516281da9
[Distributed] NFC: Remove Method from accessor APIs
...
The API is not constrained to methods only, it should support
computed properties as well.
2021-12-23 14:10:05 -08:00
Robert Widmann
e5bfda7c6e
Merge pull request #40587 from CodaFi/substitute-teacher
...
Initial Semantics for Variadic Generics
2021-12-20 11:25:25 -08:00