Commit Graph

6754 Commits

Author SHA1 Message Date
Chris Lattner
3392c4e8ab remove ArchetypeSubscriptExpr, since it is dead now.
Swift SVN r14284
2014-02-23 08:04:51 +00:00
Chris Lattner
d69f91d68e switch Sema to produce SubscriptExpr for archetype subscripts, instead of producing
ArchetypeSubscriptExpr.  This implements support for subscripting archetypes.


Swift SVN r14283
2014-02-23 08:04:10 +00:00
Chris Lattner
a121e9798e implement support for property references on archetypes, implementing rdar://14195801
Swift SVN r14282
2014-02-23 08:02:22 +00:00
Chris Lattner
abe6c1441d remove a pointless #include
Swift SVN r14281
2014-02-23 08:01:53 +00:00
Chris Lattner
d3e2870646 remove some dead code.
Swift SVN r14278
2014-02-23 05:32:44 +00:00
Chris Lattner
30f4b1ba4a remove the unused ArchetypeMemberRefExpr and ExistentialMemberRefExpr nodes.
Swift SVN r14274
2014-02-22 22:09:38 +00:00
Chris Lattner
e6dcae5c4f Change sema to form MemberRefExpr instead of ArchetypeMemberRefExpr. The most
significant impact of this is that it eliminates a bunch of near duplicate logic
in SILGen and makes ArchetypeMemberRefExpr dead.


Swift SVN r14273
2014-02-22 21:59:36 +00:00
Chris Lattner
1bb9d28680 switch all existential member refs to be done with MemberRefExpr, making
ExistentialMemberRefExpr dead.


Swift SVN r14272
2014-02-22 21:24:16 +00:00
Chris Lattner
728a865904 change Sema to form vardecl member references in protocols as MemberRefExpr instead of
ExistentialMemberRefExpr, and enhance silgen to avoid unnecessary copies of protocol
and archetype bases.   With this, uses of properties in protocols start to work.


Swift SVN r14270
2014-02-22 20:52:11 +00:00
Chris Lattner
380e44c615 remove ExistentialSubscriptExpr. We don't need specialized forms of
subscriptexpr for various base types, for the same reason we don't need
multiple different kinds of MemberRefExpr.


Swift SVN r14268
2014-02-22 20:18:02 +00:00
Chris Lattner
0134eb2309 rework sema and silgen to build subscripts on protocols as
SubscriptExpr instead of ExistentialSubscriptExpr.  The later
is just a special case of the former.


Swift SVN r14267
2014-02-22 20:09:54 +00:00
Chris Lattner
936cf62925 implement support for getting and setting subscripts on lvalues.
Swift SVN r14266
2014-02-22 20:00:15 +00:00
Chris Lattner
a16aeccd40 enhance getBaseAccessorFunctionRef to handle accessors in protocols, and
implement RValueEmitter::visitExistentialSubscriptExpr to call it.  This
allows rvalue subscript calls on protocols to work.


Swift SVN r14265
2014-02-22 19:33:58 +00:00
Chris Lattner
e00b354d4b add some SGFContext arguments to a couple of RValueSource methods,
mostly for consistency with the underlying RValue logic they replicate.



Swift SVN r14264
2014-02-22 19:20:07 +00:00
John McCall
9f6820fadc SILGenModule::getConstantLinkage -> SILDeclRef::getLinkage
Swift SVN r14247
2014-02-22 01:45:40 +00:00
John McCall
3d5d8fdc03 Resilience expansion is really an aspect of a SILDeclRef.
We should also remove it from IRGen's Explosion API; IRGen
should always use maximal explosion, and SILGen will tell us
whether or not we need to put that in memory somewhere.
But that can be a later commit.

Swift SVN r14242
2014-02-21 23:28:43 +00:00
Doug Gregor
b5af687b6d Emit and use vtable entries for abstract initializers.
Emit vtable entries for abstract initializers. When we're constructing
an object using an abstract initializer based on a metatype value that
is not statically derivable, use the vtable entry to call the
subclass's allocating constructor.

Most of the IRGen work here is hacking around the lossy SILDeclRef ->
(Code|Function)Ref -> SILDeclRef conversion. I'd feel bad about this
if John hadn't already agreed to clean this up at some point.



Swift SVN r14238
2014-02-21 23:15:46 +00:00
Joe Groff
c876b55942 SILGen: Upcast 'self' of a witness if the requirement is satisfied by a base method.
Fixes <rdar://problem/16076301>.

Swift SVN r14214
2014-02-21 18:30:37 +00:00
Doug Gregor
50a7d66112 SILBuilder: peephole 'metatype' instruction used only by a thick/ObjC conversion instruction.
The 'metatype' instruction can produce either a thick or Objective-C
metatype value for a class. Sometimes SILGen picks the "wrong" one,
and ends up converting the value directly, which is sub-optimal. Clean
this up in SILBuilder.

I didn't add a corresponding SILCombine optimization, nor did I add
this for class_metatype, because it seems unlikely that those will
occur in practice.


Swift SVN r14183
2014-02-20 23:39:44 +00:00
Chris Lattner
fc42659613 Generalize witness table generation logic in silgen and irgen to handle properties.
We can now form witness tables for both properties and subscripts, but still can't
call them.  Also, only computed properties can fulfill a protocol requirement (which
is tracked by rdar://15912000).



Swift SVN r14137
2014-02-20 08:13:36 +00:00
Doug Gregor
97d66ccf47 Bridge thick class metatypes as Objective-C class metatypes.
Introduce basic bridging support for class metatypes as
arguments/parameters. Note that we don't yet bridge 'self' for a class
method, which is the more interesting case; that will follow.




Swift SVN r14123
2014-02-20 01:41:48 +00:00
Chris Lattner
a61e32008c stub out missing lvalue handling for subscripts on protocols and archetypes
Swift SVN r14083
2014-02-19 15:57:53 +00:00
Doug Gregor
a1673d7c8f Add an Objective-C metatype representation spelled with @objc_metatype.
This representation is just a placeholder at the moment.


Swift SVN r14076
2014-02-19 07:21:38 +00:00
Doug Gregor
c54f98fbc9 Convert thick/thin metatype bool to an enumeration. NFC
Swift SVN r14075
2014-02-19 06:05:48 +00:00
Doug Gregor
a341300cb0 Switch ClassDecl::getSuperclass() and EnumDecl::getRawType() to interface types.
This has the nice "side effect" of making overrides of generic
functions work better, fixing the remaining type checker issues from
<rdar://problem/15836098>.

Also synthesize the types for derived RawRepresentable conformances
directly rather than going through the type checker, so we get the
interface types right. 



Swift SVN r14066
2014-02-19 00:54:04 +00:00
John McCall
dce0931793 Remove an over-aggressive assert. Curried methods work in
protocols; we treat the method's natural uncurrying level as
the specified level.

Swift SVN r14053
2014-02-18 22:16:53 +00:00
John McCall
c7da19725a Allow the mangler to mangle accessor kinds and make
protocol conformance thunk generation handle accessors
correctly.

Swift SVN r14050
2014-02-18 21:53:10 +00:00
Chris Lattner
ecbbb4a42c rework our representations of subscripts to not curry the indexes
separately from the get/set value.  There is no exposed way in the
source language to use this, and this causes shorter term annoyance.

I chose to flatten the value and indices so the value comes first.
In principle, this allows us to completely eliminate our ObjC importer
thunks.  I haven't removed them though, because they might be useful
for something else.


Swift SVN r14049
2014-02-18 21:34:33 +00:00
Chris Lattner
09e49dc2d8 strength reduce SILGen's representation of indexes from being
RValueSource's to RValues.  SILGen doesn't need the generality
of RValueSource.  NFC.


Swift SVN r14015
2014-02-17 23:41:32 +00:00
Chris Lattner
48759e2ae1 strength reduce SILGen's handling of the "value" argument when calling
a setter to use an RValue instead of RValueSource.  NFC.


Swift SVN r14013
2014-02-17 23:35:02 +00:00
Chris Lattner
28903887e7 Rename the internal compiler lexicon from let -> val.
Swift SVN r13992
2014-02-17 16:48:21 +00:00
Joe Groff
a0874ad8d0 Add a Builtin.canBeObjCClass "type trait" builtin.
This builtin returns true for types that might be ObjC class types. We want to use this builtin to optimize away NSArray handling for non-object Array types, so it needs to persist in SIL long enough for specialization to do its thing, but we never actually want to pay a runtime cost for this check, so always lower it to a constant value at IRGen time. Handle this by having canBeObjCClass return a tri-state "yes/maybe/no" result. In SILGen, we only fold away obviously "yes" or "no" cases, and in IRGen, we fold away "maybe" cases as "yes".

The optimizer will need to learn about this builtin too, but that part isn't done yet.

Swift SVN r13980
2014-02-17 07:25:52 +00:00
Doug Gregor
0a52efd530 SIL: Lower DynamicSelf.metatype down to the metatype of the self type.
Swift SVN r13977
2014-02-17 05:35:11 +00:00
Joe Groff
df356b475b SIL: Set the context generic params of reabstraction thunks less greedily.
Don't try to set the generic params of a reabstraction thunk until we've established it hasn't already been defined, fixing an issue where the same generic reabstraction pattern occurred in different contexts and we ended up clobbering the archetypes of a thunk that was already defined in terms of other archetypes.

Swift SVN r13964
2014-02-16 16:56:43 +00:00
Chris Lattner
4a86056dff Progress towards putting subscript accessors into protocol witness tables.
This isn't testable yet, as it is blocked by at least two things:
 1. we can't put curried functions into witness tables (rdar://16079147),
    which is a problem given that subscript accessors are curried on their 
    index argument.
 2. accessors cannot silgen is curried form, we currently die in mangling.




Swift SVN r13947
2014-02-16 07:04:33 +00:00
Chris Lattner
0388d07cb1 fix <rdar://problem/16006333> observing properties don't work in @objc classes
willSet and didSet accessors need to be dispatched directly, even in the 
@objc case, and should never be added to vtables.



Swift SVN r13918
2014-02-14 19:29:20 +00:00
Chris Lattner
db2309101a fix a couple of simple things off argument patterns.
Swift SVN r13914
2014-02-14 18:18:32 +00:00
Dave Abrahams
5063c33cbb Rename "Stream" protocol back to "Generator"
The name Stream didn't seem to be working out as intended; we kept
gravitating back to calling it Generator, which is precedented in other
languages.  Also, Stream seems to beg for qualification as Input or
Output.  I think we'd like to reserve Stream for things that are more
bulk-character-API-ish.

Swift SVN r13893
2014-02-14 01:48:52 +00:00
Chris Lattner
d88852e457 remove SILDeclRef::Getter/Setter and supporting code. NFC, but I think
the previous patches have defined away a few obscure bugs handling subscript 
accessors (from inspection).


Swift SVN r13885
2014-02-14 01:12:56 +00:00
Chris Lattner
51609c1ac8 unbreak ClangModules/ctypes_ir.swift & ClangModules/macros_ir.swift,
imported accessors from clang modules need to be hacked to have shared
linkage, even in the new form.


Swift SVN r13883
2014-02-14 00:48:20 +00:00
Doug Gregor
2134072285 Split open_existential[_ref] out as their own instructions.
Riding off of project_existential[_ref] was convenient, but the
resuls are used quite differently. Note that open_existential[_ref]
still don't print/parse reasonably yet.



Swift SVN r13878
2014-02-13 23:42:23 +00:00
Chris Lattner
12196c17ba Now that we always have funcdecls for getters and setters, we don't need
SILDeclRef::Getter/Setter and the complexity therein.  Switch the world
to make SILDeclRef::Func's instead of them.  NFC.


Swift SVN r13875
2014-02-13 23:11:29 +00:00
Joe Groff
5c9470b9ca AST: Shun empty GenericSignatures, and remove the ASTContext argument from GenericSignature factories.
GenericSignatures with no params or requirements are a bug, so verify that they don't happen by making GenericSignature::get return null and GenericFunctionType assert that it has a nonnull signature. Hack Sema not to try to produce nongeneric GenericFunctionTypes when a function in a local type in a generic function context is type-checked; there's a deeper modeling issue that needs to be fixed here, but that's beyond the scope of 1.0. Now that GenericSignature always has at least one subtype, its factories no longer need an independent ASTContext argument.

Swift SVN r13837
2014-02-12 19:17:27 +00:00
Joe Groff
8a92d5e246 SILGen: Handle capture of 'self' in a derived class 'init' method.
'self' is formally a 'val', but we allocate a mutable box for it to accommodate self-rebinding by super.init, and we tried to pass the box owner and address as the closure parameters instead of the expected pass-by-value semantics. Fix it to properly handle the capture by value.

Swift SVN r13824
2014-02-12 07:06:38 +00:00
Joe Groff
68db63b45d AST: Have GenericFunctionType use GenericSignature.
Change GenericFunctionType to reference a GenericSignature instead of containing its generic parameters and requirements in-line, and clean up some interface type APIs that awkwardly returned ArrayRef pairs to instead return GenericSignatures instead.

Swift SVN r13807
2014-02-12 03:44:28 +00:00
Adrian Prantl
85ee56bd7b Debug info: Improve the line table for SwitchStmt variable bindings by
associating the store to it with the first CaseStmt.
The goal is to make the linetable entries as monotone as possible.

Fixes <rdar://problem/15888936> switch line table's first line misplaced.

Swift SVN r13805
2014-02-12 02:24:15 +00:00
Doug Gregor
016d62d930 Disallow @objc on methods, properties, subscripts, etc. in generic contexts.
Addresses <rdar://problem/16042185>.


Swift SVN r13790
2014-02-12 00:09:45 +00:00
Doug Gregor
8f0a7c5e19 Only use Objective-C dispatch to a constructor if it is actuallly @objc.
<rdar://problem/15967182> fixed the inference of @objc for
initializers, but our SILGen predicate deciding whether to perform
Objective-C dispatch was failing to heed the @objc bit on
constructors. Fixes <rdar://problem/16041090>.


Swift SVN r13787
2014-02-11 22:41:02 +00:00
Doug Gregor
6d1f80f331 Bubble the covariant conversions to the outermost relevant call.
When applying a function that was produced via a covariant function
conversion, strip off that covariant function conversion and introduce
a covariant (function or return) conversion outside of the
application. This allows us to perform the covariant conversion very
late, eliminating the need to produce reabstraction thunks for any
call to a DynamicSelf method.


Swift SVN r13779
2014-02-11 06:29:33 +00:00
Chris Lattner
bc005219d1 Implement most of support for properties in function scope, part of rdar://15922884.
Most of the complexity here is teaching SILGen how to handle closed-over direct 
accesses to observing properties, since all of the getter/setter/willSet/didSet
members of the property are actually full closures when in a function body.

We generate correct but really terrible code here, since the setter captures the
willset/didset members themselves.  I'm not worrying about the performance of 
this construct though, functionality is what matters.


Swift SVN r13778
2014-02-11 06:23:14 +00:00