Commit Graph

5045 Commits

Author SHA1 Message Date
Argyrios Kyrtzidis
fee0e6635e [serialization] Update the field of TupleTypeEltLayout.
Swift SVN r6234
2013-07-13 00:31:37 +00:00
Jordan Rose
1712ee6661 [serialization] Handle overloaded decls.
Swift SVN r6230
2013-07-13 00:03:14 +00:00
Jordan Rose
9a180ea9c6 [serialization] Relax assertions to allow reentrant deserialization.
As long as we don't create an entity twice, it's actually okay to be
re-entrant. This makes it simpler to deserialize members -- trying to
do so will deserialize the parent instead, which will then initialize
each of the members including the one that was asked for.

Swift SVN r6228
2013-07-12 23:29:57 +00:00
Jordan Rose
4db68ed617 [serialization] Record nominal types in the module table ASAP.
Deserializing a nominal decl often ends up referring to the nominal's type,
so if we're /already/ serializing the type, we should finish that as soon
as we have a decl. Accomplish this by adding a callback that is called
right after a nominal decl is recorded in the module's decl table, so that
the type can be immediately recorded as well.

Swift SVN r6227
2013-07-12 23:29:45 +00:00
Argyrios Kyrtzidis
b7817e4879 Remove VarargBaseTy field from TupleTypeElt.
Use a bit to indicate whether the element is a vararg one and infer the
VarargBase type via the element type.

Swift SVN r6220
2013-07-12 22:24:31 +00:00
Joe Groff
d956fdbd9e Update 'oneof' syntax.
Give oneof bodies syntax consistent with other NominalTypes. Give oneof elements first-class declaration syntax using the 'case' introducer, as suggested by Jordan. Oneofs can contain 'case' decls, functions, properties, and constructors, but not physical ivars. Non-oneof scopes cannot contain 'case' decls. Add some QoI to the oneof 'case' parser to also parse and complain about things that resemble switch 'case' labels inside decl contexts.

Swift SVN r6211
2013-07-12 20:42:19 +00:00
Jordan Rose
c699b84cfa [serialization] Add support for destructors.
With this commit, we can now serialize all of stdlib_core!
(Deserializing still has a few issues.)

Swift SVN r6188
2013-07-11 23:35:34 +00:00
Jordan Rose
e0301b6037 [serialization] Add support for UnboundGenericTypes.
I had previously thought these didn't appear in public decls, but they're
used when you extend a generic class without generic arguments.

Swift SVN r6187
2013-07-11 23:35:25 +00:00
Jordan Rose
37d9ae4e09 [serialization] Add support for extensions.
Currently, we are eagerly deserializing extensions. This probably isn't
what we want to do in the long run, but until lookup settles down a bit
it's not worth optimizing.

Swift SVN r6186
2013-07-11 23:35:19 +00:00
Jordan Rose
d1163afb4b [serialization] Add support for [conversion] methods.
Take advantage of the fact that a function can never be both a conversion
method and an assignment operator to pack both flags into the same bit in
the serialized record.

Swift SVN r6185
2013-07-11 23:35:12 +00:00
Jordan Rose
0a14c11381 [serialization] Fix "not implemented" check for cross-refs to extensions.
These aren't implemented yet because there's no way to identify a particular
extension by name, but they shouldn't crash the module emitter.

Swift SVN r6178
2013-07-11 21:30:55 +00:00
Jordan Rose
0afaa86bcc [serialization] Add support for subscript decls.
For consistency purposes, VarDecls in the subscript pattern now have the
enclosing nominal as their decl context, rather than no decl context at all.

Swift SVN r6177
2013-07-11 21:22:08 +00:00
Jordan Rose
9b7ae1aa50 [serialization] Handle archetypes unified by a constraint.
Turns out we actually have to serialize the name of an archetype, because
it may be different from the declaration in a context where it has been
unified with another archetype. Found on attempting to emit a module for
the standard library.

(This is actually the commit that uses the two-container for_each
introduced in the last commit.)

Swift SVN r6172
2013-07-11 21:12:46 +00:00
Jordan Rose
e3999dde36 [serialization] Handle absent protocol conformances.
These still need to be serialized, because they are one-to-one with the
type's protocol list, but don't actually require any data. Found on
attempting to emit a module for the standard library.

Most of the churn here is moving Interleave.h to a more general STLExtras.h.

Swift SVN r6167
2013-07-11 18:38:50 +00:00
Doug Gregor
bb2046c37b (De-)serialized ProtocolConformance::DefaultedDefinitions.
Swift SVN r6166
2013-07-11 18:34:03 +00:00
Jordan Rose
ca6f08164f [serialization] Add support for oneofs.
Since SILGen support is so poor, the test just uses -parse.

