Skip to content

Instantly share code, notes, and snippets.

@trevnorris
Created October 1, 2014 20:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save trevnorris/236f9f2cd88f2bac8a76 to your computer and use it in GitHub Desktop.
Save trevnorris/236f9f2cd88f2bac8a76 to your computer and use it in GitHub Desktop.
Patch to fix IRHydra support by back porting the patch to 3.28
diff --git a/deps/v8/src/codegen.cc b/deps/v8/src/codegen.cc
index 6b12d64..a24220d 100644
--- a/deps/v8/src/codegen.cc
+++ b/deps/v8/src/codegen.cc
@@ -190,7 +190,7 @@ void CodeGenerator::PrintCode(Handle<Code> code, CompilationInfo* info) {
function->end_position() - function->start_position() + 1;
for (int i = 0; i < source_len; i++) {
if (stream.HasMore()) {
- os << AsUC16(stream.GetNext());
+ os << AsReversiblyEscapedUC16(stream.GetNext());
}
}
os << "\n\n";
diff --git a/deps/v8/src/hydrogen.cc b/deps/v8/src/hydrogen.cc
index 3ddd7cc..63174aa 100644
--- a/deps/v8/src/hydrogen.cc
+++ b/deps/v8/src/hydrogen.cc
@@ -3498,7 +3498,7 @@ int HGraph::TraceInlinedFunction(
shared->end_position() - shared->start_position() + 1;
for (int i = 0; i < source_len; i++) {
if (stream.HasMore()) {
- os << AsUC16(stream.GetNext());
+ os << AsReversiblyEscapedUC16(stream.GetNext());
}
}
}
diff --git a/deps/v8/src/objects.cc b/deps/v8/src/objects.cc
index 29af1d8..cfdb9cc 100644
--- a/deps/v8/src/objects.cc
+++ b/deps/v8/src/objects.cc
@@ -11417,7 +11417,10 @@ void Code::Disassemble(const char* name, OStream& os) { // NOLINT
os << "Instructions (size = " << instruction_size() << ")\n";
// TODO(svenpanne) The Disassembler should use streams, too!
- Disassembler::Decode(stdout, this);
+ {
+ CodeTracer::Scope trace_scope(GetIsolate()->GetCodeTracer());
+ Disassembler::Decode(trace_scope.file(), this);
+ }
os << "\n";
if (kind() == FUNCTION) {
diff --git a/deps/v8/src/ostreams.cc b/deps/v8/src/ostreams.cc
index 0f5bec4..62304eb 100644
--- a/deps/v8/src/ostreams.cc
+++ b/deps/v8/src/ostreams.cc
@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include <algorithm>
+#include <cctype>
#include <cmath>
#include "src/base/platform/platform.h" // For isinf/isnan with MSVC
@@ -163,11 +164,21 @@ OFStream& OFStream::flush() {
}
+OStream& operator<<(OStream& os, const AsReversiblyEscapedUC16& c) {
+ char buf[10];
+ const char* format =
+ (std::isprint(c.value) || std::isspace(c.value)) && c.value != '\\'
+ ? "%c"
+ : (c.value <= 0xff) ? "\\x%02x" : "\\u%04x";
+ snprintf(buf, sizeof(buf), format, c.value);
+ return os << buf;
+}
+
+
OStream& operator<<(OStream& os, const AsUC16& c) {
char buf[10];
- const char* format = (0x20 <= c.value && c.value <= 0x7F)
- ? "%c"
- : (c.value <= 0xff) ? "\\x%02x" : "\\u%04x";
+ const char* format =
+ std::isprint(c.value) ? "%c" : (c.value <= 0xff) ? "\\x%02x" : "\\u%04x";
snprintf(buf, sizeof(buf), format, c.value);
return os << buf;
}
diff --git a/deps/v8/src/ostreams.h b/deps/v8/src/ostreams.h
index f70b6de..08f53c5 100644
--- a/deps/v8/src/ostreams.h
+++ b/deps/v8/src/ostreams.h
@@ -117,13 +117,26 @@ class OFStream: public OStream {
};
-// A wrapper to disambiguate uint16_t and uc16.
+// Wrappers to disambiguate uint16_t and uc16.
struct AsUC16 {
explicit AsUC16(uint16_t v) : value(v) {}
uint16_t value;
};
+struct AsReversiblyEscapedUC16 {
+ explicit AsReversiblyEscapedUC16(uint16_t v) : value(v) {}
+ uint16_t value;
+};
+
+
+// Writes the given character to the output escaping everything outside of
+// printable/space ASCII range. Additionally escapes '\' making escaping
+// reversible.
+OStream& operator<<(OStream& os, const AsReversiblyEscapedUC16& c);
+
+// Writes the given character to the output escaping everything outside
+// of printable ASCII range.
OStream& operator<<(OStream& os, const AsUC16& c);
} } // namespace v8::internal
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment