I think the NodeVisitor in ApplySpecialization#hasApplies will enter
into nested functions. Shouldn't it just look at the current function?
I wonder how hot the TransformFailedException constructor may get.
Should we worry about string concatenation there?
Otherwise looks good.
Hannes
Am 2014-11-04 um 12:50 schrieb Marcus Lagergren:
Logic in RecompilableScriptFunctionData
1) Apply transform succeeds when a callsite is first encountered
2) It is the best callsite available when we do another call, but the fit isn’t
exact, which it has to be for apply2call to work - i.e. exactly the right
number of parameters with the exact types
3) In that case recompile a specialization
4) Do addCode on it iff it was a successful apply2call transform
Basically the problem was that 4 should be
4) Do addcode on it, always
As Attila’s excellent repro managed to capture. We reuse the apply2call
specialization for one object argument, undefined, for the array apply, which
fits and doesn’t cause a linkage error since Object holds anything, even
[“foo”, “bar”].
Also some housekeeping on the apply2call transform, not making it iterate over
the code for applies if there are none, better logging sanitized output and so
on.
Webrev at: http://cr.openjdk.java.net/~lagergren/8057825/
<http://cr.openjdk.java.net/~lagergren/8057825/>
Issue at: https://bugs.openjdk.java.net/browse/JDK-8057825
Regards
Marcus