Commit Graph

2461 Commits

Author SHA1 Message Date
Joe Groff
c0d8ae7c13 Parse 'x.self' as an identity expression.
Factor an IdentityExpr base class out of ParenExpr, and migrate most of the logic to see through ParenExprs to see through IdentityExprs instead. Add DotSelfExpr as a new subclass of IdentityExpr, produced by parsing 'x.self'.

Swift SVN r14381
2014-02-26 06:23:55 +00:00
Doug Gregor
981f8f6509 Rename "destructor" -> "deinit" (as a keyword) and -> "deinitializer" (in diagnostics).
Swift SVN r14380
2014-02-26 05:51:45 +00:00
Doug Gregor
0bde325327 Collapse 'DynamicSelf' into 'Self'.
Swift SVN r14377
2014-02-26 05:04:05 +00:00
Joe Groff
98d6fecc99 '.metatype' -> '.Type'
Also, reserve 'type' as a keyword for ensuing syntax changes.

Swift SVN r14375
2014-02-26 04:23:21 +00:00
Joe Pamer
a0c57f496d Improve error recover for parsing build configuration blocks. Specifically, improve diagnostics for when users try to use #if/#else/#endif blocks in ways that would break brace statement or member list parsing. (Like if they were trying to emulate the C preprocessor.)
Swift SVN r14369
2014-02-26 02:06:29 +00:00
Chris Lattner
7f4c0b981c rename the StoredObjC storage class to StoredWithTrivialAccessors since
we'll be using it for more general things soon.  NFC.


Swift SVN r14329
2014-02-25 01:08:27 +00:00
Doug Gregor
61c240c8a8 Allow construction of existential values based on an existential metatype value.
... but obviously not when we've statically derived the existential
metatype. This isn't quite the way I'd like to prohibit these issues,
but more work on existentials and metatypes is coming up shortly.


Swift SVN r14326
2014-02-25 00:32:31 +00:00
Doug Gregor
c4cc906210 Turn a sentinel value for diagnostics into an enum.
Swift SVN r14324
2014-02-24 23:36:31 +00:00
Doug Gregor
96be672daf Allow initializer requirements on protocols and check conformance to them.
Swift SVN r14320
2014-02-24 23:17:09 +00:00
Doug Gregor
048c67350b Move the diagnostic about a missing initializer body into Sema.
We did this for func declarations a long time ago; do it for
initializers as well.


Swift SVN r14318
2014-02-24 22:22:29 +00:00
Dave Abrahams
32c5122c92 Fix diagnostic: s/container/Sequence/
Swift SVN r14313
2014-02-24 21:08:04 +00:00
Joe Pamer
988a5877f2 Some updates:
- Respond to Doug's code review feedback
   - Stop hacking around with scopes and use "emplace" to work around RAII in the inactive config case
   - Limit use of StringRef on the front-end, in favor of std::string
   - Use ArrayRef rather than SmallVector within IfConfigDecl
   - Reorder new property declarations on BraceStmt to prevent unnecessary alignment issues
- Update ParseBraceItems to better capture top-level declarations, rather than using token lookahead

Swift SVN r14306
2014-02-24 18:16:49 +00:00
Joe Pamer
f83f94d9d8 Support build and target configurations
These changes add support for build and target configurations in the compiler.
Build and target configurations, combined with the use of #if/#else/#endif allow
for conditional compilation within declaration and statement contexts.

Build configurations can be passed into the compiler via the new '-D' flag, or
set within the LangOptions class. Target configurations are implicit, and
currently only "os" and "arch" are supported.

Swift SVN r14305
2014-02-24 18:16:48 +00:00
Chris Lattner
b478d53cf9 implement semantic analysis of subscript and property requirements,
to reject invalid code.


Swift SVN r14289
2014-02-24 00:30:18 +00:00
Dmitri Hrybenko
94eb4f986a Module interface printing: don't print { get set } when it is the default
rdar://16070050


Swift SVN r14286
2014-02-23 15:14:28 +00:00
Chris Lattner
3392c4e8ab remove ArchetypeSubscriptExpr, since it is dead now.
Swift SVN r14284
2014-02-23 08:04:51 +00:00
Argyrios Kyrtzidis
bb4b57c053 [IDE] Introduce ide::printDeclUSR() which uses the mangler to provide a USR for a swift symbol.
Swift SVN r14279
2014-02-23 06:54:48 +00:00
Chris Lattner
30f4b1ba4a remove the unused ArchetypeMemberRefExpr and ExistentialMemberRefExpr nodes.
Swift SVN r14274
2014-02-22 22:09:38 +00:00
Dmitri Hrybenko
3da05e347d Change property accessor syntax to include braces
See release notes update for details.

rdar://15966905


Swift SVN r14271
2014-02-22 21:00:56 +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
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
c1919d3d32 AST: Know the Hashable and Comparable protocols.
So we will be able to derive conformances for them.

Swift SVN r14233
2014-02-21 22:50:01 +00:00
Doug Gregor
0da11a8b0b Implement semantic analysis for abstract initializers.
Swift SVN r14221
2014-02-21 19:41:14 +00:00
Argyrios Kyrtzidis
eeb9589d2c [AST] Introduce "hasName()" convenience methods and replace "getName().empty()" callers.
Swift SVN r14206
2014-02-21 15:00:38 +00:00
Doug Gregor
926e3711d0 Only permit inheritance of protocol conformance when it is semantically valid.
A protocol conformance of a class A to a protocol P can be inherited
by a subclass B of A unless
  - A requirement of P refers to Self (not an associated type thereof)
  in its signature, 
    + *except* when Self is the result type of the method in P and the
    corresponding witness for A's conformance to B is a DynamicSelf
    method.

