Index: src/serialize.cc |
diff --git a/src/serialize.cc b/src/serialize.cc |
index 894a1be261c1affd9a6e6f02451ac3cdb3c6b3d9..a2dde9b93405acb91530ebca81c473ddcea77544 100644 |
--- a/src/serialize.cc |
+++ b/src/serialize.cc |
@@ -1894,15 +1894,26 @@ void CodeSerializer::SerializeObject(Object* o, HowToCode how_to_code, |
if (heap_object->IsCode()) { |
Code* code_object = Code::cast(heap_object); |
- DCHECK(!code_object->is_optimized_code()); |
- if (code_object->kind() == Code::BUILTIN) { |
- SerializeBuiltin(code_object, how_to_code, where_to_point, skip); |
- return; |
- } else if (code_object->IsCodeStubOrIC()) { |
- SerializeCodeStub(code_object, how_to_code, where_to_point, skip); |
- return; |
+ switch (code_object->kind()) { |
+ case Code::OPTIMIZED_FUNCTION: // No optimized code compiled yet. |
+ case Code::HANDLER: // No handlers patched in yet. |
+ case Code::REGEXP: // No regexp literals initialized yet. |
+ case Code::NUMBER_OF_KINDS: // Pseudo enum value. |
+ CHECK(false); |
+ case Code::BUILTIN: |
+ SerializeBuiltin(code_object, how_to_code, where_to_point, skip); |
+ return; |
+ case Code::STUB: |
+ SerializeCodeStub(code_object, how_to_code, where_to_point, skip); |
+ return; |
+#define IC_KIND_CASE(KIND) case Code::KIND: |
+ IC_KIND_LIST(IC_KIND_CASE) |
+#undef IC_KIND_CASE |
+ // TODO(yangguo): add special handling to canonicalize ICs. |
+ case Code::FUNCTION: |
+ SerializeHeapObject(code_object, how_to_code, where_to_point, skip); |
+ return; |
} |
- code_object->ClearInlineCaches(); |
} |
if (heap_object == source_) { |
@@ -1967,20 +1978,13 @@ void CodeSerializer::SerializeBuiltin(Code* builtin, HowToCode how_to_code, |
} |
-void CodeSerializer::SerializeCodeStub(Code* code, HowToCode how_to_code, |
+void CodeSerializer::SerializeCodeStub(Code* stub, HowToCode how_to_code, |
WhereToPoint where_to_point, int skip) { |
DCHECK((how_to_code == kPlain && where_to_point == kStartOfObject) || |
(how_to_code == kPlain && where_to_point == kInnerPointer) || |
(how_to_code == kFromCode && where_to_point == kInnerPointer)); |
- uint32_t stub_key = code->stub_key(); |
- |
- if (stub_key == CodeStub::NoCacheKey()) { |
- if (FLAG_trace_code_serializer) { |
- PrintF("Encoding uncacheable code stub as heap object\n"); |
- } |
- SerializeHeapObject(code, how_to_code, where_to_point, skip); |
- return; |
- } |
+ uint32_t stub_key = stub->stub_key(); |
+ DCHECK(CodeStub::MajorKeyFromKey(stub_key) != CodeStub::NoCache); |
if (skip != 0) { |
sink_->Put(kSkip, "SkipFromSerializeCodeStub"); |