Commit Graph

2489 Commits

Author SHA1 Message Date
Joe Groff
a14b83ba2c SILGen: Allow partial applications of enum cases.
This isn't as straightforward as it should be, since EnumElementDecls aren't AbstractFunctionDecls, but luckily there's only one trivial curry level with a thin metatype parameter.

Swift SVN r28991
2015-05-24 19:39:02 +00:00
Chris Lattner
258f91f60b revert: r28801 - improve the source location information for { and } in a ClosureExpr.
Instead, provide the location of the { in a closure expr to the argument formation as 
part of the datastructure already used to manage implicit closure arguments in the parser.


Swift SVN r28818
2015-05-20 03:19:56 +00:00
Chris Lattner
66916683a2 improve the source location information for { and } in a ClosureExpr, by
actually tracking it. NFC.


Swift SVN r28801
2015-05-20 00:10:04 +00:00
Chris Lattner
52bf6623e8 improve typing, NFC.
Swift SVN r28800
2015-05-19 23:42:43 +00:00
Chris Lattner
4b4f909d1a Several tangled up changes:
- Enable 'catch is NSError' and 'catch let e as NSError {' patterns to
   a) work, and b) be considered to be exhaustive catches.  This enables
   people to catch an error and *use* it as an NSError directly, instead
   of having to do boiler-platey cases.  This is particularly important
   for the migrator.

 - Do not warn about non-noop coersion casts (like "_ as NSError" when
   matching an ErrorType), since they provide useful type adjustment to
   the subpattern.  Still warn on noop ones.

 - Simplify CatchStmt::isSyntacticallyExhaustive to use 
   Pattern::isRefutablePattern.  Add a FIXME, because the parser is guiding
   closure "throws" inference before the pattern is type checked, which means
   that it is incorrect (but only in subtle cases).

 - When diagnosing pointless 'as' patterns like:

  switch 4 {
  case _ as Int: break 

say "'as' test is always true" instead of "'is' test is always true".




Swift SVN r28774
2015-05-19 17:32:32 +00:00
Doug Gregor
4fa6201283 Make sure to close existentials that come from constructions.
Fixes rdar://problem/20780797.

Swift SVN r28697
2015-05-18 05:11:48 +00:00
Chris Lattner
e517ad9182 Fix unreachable code handling to properly diagnose things like:
throw x 
whatever()  

as being unreachable after the throw.



Swift SVN r28680
2015-05-17 15:13:35 +00:00
Dmitri Hrybenko
0a1f7c09df Revert "Fix unreachable code handling to properly diagnose things like:"
This reverts commit 28678.  It broke the IDE/complete_exception.swift
test.

Swift SVN r28679
2015-05-17 12:27:57 +00:00
Chris Lattner
5ead9764bd Fix unreachable code handling to properly diagnose things like:
throw x
  whatever()

as being unreachable after the throw.



Swift SVN r28678
2015-05-17 05:56:02 +00:00
David Farler
dbd78643ce Build fix: Adventure triggers nullptr dereference
Fix a nullptr dereference when looking for a base expression
in a member access. Remove use of Optional<T*>, it wasn't providing
any value versus nullptr checking.

Swift SVN r28648
2015-05-15 23:36:33 +00:00
Doug Gregor
64d837d605 Don't emit a Fix-It adding an argument label for a trailing closure.
Fixes rdar://problem/20926939.

Swift SVN r28642
2015-05-15 21:27:29 +00:00
David Farler
80571cf916 Check base expr when determining mutability of a member
When in an initializer, we allow setting into immutable properties
provided that the type of base in `base.member` matches that of that
initializer's containing type. This was an approximation for allowing
full access into `self` during initialization but this doesn't work when
passing in a different struct of the same type because that struct
should be still be immutable.

Check whether the base of the member access is the implicit self
parameter of the initializer before allowing mutation.

rdar://problem/19814302

Swift SVN r28634
2015-05-15 18:48:54 +00:00
Chris Lattner
8a7b3f414e Revise the parser and AST representation of #available to be part of StmtCondition
instead of being an expression.

To the user, this has a couple of behavior changes, stemming from its non-expression-likeness.
 - #available cannot be parenthesized anymore
 - #available is in its own clause, not used in a 'where' clause of if/let.

Also, the implementation in the compiler is simpler and fits the model better.  This
fixes:
<rdar://problem/20904820> Following a "let" condition with #available is incorrectly rejected



Swift SVN r28521
2015-05-13 19:00:40 +00:00
Doug Gregor
922db0185d Initializers in protocol extensions are convenience initializers.
... and since they can only use required initializers (or those found
in a protocol), one can use them when constructing metatypes. Fixes
rdar://problem/20739719.

Swift SVN r28364
2015-05-09 04:35:53 +00:00
Chris Willmore
7b5767261b Extend the fix from r28200 to all UnresolvedMemberExpr instances in CSApply.
<rdar://problem/20596042> SIL gen crasher in rvalue emission: unexpected storage type that differs from type-of-rvalue

Swift SVN r28337
2015-05-08 23:52:33 +00:00
Doug Gregor
b5bc4c2b47 Start encoding a base declaration in name lookup results.
Swift SVN r28301
2015-05-08 00:26:18 +00:00
Doug Gregor
2653a6569b Eliminate ModuleExpr; DeclRefExpr is good enough for anyone.
Swift SVN r28285
2015-05-07 21:10:53 +00:00
Doug Gregor
297c9e2911 Introduce NameLookupOptions for TypeChecker::lookupMember(). NFC
Swift SVN r28281
2015-05-07 21:10:38 +00:00
Chris Willmore
cfd450391b Don't mutate defaultArgsOwner with getCallerDefaultArg() directly, so we
can make a more precise assertion that all default arguments have the
same owner.

<rdar://problem/20749423> Compiler crashed while building simple subclass code

Swift SVN r28251
2015-05-07 01:18:24 +00:00
John McCall
36c605f7dc Remove ScalarToTupleExpr in favor of a flag on TupleShuffleExpr.
Also, implement in-place initialization through tuple shuffles.

Swift SVN r28227
2015-05-06 23:44:26 +00:00
Chris Willmore
f3670d3a6f When adding '!' in fix-it, make sure that it doesn't fall into the
optional evaluation context that produced the optional.

<rdar://problem/20377684> Oscillating fixit for optional chain calling method that returns non-optional

Swift SVN r28212
2015-05-06 19:05:45 +00:00
Doug Gregor
83d336e714 Stop using TupleTypeElts in the type checking for arg/param matching.
Instead, use a dedicated struct. NFC

Swift SVN r28207
2015-05-06 17:05:27 +00:00
Chris Willmore
6263024a91 Coerce UnresolvedMemberExpr to its assigned type if it has an argument,
since the type might not match the return type of the function exactly
in that case (CSGen only emits a conversion constraint).

<rdar://problem/20087517> Crash when using .staticShorthand syntax with NSColor/UIColor factories

Swift SVN r28200
2015-05-06 08:25:05 +00:00
Doug Gregor
158e23f427 Make sure that we complete any conformances that are used in the AST.
When semantic analysis forms a reference to a conformance that will
persist in the AST (it is "used" in the C++ odr-used sense), complete
that conformance before type checking terminates. This ensures that
the SIL optimizers have complete conformances to work with for, e.g.,
generic specialization. Fixes rdar://problem/20735544.

Swift SVN r27896
2015-04-29 00:08:27 +00:00
Doug Gregor
a30ca2a60d Replace bool parameter to TypeChecker::conformsToProtocol() with an option set.
NFC; we can extend this option set more readily later.

Swift SVN r27894
2015-04-29 00:08:22 +00:00
Chris Lattner
8494651d22 Substantially rework CSApply's building of argument lists for calls.
This fixes <rdar://problem/20494437> SILGen crash handling default arguments
again, and includes a fix for MiscDiagnostics to look through the generated
TupleShuffleExprs in @noescape processing (which tripped up XCTest).

This fixes <rdar://problem/16860940> QoI: Strict keyword arguments loses type sugar in calls
where we'd lose some type sugar.

This fixes sanity in the ASTs: ScalarToTupleExpr now always has consistent
types between its argument and result, so we can turn on AST Verification of it.




Swift SVN r27827
2015-04-27 23:02:09 +00:00
Ted Kremenek
b9c10c048f Revert "fix <rdar://problem/20494437> SILGen crash handling default arguments"
This was breaking building the XCTest overlay.

Swift SVN r27818
2015-04-27 21:30:48 +00:00
Chris Lattner
d314ed1a0b fix <rdar://problem/20494437> SILGen crash handling default arguments
This was an ugly situation where we'd create an invalid ScalarToTuple in
a situation with default arguments, because CSApply didn't realize that the
default argument causes formation of a specific tuple kind with a single element.

There is more damage in this area, other work coming.


Swift SVN r27811
2015-04-27 19:33:22 +00:00
Chris Lattner
0e8f0d6bfc fix <rdar://problem/20679379> DI crashes on initializers on protocol extensions
DI makes the assumption that the type of self in an initializer is always
derived from a nominal type.  Now that you can put an initializer body on a
protocol, this isn't true anymore, so teach it about this.



Swift SVN r27714
2015-04-24 23:51:40 +00:00
Doug Gregor
02d25888c9 Clean up the interface to Type::subst(), NFC.
Replace the 'ignoreMissing' boolean flag with a new option set type,
SubstOptions, which is easier to extend. It is not an OptionSet<>
because a follow-on commit will introduce a non-trivial option that
will require more storage.

Also eliminate the LazyResolver parameter, which is no longer
needed. Eliminate the silly TypeChecker::substType(), whose only
purpose was to provide the resolver.

Swift SVN r27656
2015-04-23 23:36:18 +00:00
Doug Gregor
4ae7b13820 Stop trying to fully check a conformance when we query its existence.
This eliminates nonsensical recursion when working with protocol
conformances, and makes their checking more lazy. Start to improve
name lookup to deal with protocol witnesses more lazily, generalizing
the solution we had to all protocol conformances and making it more
directed. We're not done here, as the FIXMEs in the code completion
test imply: this replace-the-requirement-with-the-witness behavior
needs to be sunk down into the AST level so it also applies to
unqualified lookup, visible-decl lookup, etc.

Swift SVN r27639
2015-04-23 18:20:57 +00:00
Doug Gregor
c45c5d4bd1 Stop performing silly, ridiculous hasTypeWitness checks.
Swift SVN r27638
2015-04-23 18:20:56 +00:00
Slava Pestov
af5fb8a7b0 Fix conformances when calling protocol extension method with constraints
We need to use the constrants from the extension, otherwise we might
pass in the wrong witness method table at the call site, among other
problems.

Fixes rdar://problem/20532214.

Swift SVN r27585
2015-04-22 17:18:45 +00:00
Chris Willmore
4330f2a8a9 Instead of replacing ObjectLiteralExpr in CSApply, set its semantic expression (a la InterpolatedStringLiteralExpr).
Swift SVN r27488
2015-04-20 19:41:10 +00:00
Chris Willmore
d4db635e3d Add object literal syntax and _{Color,Image}LiteralConvertible protocols
Add syntax "[#Color(...)#]" for object literals, to be used by
Playgrounds for inline color wells etc. The arguments are forwarded to
the relevant constructor (although we will probably change this soon,
since (colorLiteralRed:... blue:... green:... alpha) is kind of
verbose). Add _ColorLiteralConvertible and _ImageLiteralConvertible
protocols, and link them to the new expressions in the type checker.
CSApply replaces the object literal expressions with a call to the
appropriate protocol witness.

Swift SVN r27479
2015-04-20 12:55:56 +00:00
Joe Pamer
006c182c13 Begin inferring throwing function types for closures. (There's more work to do here - hence the thin tests - but I need to investigate a couple of sema bugs before moving forward.)
Swift SVN r27438
2015-04-17 19:06:52 +00:00
Doug Gregor
69718f77fa When failing to find a suitable type witness, always record ErrorType.
Fixes the crash in rdar://problem/20564378. In these cases, we end up
swallowing some diagnostics. That will be addressed in a subsequent
commit.

Swift SVN r27436
2015-04-17 18:11:35 +00:00
Joe Groff
dfc57e6f01 Type checker: Don't attempt metatype-to-object conversions if ObjC interop is disabled.
The post-type-checking error that was here is arguably better QoI, but it is causing ambiguities that break the non-ObjC-compatible build in the stdlib. We shouldn't even attempt these conversions if there's no runtime support to back them up.

Swift SVN r27407
2015-04-17 05:30:16 +00:00
Nadav Rotem
f2169f8103 Silence a few more warnings in Release builds.
Swift SVN r27334
2015-04-15 21:38:23 +00:00
Devin Coughlin
d08b98b1ca Sema: Turn on availability checking by default
Enable checking for uses of potentially unavailable APIs. There is
a frontend option to disable it: -disable-availability-checking.

This commit updates the SDK overlays with @availability() annotations for the
declarations where the overlay refers to potentially unavailable APIs. It also changes
several tests that refer to potentially unavailable APIs to use either #available()
or @availability annotations.

Swift SVN r27272
2015-04-14 06:44:01 +00:00
Doug Gregor
997136962e Always open existential types in the type checker.
Consistently open all references into existentials into
opened-existential archetypes within the constraint solver. Then,
during constraint application, use OpenExistentialExprs to record in
the AST where an existential is opened into an archetype, then use
that archetype throughout the subexpression. This simplifies the
overall representation, since we don't end up with a mix of operations
on existentials and operations on archetypes; it's all archetypes,
which tend to have better support down the line in SILGen already.

Start simplifying the code in SILGen by taking away the existential
paths that are no longer needed. I suspect there are more
simplifications to be had here.

The rules for placing OpenExistentialExprs are still a bit ad hoc;
this will get cleaned up later so that we can centralize that
information. Indeed, the one regression in the compiler-crasher suite
is because we're not closing out an open existential along an error
path.

Swift SVN r27230
2015-04-11 03:20:22 +00:00
Doug Gregor
4ec1cb2537 Collapse creation of DynamicMemberRefExprs into the normal member-reference path. NFC
Swift SVN r27229
2015-04-11 03:20:15 +00:00
Joe Groff
7612df1918 Runtime: Rename 'becomeNSError' to 'bridgeErrorTypeToNSError'.
We may want to use optimized ErrorType representations that don't naturally "become" NSErrors, such as tagged-pointer representations of small error enums, or a tagged function pointer to a deferred error type constructor. Rename the runtime function to something a bit more descriptive of its real purpose, not its implementation.

Swift SVN r27209
2015-04-10 17:37:40 +00:00
Doug Gregor
5f4bea74e1 Open existential uses of dynamic-Self methods and initializers in the constraint solver.
Previously, we were only opening the existentials as part of
constraint application, which involved some ugly, redundant code. This
should be NFC because it's just moving the existential opening
operation earlier, but it's a step toward opening up all existential
references.

Swift SVN r27190
2015-04-09 23:58:55 +00:00
Doug Gregor
85b89ba112 Tighten up our handling of erasure of opened existentials. NFC
Swift SVN r27189
2015-04-09 23:58:54 +00:00
Roman Levenstein
d1698ba1cb Use a _bridgeable suffix for newly introduced fast bridging functions. NFC.
Dave explained that stdlib usually uses the suffix notation in such cases. This change follows his advice.

Swift SVN r27177
2015-04-09 20:59:42 +00:00
Doug Gregor
7fc1ac61ab Revert "Kill the sequence number in OpenedExistential."
This reverts r27106; we're going to need this for recovery.

Swift SVN r27170
2015-04-09 15:51:03 +00:00
Doug Gregor
6755aaf6b9 Revert "Simplify constraint application now that open-existentials are more local."
This reverts r27107; we're going to need this code for recovery.

Swift SVN r27169
2015-04-09 15:51:01 +00:00
Doug Gregor
d6dad48548 Simplify constraint application now that open-existentials are more local.
Remove some unnecessary boilerplate when working with ExprRewriter and
eliminate some closeExistential() call sites that are no longer
useful. NFC.

Swift SVN r27107
2015-04-07 23:22:06 +00:00
Doug Gregor
26ffdc7ace Kill the sequence number in OpenedExistential.
Because we're binding opened existentials early now, we no longer need
to be able to sort them to bind them late. NFC

Swift SVN r27106
2015-04-07 23:22:05 +00:00