Hi all,

excellent - I'll sponsor the change.

Best,

Michael

> Am 23.10.2015 um 11:28 schrieb Attila Szegedi <attila.szeg...@oracle.com>:
> 
> +1 from me as well. Another apology from me for having to wait even more for 
> the second review.
> 
> Very nice work. I’m sometimes in two minds about RuntimeNode (especially the 
> fact that it currently can’t receive primitive parameters), but I have to 
> admit that in this particular case it made the integration of the feature 
> into the runtime fairly easy; it was really the parser parts that were tricky.
> 
> Attila.
> 
>> On Sep 24, 2015, at 4:44 PM, Hannes Wallnoefer 
>> <hannes.wallnoe...@oracle.com> wrote:
>> 
>> Hi Andreas,
>> 
>> Thanks for the contribution, and sorry for the long time it took to get back 
>> to you.
>> 
>> I like the way you implemented this feature, the code looks very good.  
>> Comments inlined below.
>> 
>> Am 2015-09-03 um 18:49 schrieb Andreas Woess:
>>> Template literals are always scanned as a whole, quote-to-quote (as with 
>>> EditStringLexer). This turned out to be a problem with embedded functions 
>>> in expressions and lazy/optimistic compilation on: Parser#skipFunctionBody 
>>> would skip over the body and restart lexing at the RBRACE, forgetting about 
>>> the embedding string context. I've worked around this in skipFunctionBody 
>>> by skipping over to the RBRACE directly if it is already in the token 
>>> stream (which it is because we've already scanned to the end quote).
>> 
>> It took me some time to figure this out. Maybe some more explanatory 
>> comments would be good. Does this also apply in other cases?
>> 
>>> 
>>> Outstanding correctness issues not dealt with:
>>> * 12.2.9.3 GetTemplateObject stipulates that the returned template object 
>>> be cached and unique. I don't know why you'd want the spec to demand 
>>> caching rather than allow it (functionally it does not make a difference, 
>>> but you could observe it not being cached in a test).
>> 
>> Actually object identity can be observed by the tag function, and that was 
>> the reason for the committee to specify this. They chose caching of objects 
>> for performance reasons. The discussion can be found here:
>> 
>> https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-11/nov-18.md#48-template-literal-call-site-object-caching
>> 
>> Even though it's a minor issue we should follow the spec here.
>> 
>>> * 12.2.9.5 Evaluation: string concatenation using + is slightly off-spec. 
>>> There are two way to solve this: (a) wrap the expressions in a ToString 
>>> UnaryExpression (or RuntimeCall) or (b) generate a call to concat with 
>>> interleaved string and expression arguments.
>>> 
>> 
>> The difference is between ToPrimitive being called with Number hint vs. 
>> String hint. This should not make a difference for the vast share of objects 
>> (all except those having a custom valueOf function I think), but it's 
>> something we should also get right. I've started experimenting with the 
>> solutions you suggested, I think adding a ToString conversion wrapper of 
>> some kind would be best.
>> 
>> All in all I think your patch looks good. We can probably file the issues as 
>> separate bugs and fix them later. One thing I want to do is add some more 
>> tests. Although your test script covers a lot of stuff (for its size) I 
>> would like to add a bit to it.
>> 
>> Thanks,
>> Hannes


-- 

 <http://www.oracle.com/>
Dr. Michael Haupt | Principal Member of Technical Staff
Phone: +49 331 200 7277 | Fax: +49 331 200 7561
Oracle Java Platform Group | LangTools Team | Nashorn
Oracle Deutschland B.V. & Co. KG, Schiffbauergasse 14 | 14467 Potsdam, Germany
 <http://www.oracle.com/commitment>     Oracle is committed to developing 
practices and products that help protect the environment

Reply via email to