RFR 7901507: JASM error when parsing invokedynamic static string argument
B. Blaser
bsrbnd at gmail.com
Wed Feb 15 17:15:50 UTC 2017
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);
More information about the asmtools-dev
mailing list