experiences with prototype
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Tue Feb 3 21:34:19 UTC 2015
On 03/02/15 21:05, Peter Levart wrote:
> Hi Maurizio,
>
> I see. I thought this could be a nice idiom for boxing, since the
> following:
>
> (Object) 42
>
> ...is legal and results in an Integer object at runtime.
I'm not saying this will never work - actually the compiler is currently
accepting this kind of idioms, but the specializer does nothing with it,
so you'll get runtime errors.
>
> But I don't know if a checkcast is actually inserted for (Object).
> Could javac redundantly do it in case casting to Object is from
> expression of <any> type and also equip checkcast with BMA indicating
> the type of expression so that specialization could replace it with
> boxing code?
That will be the way forward, yes
Maurizio
>
> Regards, Peter
>
>
> On 02/03/2015 08:09 PM, Maurizio Cimadamore wrote:
>>
>> On 03/02/15 18:46, Maurizio Cimadamore wrote:
>>> I will also investigate on the crash you are getting...
>> Hi Peter,
>> the crash is coming from this code in AbstractCollection (see code in
>> bold):
>>
>> public boolean contains(Object o) {
>> __WhereVal(E) {
>> Iterator<E> it = iterator();
>> if (o == null) {
>> return false;
>> } else {
>> while (it.hasNext())
>> *if (o.equals((Object) it.next()))*
>> return true;
>> }
>> return false;
>> }
>> __WhereRef(E) {
>> Iterator<E> it = iterator();
>> if (o == null) {
>> while (it.hasNext())
>> if (it.next() == null)
>> return true;
>> } else {
>> while (it.hasNext())
>> if (o.equals(it.next()))
>> return true;
>> }
>> return false;
>> }
>> }
>>
>> I believe that, apart from the obvious javac bug, the code has an
>> issue, as it.next() is supposed to return a value there, but you are
>> casting to Object?
>>
>> For the records - a simpler test case for the bug is this:
>>
>> class Foo<any E> {
>> E e;
>> E get() { return e; }
>>
>> void test() {
>> __WhereVal(E) {
>> Object o = (Object)get();
>> }
>> }
>> }
>>
>> Maurizio
>
More information about the valhalla-dev
mailing list