| Index: src/regexp-macro-assembler-tracer.cc
 | 
| ===================================================================
 | 
| --- src/regexp-macro-assembler-tracer.cc	(revision 11134)
 | 
| +++ src/regexp-macro-assembler-tracer.cc	(working copy)
 | 
| @@ -198,24 +198,55 @@
 | 
|  }
 | 
|  
 | 
|  
 | 
| +class PrintablePrinter {
 | 
| + public:
 | 
| +  explicit PrintablePrinter(uc16 character) : character_(character) { }
 | 
| +
 | 
| +  const char* operator*() {
 | 
| +    if (character_ >= ' ' && character_ <= '~') {
 | 
| +      buffer_[0] = '(';
 | 
| +      buffer_[1] = character_;
 | 
| +      buffer_[2] = ')';
 | 
| +      buffer_[3] = '\0';
 | 
| +    } else {
 | 
| +      buffer_[0] = '\0';
 | 
| +    }
 | 
| +    return &buffer_[0];
 | 
| +  };
 | 
| +
 | 
| + private:
 | 
| +  uc16 character_;
 | 
| +  char buffer_[4];
 | 
| +};
 | 
| +
 | 
| +
 | 
|  void RegExpMacroAssemblerTracer::CheckCharacterLT(uc16 limit, Label* on_less) {
 | 
| -  PrintF(" CheckCharacterLT(c='u%04x', label[%08x]);\n",
 | 
| -         limit, LabelToInt(on_less));
 | 
| +  PrintablePrinter printable(limit);
 | 
| +  PrintF(" CheckCharacterLT(c=0x%04x%s, label[%08x]);\n",
 | 
| +         limit,
 | 
| +         *printable,
 | 
| +         LabelToInt(on_less));
 | 
|    assembler_->CheckCharacterLT(limit, on_less);
 | 
|  }
 | 
|  
 | 
|  
 | 
|  void RegExpMacroAssemblerTracer::CheckCharacterGT(uc16 limit,
 | 
|                                                    Label* on_greater) {
 | 
| -  PrintF(" CheckCharacterGT(c='u%04x', label[%08x]);\n",
 | 
| -         limit, LabelToInt(on_greater));
 | 
| +  PrintablePrinter printable(limit);
 | 
| +  PrintF(" CheckCharacterGT(c=0x%04x%s, label[%08x]);\n",
 | 
| +         limit,
 | 
| +         *printable,
 | 
| +         LabelToInt(on_greater));
 | 
|    assembler_->CheckCharacterGT(limit, on_greater);
 | 
|  }
 | 
|  
 | 
|  
 | 
|  void RegExpMacroAssemblerTracer::CheckCharacter(unsigned c, Label* on_equal) {
 | 
| -  PrintF(" CheckCharacter(c='u%04x', label[%08x]);\n",
 | 
| -         c, LabelToInt(on_equal));
 | 
| +  PrintablePrinter printable(c);
 | 
| +  PrintF(" CheckCharacter(c=0x%04x%s, label[%08x]);\n",
 | 
| +         c,
 | 
| +         *printable,
 | 
| +         LabelToInt(on_equal));
 | 
|    assembler_->CheckCharacter(c, on_equal);
 | 
|  }
 | 
|  
 | 
| @@ -234,8 +265,11 @@
 | 
|  
 | 
|  void RegExpMacroAssemblerTracer::CheckNotCharacter(unsigned c,
 | 
|                                                     Label* on_not_equal) {
 | 
| -  PrintF(" CheckNotCharacter(c='u%04x', label[%08x]);\n",
 | 
| -         c, LabelToInt(on_not_equal));
 | 
| +  PrintablePrinter printable(c);
 | 
| +  PrintF(" CheckNotCharacter(c=0x%04x%s, label[%08x]);\n",
 | 
| +         c,
 | 
| +         *printable,
 | 
| +         LabelToInt(on_not_equal));
 | 
|    assembler_->CheckNotCharacter(c, on_not_equal);
 | 
|  }
 | 
|  
 | 
| @@ -244,8 +278,10 @@
 | 
|      unsigned c,
 | 
|      unsigned mask,
 | 
