Commit Graph

18 Commits

Author SHA1 Message Date
Huon Wilson
d40b8fa5e2 [TBDGen] Conformances in extensions. 2017-04-18 11:14:19 -07:00
Huon Wilson
704d4ed631 [test/TBD] Input -> Inputs. Whoops. 2017-04-18 10:45:26 -07:00
Huon Wilson
e5acdd42fc [TBDGen] Handle private/internal methods on open classes. 2017-04-14 10:13:11 -07:00
Huon Wilson
c41319b24b [SIL] Only open classes can be subclassed externally. 2017-04-14 10:13:11 -07:00
Huon Wilson
04aa385f27 [TBDGen] Non-allocating class constructor/destructor. 2017-04-13 11:42:54 -07:00
Huon Wilson
fce992ff8b [TBDGen] Class direct field offsets. 2017-04-13 11:41:29 -07:00
Huon Wilson
6cccddf39a [TBDGen] Class metaclasses, when interacting with ObjC. 2017-04-13 11:40:50 -07:00
Huon Wilson
520f186c4f [TBDGen] Class witness table offsets. 2017-04-13 11:39:50 -07:00
Huon Wilson
2446db55ed [TBDGen] Stored property initializers. 2017-04-13 11:38:58 -07:00
Huon Wilson
53d80be1e3 [TBDGen] Transparent symbols don't exist. 2017-04-13 11:36:50 -07:00
Erik Eckstein
789646a15b Demangling: Make demangled names more readable and further reduce the size of the simplified demangled names
The goal here is to make the short demangling as short and readable as possible, also at the cost of omitting some information.
The assumption is that whenever the short demangling is displayed, there is a way for the user to also get the full demangled name if needed.

*) omit <where ...> because it does not give useful information anyway

Deserializer.deserialize<A where ...> () throws -> [A]
--> Deserializer.deserialize<A> () throws -> [A]

*) for multiple specialized functions only emit a single “specialized”

specialized specialized Constructible.create(A.Element) -> Constructible<A>
--> specialized Constructible.create(A.Element) -> Constructible<A>

*) Don’t print function argument types:

foo(Int, Double, named: Int)
--> foo(_:_:named:)

This is a trade-off, because it can lead to ambiguity if there are overloads with different types.

*) make contexts of closures, local functions, etc. more readable by using “<a> in <b>” syntax
This is also done for the full and not only for the simplified demangling.

Renderer.(renderInlines([Inline]) -> String).(closure #1)
--> closure #1 in Renderer.renderInlines

*) change spacing, so that it matches our coding style:

foo <A> (x : A)
--> foo<A>(x: A)
2017-04-13 08:43:28 -07:00
Huon Wilson
088824de2b [TBDGen] Generate symbols for protocol conformances. 2017-04-06 17:51:04 -07:00
Slava Pestov
6a83e7303e SILGen: Protocol witness thunks don't need public linkage
We used to give witness thunks public linkage if the
conforming type and the protocol are public.

This is completely unnecessary. If the conformance is
fragile, the thunk should be [shared] [serialized],
allowing the thunk to be serialized into callers after
devirtualization.

Otherwise for private protocols or resilient modules,
witness thunks can just always be private.

This should reduce the size of compiled binaries.

There are two other mildly interesting consequences:

1) In the bridged cast tests, we now inline the witness
   thunks from the bridgeable conformances, which removes
   one level of indirection.

2) This uncovered a flaw in our accessibility checking
   model. Usually, we reject a witness that is less
   visible than the protocol; however, we fail to
   reject it in the case that it comes from an
   extension.

   This is because members of an extension can be
   declared 'public' even if the extended type is not
   public, and it appears that in this case the 'public'
   keyword has no effect.

   I would prefer it if a) 'public' generated a warning
   here, and b) the conformance also generated a warning.

   In Swift 4 mode, we could then make this kind of
   sillyness into an error. But for now, live with the
   broken behavior, and add a test to exercise it to ensure
   we don't crash.

   There are other places where this "allow public but
   ignore it, kinda, except respect it in some places"
   behavior causes problems. I don't know if it was intentional
   or just emergent behavior from general messiness in Sema.

3) In the TBD code, there is one less 'failure' because now
   that witness thunks are no longer public, TBDGen does not
   need to reason about them (except for the case #2 above,
   which will probably require a similar workaround in TBDGen
   as what I put into SILGen).
2017-03-30 03:52:57 -07:00
Huon Wilson
0c37685327 [TBD] Validate against truly externally visible symbols in the IR.
External linkage isn't enough: not being hidden is important too.
2017-03-28 16:31:12 -07:00
Huon Wilson
91bf6771ca [test/TBD] add tests that really use private-access. 2017-03-28 16:31:12 -07:00
Huon Wilson
d7a8b8382f [test/TBD] use "internal" instead of "private". 2017-03-28 16:31:11 -07:00
Huon Wilson
83f6e319f9 [TBD] let special casing actually applies to static/global lets and vars. 2017-03-28 16:31:11 -07:00
Huon Wilson
636a3c5821 [TBD] Sort -emit-tbd, and -validate-tbd-against-ir errors.
Also, diff the full output rather than using FileCheck.
2017-03-28 16:31:10 -07:00