Commit Graph

5 Commits

Author SHA1 Message Date
Slava Pestov
ffabf60118 IRGen: Hollow out generic class templates
Don't emit placeholders for field offsets and vtable entries,
since they were always null. Instead, calculate the final size
of class metadata at runtime using the size of the superclass
metadata and the number of immediate members, and only copy
this prefix from the template to the instantiated metadata,
zero-filling the rest.

For this to work with non-generic resilient classes and
non-generic subclasses of generic classes, we need a new
runtime entry point to relocate non-generic class metadata,
calculating its size at runtime using the same strategy.
2017-12-08 13:50:56 -08:00
Slava Pestov
0fa7440e51 IRGen/Runtime: Remove old class metadata relocation mechanism 2017-12-07 14:21:58 -08:00
Slava Pestov
5c0c660727 IRGen: Emit nested generic context information in the nominal type descriptor
Once generic type metadata includes arguments from all outer contexts,
we need to know how many arguments there are at each nesting depth in
order to properly reconstruct the type name from metadata.
2017-09-25 15:45:16 -07:00
Slava Pestov
5d018d78f7 More IRGen tests for runtime vtable initialization 2017-08-24 19:15:38 -07:00
Slava Pestov
6f3160084f IRGen/Runtime: Dynamic vtable initialization for generic and resilient classes
Instead of emitting the vtable statically, copy it from the
superclass, and fill in method overrides, if any.

For now this is only done for classes initialized by
swift_initClassMetadata_UniversalStrategy(); I need to
add a new entry point for classes with static field
layout but a dynamic vtable.
2017-08-16 16:30:11 -04:00