Commit Graph

70 Commits

Author SHA1 Message Date
Doug Gregor
1cf3bdbe8c Use objc_msgSendSuper[Stret] for foreign initializer delegation.
Introduce the SIL instruction peer_method, which references a method
in the given class or one of its superclasses (but not a subclass). It
IRGen's to objc_msgSendSuper[Stret] (vs. super_method IRGen'ing to
objc_msgSendSuper[Stret]2 for superclass lookup).

Use peer_method for initializer delegation to a foreign initializer
(i.e., an init-family method written in Objective-C) to close the
safety loophole introduced by initializer delegation in r11965. The
loophole still exists, but can only be triggered from Objective-C.

Teach definite initialization that peer_method really isn't a use of
self.



Swift SVN r11992
2014-01-07 17:33:41 +00:00
Joe Groff
ab65140a2e Add a 'Builtin.once' builtin.
This lowers to a call to a to-be-written swift_once runtime function and will be used for lazy global initialization. Having this be a builtin seemed appropriate to me given that:

- references to it will be implicitly emitted by SILGen for global initializers.
- there are restrictions on its correct use that are currently impossible to express in the language outside of the stdlib.

Swift SVN r10508
2013-11-16 00:50:12 +00:00
Joe Groff
bbddf41693 IRGen: Instantiate existential metadata through the runtime.
When we need a reference to protocol or protocol composition type metadata, ask for it through the runtime, instead of referencing statically-emitted protocol metadata.

Swift SVN r9871
2013-11-01 17:13:49 +00:00
Joe Groff
00dcdf394f SIL: Introduce CondFailInst.
This instruction will conditionally trigger a runtime failure if its operand is true.

Swift SVN r9588
2013-10-22 15:53:04 +00:00
Joe Groff
0974d7d373 IRGen: Register ObjC protocol conformances at runtime when JIT-ing extensions.
Swift SVN r9474
2013-10-18 01:20:49 +00:00
Joe Groff
d273b799e3 IRGen: Emit downcasts to ObjC protocol types.
Use objc_getProtocol to derive a reference to the Protocol* for each required conformance, then pass the array off to a to-be-written dynamicCastObjCProtocol(Un)?Conditional entry point that will do all of the conformsToProtocol checks.

Swift SVN r9397
2013-10-16 01:28:59 +00:00
Joe Groff
280fc60ce9 IRGen, runtime: Poke generic size and alignment into class metadata.
This should get us actually allocating and deallocating generic root class instances.

Swift SVN r9251
2013-10-12 03:34:27 +00:00
Joe Groff
77b1cdac68 IRGen: Emit runtime call to initialize generic class field offsets.
In the metadata template fill function for generic classes with dependent layout, include a call to a (not yet implemented) runtime initClassMetadata function to lay out the class fields and initialize the field offset vector.

Swift SVN r9233
2013-10-11 23:21:32 +00:00
Joe Groff
6aa924221b IRGen: Lay out fields when instantiating generic struct metadata.
In the fill function for a generic struct metadata template, gather metadata for all of the field types, then invoke the runtime's new initStructMetadata function to initialize the field offset vector and vwtable.

Swift SVN r9123
2013-10-10 01:40:55 +00:00
Joe Groff
e109124186 Replace 'union' keyword with 'enum'.
This only touches the compiler and tests. Doc updates to follow.

Swift SVN r8478
2013-09-20 01:33:14 +00:00
Joe Groff
1d8183dac9 IRGen: Fix naming inconsistency with runtime.
Swift SVN r8350
2013-09-17 21:04:48 +00:00
Joe Groff
717d3b2de7 IRGen: Implement tag injection for dynamic single-payload unions.
Use swift_storeUnionTagSinglePayload to implement tag injection.

Swift SVN r8336
2013-09-17 17:12:52 +00:00
Joe Groff
14112d671f IRGen: Abstract the value semantics of single-payload unions to accommodate the dynamic case.
Conditionalize dependencies on fixed layout in the init/assign/destroy implementations for single-payload unions, and use some to-be-written runtime entry points in the dynamic case. Provide an initializeValueWitnessTable implementation for dynamic single-payload union metadata.

Swift SVN r8319
2013-09-17 01:29:33 +00:00
Doug Gregor
4a377575f8 IRGen support for dynamic method lookup of static methods.
Swift SVN r8301
2013-09-16 22:27:53 +00:00
Doug Gregor
5917038895 Untested IR generation for dynamic_method_br.
The dynamic method branch queries for the ability of an object to
respond to a particular selector (with -respondsToSelector:) and
branches on the result.

Note that we can't actually check the resulting IR here until we
handle partial application on Objective-C methods
(<rdar://problem/14958980>).


Swift SVN r8081
2013-09-10 22:27:14 +00:00
John McCall
14cb7001b3 Implement basic support for [weak].
Swift SVN r7041
2013-08-08 04:04:51 +00:00
John McCall
b77c430848 Add SIL-gen and some missing runtime support for [unowned].
Swift SVN r6881
2013-08-03 08:46:54 +00:00
John McCall
00a940ac1b Rename weak_retain to unowned_retain and change it to
require the correct [unowned] type as an argument.

Swift SVN r6825
2013-08-02 00:02:09 +00:00
John McCall
7b86817b3c Basic value structure for [weak] and [unowned] references.
Add a bunch of new entrypoints and give them terrible
implementations.

Swift SVN r6322
2013-07-17 09:20:20 +00:00
John McCall
075539b0f5 Generate runtime functions from an xmacro database.
Swift SVN r6266
2013-07-15 18:33:45 +00:00