Nathan Hawes
c3723fd4d7
[sourcekitd][AST] Fix CursorInfo crash on method with unresolved default value
...
When printing its annotated decl, we would would assume the param's default
value is present if the default value kind was "Normal". The type checker
explicitly sets the default value to nullptr if it doesn't type check though, so
we were crashing for that case. Added the check.
Resolves rdar://problem/46694149
2018-12-21 18:13:53 -08:00
Slava Pestov
bfcf24ee4e
AST: Rework @objcMembers inheritance to not depend on validation order
...
Sema would directly check for the presence of the @objcMembers attribute,
and inherit it from the immediate superclass in validateDecl().
We don't want validateDecl() to have side effects like this and this was
already a problem, because it would not inherit the attribute transitively
in some cases.
Instead, add a ClassDecl::hasObjCMembers() method that walks over all
ancestors and caches the result.
<rdar://problem/46420252>
2018-12-12 15:12:38 -05:00
Slava Pestov
bc4aa75b35
AST: Simplify GenericSignatureBuilder::computeRequirementSignature()
2018-12-11 23:55:41 -05:00
Slava Pestov
544e0a02d5
AST: Don't link together GenericParamLists of nested generic types
...
GenericParamList::OuterParameters would mirror the nesting structure
of generic DeclContexts. This resulted in redundant code and caused
unnecessary complications for extensions and protocols, whose
GenericParamLists are constructed after parse time.
Instead, lets only use OuterParameters to link together the multiple
parameter lists of a single extension, or parameter lists in SIL
functions.
2018-12-11 23:55:41 -05:00
Slava Pestov
c0bfaaf30f
AST: Merge ProtocolDecl::createGenericParams() into createGenericParamsIfMissing()
2018-12-11 23:55:41 -05:00
Slava Pestov
7a038ff817
AST: Refactor ExtensionDecl::createGenericParamsIfMissing()
...
Let's use the same code path for protocol and non-protocol extensions;
we still have to do something special for protocol extensions though.
2018-12-11 23:22:18 -05:00
Slava Pestov
78e56079ed
AST: Introduce ExtensionDecl::createGenericParamsIfMissing()
...
For now Sema still calls it manually, but soon we could make
getGenericParams() lazy, calling this automatically, since
there's really no reason to create the generic parameters
upfront when binding the extension.
2018-12-11 17:48:52 -05:00
Slava Pestov
1ca81c42b4
AST: Factor out GenericParamList::configureGenericParamDepth()
2018-12-11 17:48:52 -05:00
Slava Pestov
aa747dcd81
Remove property behaviors
2018-12-07 20:38:33 -05:00
Slava Pestov
e160b85f8f
Merge pull request #21117 from slavapestov/accessor-synthesis-cleanup
...
Accessor synthesis cleanup (NFC)
2018-12-07 19:53:26 -05:00
Harlan Haskins
c829506aca
Merge pull request #21033 from harlanhaskins/trouble-at-the-roller-rink
...
[Sema] Diagnose internal(set) from @inlinable functions
2018-12-07 15:33:18 -08:00
Slava Pestov
6d1b866cc1
AST: Fix FuncDecl::getSourceRange() to do the right thing for accessors with synthesized bodies
2018-12-07 17:10:08 -05:00
Harlan Haskins
d30a3da32a
[Sema] Non-requirement protocol members should inherit @usableFromInline
...
Previously, members of protocols that were not protocol requirements,
like accessors and typealiases, did not inherit @usableFromInline from
the parent protocol. Change this so they do.
2018-12-07 12:45:32 -08:00
John McCall
8112f68b96
Merge pull request #20629 from rjmccall/error-self-conformance
...
Allow Error to conform to itself
2018-12-05 19:58:08 -05:00
Adrian Prantl
ff63eaea6f
Remove \brief commands from doxygen comments.
...
We've been running doxygen with the autobrief option for a couple of
years now. This makes the \brief markers into our comments
redundant. Since they are a visual distraction and we don't want to
encourage more \brief markers in new code either, this patch removes
them all.
Patch produced by
for i in $(git grep -l '\\brief'); do perl -pi -e 's/\\brief //g' $i & done
2018-12-04 15:45:04 -08:00
Slava Pestov
473a2cb38c
AST: Members of @_weakLinked types are implicitly @_weakLinked
2018-12-03 20:36:03 -05:00
Slava Pestov
4289f76064
AST: Introduce ClassDecl::hasResilientMetadata()
2018-11-29 23:20:02 -05:00
Slava Pestov
fcb52172fc
AST: Change isResilient() to do the cheaper check first
2018-11-29 23:20:02 -05:00
Pavel Yaskevich
e18d390d18
Merge pull request #20663 from hamishknight/packing-up-the-flags
...
[AST] NFC: Pack @autoclosure parameter decl flag with the default value
2018-11-17 12:27:16 -08:00
Slava Pestov
e8e1f4f80d
Merge pull request #20593 from slavapestov/keypath-resilience-fixes
...
Fix key paths for resilience and @inlinable
2018-11-17 13:13:53 -05:00
Hamish Knight
bec9a8c9cb
[AST] NFC: Pack @autoclosure parameter decl flag with the default value
2018-11-17 13:31:40 +00:00
David Zarzycki
e4fb140355
Merge pull request #20501 from davezarzycki/fix_28870_crasher
...
[AST] NFC: Add reentrancy check to associated type anchor walk
2018-11-17 07:26:37 -05:00
John McCall
49ba9c59d1
Allow Error to conform to itself.
...
Most of the foundation for this was laid in earlier patches.
2018-11-17 02:51:45 -05:00
Slava Pestov
0e1b62dcad
SILGen: Don't emit or reference property descriptors for overrides
...
We want removing a property override to be a resilient change, so
keypaths should not reference them, preferring to reference the
base declaration instead.
2018-11-16 23:18:30 -05:00
Slava Pestov
0a8ee10621
AST: Refactor AbstractStorageDecl::getAccessStrategy() for keypath resilience
...
Instead of passing in a DeclContext, which we don't have when emitting a keypath
accessor, pass in a ModuleDecl and ResilienceExpansion.
Keypaths now work well enough in inlinable contexts that we can check in an
end-to-end resilience test.
2018-11-16 23:18:30 -05:00
Slava Pestov
99c78894ef
IRGen: Fix crash when emitting metadata for enum with @autoclosure case
...
Fixes <rdar://problem/45962425>, <https://bugs.swift.org/browse/SR-9169 >.
2018-11-16 01:18:18 -05:00
Slava Pestov
558b517b08
AST: Fast path for requiresNewVTableEntry() when called on non-class members
2018-11-15 16:10:52 -05:00
Arnold Schwaighofer
40f0c43e31
Add isNativeDynamic() and use it
2018-11-14 12:04:41 -08:00
Arnold Schwaighofer
893318c114
Fix the AccessStrategy for dynamic (not @objc) storage
...
It needs to be opaque but not dispatched.
2018-11-13 15:20:27 -08:00
David Zarzycki
e8eabd7f47
[AST] NFC: Add reentrancy check to associated type anchor walk
...
This makes compiler crasher 28870 crash faster and reliably instead of
recursing off the end of the stack.
This reverts: 614cb48b63
2018-11-13 08:29:26 -05:00
Pavel Yaskevich
bce1ba5f37
[AST] Remove @autoclosure flag from function type ExtInfo
2018-11-10 11:59:29 -08:00
Pavel Yaskevich
d9504ef919
[TypeChecker] Add typeCheckParameterDefault method
...
`typeCheckParameterDefault` is used to type-check default value
expression associated with a given parameter. It makes it possible
to look-through `@autoclosure` function to use its result as
contextual type, and later build implicit autoclosure expression
if needed.
2018-11-10 11:59:28 -08:00
Pavel Yaskevich
4c1885b51b
[AST] Register @autoclosure as parameter decl flag
...
It should become a declaration attribute instead,
but it can't be done at the moment because `@autoclosure`
is a type attribute.
2018-11-10 11:58:49 -08:00
Slava Pestov
c7338d06ca
AST: Remove owning addressors
2018-11-09 20:49:44 -05:00
Slava Pestov
a1ae75b2ba
Merge pull request #20455 from slavapestov/fix-misc-regressions
...
Fix a handful of regressions
2018-11-09 13:20:44 -05:00
John McCall
e741147d70
Merge pull request #20459 from rjmccall/key-path-lvalue-emission
...
Always use the l-value logic for emitting key path applications
2018-11-09 12:08:27 -05:00
John McCall
c0285a744c
Always use the l-value logic for emitting key path applications.
...
Not NFC because it also fixes an evaluation order bug (and reorders
some less-important stuff): the key-path expression needs to be
evaluated immediately during formal evaluation and cannot be delayed
until start-of-access.
2018-11-09 02:42:17 -05:00
Arnold Schwaighofer
6cc3d377ff
Refactor part2
2018-11-08 18:16:17 -08:00
Slava Pestov
9dd63a4918
AST: Use resilient access pattern for stored properties of resilient types visible via -enable-testing
...
Fixes <rdar://problem/45919829>.
2018-11-08 19:43:31 -05:00
Arnold Schwaighofer
e4f4dfcf84
Address feedback
2018-11-08 11:13:42 -08:00
Arnold Schwaighofer
963c64e3e7
Add @_private(from: "SourceFile.swift") imports
...
A module compiled with `-enable-private-imports` allows other modules to
import private declarations if the importing source file uses an
``@_private(from: "SourceFile.swift") import statement.
rdar://29318654
2018-11-08 08:00:47 -08:00
Arnold Schwaighofer
44b3a47e56
Merge pull request #20333 from aschwaighofer/dynamic_function_replacement
...
Dynamic function replacement
2018-11-07 13:08:46 -08:00
David Zarzycki
614cb48b63
[AST] AssociatedTypeDecls cannot override itself
2018-11-07 10:04:57 -05:00
Arnold Schwaighofer
c158106329
Allow dynamic without @objc in -swift-version 5
...
Dynamic functions will allow replacement of their implementation at
runtime.
2018-11-06 09:53:21 -08:00
John McCall
90ca9fe8b4
Fix a bunch of minor issues with read accessors.
2018-11-05 20:57:58 -05:00
Brent Royal-Gordon
9bd1a26089
Implementation for SE-0228: Fix ExpressibleByStringInterpolation ( #20214 )
...
* [CodeCompletion] Restrict ancestor search to brace
This change allows ExprParentFinder to restrict certain searches for parents to just AST nodes within the nearest surrounding BraceStmt. In the string interpolation rework, BraceStmts can appear in new places in the AST; this keeps code completion from looking at irrelevant context.
NFC in this commit, but keeps code completion from crashing once TapExpr is introduced.
* Remove test relying on ExpressibleByStringInterpolation being deprecated
Since soon enough, it won’t be anymore.
* [AST] Introduce TapExpr
TapExpr allows a block of code to to be inserted between two expressions, accessing and potentially mutating the result of its subexpression before giving it to its parent expression. It’s roughly equivalent to this function:
func _tap<T>(_ value: T, do body: (inout T) throws -> Void) rethrows -> T {
var copy = value
try body(©)
return copy
}
Except that it doesn’t use a closure, so no variables are captured and no call frame is (even notionally) added.
This commit does not include tests because nothing in it actually uses TapExpr yet. It will be used by string interpolation.
* SE-0228: Fix ExpressibleByStringInterpolation
This is the bulk of the implementation of the string interpolation rework. It includes a redesigned AST node, new parsing logic, new constraints and post-typechecking code generation, and new standard library types and members.
* [Sema] Rip out typeCheckExpressionShallow()
With new string interpolation in place, it is no longer used by anything in the compiler.
* [Sema] Diagnose invalid StringInterpolationProtocols
StringInterpolationProtocol informally requires conforming types to provide at least one method with the base name “appendInterpolation” with no (or a discardable) return value and visibility at least as broad as the conforming type’s. This change diagnoses an error when a conforming type does not have a method that meets those criteria.
* [Stdlib] Fix map(String.init) source break
Some users, including some in the source compatibility suite, accidentally used init(stringInterpolationSegment:) by writing code like `map(String.init)`. Now that these intializers have been removed, the remaining initializers often end up tying during overload resolution. This change adds several overloads of `String.init(describing:)` which will break these ties in cases where the compiler previously selected `String.init(stringInterpolationSegment:)`.
* [Sema] Make callWitness() take non-mutable arrays
It doesn’t actually need to mutate them.
* [Stdlib] Improve floating-point interpolation performance
This change avoids constructing a String when interpolating a Float, Double, or Float80. Instead, we write the characters to a fixed-size buffer and then append them directly to the string’s storage.
This seems to improve performance for all three types, but especially for Double and Float80, which cannot always fit into a small string when stringified.
* [NameLookup] Improve MemberLookupTable invalidation
In rare cases usually involving generated code, an overload added by an extension in the middle of a file would not be visible below it if the type had lazy members and the same base name had already been referenced above the extension. This change essentially dirties a type’s member lookup table whenever an extension is added to it, ensuring the entries in it will be updated.
This change also includes some debugging improvements for NameLookup.
* [SILOptimizer] XFAIL dead object removal failure
The DeadObjectRemoval pass in SILOptimizer does not currently remove reworked string interpolations as well as the old design because their effects cannot be described by @_effects(readonly). That causes a test failure on Linux. This change temporarily silences that test. The SILOptimizer issue has been filed as SR-9008.
* Confess string interpolation’s source stability sins
* [Parser] Parse empty interpolations
Previously, the parser had an odd asymmetry which caused the same function to accept foo(), but reject “\()”. This change fixes the issue.
Already tested by test/Parse/try.swift, which uses this construct in one of its throwing interpolation tests.
* [Sema] Fix batch-mode-only lazy var bug
The temporary variable used by string interpolation needs to be recontextualized when it’s inserted into a synthesized getter. Fixes a compilation failure in Alamofire.
I’ll probably follow up on this bug a bit more after merging.
2018-11-02 19:16:03 -07:00
John McCall
1d764fd6b4
Synthesize modify accessors for resilient global variables.
...
rdar://32936947
2018-11-01 19:28:50 -04:00
Slava Pestov
57979d1f7c
IRGen: Use @_weakLinked to test backward deployment of resilient protocols
...
Get the attribute working for more link entity kinds, which addresses
all the FIXME:s in the original test case.
Now the protocol resilience tests can be updated to use @_weakLinked
for all newly-added protocol requirements and default implementations.
This allows the tests to pass in the backward deployment test scenario
as well.
Eventually this will be based on availability instead of a special
attribute.
This completes <rdar://problem/29888071>.
2018-10-31 19:55:01 -04:00
Slava Pestov
494201889e
AST: Clean up DeclContext::getProtocolSelfType()
...
The lazy creation of the generic parameter list is not necessary.
2018-10-15 20:34:08 -07:00
Slava Pestov
73f1990bc2
AST: Use getSelfInterfaceType() instead of getProtocolSelfType() where possible
...
The former appears in the code base a lot more frequently than the
latter, which returns a GenericTypeParamType *. Use it only in places
where the more specific type is intended.
2018-10-15 20:34:08 -07:00