deduplicating lambda methods
Vicente Romero
vicente.romero at oracle.com
Fri Mar 16 19:17:46 UTC 2018
Hi Liam, Thanks for the updates to the patch. I also agree with Maurizio
about using TreeScanner. Additional comment: TreeHasher should skip
parenthesis of expressions, to obtain the same hash for, for example:
return (i + j); and return i + j; Also, as a bonus, consider constant
expressions, we probably want: return 5; and return 2 + 3; to be equal.
I think that these two use cases will need a "normalization" step to be
applied to the tree and store in the map, set, only a normalized version
of the tree. I understand that at least considering constants could be
out of the scope of this patch, so I can see it as a follow up
development. Thanks, Vicente
On 03/16/2018 02:46 PM, Maurizio Cimadamore wrote:
>
>
> On 16/03/18 00:36, Liam Miller-Cushon wrote:
>> Thanks, I'll investigate that. My initial impression is that using
>> fields
>> to replace the return value and the second parameter of the visit
>> methods
>> in TreeVisitor will complicate control flow somewhat.
>>
>> Have you considered adding a TreeVisitor-like API that for JCTrees to
>> javac?
> Having a tree scanner accepting a visitor parameter would be good -
> although can be done outside the scope of this patch.
>
> Note that, in the meantime, it's rather easy to mimic the visitor
> parameter idiom - just define a 'scan' method like this:
>
> ```
> Object parameter; //visitor field
>
> scan(JCTree tree, Object parameter) {
> Object prev = this.parameter;
> try {
> this.parameter = parameter;
> super.scan(tree);
> } finally {
> this.parameter = prev;
> }
> }
> ```
>
> And then your code should not be altered much (I hope! :-)).
>
> Maurizio
>
More information about the amber-dev
mailing list