+1
> On Jan 10, 2017, at 10:50 AM, Hannes Wallnöfer <hannes.wallnoe...@oracle.com>
> wrote:
>
> I just realized I used the wrong bug id for the second webrev linked below.
> Here’s the webrev again, with the correct id:
>
> http://cr.openjdk.java.net/~hannesw/8166187/webrev.01/
>
> Hannes
>
>> Am 23.12.2016 um 12:20 schrieb Hannes Wallnöfer
>> <hannes.wallnoe...@oracle.com>:
>>
>> Thanks Attila, I had forgotten cached AST is not just a performance feature.
>>
>> I uploaded a new webrev. It pretty much follows your suggestions, except I
>> used a slightly different approach to conditional serialization of cachedAst
>> - I left the field transient and serialize it explicitly if it is an
>> instance of SerializedAst, otherwise write out null. I also added a test
>> case for split stored functions.
>>
>> http://cr.openjdk.java.net/~hannesw/8170977/webrev.01/
>>
>> Hannes
>>
>>
>>> Am 22.12.2016 um 16:48 schrieb Attila Szegedi <szege...@gmail.com>:
>>>
>>> Hm… cachedAst is essential for split functions; specifically if it contains
>>> a SerializedAst, then its "byte[] serializedAst" field is essential. If
>>> cachedAst is lost, we can reparse an unsplit function from source, but we
>>> can’t reparse fragments of split functions.
>>>
>>> I’d suggest instead of making cachedAst transient, we should:
>>> 1. make SerializedAst Serializable, and have SerializedAst.cachedAst within
>>> it transient (reference objects aren’t serializable, and we can afford to
>>> lose it anyway).
>>> 2. introduce RecompilableScriptFunctionData.writeObject and make sure that
>>> if serializedAst contains a reference (instead of a SerializedAst object)
>>> then we don’t attempt to serialize it — write null instead (this can be
>>> accomplished by just setting serializedAst = null, and maybe re-setting it
>>> back to what it was after defaultWriteObject)
>>> 3. make sure there’s a null check on SerializedAst.cachedAst read in
>>> getCachedAst() (as now it can actually be null on deserialization, it was
>>> an invariant that it was never null before)
>>>
>>> Attila.
>>>
>>>> On 22 Dec 2016, at 16:18, Hannes Wallnöfer <hannes.wallnoe...@oracle.com>
>>>> wrote:
>>>>
>>>> Please review:
>>>>
>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8166187
>>>> Webrev: http://cr.openjdk.java.net/~hannesw/8166187/webrev/
>>>>
>>>> It was actually the combination of having a non-serialisable AST reference
>>>> and not initialising the transient fields of nested functions that caused
>>>> this error.
>>>>
>>>> Thanks,
>>>> Hannes
>>>
>>
>