Commit Graph

589 Commits

Author SHA1 Message Date
Doug Gregor
527b147ba7 Revert "Allow the first name of a selector-style function declaration to be separated."
This reverts r15140.

Conflicts:
	include/swift/Serialization/ModuleFormat.h
	lib/Parse/ParsePattern.cpp

Swift SVN r15846
2014-04-02 23:27:52 +00:00
Jordan Rose
0324b9e027 Don't walk into an as-of-yet-unsynthesized function body.
...and don't dump it, and don't force it just to see if an accessor is present.

Swift SVN r15830
2014-04-02 21:00:48 +00:00
Jordan Rose
107eeefd77 Allow AbstractFunctionDecls to have their bodies "synthesized" on demand.
...then use this functionality for derived conformances for RawRepresentable.

No functionality change because these bodies are always forced right now.

Swift SVN r15828
2014-04-02 21:00:42 +00:00
Argyrios Kyrtzidis
41dbe5384b [AST] Add ClangNode::getLocation(), that returns the clang SourceLocation.
Swift SVN r15808
2014-04-02 17:39:08 +00:00
Doug Gregor
9189145cc5 Change DeclName over to basename(arg1:arg2:...argN:).
Swift will use the basename + argument names formulation for
names. Update the DeclName interfaces, printing, and __FUNCTION__ to
use the method syntax.

We'll still need to rework the "x.foo:bar:wibble:" syntax; that will
come (significantly) later.

Swift SVN r15763
2014-04-02 00:00:03 +00:00
Ted Kremenek
1002ff3789 Add some doxygen comments for getStartLoc(), getEndLoc(), getLoc()...
Swift SVN r15742
2014-04-01 19:10:54 +00:00
Doug Gregor
9400e890d3 Emit @objc classes using namespaced names under a new flag -enable-objc-mangling.
Centralize the logic for figuring out what name to use for a class or
protocol in the Objective-C runtime. When the flag is enabled (it's
still disabled by default), use mangled names for all Swift-defined
classes, including those that are @objc. Note that the naming is
determined in the AST, because we're also going to use this logic when
printing an Objective-C header for Clang's consumption. The mangled
names will always start with _Tt, so they're easy to recognize and
demangle in various tools or, eventually, in the Objective-C runtime.

The new test (test/IRGen/objc_mangling.sil) is the only test of this
behavior at the moment. The other test changes are due to the
centralized logic tweaking the names of internal constants (_DATA_*,
_CATEGORY_*, etc.).

This is the majority of <rdar://problem/15506580>.



