Model 3 classfile design document

Ali Ebrahimi ali.ebrahimi1781 at gmail.com
Sun Jan 24 09:11:52 UTC 2016


Hi,

On Sun, Jan 24, 2016 at 12:02 PM, Ali Ebrahimi <ali.ebrahimi1781 at gmail.com>
wrote:

> Hi,
> Another two typo:
>
> 1-
> "
>
> To illustrate this, consider the class below:
>
> class Bar<any V> { }
> class Foo<any T extends Runnable, any U> extends Bar<T> {
>     T aT;
>     Foo<T,U> aFoo;
> }
>
> In the parameterized type Foo<Integer, int>, the first type parameter is
> erased, and its erasure is Runnable."
>
> Here is not better we use some subtype of Runnable such as Thread:
>
> Foo<Thread, int>
>
>
> 2)
>
> "
> Member References
>
> To illustrate further the complexity of erasure, and why we want to leave
> it in the hands of the static compiler, suppose we have a method invocation:
>
> class Foo<X> { void m(X x) { } }
>
> class Bar<any Y extends Bound> {
>     Foo<Y> foo = ...
>     Y y = ...
>     foo.m(y)
>
> How do we describe the invocation foo.m(y)? The invokevirtual instruction
> describes both the receiver type and the descriptor. If Y is erased, we
> want the descriptor to be List::m(Object); if not, we want it to be
> List<Y>::m(Y). "
>
> If Y is erased, we want the descriptor to be Foo::m(Object); if not, we
> want it to be Foo<Y>::m(Y).
>
>
> But, one question:
>
> Does your proposed translation scheme for generic methods only apply to
> static ones or both (static & instance)?
>
Sorry, I will answer this one. Yes...

-- 

Best Regards,
Ali Ebrahimi


More information about the valhalla-spec-observers mailing list