Revision: 5855
Author: [email protected]
Date: Thu Nov 18 05:50:21 2010
Log: Fix off-by-one in hex-parsing.

Review URL: http://codereview.chromium.org/5129002
http://code.google.com/p/v8/source/detail?r=5855

Modified:
 /branches/bleeding_edge/src/scanner-base.h
 /branches/bleeding_edge/test/mjsunit/compiler/literals.js

=======================================
--- /branches/bleeding_edge/src/scanner-base.h  Thu Nov 18 05:07:02 2010
+++ /branches/bleeding_edge/src/scanner-base.h  Thu Nov 18 05:50:21 2010
@@ -48,7 +48,7 @@
   c -= '0';
   if (static_cast<unsigned>(c) <= 9) return c;
   c = (c | 0x20) - ('a' - '0');  // detect 0x11..0x16 and 0x31..0x36.
-  if (static_cast<unsigned>(c) <= 6) return c + 10;
+  if (static_cast<unsigned>(c) <= 5) return c + 10;
   return -1;
 }

=======================================
--- /branches/bleeding_edge/test/mjsunit/compiler/literals.js Thu Oct 22 03:07:45 2009 +++ /branches/bleeding_edge/test/mjsunit/compiler/literals.js Thu Nov 18 05:50:21 2010
@@ -34,6 +34,43 @@

 assertEquals(8, eval("6;'abc';8"));

+// Characters just outside the ranges of hex-escapes.
+// "/" comes just before "0".
+assertEquals("x1/", "\x1/");
+assertEquals("u111/", "\u111/");
+assertEquals("\\x1/", RegExp("\\x1/").source);
+assertEquals("\\u111/", RegExp("\\u111/").source);
+
+// ":" comes just after "9".
+assertEquals("x1:", "\x1:");
+assertEquals("u111:", "\u111:");
+assertEquals("\\x1:", /\x1:/.source);
+assertEquals("\\u111:", /\u111:/.source);
+
+// "`" comes just before "a".
+assertEquals("x1`", "\x1`");
+assertEquals("u111`", "\u111`");
+assertEquals("\\x1`", /\x1`/.source);
+assertEquals("\\u111`", /\u111`/.source);
+
+// "g" comes just before "f".
+assertEquals("x1g", "\x1g");
+assertEquals("u111g", "\u111g");
+assertEquals("\\x1g", /\x1g/.source);
+assertEquals("\\u111g", /\u111g/.source);
+
+// "@" comes just before "A".
+assertEquals("x1@", "\x1@");
+assertEquals("u111@", "\u111@");
+assertEquals("\\x1@", /\x1@/.source);
+assertEquals("\\u111@", /\u111@/.source);
+
+// "G" comes just after "F".
+assertEquals("x1G", "\x1G");
+assertEquals("u111G", "\u111G");
+assertEquals("\\x1G", /\x1G/.source);
+assertEquals("\\u111G", /\u111G/.source);
+
 // Test some materialized array literals.
 assertEquals([1,2,3,4], eval('[1,2,3,4]'));
 assertEquals([[1,2],3,4], eval('[[1,2],3,4]'));
@@ -50,3 +87,4 @@
 assertEquals(17, eval('[1,2,3,4]; 17'));
 assertEquals(19, eval('var a=1, b=2; [a,b,3,4]; 19'));
 assertEquals(23, eval('var a=1, b=2; c=23; [a,b,3,4]; c'));
+

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to