+1; looks good overall. I’m fine with this being committed as it is. Few somewhat unrelated thoughts that came to me as I was reviewing this:
- do we need toUint32 to return long anymore? Could it just return double? There’s a place in the patch where we’re casting it. - NashornPrimitiveLinker.canLinkTypeStatic: what about ES6 symbols? They’re primitive values too, right? A primitive symbol value can have e.g. toString() invoked on it (or in a more absurd case, any additional method added to Symbol.prototype). Would that work similarly to how we can invoke methods on other primitive values? Attila. > On Jan 12, 2016, at 10:33 AM, Hannes Wallnoefer > <hannes.wallnoe...@oracle.com> wrote: > > I uploaded a new webrev without the changes to the parser API. > > http://cr.openjdk.java.net/~hannesw/8143896/webrev.03/ > > Note that parserapi.js.EXPECTED changes because of the changes in > parserapi.js, which is itself included in the files it parses. > > Please review. > > Hannes > > Am 2016-01-11 um 16:57 schrieb Sundararajan Athijegannathan: >> As discussed offline, please leave Nashorn Parser API changes for a separate >> issue. >> >> -Sundar >> >> On 1/11/2016 8:07 PM, Hannes Wallnoefer wrote: >>> I fixed a bug with converstion to number for the strict equality operator, >>> which also revealed some left over usage of long in Nashorn internals. New >>> webrev is here: >>> >>> http://cr.openjdk.java.net/~hannesw/8143896/webrev.02/ >>> >>> Hannes >>> >>> Am 2016-01-11 um 13:48 schrieb Hannes Wallnoefer: >>>> You are right of course, there needs to be consistency between typeof >>>> operator and treatment as JS numbers. >>>> >>>> This is in fact an unpleasant problem to solve. I've struggled trying to >>>> fix this without breaking any existing code, but I've come to the >>>> conclusion that it is not possible. Since we can't treat all Java >>>> longs/Longs as JS numbers, we'd have to differentiate depending on whether >>>> the value can be represented as double without losing precision. >>>> >>>> In a way we already do this with optimistic types, but I consider it more >>>> a bug than a feature. It's weird (and error prone) if the return value for >>>> a Java method returning long is reported as number or object depending on >>>> the actual value. >>>> >>>> So I think the right thing to do is draw a clear line between which Java >>>> primitive/wrapper types represent JS numbers and which don't. I've >>>> uploaded a new webrev that implements this: >>>> >>>> http://cr.openjdk.java.net/~hannesw/8143896/webrev.01/ >>>> >>>> Note that the only types to be treated as JS numbers are the direct >>>> wrapper classes for Java primitives that can be fully represented as >>>> doubles. This means also things like AtomicInteger and DoubleAdder will be >>>> reported and treated as objects. I think that's the correct thing to do as >>>> they are not primitive numbers in the first place. They are still >>>> converted to numbers when used in such a context in JS. So I think the >>>> only place where this change is a actually painful/surprising is longs. >>>> >>>> Unfortunately the check for number type in JSType.isNumber gets a bit long >>>> as we have to individually check for all primitive wrapper classes. I've >>>> done extensive benchmarking and I don't think it has an impact on >>>> performance. In any way, I wouldn't know how to handle this differently. >>>> >>>> Let me know what you think. >>>> >>>> Hannes >>>> >>>> Am 2016-01-04 um 05:00 schrieb Sundararajan Athijegannathan: >>>>> I think I already commented on this webrev -- that we need to cover tests >>>>> for BigInteger, BigDecimal. >>>>> >>>>> Also, I'm not sure linking Double and Int by nashorn primitive linkers is >>>>> the right solution. AtomicInteger, DoubleAdder etc. are all Number >>>>> subtypes. We return "number" when typeof is used on any Number subtype. >>>>> Now, that means JS code will see these as 'number' type objects -- yet >>>>> Number.prototype methods won't work on those!! I know this is hard >>>>> problem -- we also have another (somewhat related) BigDecimal, BigInteger >>>>> toString / String conversion issue. We need to discuss this. >>>>> >>>>> -Sundar >>>>> >>>>> On 1/2/2016 8:29 PM, Attila Szegedi wrote: >>>>>> +1 >>>>>> >>>>>>> On Dec 18, 2015, at 3:54 PM, Hannes Wallnoefer >>>>>>> <hannes.wallnoe...@oracle.com> wrote: >>>>>>> >>>>>>> Please review JDK-8143896: java.lang.Long is implicitly converted to >>>>>>> double >>>>>>> >>>>>>> http://cr.openjdk.java.net/~hannesw/8143896/webrev/ >>>>>>> >>>>>>> Thanks, >>>>>>> Hannes >>>>> >>>> >>> >> >