From 19c1675b947fcf57963ed3e48191e4fa7c480c0b Mon Sep 17 00:00:00 2001 From: "mikhail.naganov@gmail.com" Date: Fri, 5 Feb 2010 13:07:00 +0000 Subject: [PATCH] Fix test failures in debug mode w/snapshots. It turns out that not all stubs have valid major_keys, and this is OK. So I've added a check to avoid termination in debug mode. Review URL: http://codereview.chromium.org/572034 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3807 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/code-stubs.cc | 7 +++++-- src/code-stubs.h | 4 ++-- src/disassembler.cc | 2 +- src/log.cc | 4 +++- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/code-stubs.cc b/src/code-stubs.cc index 09581aa82..95f0760ae 100644 --- a/src/code-stubs.cc +++ b/src/code-stubs.cc @@ -149,13 +149,16 @@ Object* CodeStub::TryGetCode() { } -const char* CodeStub::MajorName(CodeStub::Major major_key) { +const char* CodeStub::MajorName(CodeStub::Major major_key, + bool allow_unknown_keys) { switch (major_key) { #define DEF_CASE(name) case name: return #name; CODE_STUB_LIST(DEF_CASE) #undef DEF_CASE default: - UNREACHABLE(); + if (!allow_unknown_keys) { + UNREACHABLE(); + } return NULL; } } diff --git a/src/code-stubs.h b/src/code-stubs.h index 16267f64e..d502f14cd 100644 --- a/src/code-stubs.h +++ b/src/code-stubs.h @@ -100,7 +100,7 @@ class CodeStub BASE_EMBEDDED { static int MinorKeyFromKey(uint32_t key) { return MinorKeyBits::decode(key); }; - static const char* MajorName(Major major_key); + static const char* MajorName(Major major_key, bool allow_unknown_keys); virtual ~CodeStub() {} @@ -138,7 +138,7 @@ class CodeStub BASE_EMBEDDED { virtual InLoopFlag InLoop() { return NOT_IN_LOOP; } // Returns a name for logging/debugging purposes. - virtual const char* GetName() { return MajorName(MajorKey()); } + virtual const char* GetName() { return MajorName(MajorKey(), false); } #ifdef DEBUG virtual void Print() { PrintF("%s\n", GetName()); } diff --git a/src/disassembler.cc b/src/disassembler.cc index 50f3eb996..8473cd9f9 100644 --- a/src/disassembler.cc +++ b/src/disassembler.cc @@ -261,7 +261,7 @@ static int DecodeIt(FILE* f, ASSERT(code->major_key() == CodeStub::MajorKeyFromKey(key)); out.AddFormatted(" %s, %s, ", Code::Kind2String(kind), - CodeStub::MajorName(code->major_key())); + CodeStub::MajorName(code->major_key(), false)); switch (code->major_key()) { case CodeStub::CallFunction: out.AddFormatted("argc = %d", minor_key); diff --git a/src/log.cc b/src/log.cc index 1281a863b..0e3f998bd 100644 --- a/src/log.cc +++ b/src/log.cc @@ -1261,7 +1261,9 @@ void Logger::LogCodeObject(Object* object) { case Code::FUNCTION: return; // We log this later using LogCompiledFunctions. case Code::STUB: - description = CodeStub::MajorName(code_object->major_key()); + description = CodeStub::MajorName(code_object->major_key(), true); + if (description == NULL) + description = "A stub from the snapshot"; tag = Logger::STUB_TAG; break; case Code::BUILTIN: -- 2.34.1