Folks, I’m preparing to backport this to 8u-dev. I had to prepare a separate 
webrev, as I had to change few things, namely:

- I resolved a conflict in CompilationPhase.java stemming from Sundar’s 8055917 
being committed to 8u-dev before this change (this was BTW also the reason poor 
Sundar himself had a conflict and had to manually prepare a 8u-dev webrev…)
- Some omitted type parameters in 9 can’t be omitted in 8 because of weaker 
type parameter inference, hence some more explicit type specializations were 
used in few places
- use of lambdas in RecompilableScriptFunctionData was not compatible with 
Nashorn using source -1.7 in 8u-dev.

Please review so I can request a backport to 8u-dev.

Thanks,
  Attila.

> On Sep 1, 2015, at 9:14 AM, Marcus Lagergren <lagerg...@gmail.com> wrote:
> 
> Reviewed new webrev. Happy +1
> 
> /M
> 
>> On 31 Aug 2015, at 12:09, Attila Szegedi <attila.szeg...@oracle.com> wrote:
>> 
>> I posted another webrev, can you please review: 
>> http://cr.openjdk.java.net/~attila/8133300/webrev.01.jdk9 
>> <http://cr.openjdk.java.net/~attila/8133300/webrev.01.jdk9>
>> The only changes are:
>> - added JavaDoc comments explaining SerializedAst class, as per Marcus’ 
>> suggestion
>> - external symbols’ re-marking as global now only happens for non-cached 
>> split functions (previously, it happened for all non-cached functions). 
>> Other functions will already have external symbols marked as globals, as 
>> they’re coming from a lazy compilation.
>> 
>> Thanks,
>> Attila.
>> 
>>> On Aug 31, 2015, at 10:58 AM, Attila Szegedi <attila.szeg...@oracle.com> 
>>> wrote:
>>> 
>>> if the FunctionNode object is set as the cached representation of a 
>>> RecompilableScriptFunctionData using its setCached method, its IS_CACHED 
>>> flag is set to true. The flag is used in recompilation to determine the 
>>> necessary compilation phases: if the function is cached, it means phases in 
>>> Compiler.COMPILE_UPTO_CACHED were already run on it, so they don't need to 
>>> be repeated. Otherwise the function is freshly reparsed, so the full 
>>> compiler pipeline needs to be re-run.
>>> 
>>> There’s also the issue of re-marking external symbols as globals in 
>>> RecompilableScriptFunctionData.cloneSymbols(). We normally don’t have to do 
>>> that – I implemented that back when I was caching pre-pass ASTs. Now that 
>>> we're only caching AST resulting from lazy compilation, we don't really 
>>> need it except for split functions, which are incidentally cached from the 
>>> eager pass :-)
>>> 
>>> When we lazily compile a function from scratch, all symbols outside of it 
>>> are considered global (since AssignSymbols won't find them in the enclosing 
>>> lexical scope, as the enclosing source text is not reparsed). OTOH, if we 
>>> cache a FunctionNode resulting from the eager first pass, it will have the 
>>> full lexical scope, so those symbols won't be marked as "global" (which is 
>>> rather a misnomer at the moment and should be instead considered “external” 
>>> instead). We need the cached AST and a lazily parsed AST to be identical 
>>> though, otherwise things break down further down the line.
>>> 
>>> Split functions are cached from eager pre-pass (and before they were 
>>> serialized from eager pre-pass). They didn't suffer from this problem 
>>> though as AssignSymbols was re-run every time after deserialization. Now 
>>> however, I moved AssignSymbols to be a pre-cache phase.
>>> 
>>> I'll modify the code though so that this marking of external symbols only 
>>> happens when we cache a split function.
>>> 
>>> Attila.
>>> 
>>>> On Aug 30, 2015, at 3:07 PM, Marcus Lagergren <mar...@lagergren.net> wrote:
>>>> 
>>>> Can you elaborate a bit on the isCached mechanism in FunctionNode?
>>>> 
>>>> /M
>>>> 
>>>>> On 26 Aug 2015, at 14:18, Attila Szegedi <attila.szeg...@oracle.com> 
>>>>> wrote:
>>>>> 
>>>>> Please review JDK-8133300 "Ensure symbol table immutability in Nashorn 
>>>>> AST" at <http://cr.openjdk.java.net/~attila/8133300/webrev.jdk9> for 
>>>>> <https://bugs.openjdk.java.net/browse/JDK-8133300>
>>>>> 
>>>>> Implementation notes for reviewers are here: 
>>>>> <https://bugs.openjdk.java.net/browse/JDK-8133300?focusedCommentId=13837384&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13837384
>>>>>  
>>>>> <https://bugs.openjdk.java.net/browse/JDK-8133300?focusedCommentId=13837384&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13837384>>
>>>>> 
>>>>> Thanks,
>>>>> Attila.
>>>> 
>>> 
>> 
> 

Reply via email to