Swift SVN r15588
2014-03-28 23:00:08 +00:00
Joe Pamer
bcab632730 When requesting members or protocols from a type declaration, force any delayed members by default. This allows us to pretty-print otherwise unresolved implicit members of imported enums. (rdar://problem/16430343)
Swift SVN r15534
2014-03-26 22:31:02 +00:00
Dmitri Hrybenko
a15acc0536 Remove duplicated type name in comment and fix some questionable formatting
Swift SVN r15503
2014-03-26 10:59:12 +00:00
Joe Pamer
eebe1ebf37 When importing external enum types, delay the creation of implicit members and their associated support functions until after the types are actually referenced.
This significantly reduces the amount of overhead incurred when naively importing large external modules without referencing many of its members, which should directly improve response times in the playground. For example, the repro code attached to rdar://problem/16387393 imports Foundation but references none of its members, and with these changes its total compilation time is almost 2.5x faster.

Swift SVN r15479
2014-03-26 01:06:27 +00:00
Argyrios Kyrtzidis
415a7036e2 [AST] In IfConfigDecl, keep track of its members per the block they belong to.
Swift SVN r15446
2014-03-25 03:55:31 +00:00
Argyrios Kyrtzidis
121bf14dd1 [AST] In IfConfigDecl/IfConfigStmt keep track of whether the IfBlock is active or not.
Swift SVN r15444
2014-03-25 03:55:29 +00:00
Argyrios Kyrtzidis
86a64d829c [AST] Add hasElse() and getEndLoc() to IfConfigDecl.
Swift SVN r15439
2014-03-25 03:55:25 +00:00
Chris Lattner
1f275532a6 now that nothing uses the PatternBindingDecl::HasStorage bit, there is no
reason to compute it, store it, serialize it, etc.  Remove the associated
logic.



Swift SVN r15302
2014-03-20 22:49:43 +00:00
Chris Lattner
0ea5a37fc1 rework PatternBindingDecl::hasStorage() to be a dynamic query of the vardecls it
contains, instead of being a stored bit set up by the parser.  Observed properties
have storage... unless they are overriding, and this avoids having to maintain
this bit.

This fixes:
<rdar://problem/16382967> Overriding observing properties have no storage, so shouldn't prevent initializer synth



Swift SVN r15301
2014-03-20 22:43:16 +00:00
Chris Lattner
f392549455 Implement: <rdar://problem/15920616> Implement willSet/didSet that wrap a superclass property instead of storage
This provides support for observing properties to @override base properties,
observing what happens to them.  Note that it still isn't possible to override
a stored property at all, so this only works when overriding a computed property.


Swift SVN r15280
2014-03-20 20:01:48 +00:00
Joe Groff
99704ce69f IRGen: Build field type vector accessor functions.
As part of the nominal type descriptor for a struct or class, build a function that lazily generates the vector of type metadata for the fields of the nominal type given an instantiation of the type's metadata. To cache this for nongeneric types, produce a global variable we can stash the result in, or for generic types, reserve some space in the metadata template so that generic metadata instantiation naturally provides a space for every instance of the type.

Reapplying now that the missing Float80 builtin metadata is available.

Swift SVN r15260
2014-03-20 02:03:57 +00:00
Joe Groff
9b6a217bca Revert "IRGen: Build field type vector accessor functions."
This reverts commit r15256, which is producing phantom references to 'Float80'
that need investigating.

Swift SVN r15258
2014-03-20 01:41:38 +00:00
Joe Groff
891cdaf312 IRGen: Build field type vector accessor functions.
As part of the nominal type descriptor for a struct or class, build a function that lazily generates the vector of type metadata for the fields of the nominal type given an instantiation of the type's metadata. To cache this for nongeneric types, produce a global variable we can stash the result in, or for generic types, reserve some space in the metadata template so that generic metadata instantiation naturally provides a space for every instance of the type.

Swift SVN r15256
2014-03-20 00:41:00 +00:00
Doug Gregor
5e8e7279f8 Allow the first name of a selector-style function declaration to be separated.
Parse function declarations with the form

  func murder inRoom(room: Int) weapon(Int) {}

where the function name ("murder") is separated from the parameter
names. This is the same style used in initializers, i.e.,

  init withCString(cstr: CString) encoding(Encoding)



Swift SVN r15140
2014-03-17 16:04:21 +00:00
Doug Gregor
ea7e70bbf7 Automatically inherit subobject initializers when none are explicitly defined.
If a subclass defines no subobject initializers and all of its stored
properties have initial values, "inherit" all of the subobject
initializers of its superclass by creating a new initializer with the
same signature that overrides (and chains to) the corresponding
subobject initializer of its parent. Do this instead of blindly
creating a default initializer.

Note that we aren't yet doing this for generic initializers. That will
be a separate step.

Swift SVN r14995
2014-03-13 18:43:30 +00:00
Chris Lattner
58652881ea Two changes to the ASTDumper:
1. Do not call getInterfaceType() on a decl if it isn't already set, since
   this will cause it to be lazily computed, and it would be nice for the
   ASTDumper to not side-effect our AST.

2. Print the interface type of a decl if present, even if the type is not.
   Surprisingly to me, we compute the interface type a lot sooner than the type
   for a decl in some cases.



Swift SVN r14951
2014-03-12 05:48:41 +00:00
Joe Groff
34400bd64b Add 'print' and 'dump' methods to GenericSignature.
Swift SVN r14944
2014-03-12 00:50:41 +00:00
Manman Ren
b96ddf48d6 SILParser: parsing GenericParamList.
To parse GenericParamList in SILParser, we try to share code with TypeChecker.
We add handleSILGenericParams in Subsystems.h in order for SILParser to call
TypeChecker's handling of GenericParamList (this is motivated by the example of
SILParser calling performTypeLocChecking). handleSILGenericParams calls
checkGenericParamList and finalizeGenericParamList.