Remove the uses of DynamicSelf from the literal protocols, going back
to Self. The fact that the conformances of NSDictionary, NSArray,
NSString, etc. to the corresponding literal protocols use witnesses
that return DynamicSelf makes NSMutableDictionary, NSMutableArray,
NSMutableString, and other subclasses still conform to the
protocol. We also correctly reject attempts to (for example) create an
NSDecimalNumber from a numeric literal, because NSNumber doesn't
provide a suitable factory method by which any subclass can be literal
convertible.



Swift SVN r14204
2014-02-21 07:48:28 +00:00
Doug Gregor
8024563678 Don't allow construction of classes based on non-statically-derived metatypes.
An arbitrary value of class metatype cannot be used to construct an
object, because there's no guarantee that a given subclass will
provide that initializer.


Swift SVN r14175
2014-02-20 22:17:23 +00:00
Doug Gregor
c630ef33d7 Don't allow one to utter DynamicSelf except as a class/protocol method's result type.
Previously, semantic analysis would permit uses of DynamicSelf in the
body of a DynamicSelf method. However, SILGen's lowering of
DynamicSelf to the underlying self type caused breakage. Because we
don't have a pressing need for this feature, just disable
it. Restricts the scope of <rdar://problem/15862605>.


Swift SVN r14172
2014-02-20 21:34:57 +00:00
Dmitri Hrybenko
13b1d9823e Don't mention BCPL in CommentKind enumerators
Swift SVN r14147
2014-02-20 12:46:02 +00:00
Chris Lattner
68a68919e1 Implement:
<rdar://problem/16118658> properties in protocols should require {get / set} specifier



Swift SVN r14136
2014-02-20 07:42:49 +00:00
Dmitri Hrybenko
b4bf794551 ASTContext: make RawComment APIs private. One should use Decl's APIs instead.
Swift SVN r14085
2014-02-19 16:35:22 +00:00
Dmitri Hrybenko
34df7b494e Comment parsing: recognize documentation and non-documentation comments, merge
consecutive documentation comments and form 'RawComment's.


Swift SVN r14084
2014-02-19 16:20:38 +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
8bc87bbe1e fromRaw() witnesses can only be synthesized when the raw type is Equatable.
Swift SVN r14067
2014-02-19 01:09:43 +00:00
Ted Kremenek
a37d1f4740 Generalize 'MissingReturn' analysis to closures.
Fixes: <rdar://problem/16100822> [DF] Crash after using a closure

Swift SVN r14063
2014-02-19 00:12:07 +00:00
Joe Groff
a7b75fc396 Remove inaccurate comment.
Swift SVN r14062
2014-02-18 23:38:39 +00:00
Joe Groff
c0a0a8b584 Add a -sil-opt-pass-count frontend flag.
Until our SIL printing and parsing is robust enough to round-trip, this is useful for bisecting optimizer issues.

Swift SVN r14061
2014-02-18 23:37:25 +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
Michael Gottesman
190de1cc6a Add support for option -time-transforms which causes the pass manager to emit time information for each transform run.
Swift SVN r14042
2014-02-18 15:50:17 +00:00
Dmitri Hrybenko
ecd798b9fd Comment parsing: attaching comments to declarations
We can attach comments to declarations.  Right now we only support comments
that precede the declarations (trailing comments will be supported later).

The implementation approach is different from one we have in Clang.  In Swift
the Lexer attaches the comments to the next token, and parser checks if
comments are present on the first token of the declaration.  This is much
cleaner, and faster than Clang's approach (where we perform a binary search on
source locations and do ad-hoc fixups afterwards).

The comment <-> decl correspondence is modeled as "virtual" attributes that can
not be spelled in the source.  These attributes are not serialized at the
moment -- this will be implemented later.


Swift SVN r14031
2014-02-18 09:04:37 +00:00
Jordan Rose
0b2541b58f Rename the standard library to "Swift" (instead of "swift")
This is more in line with all other modules currently on our system.
If/when we get our final name for the language, we're at least now set
up to rename the library without /too/ much trouble. (This is mostly just
a lot of searching for "import swift", "swift.", "'swift'", and '"swift"'.
The compiler itself is pretty much just using STDLIB_NAME consistently now,
per r13758.)

<rdar://problem/15972383>

Swift SVN r14001
2014-02-17 19:30:47 +00:00
Chris Lattner
28903887e7 Rename the internal compiler lexicon from let -> val.
Swift SVN r13992
2014-02-17 16:48:21 +00:00
Chris Lattner
602da91d1c switch diagnostics from let -> val.
Swift SVN r13990
2014-02-17 16:22:39 +00:00
Dmitri Hrybenko
d5752c4b72 Update comment to reflect reality (presence of source location no longer
indicates that an attribute is present).


Swift SVN r13982
2014-02-17 11:48:22 +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
9d41af15b6 Make SIL output for open_existential actually parseable.
Swift SVN r13939
2014-02-15 05:52:19 +00:00
Chris Lattner
380b03c3f5 reject attempts to mark observing accessors @objc, and don't infer them as @objc.
Swift SVN r13930
2014-02-14 23:36:56 +00:00
Chris Lattner
5298cbab49 inline Pattern::setType(), and add a new method for recursively traversing pattern nodes.
Swift SVN r13915
2014-02-14 18:53:22 +00:00
Chris Lattner
108910c410 remove a now-dead function.
Swift SVN r13913
2014-02-14 18:13:28 +00:00
Dmitri Hrybenko
571c9b3c5e Split 'type' keyword into 'static' and 'class'
rdar://15911697


Swift SVN r13908
2014-02-14 14:50:32 +00:00