aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/test/cctest
diff options
context:
space:
mode:
authorMatheus Marchini <matheus@sthima.com>2018-06-18 08:59:12 -0700
committerMatheus Marchini <matheus@sthima.com>2018-06-22 09:43:16 -0700
commitc6e5043a250f8a6509f060ca9b743f4fe19fa4c6 (patch)
treee642b7033df33c20bef41c5cc7938b6669ae08eb /deps/v8/test/cctest
parent9bdc882d58b172d9b5d960d55c474bf9f0770f78 (diff)
downloadandroid-node-v8-c6e5043a250f8a6509f060ca9b743f4fe19fa4c6.tar.gz
android-node-v8-c6e5043a250f8a6509f060ca9b743f4fe19fa4c6.tar.bz2
android-node-v8-c6e5043a250f8a6509f060ca9b743f4fe19fa4c6.zip
deps: cherry-pick acc336c from upstream V8
Original commit message: [log] fix boolean logic on LogCodeObject R=yangguo@google.com Change-Id: Icb4825344991e5b2d15050e037064c60eeb9617e Reviewed-on: https://chromium-review.googlesource.com/1097578 Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> Reviewed-by: Yang Guo <yangguo@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#53777} Refs: https://github.com/v8/v8/commit/acc336c1257cc7ceee4b31094ee1e9e41 PR-URL: https://github.com/nodejs/node/pull/21126 Refs: https://github.com/v8/v8/commit/aa6ce3e Reviewed-By: Michaƫl Zasso <targos@protonmail.com> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com> Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'deps/v8/test/cctest')
-rw-r--r--deps/v8/test/cctest/test-log.cc84
1 files changed, 54 insertions, 30 deletions
diff --git a/deps/v8/test/cctest/test-log.cc b/deps/v8/test/cctest/test-log.cc
index 38e0521559..072b4b3703 100644
--- a/deps/v8/test/cctest/test-log.cc
+++ b/deps/v8/test/cctest/test-log.cc
@@ -36,6 +36,9 @@
#include <unordered_set>
#include <vector>
+// The C++ style guide recommends using <re2> instead of <regex>. However, the
+// former isn't available in V8.
+#include <regex> // NOLINT(build/c++11)
#include "src/api.h"
#include "src/log-utils.h"
#include "src/log.h"
@@ -257,30 +260,41 @@ class TestCodeEventHandler : public v8::CodeEventHandler {
explicit TestCodeEventHandler(v8::Isolate* isolate)
: v8::CodeEventHandler(isolate) {}
- const char* FindLine(const char* prefix, const char* suffix = nullptr,
- const char* start = nullptr) {
- if (!log_.length()) return NULL;
- const char* c_log = log_.c_str();
- if (start == nullptr) start = c_log;
- const char* end = c_log + log_.length();
- return FindLogLine(start, end, prefix, suffix);
+ size_t CountLines(std::string prefix, std::string suffix = std::string()) {
+ if (!log_.length()) return 0;
+
+ std::regex expression("(^|\\n)" + prefix + ".*" + suffix + "(?=\\n|$)");
+
+ size_t match_count(std::distance(
+ std::sregex_iterator(log_.begin(), log_.end(), expression),
+ std::sregex_iterator()));
+
+ return match_count;
}
void Handle(v8::CodeEvent* code_event) override {
- const char* code_type =
- v8::CodeEvent::GetCodeEventTypeName(code_event->GetCodeType());
- char function_name[1000];
- strncpy(function_name, code_type, 1000);
- function_name[strlen(code_type)] = ' ';
- code_event->GetFunctionName()->WriteUtf8(
- function_name + strlen(code_type) + 1, 1000);
- function_name[strlen(function_name) + 1] = '\0';
- function_name[strlen(function_name)] = '\n';
-
- log_ += std::string(function_name);
+ std::string log_line = "";
+ log_line += v8::CodeEvent::GetCodeEventTypeName(code_event->GetCodeType());
+ log_line += " ";
+ log_line += FormatName(code_event);
+ log_line += "\n";
+ log_ += log_line;
}
private:
+ std::string FormatName(v8::CodeEvent* code_event) {
+ std::string name = std::string(code_event->GetComment());
+ if (name.empty()) {
+ v8::Local<v8::String> functionName = code_event->GetFunctionName();
+ std::string buffer(functionName->Utf8Length() + 1, 0);
+ functionName->WriteUtf8(&buffer[0], functionName->Utf8Length() + 1);
+ // Sanitize name, removing unwanted \0 resulted from WriteUtf8
+ name = std::string(buffer.c_str());
+ }
+
+ return name;
+ }
+
std::string log_;
};
@@ -855,21 +869,24 @@ TEST(ExternalCodeEventListener) {
"testCodeEventListenerBeforeStart('1', 1);";
CompileRun(source_text_before_start);
- CHECK_NULL(code_event_handler.FindLine("LazyCompile",
- "testCodeEventListenerBeforeStart"));
+ CHECK_EQ(code_event_handler.CountLines("LazyCompile",
+ "testCodeEventListenerBeforeStart"),
+ 0);
code_event_handler.Enable();
- CHECK_NOT_NULL(code_event_handler.FindLine(
- "LazyCompile", "testCodeEventListenerBeforeStart"));
+ CHECK_GE(code_event_handler.CountLines("LazyCompile",
+ "testCodeEventListenerBeforeStart"),
+ 1);
const char* source_text_after_start =
"function testCodeEventListenerAfterStart(a,b) { return a + b };"
"testCodeEventListenerAfterStart('1', 1);";
CompileRun(source_text_after_start);
- CHECK_NOT_NULL(code_event_handler.FindLine(
- "LazyCompile", "testCodeEventListenerAfterStart"));
+ CHECK_GE(code_event_handler.CountLines("LazyCompile",
+ "testCodeEventListenerAfterStart"),
+ 1);
context->Exit();
}
@@ -898,21 +915,28 @@ TEST(ExternalCodeEventListenerWithInterpretedFramesNativeStack) {
"testCodeEventListenerBeforeStart('1', 1);";
CompileRun(source_text_before_start);
- CHECK_NULL(code_event_handler.FindLine("InterpretedFunction",
- "testCodeEventListenerBeforeStart"));
+ CHECK_EQ(code_event_handler.CountLines("InterpretedFunction",
+ "testCodeEventListenerBeforeStart"),
+ 0);
code_event_handler.Enable();
- CHECK_NOT_NULL(code_event_handler.FindLine(
- "InterpretedFunction", "testCodeEventListenerBeforeStart"));
+ CHECK_GE(code_event_handler.CountLines("InterpretedFunction",
+ "testCodeEventListenerBeforeStart"),
+ 1);
const char* source_text_after_start =
"function testCodeEventListenerAfterStart(a,b) { return a + b };"
"testCodeEventListenerAfterStart('1', 1);";
CompileRun(source_text_after_start);
- CHECK_NOT_NULL(code_event_handler.FindLine(
- "InterpretedFunction", "testCodeEventListenerAfterStart"));
+ CHECK_GE(code_event_handler.CountLines("InterpretedFunction",
+ "testCodeEventListenerAfterStart"),
+ 1);
+
+ CHECK_EQ(
+ code_event_handler.CountLines("Builtin", "InterpreterEntryTrampoline"),
+ 1);
context->Exit();
}