RFR 7901507: JASM error when parsing invokedynamic static string argument

B. Blaser bsrbnd at gmail.com
Tue Mar 7 17:21:20 UTC 2017


Hi Kevin,
Does this patch need to be improved?

Thanks,
Bernard

2017-02-15 18:21 GMT+01:00 Kevin Looney <kevin.looney at oracle.com>:
> Hi Bernard,
>
> Thanks for identifying this error, and providing a patch.   We will verify
> this soon, and update the repo.
>
> Regards,
> Kevin L
>
>
> On 2/15/17 9:15 AM, B. Blaser wrote:
>>
>> Hi,
>>
>> Please review the patch below to correct jasm parsing error for
>> invokedynamic static string argument.
>>
>> Jasm fails to assemble to following instruction:
>>
>>      invokedynamic REF_invokeStatic:bootstrap:"()V":target:"()V" int 0,
>> "test";
>>
>> because the type tag isn't cleared after 'int 0' and not explicitly
>> given for "test".
>> Jasm keeps 'int' as tag for the "test" string argument and then fails...
>>
>> I also fully rewrote the static argument parsing loop due to a suspect
>> handling of commas.
>>
>> Thanks,
>> Bernard
>>
>> diff --git a/src/org/openjdk/asmtools/jasm/ParserCP.java
>> b/src/org/openjdk/asmtools/jasm/ParserCP.java
>> --- a/src/org/openjdk/asmtools/jasm/ParserCP.java
>> +++ b/src/org/openjdk/asmtools/jasm/ParserCP.java
>> @@ -1,5 +1,5 @@
>>   /*
>> - * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights
>> reserved.
>> + * Copyright (c) 1996, 2017, Oracle and/or its affiliates. All rights
>> reserved.
>>    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
>>    *
>>    * This code is free software; you can redistribute it and/or modify it
>> @@ -450,11 +450,11 @@
>>                       ConstantPool.ConstCell NapeCell =
>> parser.pool.FindCell(parseConstValue(ConstType.CONSTANT_NAMEANDTYPE));
>>
>>                       ArrayList<ConstantPool.ConstCell> bsm_args = new
>> ArrayList<>(256);
>> -                    while (scanner.token != Token.SEMICOLON) {
>> -                        if (scanner.token == Token.COMMA) {
>> -                            scanner.scan();
>> -                        }
>> +                    for (boolean sep=false; scanner.token !=
>> Token.SEMICOLON; sep=true) {
>> +                        if (sep) scanner.expect(Token.COMMA);
>> +
>>                           bsm_args.add(parseConstRef(null));
>> +                        scanner.idValue = null; // Clear tag
>>                       }
>>                       BootstrapMethodData bsmData = new
>> BootstrapMethodData(MHCell, bsm_args);
>>                       parser.cd.addBootstrapMethod(bsmData);
>
>
>
> --
> kevin.looney at oracle.com
>


More information about the asmtools-dev mailing list