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