Reviewers: Yang,

Message:
PTAL

on x64 this supports parsing of all int32 values (minus min_int) as smi.

Description:
[scanner] Extend fast-smi parsing to the entire range minus Smi::kMinValue

BUG=

Please review this at https://codereview.chromium.org/998893002/

Base URL: https://chromium.googlesource.com/v8/v8.git@master

Affected files (+3, -9 lines):
  M src/scanner.h
  M src/scanner.cc


Index: src/scanner.cc
diff --git a/src/scanner.cc b/src/scanner.cc
index 9e90868131cc7469b6d88d79e2d409e561915dce..45e5fffc53d924c025d2f24b447b6a41f83ccbca 100644
--- a/src/scanner.cc
+++ b/src/scanner.cc
@@ -1000,7 +1000,7 @@ Token::Value Scanner::ScanNumber(bool seen_period) {
     // Parse decimal digits and allow trailing fractional part.
     if (kind == DECIMAL) {
       if (at_start) {
-        int value = 0;
+        uint64_t value = 0;
         while (IsDecimalDigit(c0_)) {
           value = 10 * value + (c0_ - '0');

@@ -1009,8 +1009,8 @@ Token::Value Scanner::ScanNumber(bool seen_period) {
           AddLiteralChar(first_char);
         }

-        if (next_.literal_chars->one_byte_literal().length() < 10 &&
-            c0_ != '.' && c0_ != 'e' && c0_ != 'E') {
+        if (next_.literal_chars->one_byte_literal().length() <= 10 &&
+ value <= Smi::kMaxValue && c0_ != '.' && c0_ != 'e' && c0_ != 'E') {
           smi_value_ = value;
           literal.Complete();
           HandleLeadSurrogate();
@@ -1428,11 +1428,6 @@ double Scanner::DoubleValue() {
 }


-int Scanner::FindNumber(DuplicateFinder* finder, int value) {
-  return finder->AddNumber(literal_one_byte_string(), value);
-}
-
-
 int Scanner::FindSymbol(DuplicateFinder* finder, int value) {
   if (is_literal_one_byte()) {
     return finder->AddOneByteSymbol(literal_one_byte_string(), value);
Index: src/scanner.h
diff --git a/src/scanner.h b/src/scanner.h
index 2e96a99d874d8f22d4cf7524768f68c5fb3cd921..416b5a11ac3248488eff2f499891accb09bb3356 100644
--- a/src/scanner.h
+++ b/src/scanner.h
@@ -427,7 +427,6 @@ class Scanner {
     }
   }

-  int FindNumber(DuplicateFinder* finder, int value);
   int FindSymbol(DuplicateFinder* finder, int value);

   UnicodeCache* unicode_cache() { return unicode_cache_; }


--
--
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