A Builder field (ArchetypeBuilder*) is added to GenericParamList so we can add
the same-type requirements to GenericSignature in getAsCanonicalGenericSignature
by checking SameTypeRequirements of the builder.

resolvePotentialArchetypeToType is moved from a static helper function in
TypeCheckGeneric.cpp to a public helper function in ArchetypeBuilder.cpp.
When constructing the same-type requirements in getAsCanonicalGenericSignature,
we will call it to convert from PotentialArchetype to a dependent type.

rdar://16238241


Swift SVN r14922
2014-03-11 18:01:01 +00:00
Michael Gottesman
9a642f5c61 If we have no nested parameters, do not attempt to call stack.back() in NestedGenericParamList. Just return early to simulate end().
Swift SVN r14889
2014-03-10 23:37:09 +00:00
Joe Groff
8e2521e8c2 SILGen: Emit derived '==' operators from Clang modules with shared linkage.
In Sema, give derived '==' definitions the module's DerivedFileUnit as their decl context instead of the more general Module, and give it a backreference to the nominal type for which it was derived. 
In SILGen, visit the derived global decls associated with Clang-imported enums, and give them shared linkage. Part of fixing <rdar://problem/16264703>.

Swift SVN r14875
2014-03-10 20:33:54 +00:00
Doug Gregor
00162dc243 Start emitting stubs for unimplemented designated initializers of the superclass.
When a subclass does not implement a designated initializer of its
superclass, introduce a stub initializer that simply traps. Such stubs
cannot be invoked directly using Swift syntax, but can be invoked
through the Objective-C runtime and from Objective-C code. Catch such
errors rather than allowing them to violate the memory safety of the
language.

Note that we're currently using cond_fail to trap; this will be
improved in the future,


Swift SVN r14839
2014-03-09 07:16:30 +00:00
Jordan Rose
b9d1e14dd6 [serialization] Break a cyclic dependency involving associated types.
The standard library likes to have default definitions for associated types,
which is good. Often the /choice/ of default type, however, is a type that
(indirectly) conforms to the very protocol containing the associated type.
Rather than try to make sure everything is present all at once, just delay
the deserialization of the default definition until it's actually requested.

This does swell the size of AssociatedTypeDecl by two words. I've filed
<rdar://problem/16266669> to remind myself to try to reduce this.

Part of <rdar://problem/16257259>

Swift SVN r14809
2014-03-08 00:07:29 +00:00
Joe Groff
96c09d7179 Renovate name lookup to prepare for compound name lookup.
Make the name lookup interfaces all take DeclNames instead of identifiers, and update the lookup caches of the various file units to index their members by both compound name and simple name. Serialized modules are keyed by identifiers, so as a transitional hack, do simple name lookup then filter the results by compound name.

Swift SVN r14768
2014-03-07 03:21:29 +00:00
Joe Groff
c2339cd091 AST: Unique compound names in the ASTContext.
Add a folding set for CompoundDeclNames so that identical names can be compared by pointer equality.

Swift SVN r14753
2014-03-06 21:10:28 +00:00
John McCall
69855ba446 Extract a method to generate the all-archetypes list
of a set of generic parameters, and use it to verify
that the stored list matches what we expect.

Swift SVN r14693
2014-03-05 22:41:25 +00:00
Chris Lattner
d758e0dfe3 Eliminate more "DynamicLookup" in favor of "AnyObject", this is the
bulk of finishing rdar://13327098.


Swift SVN r14653
2014-03-04 22:15:46 +00:00
Dmitri Hrybenko
c0cb085870 Comment parsing: add APIs to get brief comments
These return placeholder text at the moment, but this enables us to can build
infrastructure that passes them around before the ReST parser is working.


