deduplicating lambda methods
B. Blaser
bsrbnd at gmail.com
Wed Mar 21 12:24:30 UTC 2018
On 19 March 2018 at 22:31, Maurizio Cimadamore
<maurizio.cimadamore at oracle.com> wrote:
>
> [...]
>
> Also, a side note: we have learned during condy-folding that rewriting trees
> is not always the right approach - if you are compiling with -g, you might
> need the trees to remain in place (as you want the compiler to perform less
> aggressive folding) - so I'm not sure the compiler will always be able to
> rely on constants to be rewritten in the constant folding phase.
>
> Maurizio
This makes me think we could disable dedup with '-g' to preserve full
debug-ability (as next), is this partially what you meant?
Bernard
$ diff -u ./src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java.r03
./src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java
--- ./src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java.r03
2018-03-21 12:51:14.338021489 +0100
+++ ./src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java
2018-03-21 12:51:56.209495093 +0100
@@ -113,6 +113,8 @@
/** force serializable representation, for stress testing **/
private final boolean forceSerializable;
+ private final boolean debug;
+
/** Flag for alternate metafactories indicating the lambda object
is intended to be serializable */
public static final int FLAG_SERIALIZABLE = 1 << 0;
@@ -149,6 +151,7 @@
dumpLambdaToMethodStats =
options.isSet("debug.dumpLambdaToMethodStats");
attr = Attr.instance(context);
forceSerializable = options.isSet("forceSerializable");
+ debug = options.isSet(Option.G) ||
options.isSet(Option.G_CUSTOM, "source");
}
// </editor-fold>
@@ -365,7 +368,7 @@
lambdaDecl.body = translate(makeLambdaBody(tree, lambdaDecl));
boolean dedupe = false;
- if (!localContext.isSerializable()) {
+ if (!localContext.isSerializable() && !debug) {
DedupedLambda dedupedLambda = new
DedupedLambda(lambdaDecl.sym, lambdaDecl.body);
DedupedLambda existing =
kInfo.dedupedLambdas.putIfAbsent(dedupedLambda, dedupedLambda);
if (existing != null) {
More information about the amber-dev
mailing list