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.

Reply via email to