Swift SVN r14650
2014-03-04 18:18:43 +00:00
Doug Gregor
15be2159a2 Rename "abstract initializers" to "required initializers".
It's better than what we have.

Swift SVN r14620
2014-03-03 23:12:40 +00:00
Doug Gregor
2c26523201 Require chaining to the superclass initializer to refer to a subobject initializer.
Swift SVN r14601
2014-03-03 18:47:09 +00:00
Doug Gregor
d92f1a3158 Inherit complete object initializers when a class supports it.
Teach name lookup to find complete object initializers in its
superclass when the current class overrides all of the subobject
initializers of its direct superclass.

Clean up the implicit declaration of constructors, so we don't rely on
callers in the type checker doing the right thing.

When we refer to a constructor within the type checker, always use the
type through which the constructor was found as the result of
construction, so that we can type-check uses of inherited complete
object initializers. Fixed a problem with the creation of
OpenExistentialExprs when the base object is a metatype.

The changes to the code completion tests are an improvement: we're
generating ExprSpecific completion results when referring to the
superclass initializer with the same signature as the initializer
we're in after "super.".

Swift SVN r14551
2014-03-01 00:51:21 +00:00
Doug Gregor
571ae697d5 Parsing and AST support for complete object initializers.
Enforce that complete object initializers always be delegating.

Swift SVN r14549
2014-03-01 00:51:18 +00:00
Joe Groff
f12f7d3b54 AST: "ValueName" -> "DeclName", and pack it in a single word.
Swift SVN r14541
2014-02-28 23:44:18 +00:00
Joe Groff
ca1b524740 AST: Relax the signature of FuncDecl factories to allow them to be constructed with compound names.
These are the only kinds of decl that will actually have compound names in practice in the short term. Initializers can have selector pieces too, but cannot be referenced outside of a constructor call, so their AST names don't matter.

Swift SVN r14540
2014-02-28 23:44:17 +00:00
Joe Groff
a30e1b44b8 AST: Create a 'ValueName' concept.
This will allow ValueDecls to have compound names, such as for selector-style function decls. NFC yet.

Swift SVN r14528
2014-02-28 19:18:04 +00:00
Joe Pamer
2cd375671d Rather than encode whether or not an enum element is currently "in validation", instead encode whether or not the element is itself recursive with regard to its enclosing type.
Swift SVN r14477
2014-02-27 21:19:04 +00:00
Joe Pamer
c81656e837 Fix type checking of self-recursive enum element members. We can now type check them without crashing, but we still can't IRGen. (Though, in that case we'll print a decent error message. Implementing IRGen for recursive enums is covered by rdar://problem/16178426)
Swift SVN r14473
2014-02-27 21:19:01 +00:00
Joe Groff
8e6b353542 Derive conformances of Equatable and Hashable for simple enums.
If an enum has no cases with payloads, make it implicitly Equatable and Hashable, and derive default implementations of '==' and 'hashValue'. Insert the derived '==' into module context wrapped in a new DerivedFileUnit kind, and arrange for it to be codegenned with the deriving EnumDecl by adding a 'DerivedOperatorDecls' array to NominalTypeDecls that gets visited at SILGen time.

Swift SVN r14471
2014-02-27 20:28:38 +00:00
Doug Gregor
1e8f02a45d Start diagnosing "deinit () { }".
Now that we do this, update the standard library, tests, other documents, etc.

Swift SVN r14423
2014-02-26 23:01:25 +00:00
Chris Lattner
1344319677 Rename the internal compiler lexicon from val -> let.
Swift SVN r14408
2014-02-26 21:21:18 +00:00
Doug Gregor
a1bef5aea3 Improve property overriding semantics.
A few improvements in our checking of property overrides:
  * Properly check for an extraneous @override on a property
  * Don't allow overriding of stored properties or with a stored property
  * Only allow a covariant override when the overridden property is not mutable
  * Check overrides as part of validation, not in a post-pass

Swift SVN r14403
2014-02-26 20:06:59 +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
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
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