Swift SVN r6136
2013-07-10 23:26:00 +00:00
Jordan Rose
1564fa7f10 [serialization] Fix potential fall-off-the-end issues.
The way llvm::BitstreamCursor works is that reading an end-of-block
code will pop the current block off the stack, along with all its
record abbreviation codes. This means we’d no longer know how to
read any records. Fix this by telling the cursor not to auto-pop blocks
any time we’re doing a tentative read.

Swift SVN r6135
2013-07-10 23:25:52 +00:00
Jordan Rose
b4fe4f098c [serialization] Handle computed properties with a getter /and/ setter.
Since accessor FuncDecl have a backreference to the VarDecl they are
attached to, we were getting re-entrant deserialization issues. Fix
this by just not serializing the backreference and relying on the
property being deserialized first.

Swift SVN r6134
2013-07-10 23:25:39 +00:00
Jordan Rose
9a67bc597e [serialization] Add support for classes.
Classes are exactly like structs except that they may have a base class.
However, this type will show up in the inheritance list. That means we
don't actually need to serialize it twice; we can just grab the base class
from the inheritance list.

Swift SVN r6133
2013-07-10 23:25:34 +00:00
John McCall
6e79ed41f9 Per review, there's currently no need to reserve space
for future expansion in this.

Swift SVN r6122
2013-07-10 18:35:47 +00:00
John McCall
f4f164cb9e Add deserialization and stable encodings for ReferenceStorageType.
Jordan, please review.

Swift SVN r6111
2013-07-10 09:00:36 +00:00
Dmitri Hrybenko
cb98234d67 Allow the parser to persist after parseIntoTranslationUnit() returns
Swift SVN r6102
2013-07-10 00:25:37 +00:00
Jordan Rose
ad9875c19e [serialization] Add support for ArrayTypes.
...in a quest for completeness. ArrayTypes don't actually work yet
(single-dimensional arrays are typed as slices), but when they do the test
that is currently XFAIL'd should start passing.

With this, all non-transient types can now be serialized and deserialized.

Swift SVN r6101
2013-07-09 23:45:46 +00:00
Jordan Rose
e7aad15272 [serialization] Add block info for REFERENCE_STORAGE_TYPE.
This type may not stick around, but while it is around we should record
its name for llvm-bcanalyzer.

Swift SVN r6100
2013-07-09 23:45:39 +00:00
Jordan Rose
9443394fad [serialization] Mark some transient types as llvm_unreachable.
Also, remove a defensive check for a case there is now support for.

Swift SVN r6099
2013-07-09 23:45:28 +00:00
John McCall
18a9290cbe Add ReferenceStorageType.
The idea for now is that this is a SIL-only type used for
representing the storage of a weak or unowned reference.
Having it be its own type is pretty vital for reasonable
behavior in SIL and IR-generation, and it's likely that
this will surface into runtime metadata as well (hence
the mangling).

I've implemented a bunch of things that technically I don't
think are necessary if this stays out of the typechecker,
but it's easier to implement half-a-dozen "recurse into
the child type" methods now that it would be to find them
all later if we change our minds.

Swift SVN r6091
2013-07-09 08:37:40 +00:00
Jordan Rose
fdd5b36dfc [serialization] Handle fixity and assignment function attributes.
With this change we should be able to round-trip all of Policy.swift.

Swift SVN r6085
2013-07-09 00:45:05 +00:00
Jordan Rose
aa230234eb [serialization] Remove "isNeverLValue" flag.
This isn't worth serializing; any public decl can't meaningfully use this flag.

Swift SVN r6084
2013-07-09 00:44:56 +00:00
Jordan Rose
bec3b0a216 [serialization] Add support for infix operators.
Swift SVN r6081
2013-07-09 00:02:15 +00:00
Jordan Rose
2b0e969647 [serialization] Use lookupDirect to resolve cross-references to members.
...and add a test for this.

Also, fix a cursor invalidation bug for TypeAliasDecl deserialization.

Swift SVN r6079
2013-07-08 23:41:14 +00:00
Jordan Rose
929d86bb16 [serialization] Add support for prefix and postfix operators.
This includes adding an operator lookup table to ModuleFile. Operators are
keyed by a (name, fixity) pair.

Swift SVN r6078
2013-07-08 23:41:06 +00:00
Jordan Rose
03f7c3ef2c [serialization] Add support for slice types and variadic functions.
This is the first time reaching the case where the module refers to a type
that also appears in the TU and tries to modify it. This shouldn't be a
problem for any of the other types we currently serialize besides
BoundGenericType and ArraySliceType because we either don't try to modify
them after creation or are guaranteed a new type object.

Swift SVN r6060
2013-07-08 19:57:04 +00:00
Jordan Rose
aa2d1b2a64 [serialization] Handle PolymorphicFunctionTypes more carefully.
PolymorphicFunctionTypes are built on GenericParamLists, which are
owned by decls that introduce generic parameters. This made deserializing
them a pain, because they /cannot/ be recreated in isolation -- the decl
provides some context. Rather than try to come up with a very generic way
to serialize these, this patch just records the GenericParamList of every
decl, allowing the type to be serialized with a reference to the decl
instead of to the param list. Deserialization can then just pluck the list
back out of the decl.