|      Label* on_equal) {
 | 
| -  PrintF(" CheckCharacterAfterAnd(c='u%04x', mask=0x%04x, label[%08x]);\n",
 | 
| +  PrintablePrinter printable(c);
 | 
| +  PrintF(" CheckCharacterAfterAnd(c=0x%04x%s, mask=0x%04x, label[%08x]);\n",
 | 
|           c,
 | 
| +         *printable,
 | 
|           mask,
 | 
|           LabelToInt(on_equal));
 | 
|    assembler_->CheckCharacterAfterAnd(c, mask, on_equal);
 | 
| @@ -256,8 +292,10 @@
 | 
|      unsigned c,
 | 
|      unsigned mask,
 | 
|      Label* on_not_equal) {
 | 
| -  PrintF(" CheckNotCharacterAfterAnd(c='u%04x', mask=0x%04x, label[%08x]);\n",
 | 
| +  PrintablePrinter printable(c);
 | 
| +  PrintF(" CheckNotCharacterAfterAnd(c=0x%04x%s, mask=0x%04x, label[%08x]);\n",
 | 
|           c,
 | 
| +         *printable,
 | 
|           mask,
 | 
|           LabelToInt(on_not_equal));
 | 
|    assembler_->CheckNotCharacterAfterAnd(c, mask, on_not_equal);
 | 
| @@ -269,7 +307,7 @@
 | 
|      uc16 minus,
 | 
|      uc16 mask,
 | 
|      Label* on_not_equal) {
 | 
| -  PrintF(" CheckNotCharacterAfterMinusAnd(c='u%04x', minus=%04x, mask=0x%04x, "
 | 
| +  PrintF(" CheckNotCharacterAfterMinusAnd(c=0x%04x, minus=%04x, mask=0x%04x, "
 | 
|               "label[%08x]);\n",
 | 
|           c,
 | 
|           minus,
 | 
| @@ -279,6 +317,53 @@
 | 
|  }
 | 
|  
 | 
|  
 | 
| +void RegExpMacroAssemblerTracer::CheckCharacterInRange(
 | 
| +    uc16 from,
 | 
| +    uc16 to,
 | 
| +    Label* on_not_in_range) {
 | 
| +  PrintablePrinter printable_from(from);
 | 
| +  PrintablePrinter printable_to(to);
 | 
| +  PrintF(" CheckCharacterInRange(from=0x%04x%s, to=0x%04x%s, label[%08x]);\n",
 | 
| +         from,
 | 
| +         *printable_from,
 | 
| +         to,
 | 
| +         *printable_to,
 | 
| +         LabelToInt(on_not_in_range));
 | 
| +  assembler_->CheckCharacterInRange(from, to, on_not_in_range);
 | 
| +}
 | 
| +
 | 
| +
 | 
| +void RegExpMacroAssemblerTracer::CheckCharacterNotInRange(
 | 
| +    uc16 from,
 | 
| +    uc16 to,
 | 
| +    Label* on_in_range) {
 | 
| +  PrintablePrinter printable_from(from);
 | 
| +  PrintablePrinter printable_to(to);
 | 
| +  PrintF(
 | 
| +      " CheckCharacterNotInRange(from=0x%04x%s," " to=%04x%s, label[%08x]);\n",
 | 
| +      from,
 | 
| +      *printable_from,
 | 
| +      to,
 | 
| +      *printable_to,
 | 
| +      LabelToInt(on_in_range));
 | 
| +  assembler_->CheckCharacterNotInRange(from, to, on_in_range);
 | 
| +}
 | 
| +
 | 
| +
 | 
| +void RegExpMacroAssemblerTracer::CheckBitInTable(
 | 
| +    Handle<ByteArray> table, Label* on_bit_set) {
 | 
| +  PrintF(" CheckBitInTable(label[%08x] ", LabelToInt(on_bit_set));
 | 
| +  for (int i = 0; i < kTableSize; i++) {
 | 
| +    PrintF("%c", table->get(i) != 0 ? 'X' : '.');
 | 
| +    if (i % 32 == 31 && i != kTableMask) {
 | 
| +      PrintF("\n                                 ");
 | 
| +    }
 | 
| +  }
 | 
| +  PrintF(");\n");
 | 
| +  assembler_->CheckBitInTable(table, on_bit_set);
 | 
| +}
 | 
| +
 | 
| +
 | 
|  void RegExpMacroAssemblerTracer::CheckNotBackReference(int start_reg,
 | 
|                                                         Label* on_no_match) {
 | 
|    PrintF(" CheckNotBackReference(register=%d, label[%08x]);\n", start_reg,
 | 
| @@ -314,7 +399,7 @@
 | 
|    PrintF(" %s(str=\"",
 | 
|           check_end_of_string ? "CheckCharacters" : "CheckCharactersUnchecked");
 | 
|    for (int i = 0; i < str.length(); i++) {
 | 
| -    PrintF("u%04x", str[i]);
 | 
| +    PrintF("0x%04x", str[i]);
 | 
|    }
 | 
|    PrintF("\", cp_offset=%d, label[%08x])\n",
 | 
|           cp_offset, LabelToInt(on_failure));
 | 
| 
 |