| Index: src/heap.cc
|
| diff --git a/src/heap.cc b/src/heap.cc
|
| index 71432eedf82f8307e673775d19e592d4496ce8d0..1cd11e4b17614d7938a751a2957a1214254daf77 100644
|
| --- a/src/heap.cc
|
| +++ b/src/heap.cc
|
| @@ -419,7 +419,9 @@ void Heap::GarbageCollectionEpilogue() {
|
| #if defined(DEBUG)
|
| ReportStatisticsAfterGC();
|
| #endif // DEBUG
|
| +#ifdef ENABLE_DEBUGGER_SUPPORT
|
| isolate_->debug()->AfterGarbageCollection();
|
| +#endif // ENABLE_DEBUGGER_SUPPORT
|
| }
|
|
|
|
|
| @@ -1352,6 +1354,10 @@ class ScavengingVisitor : public StaticVisitorBase {
|
| &ObjectEvacuationStrategy<POINTER_OBJECT>::
|
| template VisitSpecialized<SharedFunctionInfo::kSize>);
|
|
|
| + table_.Register(kVisitJSWeakMap,
|
| + &ObjectEvacuationStrategy<POINTER_OBJECT>::
|
| + Visit);
|
| +
|
| table_.Register(kVisitJSRegExp,
|
| &ObjectEvacuationStrategy<POINTER_OBJECT>::
|
| Visit);
|
| @@ -2476,40 +2482,41 @@ MaybeObject* Heap::AllocateForeign(Address address, PretenureFlag pretenure) {
|
|
|
|
|
| MaybeObject* Heap::AllocateSharedFunctionInfo(Object* name) {
|
| - Object* result;
|
| - { MaybeObject* maybe_result =
|
| - Allocate(shared_function_info_map(), OLD_POINTER_SPACE);
|
| - if (!maybe_result->ToObject(&result)) return maybe_result;
|
| - }
|
| + SharedFunctionInfo* share;
|
| + MaybeObject* maybe = Allocate(shared_function_info_map(), OLD_POINTER_SPACE);
|
| + if (!maybe->To<SharedFunctionInfo>(&share)) return maybe;
|
|
|
| - SharedFunctionInfo* share = SharedFunctionInfo::cast(result);
|
| + // Set pointer fields.
|
| share->set_name(name);
|
| Code* illegal = isolate_->builtins()->builtin(Builtins::kIllegal);
|
| share->set_code(illegal);
|
| share->set_scope_info(SerializedScopeInfo::Empty());
|
| - Code* construct_stub = isolate_->builtins()->builtin(
|
| - Builtins::kJSConstructStubGeneric);
|
| + Code* construct_stub =
|
| + isolate_->builtins()->builtin(Builtins::kJSConstructStubGeneric);
|
| share->set_construct_stub(construct_stub);
|
| - share->set_expected_nof_properties(0);
|
| - share->set_length(0);
|
| - share->set_formal_parameter_count(0);
|
| share->set_instance_class_name(Object_symbol());
|
| share->set_function_data(undefined_value());
|
| share->set_script(undefined_value());
|
| - share->set_start_position_and_type(0);
|
| share->set_debug_info(undefined_value());
|
| share->set_inferred_name(empty_string());
|
| - share->set_compiler_hints(0);
|
| - share->set_deopt_counter(Smi::FromInt(FLAG_deopt_every_n_times));
|
| share->set_initial_map(undefined_value());
|
| - share->set_this_property_assignments_count(0);
|
| share->set_this_property_assignments(undefined_value());
|
| - share->set_opt_count(0);
|
| + share->set_deopt_counter(Smi::FromInt(FLAG_deopt_every_n_times));
|
| +
|
| + // Set integer fields (smi or int, depending on the architecture).
|
| + share->set_length(0);
|
| + share->set_formal_parameter_count(0);
|
| + share->set_expected_nof_properties(0);
|
| share->set_num_literals(0);
|
| + share->set_start_position_and_type(0);
|
| share->set_end_position(0);
|
| share->set_function_token_position(0);
|
| - share->set_native(false);
|
| - return result;
|
| + // All compiler hints default to false or 0.
|
| + share->set_compiler_hints(0);
|
| + share->set_this_property_assignments_count(0);
|
| + share->set_opt_count(0);
|
| +
|
| + return share;
|
| }
|
|
|
|
|
|
|