According to Doug and Joe, PolymorphicFunctionType's due for a refresh
anyway, so this kind of hackery / kludgery is acceptable.

With this change, we can now handle generic structs and generic functions
inside generic structs.

Swift SVN r6032
2013-07-06 00:20:04 +00:00
Jordan Rose
eb9a1feaf3 [serialization] Handle oneof and class types (but not decls).
This allows us to reference Bool.

Swift SVN r6030
2013-07-06 00:19:40 +00:00
Jordan Rose
ce9c5c1d13 [serialization] Add support for generic structs (and constructors).
Swift SVN r5989
2013-07-04 00:20:38 +00:00
Jordan Rose
820c5a1404 [serialization] Serialize conformances for typealiases and protocols too.
Swift SVN r5988
2013-07-04 00:20:34 +00:00
Jordan Rose
0054e58935 [serialization] Serialize protocol conformances instead of ignoring them.
For some reason this didn't actually affect any testing, but it's going to
be necessary very soon.

Swift SVN r5987
2013-07-04 00:20:31 +00:00
Jordan Rose
bcab0b4fbe [serialization] Add support for substituted types and nested archetypes.
This also allows us to check same-type requirements.

Swift SVN r5986
2013-07-04 00:20:26 +00:00
Jordan Rose
197b696ce6 [serialization] Add support for generic requirements.
Same-type requirements aren't tested yet because there's currently no
support for associated types.

This includes an improvement to BCRecordLayout: array elements can be
passed inline, and the static checks that the data count matches the
field count will take this into account.

Swift SVN r5984
2013-07-04 00:15:06 +00:00
Jordan Rose
61efdb5ff7 [serialization] Add support for generic functions.
This currently does a little dance to handle PolymorphicFunctionTypes.
These are currently implemented by referencing the GenericParamList of
an actual polymorphic function, so they can't be deserialized without
knowing which function they are attached to. To solve this,
PolymorphicFunctionTypes are serialized as regular FunctionTypes. Then,
when a generic function decl is being deserialized, it will rebuild
a PolymorphicFunctionType from the serialized type and its own generic
parameter list.

Requirements on the generic types are coming next.

Swift SVN r5983
2013-07-04 00:14:23 +00:00
Dmitri Hrybenko
f428683842 Remove unused 'Body' parameter in FuncExpr::create()
'nullptr' is only ever passed as the argument value.


Swift SVN r5966
2013-07-02 23:12:15 +00:00
Jordan Rose
45fc3672f4 [serialization] Add support for protocol compositions.
Swift SVN r5964
2013-07-02 21:56:43 +00:00
Jordan Rose
cc92da302d [serialization] Add support for protocols.
Swift SVN r5962
2013-07-02 21:56:28 +00:00
Jordan Rose
764dff4bc6 [serialization] Add the HasBuiltinModuleAccess hack to fallback modules too.
This only affects people with SWIFT_USE_LIBRARY_MODULES turned on, i.e. me.

Swift SVN r5956
2013-07-01 23:10:10 +00:00
Dave Abrahams
096ffc6eaf Silence warnings in the release build
Swift SVN r5950
2013-07-01 21:42:16 +00:00
Jordan Rose
1441258e17 [serialization] Use member initializers for Serializer.
No functionality change.

Swift SVN r5948
2013-07-01 21:05:48 +00:00
Jordan Rose
cb45063516 [serialization] Don't special-case builtin types.
Instead, special-case cross-references to use the empty identifier as the
name of the Builtin module. This way imported modules will be able to use
builtin types and functions without the main TU having access.

Swift SVN r5947
2013-07-01 21:05:39 +00:00
Chris Lattner
1c0a1c4953 Every client that does type checking also does name binding. Doug wants to pull the later into
the former anyway, so simplify the clients by not exposing name binding to them.


Swift SVN r5903
2013-06-30 18:05:21 +00:00
Chris Lattner
c03d4454a0 implement support for a new [stdlib] attribute that can be slapped on an import decl.
This causes the SourceLoader to recursively parse the imported module in standard 
library mode, giving it access to the Builtin module.

This is all a terrible hack and should be ripped out with great victory someday, but 
until we have binary modules that persist the build setting used to produce the 
module, this is the best we can do.



Swift SVN r5847
2013-06-27 21:31:15 +00:00
Joe Groff
53221db84c AST: Add 'VarPattern' node.
We decided to go with 'var' as a distributive pattern introducer which applies to bare identifiers within the subpattern. For example, 'var (a, b)' and '(var a, var b)' would be equivalent patterns. To model this, give 'var' its own AST node with a subpattern and remove the introducer loc from NamedPattern.

Swift SVN r5824
2013-06-26 23:01:47 +00:00