| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
| 8 #include "src/api.h" | 8 #include "src/api.h" |
| 9 #include "src/base/platform/platform.h" | 9 #include "src/base/platform/platform.h" |
| 10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" |
| (...skipping 1879 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1890 Object* prototype_users = PrototypeInfo::cast(object_)->prototype_users(); | 1890 Object* prototype_users = PrototypeInfo::cast(object_)->prototype_users(); |
| 1891 if (prototype_users->IsWeakFixedArray()) { | 1891 if (prototype_users->IsWeakFixedArray()) { |
| 1892 WeakFixedArray::cast(prototype_users)->Compact(); | 1892 WeakFixedArray::cast(prototype_users)->Compact(); |
| 1893 } | 1893 } |
| 1894 } | 1894 } |
| 1895 | 1895 |
| 1896 if (object_->IsScript()) { | 1896 if (object_->IsScript()) { |
| 1897 // Clear cached line ends. | 1897 // Clear cached line ends. |
| 1898 Object* undefined = serializer_->isolate()->heap()->undefined_value(); | 1898 Object* undefined = serializer_->isolate()->heap()->undefined_value(); |
| 1899 Script::cast(object_)->set_line_ends(undefined); | 1899 Script::cast(object_)->set_line_ends(undefined); |
| 1900 Object* shared_list = Script::cast(object_)->shared_function_infos(); |
| 1901 if (shared_list->IsWeakFixedArray()) { |
| 1902 WeakFixedArray::cast(shared_list)->Compact(); |
| 1903 } |
| 1900 } | 1904 } |
| 1901 | 1905 |
| 1902 if (object_->IsExternalString()) { | 1906 if (object_->IsExternalString()) { |
| 1903 Heap* heap = serializer_->isolate()->heap(); | 1907 Heap* heap = serializer_->isolate()->heap(); |
| 1904 if (object_->map() != heap->native_source_string_map()) { | 1908 if (object_->map() != heap->native_source_string_map()) { |
| 1905 // Usually we cannot recreate resources for external strings. To work | 1909 // Usually we cannot recreate resources for external strings. To work |
| 1906 // around this, external strings are serialized to look like ordinary | 1910 // around this, external strings are serialized to look like ordinary |
| 1907 // sequential strings. | 1911 // sequential strings. |
| 1908 // The exception are native source code strings, since we can recreate | 1912 // The exception are native source code strings, since we can recreate |
| 1909 // their resources. In that case we fall through and leave it to | 1913 // their resources. In that case we fall through and leave it to |
| (...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2314 return; | 2318 return; |
| 2315 #define IC_KIND_CASE(KIND) case Code::KIND: | 2319 #define IC_KIND_CASE(KIND) case Code::KIND: |
| 2316 IC_KIND_LIST(IC_KIND_CASE) | 2320 IC_KIND_LIST(IC_KIND_CASE) |
| 2317 #undef IC_KIND_CASE | 2321 #undef IC_KIND_CASE |
| 2318 SerializeIC(code_object, how_to_code, where_to_point); | 2322 SerializeIC(code_object, how_to_code, where_to_point); |
| 2319 return; | 2323 return; |
| 2320 case Code::FUNCTION: | 2324 case Code::FUNCTION: |
| 2321 DCHECK(code_object->has_reloc_info_for_serialization()); | 2325 DCHECK(code_object->has_reloc_info_for_serialization()); |
| 2322 // Only serialize the code for the toplevel function unless specified | 2326 // Only serialize the code for the toplevel function unless specified |
| 2323 // by flag. Replace code of inner functions by the lazy compile builtin. | 2327 // by flag. Replace code of inner functions by the lazy compile builtin. |
| 2324 // This is safe, as checked in Compiler::BuildFunctionInfo. | 2328 // This is safe, as checked in Compiler::GetSharedFunctionInfo. |
| 2325 if (code_object != main_code_ && !FLAG_serialize_inner) { | 2329 if (code_object != main_code_ && !FLAG_serialize_inner) { |
| 2326 SerializeBuiltin(Builtins::kCompileLazy, how_to_code, where_to_point); | 2330 SerializeBuiltin(Builtins::kCompileLazy, how_to_code, where_to_point); |
| 2327 } else { | 2331 } else { |
| 2328 SerializeGeneric(code_object, how_to_code, where_to_point); | 2332 SerializeGeneric(code_object, how_to_code, where_to_point); |
| 2329 } | 2333 } |
| 2330 return; | 2334 return; |
| 2331 } | 2335 } |
| 2332 UNREACHABLE(); | 2336 UNREACHABLE(); |
| 2333 } | 2337 } |
| 2334 | 2338 |
| (...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2734 SerializedCodeData* scd = new SerializedCodeData(cached_data); | 2738 SerializedCodeData* scd = new SerializedCodeData(cached_data); |
| 2735 SanityCheckResult r = scd->SanityCheck(isolate, source); | 2739 SanityCheckResult r = scd->SanityCheck(isolate, source); |
| 2736 if (r == CHECK_SUCCESS) return scd; | 2740 if (r == CHECK_SUCCESS) return scd; |
| 2737 cached_data->Reject(); | 2741 cached_data->Reject(); |
| 2738 source->GetIsolate()->counters()->code_cache_reject_reason()->AddSample(r); | 2742 source->GetIsolate()->counters()->code_cache_reject_reason()->AddSample(r); |
| 2739 delete scd; | 2743 delete scd; |
| 2740 return NULL; | 2744 return NULL; |
| 2741 } | 2745 } |
| 2742 } // namespace internal | 2746 } // namespace internal |
| 2743 } // namespace v8 | 2747 } // namespace v8 |
| OLD | NEW |