Commit Graph

1309 Commits

Author SHA1 Message Date
Chris Lattner
2339567de6 reapply "replace magic numbers with an (already extant) enum.",
now with less typo and no terrible comment with enum name in it.


Swift SVN r13593
2014-02-06 18:47:05 +00:00
Chris Lattner
063fa84ee9 revert r13591, it broke something.
Swift SVN r13592
2014-02-06 18:41:24 +00:00
Chris Lattner
7d48b7a7a6 replace magic numbers with an (already extant) enum.
Swift SVN r13591
2014-02-06 18:21:21 +00:00
Chris Lattner
595817bd89 Rename data structures relating to WillSetDidSet properties to call them "Observing"
properties internally to the compiler.  NFC.


Swift SVN r13587
2014-02-06 17:51:45 +00:00
Chris Lattner
f508925dda rearrange the vardecl parsing logic so we handle initializer before get/set expressions.
No change to what we accept.


Swift SVN r13355
2014-02-03 16:23:22 +00:00
Chris Lattner
9f32d521a2 now that ctors and dtors have self patterns, we can unify and simplify the
implementation of AbstractFuncDecl::getImplicitSelfDecl() and eliminate
the ImplicitSelfDeclAndIsCached ivar.


Swift SVN r13351
2014-02-03 15:17:21 +00:00
Argyrios Kyrtzidis
48023490de [AST] Move AccessorKind enum to top-level so it can be forward declared.
No functionality change.

Swift SVN r13299
2014-02-01 08:50:15 +00:00
Doug Gregor
fe2ef0e5c6 Fix interface types and type lowering of DynamicSelf so archetypes don't creep in.
Allows us to invoke DynamicSelf methods of generic classes.


Swift SVN r13290
2014-02-01 05:12:39 +00:00
Chris Lattner
3e08673772 Introduce patterns for self arguments to ctors and dtors, making them uniform
with FuncDecls.  This allows us to eliminate special case code for handling
self in various parts of the compiler.

This also improves loc info (debug info and AST info) because 'self' now
has a location instead of being invalid.

I also took the opportunity to factor a bunch of places creating self decls
to use similar patterns and less copy and paste code.



Swift SVN r13196
2014-01-31 02:17:22 +00:00
Chris Lattner
5a85c16c49 Refactor AbstractFunctionDecls to hoist the "NumParamPatterns" count
up from FuncDecl to AbstractFunctionDecl.  NFC.


Swift SVN r13155
2014-01-30 18:10:47 +00:00
Joe Groff
9fe1ab427a Implement 'if let' and 'while let' statements.
Allow IfStmts and WhileStmts to have as their condition either an expression, as usual, or a pattern binding introduced by 'var' or 'let', which will conditionally bind to the value inside an optional. Unlike normal pattern bindings, these bindings require an in-line initializer, which will be required to be Optional type. Parse variable bindings in this position, and type-check them by requiring an Optional on the right-hand side and unwrapping it to form the pattern type. Extend SILGen's lowering of if and while statements to handle conditionally binding variables.

Swift SVN r13146
2014-01-30 10:37:39 +00:00
Doug Gregor
030770a8c2 Make DynamicSelf into its own special type node.
Making DynamicSelf its own special type node makes it easier to opt-in
to the behavior we want rather than opting out of the behavior we
don't want. Some things already work better with this representation,
such as mangling and overriding; others are more broken, such as the
handling of DynamicSelf within generic classes and the lookup of the
DynamicSelf type.


Swift SVN r13141
2014-01-30 05:36:20 +00:00
Chris Lattner
290a58494e Implement debug info for willset/didset, and teach dispatch to be non-virtual
to didset/will set since we don't drop these in the class vtable.


Swift SVN r13056
2014-01-28 06:33:31 +00:00
Chris Lattner
d407bc8fc4 Teach the parser to add the didSet/willSet functions to the enclosing
type, so we emit them.  Add mangler (and demangler) support for these.
Enhance our testcase to check to make sure that stores within these
specifiers are direct, they don't cause recursive infinite loops.

John, I picked w/W for the mangling letters, let me know if this is ok.


Swift SVN r13050
2014-01-28 05:15:56 +00:00
Chris Lattner
e668e86cc3 With many prerequisites out of the way, lets start actually working on didset/willset
properties.  This step provides AST support to model them.


Swift SVN r13011
2014-01-27 22:11:16 +00:00
Chris Lattner
929ad99f08 Clean up and generalize the code pertaining to how a FuncDecl accessor
knows about the AbstractStorageDecl it works on.  NFC.



Swift SVN r12994
2014-01-27 17:57:38 +00:00
Chris Lattner
a945271aa8 Now that properties in protocols are always computed, and that StoredObjC
properties have accessors, we have an amazing property: everything that we
want to form a getter or setter for ... really has one! I suspect many things
can be simplified now, but the first on the chopping block is 
StorageDecl::getGetterType (and its three friends) which is now always exactly
just getGetter()->getType().



Swift SVN r12983
2014-01-27 06:17:28 +00:00
John McCall
fcf1c14924 When deciding whether we can support a type property,
ignore whether it's in an extension vs. the primary declaration,
and permit non-stored properties in any context except a protocol.

Swift SVN r12943
2014-01-24 22:46:22 +00:00
John McCall
f416dd81a8 Track whether a PatternBindingDecl theoretically
declares storage or not.

Swift SVN r12942
2014-01-24 22:46:22 +00:00
John McCall
2c320663a9 Add an accessor to get the generic parameters of an
extension.

Eventually, extensions won't necessarily have the same
parameter list as the declarations they extend, and this
makes it easier to make that work.

Swift SVN r12940
2014-01-24 22:46:19 +00:00
Chris Lattner
38698af3cc This is a WIP implementation of a major change to how ObjC properties are
represented: they should have an explicit getter and setter synthesized by
Sema, instead of by silgen and tenuously tied in by IRGen.

There is more work to be done on this (e.g. I need to figure out how to get
the bodies properly type checked), so it is hidden behind a new
-enable-new-objc-properties flag.



Swift SVN r12907
2014-01-24 07:04:42 +00:00
Chris Lattner
91fb51100d Introduce a new kind of StorageDecl called StoredObjC. These are
properties that are (usually) accessed through getters and setters, but
which have storage.  Nothing generates these yet.


Swift SVN r12902
2014-01-24 05:15:11 +00:00
Doug Gregor
feb101de35 Invalidate and recheck constraints on type parameters as part of the signature.
This allows us to have references to type parameters within the
generic type parameter list. This occurs, for example, with
DynamicSelf methods within generic classes.


Swift SVN r12809
2014-01-22 22:53:06 +00:00
Doug Gregor
3cd14d6643 Don't permit DynamicSelf outside the body or return type of a method.
Swift SVN r12761
2014-01-22 19:20:30 +00:00
Doug Gregor
56b60d9726 Factor "self" type computation into one place within libAST.
Oh, and start creating the implicit generic parameter for
DynamicResult functions.




Swift SVN r12744
2014-01-22 16:03:26 +00:00
Jordan Rose
5299a502d0 [ClangImporter] Import class, protocol, and category members lazily.
This still isn't /that/ lazy because a lot of things can force member
deserialization (such as the type-checker generating a DestructorDecl for
every imported class), and we don't do this in a member-granular way just
yet. I don't see any change in testing time, for example.

But besides just being a good thing in general, this perturbs the order
of imported decls enough to fix <rdar://problem/15799697>: we can now
reliably see that there is a -URL:something: function on NSObject that
blocks any properties named 'URL' from being imported as properties.

(Which we don't actually want; see <rdar://problem/15456130>.)

Swift SVN r12685
2014-01-22 00:54:47 +00:00
Joe Groff
e829d4e05c AST: Unique GenericSignatures in the ASTContext.
Make them cheap to compare. We may want to hang an ArchetypeBuilder off of them to cache archetypes within the signature context at some point too.

Swift SVN r12630
2014-01-21 01:27:09 +00:00
Chris Lattner
784b14cc27 don't duplicate enum names in comment.
Swift SVN r12596
2014-01-20 18:32:44 +00:00
Chris Lattner
f5b85341a1 Expand out the "isComputed" property in AbstractStorageDecl to be an enum
with two kinds, and some more specific predicates that clients can use.

The notion of 'computed or not' isn't specific enough for how properties
are accessed.  We already have problems with ObjC properties that are 
stored but usually accessed through getters and setters, and a bool here
isn't helping matters.

NFC.



Swift SVN r12593
2014-01-20 18:16:30 +00:00
Chris Lattner
a02c399ff3 merge get[GS]etter[Interface]Type() for VarDecl and SubscriptDecl into AbstractStorageDecl
Swift SVN r12574
2014-01-20 15:32:30 +00:00
Chris Lattner
a0f0c28868 Two related but (theoretically at least) seperable changes:
1. Implement parser and sema support for our subscript syntax proposal in
   protocols.  Now you have to use subscript(..) { get } or  {get set} to 
   indicate what you want.  I suspect that the syntax will evolve, but at
   least we can express what we need now.
2. Change the representation of SubscriptDecls in protocols to make 
   (empty) funcdecls for the getter and setter.  This guarantees that 
   every subscript has at least a getter.



Swift SVN r12555
2014-01-19 01:35:13 +00:00
Chris Lattner
20af73f973 hoist getter/setter information up to AbstractStorageDecl.
Subscripts are always computed, but otherwise fit the model
fine.


Swift SVN r12539
2014-01-18 20:14:01 +00:00
Chris Lattner
7e67fdb30a decls always can get to an ASTContext, remove the unneeded
ASTContext argument from VarDecl::setComputedAccessors.


Swift SVN r12538
2014-01-18 20:04:05 +00:00
Joe Groff
0776c4b6b8 SIL: Reorient function type lowering toward interface types.
Lower types for SILDeclRefs from the interface types of their referents, dragging the old type along for the ride so we can still offer the context to clients that haven't been weaned off of it. Make SILFunctionType's interface types and generic signature independent arguments of its  Derive the context types of SILFunctionType from the interface types, instead of the other way around. Do a bunch of annoying inseparable work in the AST and IRGen to accommodate the switchover.

Swift SVN r12536
2014-01-18 19:42:02 +00:00
Chris Lattner
a8d8e14254 introduce AbstractStorageDecl. Right now, just
move OverriddenDecl and usesObjCGetterAndSetter() up to it.
This allows usesObjCGetterAndSetter to subsume the logic
for subscript decls as well.



Swift SVN r12535
2014-01-18 19:08:39 +00:00
Chris Lattner
e85a6d673e move SubscriptDecl code up to be next to VarDecl code. Other than
rearranging, this doesn't change anything.


Swift SVN r12534
2014-01-18 18:21:10 +00:00
Chris Lattner
bb3c0d52dc Unfortunately, two conflated NFC patches:
1) Revert my change to give DeclContext a dump method, it confuses the debugger.
2) Refactor SILGen::requiresObjCPropertyEntryPoints out to 
   VarDecl::usesObjCGetterAndSetter.


Swift SVN r12526
2014-01-18 02:00:23 +00:00
Chris Lattner
f50d1f5b48 with the plumbing complete, it is now simple to implement:
<rdar://problem/15785677> allow 'let' declarations in structs/classes be initialized in init()

Our model is that 'let' ivars are fully mutable in init() but are immutable everywhere else.



Swift SVN r12509
2014-01-17 22:26:53 +00:00
Chris Lattner
b4735381d0 Plumb the DeclContext of the use site down to the "doesVarDeclMemberProduceLValue"
function.  Pretty soon, whether something is an lvalue or not will depend on who is
asking.


Swift SVN r12507
2014-01-17 22:14:02 +00:00
Chris Lattner
17d9bf24bf Make DeclContext dump()’able from the debugger. Unmark Decl’s dump method as “Deprecated and only used by the debugger”. This isn’t doing anything useful since the implementation is used by live code anyway.
Swift SVN r12506
2014-01-17 22:07:35 +00:00
Doug Gregor
bc89a04d12 Disallow non-delegating initializers outside of the class's defining module.
An initializer outside of the class's defining module won't
necessarily have access to all of the stored properties of the class
to initialize them (and wouldn't be resilient against changes even if
it did), so it must delegate.

Swift SVN r12302
2014-01-15 00:11:38 +00:00
John McCall
817e80bde5 Implicit conversions for UncheckedOptional.
rdar://15189000
rdar://15189009

Swift SVN r12260
2014-01-13 23:15:03 +00:00
Doug Gregor
a534f6978a Add a new class attribute requires_stored_property_inits.
This attribute states that all stored properties within the class must
provide initial values. This will allow us to move stored property
initialization into Objective-C's post-allocation initialization hook,
.cxx_construct.

Swift SVN r12228
2014-01-13 16:31:22 +00:00
Doug Gregor
2bf20ccbc3 Add the ClassDecl::getDestructor() convenience method.
Swift SVN r12140
2014-01-10 22:32:49 +00:00
Chris Lattner
c48b2de76d 80 column fixes.
Swift SVN r12001
2014-01-07 18:51:29 +00:00
Joe Groff
c47820ff3d Add a convenience method for reparenting a GenericParamList.
NFC.

Swift SVN r11995
2014-01-07 17:56:36 +00:00
Joe Groff
81d5c227dc Add iterators for recursively walking GenericParamLists.
Use a custom iterator to walk the GenericParam records and archetypes at all depths of a nested generic param list recursively.

Swift SVN r11988
2014-01-07 06:50:18 +00:00
Doug Gregor
b0440645c8 Diagnose attempts to both delegate to a peer and chain to a superclass initializer.
While we're here, cache the result of looking for delegation or
chaining calls within ConstructorDecl. Only Sema and SILGen for the
body of the constructor care, so we don't serialize this
information. Rather, we have a faster-path to recompute it should
someone ask again after it was cached.


Swift SVN r11969
2014-01-07 01:00:49 +00:00
Doug Gregor
708d797e1f Upgrade ConstructorDecl::hasDelegatingOrChainedInit() to provide the kind of initialization.
Swift SVN r11962
2014-01-06 23:26:53 +00:00
Doug Gregor
434324ec0a Move the "is there a call to super.init?" check into a ConstructorDecl predicate.
Swift SVN r11960
2014-01-06 22:54:43 +00:00