Reviewers: Christian Plesner Hansen,

Message:
Minor change, review please.

Description:
Format "%k" now prints either a printable ASCII character or a \x.. or
\u.... format value.

Please review this at http://codereview.chromium.org/11407

Affected files:
   M regexp2000/src/ast.cc
   M regexp2000/src/string-stream.cc
   M regexp2000/test/cctest/test-regexp.cc


Index: regexp2000/src/ast.cc
diff --git a/regexp2000/src/ast.cc b/regexp2000/src/ast.cc
index  
aa4509b016deecdbe2d991dc2f633fc938709d8c..18698984dfe9db89da77428ed8b5fef61931fd6d
  
100644
--- a/regexp2000/src/ast.cc
+++ b/regexp2000/src/ast.cc
@@ -254,21 +254,11 @@ void*  
RegExpUnparser::VisitAlternative(RegExpAlternative* that, void* data) {
    return NULL;
  }

-static void AddChar(StringStream* stream, uc16 character) {
-  if (character < 32 || (character >= 128 && character < 256)) {
-    stream->Add("\\x%02x", character);
-  } else if (character >= 256) {
-    stream->Add("\\u%04x", character);
-  } else {
-    stream->Add("%c", character);
-  }
-}

  void RegExpUnparser::VisitCharacterRange(CharacterRange that) {
-  AddChar(stream(), that.from());
+  stream()->Add("%k", that.from());
    if (!that.IsSingleton()) {
-    stream()->Add("-");
-    AddChar(stream(), that.to());
+    stream()->Add("-%k", that.to());
    }
  }

@@ -317,7 +307,7 @@ void* RegExpUnparser::VisitAtom(RegExpAtom* that, void*  
data) {
    stream()->Add("'");
    Vector<const uc16> chardata = that->data();
    for (int i = 0; i < chardata.length(); i++) {
-    AddChar(stream(), chardata[i]);
+    stream()->Add("%k", chardata[i]);
    }
    stream()->Add("'");
    return NULL;
Index: regexp2000/src/string-stream.cc
diff --git a/regexp2000/src/string-stream.cc  
b/regexp2000/src/string-stream.cc
index  
55cb223b1422067a50e97db010ee609142161350..f311e20bdeb69d1da6815a99745da7face22d89a
  
100644
--- a/regexp2000/src/string-stream.cc
+++ b/regexp2000/src/string-stream.cc
@@ -143,10 +143,12 @@ void StringStream::Add(Vector<const char> format,  
Vector<FmtElm> elms) {
      case 'k': {
        ASSERT_EQ(FmtElm::INT, current.type_);
        int value = current.data_.u_int_;
-      if (0x20 <= value && value <= 0xFF) {
+      if (0x20 <= value && value <= 0x7F) {
          Put(value);
+      } else if (value <= 0xff) {
+        Add("\\x%02x", value);
        } else {
-        Add("\\x%X", value);
+        Add("\\u%04x", value);
        }
        break;
      }
Index: regexp2000/test/cctest/test-regexp.cc
diff --git a/regexp2000/test/cctest/test-regexp.cc  
b/regexp2000/test/cctest/test-regexp.cc
index  
853d4f47108d5be1a49161cefb04d409812c3293..e3f40bd10a1b794959faa46d790e1252ee3707e9
  
100644
--- a/regexp2000/test/cctest/test-regexp.cc
+++ b/regexp2000/test/cctest/test-regexp.cc
@@ -734,7 +734,7 @@ TEST(LatinCanonicalize) {
    for (uc32 c = 128; c < (1 << 21); c++) {
      // These exceptions are caused by a known bug in the implementation.
      if (c != 0x026B && c != 0x027D)
-      CHECK(canonicalize(c) >= 128);
+      CHECK_GE(canonicalize(c), 128);
    }
    unibrow::Mapping<unibrow::ToUppercase> to_upper;
    for (uc32 c = 0; c < (1 << 21); c++) {



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

Reply via email to