Commit Graph

19 Commits

Author SHA1 Message Date
Chris Lattner
226a675ffc Update more tests to use ()'s around function types. 2016-05-06 21:07:08 -07:00
Slava Pestov
efca93e632 Reflection: Add dumping of capture descriptors to swift-reflection-dump
The tests show that there's some round-tripping issue; I will investigate
this next.
2016-05-02 01:16:25 -07:00
Slava Pestov
729428b4b1 Reflection: Type lowering for metatypes
The thin vs thick distinction is handled a little awkwardly. Instead of
passing around abstraction patterns, we add a "must be thick" bit to
MetatypeTypeRef, and thicken substitutions (to handle T; T := C.Type)
and the result of a subtitution (to handle T.Type; T := C).

With the exception of enums this completes <rdar://problem/25738849>.
2016-04-25 21:22:20 -07:00
Slava Pestov
996a859235 Reflection: Add basic type lowering for existentials
This approach doesn't work for imported Objective-C protocols yet.
2016-04-25 20:08:49 -07:00
Slava Pestov
d39e7d9416 Reflection: Add type lowering for class references and functions
Also add slightly inaccurate lowering for the special case of an
optional of a reference type. I need to rethink the approach for
extra inhabitants and enums, but this suffices for now.
2016-04-22 22:40:16 -07:00
Slava Pestov
d9c2fac613 Reflection: Add function representation to FunctionTypeRef 2016-04-22 19:47:06 -07:00
Slava Pestov
2380f9f957 Re-apply "Reflection: Preliminary implementation of struct and tuple type lowering"
Re-apply now that reflection metadata is emitted by default and
the test can actually pass. Oops...
2016-04-21 15:15:38 -07:00
Greg Parker
4f98a54eb4 Revert "Reflection: Preliminary implementation of struct and tuple type lowering" and "Reflection: Fix a nit"
Test Reflection/typeref_lowering.swift failed on a bot:
https://ci.swift.org/job/oss-swift-package-osx/1346/

This reverts commits 52f475c0b0 and f4af29b53c.
2016-04-19 01:51:48 -07:00
Slava Pestov
52f475c0b0 Reflection: Preliminary implementation of struct and tuple type lowering
Now that we can parse and substitute typerefs, and look up field
types, we finally have enough infrastructure in place to do some
basic layout of struct and tuple types from within the Reflection
library.

To facilitate testing, swift-reflection-dump now accepts multiple
-binary-filename flags, allowing types defined in the standard
library to be looked up.

More detailed end-to-end tests will come once I finish the
typeref-to-metadata builder.
2016-04-18 23:13:50 -07:00
Slava Pestov
cca413580a Reflection: Small fixes
- Use -parse-as-library in tests
- Use _ instead of - when printing TypeRefs for consistency with AST Types
- Fix printing of unowned(unsafe) types
2016-04-18 21:17:40 -07:00
David Farler
ff67f7f6af [GenReflection] Emit associated type reflection metadata via extensions
Don't leave behind conformances gotten through extensions when
emitting associated type reflection metadata.
2016-04-15 17:48:27 -07:00
Slava Pestov
7b0e8d2b2f Reflection: Clean up duplication in typeref_decoding*.result.txt
Previously we would pre-process the same input files in the ObjC
and non-ObjC tests. This made the tests difficult to update because
the output of one was a subset of the other, and only one of the
two tests would run on any given platform.

Instead, let's just put the Objective-C tests in their own test
and input files.
2016-04-15 00:12:29 -07:00
Slava Pestov
f236383865 Reflection: Fix metadata for empty cases
Also change std::endl to '\n' in the dumper, since std::endl flushes
the output stream.
2016-04-14 23:44:45 -07:00
Slava Pestov
d39c7f29c4 Reflection: Eliminate NominalTypeTrait::setParent()
When creating a TypeRef from metadata, we have a parent pointer
handy, and construct the TypeRef directly, so there's no need
to mutate the TypeRef after the fact.

When demangling a TypeRef from a string, the mangling encodes
the parent module or type context, so we can set it when
constructing the TypeRef there too.
2016-04-14 15:31:15 -07:00
Slava Pestov
d2b16597f8 Reflection: Fixes for tuple types with labels, and varargs
Just drop labels when demangling TypeRefs. This is OK for now
since labels do not affect layout.

Vararg tuple types cannot appear directly as the type of
storage, however they can appear in function input types, and
therefore must be minimally supported. Since we don't plan on
doing function call reflection just yet, this doesn't matter
for now, but again we need to not crash.

With this patch, all TypeRefs in the Swift standard library now
successfully demangle and print.
2016-04-12 19:15:37 -07:00
Slava Pestov
68f6a1179d Reflection: Add TypeRef kinds corresponding to {Unowned,Weak,Unmanaged}ReferenceStorageType 2016-04-12 19:15:37 -07:00
David Farler
744806a742 [Reflection] Add Foreign, ObjC, and Opaque type references
These likely don't have Swift type metadata but might be useful to
record or instantiate based on what kind of metadata is encountered for
the sake of memory tools.
2016-03-02 21:25:04 -08:00
David Farler
69bb6235fa [Reflection] Serialize associated types for nominal decls
This closes the loop on being able to resolve dependent member types
during remote reflection.
2016-02-12 16:34:28 -08:00
David Farler
ede69acfb7 Add tests for decoding type references 2016-02-07 21:40:08 -08:00