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
This commit is contained in:
mikhail.naganov@gmail.com 2010-02-05 13:07:00 +00:00
parent dd85270967
commit 19c1675b94
4 changed files with 11 additions and 6 deletions

View File

@ -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) { switch (major_key) {
#define DEF_CASE(name) case name: return #name; #define DEF_CASE(name) case name: return #name;
CODE_STUB_LIST(DEF_CASE) CODE_STUB_LIST(DEF_CASE)
#undef DEF_CASE #undef DEF_CASE
default: default:
if (!allow_unknown_keys) {
UNREACHABLE(); UNREACHABLE();
}
return NULL; return NULL;
} }
} }

View File

@ -100,7 +100,7 @@ class CodeStub BASE_EMBEDDED {
static int MinorKeyFromKey(uint32_t key) { static int MinorKeyFromKey(uint32_t key) {
return MinorKeyBits::decode(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() {} virtual ~CodeStub() {}
@ -138,7 +138,7 @@ class CodeStub BASE_EMBEDDED {
virtual InLoopFlag InLoop() { return NOT_IN_LOOP; } virtual InLoopFlag InLoop() { return NOT_IN_LOOP; }
// Returns a name for logging/debugging purposes. // Returns a name for logging/debugging purposes.
virtual const char* GetName() { return MajorName(MajorKey()); } virtual const char* GetName() { return MajorName(MajorKey(), false); }
#ifdef DEBUG #ifdef DEBUG
virtual void Print() { PrintF("%s\n", GetName()); } virtual void Print() { PrintF("%s\n", GetName()); }

View File

@ -261,7 +261,7 @@ static int DecodeIt(FILE* f,
ASSERT(code->major_key() == CodeStub::MajorKeyFromKey(key)); ASSERT(code->major_key() == CodeStub::MajorKeyFromKey(key));
out.AddFormatted(" %s, %s, ", out.AddFormatted(" %s, %s, ",
Code::Kind2String(kind), Code::Kind2String(kind),
CodeStub::MajorName(code->major_key())); CodeStub::MajorName(code->major_key(), false));
switch (code->major_key()) { switch (code->major_key()) {
case CodeStub::CallFunction: case CodeStub::CallFunction:
out.AddFormatted("argc = %d", minor_key); out.AddFormatted("argc = %d", minor_key);

View File

@ -1261,7 +1261,9 @@ void Logger::LogCodeObject(Object* object) {
case Code::FUNCTION: case Code::FUNCTION:
return; // We log this later using LogCompiledFunctions. return; // We log this later using LogCompiledFunctions.
case Code::STUB: 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; tag = Logger::STUB_TAG;
break; break;
case Code::BUILTIN: case Code::BUILTIN: