Reviewers: rossberg,
Message:
I hope to get this resolved at TC39 next week.
Description:
ES6: Disallow binary and octal representation in Number
ToNumber should return NaN for '0b01' and '0o76'.
BUG=v8:3585
LOG=Y
Please review this at https://codereview.chromium.org/587873002/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files (+45, -40 lines):
M src/runtime.cc
M test/mjsunit/harmony/numeric-literals.js
Index: src/runtime.cc
diff --git a/src/runtime.cc b/src/runtime.cc
index
3acbb81d89dff0c0d2c21003762bb785c6a7df85..7f13fbca9e809cb39283a9530c6bbb15b46251cf
100644
--- a/src/runtime.cc
+++ b/src/runtime.cc
@@ -6284,15 +6284,9 @@ RUNTIME_FUNCTION(Runtime_StringToNumber) {
}
// Slower case.
- int flags = ALLOW_HEX;
- if (FLAG_harmony_numeric_literals) {
- // The current spec draft has not updated "ToNumber Applied to the
String
- // Type", https://bugs.ecmascript.org/show_bug.cgi?id=1584
- flags |= ALLOW_OCTAL | ALLOW_BINARY;
- }
-
- return *isolate->factory()->NewNumber(StringToDouble(
- isolate->unicode_cache(), *subject, flags));
+ // Octal and binary are not allowed in ToNumber.
+ return *isolate->factory()->NewNumber(
+ StringToDouble(isolate->unicode_cache(), *subject, ALLOW_HEX));
}
Index: test/mjsunit/harmony/numeric-literals.js
diff --git a/test/mjsunit/harmony/numeric-literals.js
b/test/mjsunit/harmony/numeric-literals.js
index
7300f3e47edd9918d175f93f9dc041ca35ec4de1..40c341b8b090deabe9316850b839f8d71f8282c4
100644
--- a/test/mjsunit/harmony/numeric-literals.js
+++ b/test/mjsunit/harmony/numeric-literals.js
@@ -27,61 +27,72 @@
// Flags: --harmony-numeric-literals
-function TestOctalLiteral() {
+(function TestOctalLiteral() {
assertEquals(0, 0o0);
assertEquals(0, 0O0);
assertEquals(1, 0o1);
assertEquals(7, 0o7);
assertEquals(8, 0o10);
assertEquals(63, 0o77);
-}
-TestOctalLiteral();
+})();
-function TestOctalLiteralUsingNumberFunction() {
- assertEquals(0, Number('0o0'));
- assertEquals(0, Number('0O0'));
- assertEquals(1, Number('0o1'));
- assertEquals(7, Number('0o7'));
- assertEquals(8, Number('0o10'));
- assertEquals(63, Number('0o77'));
-}
-TestOctalLiteralUsingNumberFunction();
+(function TestOctalLiteralUsingNumberFunction() {
+ assertSame(NaN, Number('0o0'));
+ assertSame(NaN, Number('0O0'));
+ assertSame(NaN, Number('0o1'));
+ assertSame(NaN, Number('0o7'));
+ assertSame(NaN, Number('0o10'));
+ assertSame(NaN, Number('0o77'));
+})();
-function TestBinaryLiteral() {
+(function TestOctalLiteralUsingImplicitToNumber() {
+ assertSame(NaN, +'0o0');
+ assertSame(NaN, +'0O0');
+ assertSame(NaN, +'0o1');
+ assertSame(NaN, +'0o7');
+ assertSame(NaN, +'0o10');
+ assertSame(NaN, +'0o77');
+})();
+
+
+(function TestBinaryLiteral() {
assertEquals(0, 0b0);
assertEquals(0, 0B0);
assertEquals(1, 0b1);
assertEquals(2, 0b10);
assertEquals(3, 0b11);
-}
-TestBinaryLiteral();
+})();
+
+
+(function TestBinaryLiteralUsingNumberFunction() {
+ assertSame(NaN, Number('0b0'));
+ assertSame(NaN, Number('0B0'));
+ assertSame(NaN, Number('0b1'));
+ assertSame(NaN, Number('0b10'));
+ assertSame(NaN, Number('0b11'));
+})();
-function TestBinaryLiteralUsingNumberFunction() {
- assertEquals(0, Number('0b0'));
- assertEquals(0, Number('0B0'));
- assertEquals(1, Number('0b1'));
- assertEquals(2, Number('0b10'));
- assertEquals(3, Number('0b11'));
-}
-TestBinaryLiteralUsingNumberFunction();
+(function TestBinaryLiteralUsingImplicitToNumber() {
+ assertSame(NaN, +'0b0');
+ assertSame(NaN, +'0B0');
+ assertSame(NaN, +'0b1');
+ assertSame(NaN, +'0b10');
+ assertSame(NaN, +'0b11');
+})();
-// parseInt should (probably) not support 0b and 0o.
-// https://bugs.ecmascript.org/show_bug.cgi?id=1585
-function TestParseIntDoesNotSupportOctalNorBinary() {
+(function TestParseIntDoesNotSupportOctalNorBinary() {
assertEquals(0, parseInt('0o77'));
assertEquals(0, parseInt('0o77', 8));
assertEquals(0, parseInt('0b11'));
assertEquals(0, parseInt('0b11', 2));
-}
-TestParseIntDoesNotSupportOctalNorBinary();
+})();
-function TestParseFloatDoesNotSupportOctalNorBinary() {
+(function TestParseFloatDoesNotSupportOctalNorBinary() {
assertEquals(0, parseFloat('0o77'));
assertEquals(0, parseFloat('0b11'));
-}
-TestParseFloatDoesNotSupportOctalNorBinary();
+})();
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.