| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index 05a8618fce3d65fb30d8d561f46466b02477acc8..8c672ba1c668ddfdc6b152d6d79a1825535d901a 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -3450,17 +3450,15 @@ HGraph::HGraph(CompilationInfo* info)
|
| type_change_checksum_(0),
|
| maximum_environment_size_(0),
|
| no_side_effects_scope_count_(0),
|
| - disallow_adding_new_values_(false),
|
| - inlined_functions_(FLAG_hydrogen_track_positions ? 5 : 0, info->zone()),
|
| - inlining_id_to_function_id_(FLAG_hydrogen_track_positions ? 5 : 0,
|
| - info->zone()) {
|
| + disallow_adding_new_values_(false) {
|
| if (info->IsStub()) {
|
| CallInterfaceDescriptor descriptor =
|
| info->code_stub()->GetCallInterfaceDescriptor();
|
| start_environment_ = new (zone_)
|
| HEnvironment(zone_, descriptor.GetEnvironmentParameterCount());
|
| } else {
|
| - TraceInlinedFunction(info->shared_info(), HSourcePosition::Unknown());
|
| + info->TraceInlinedFunction(info->shared_info(),
|
| + HSourcePosition::Unknown().raw());
|
| start_environment_ =
|
| new(zone_) HEnvironment(NULL, info->scope(), info->closure(), zone_);
|
| }
|
| @@ -3488,68 +3486,14 @@ void HGraph::FinalizeUniqueness() {
|
| }
|
|
|
|
|
| -int HGraph::TraceInlinedFunction(
|
| - Handle<SharedFunctionInfo> shared,
|
| - HSourcePosition position) {
|
| - if (!FLAG_hydrogen_track_positions) {
|
| - return 0;
|
| - }
|
| -
|
| - int id = 0;
|
| - for (; id < inlined_functions_.length(); id++) {
|
| - if (inlined_functions_[id].shared().is_identical_to(shared)) {
|
| - break;
|
| - }
|
| - }
|
| -
|
| - if (id == inlined_functions_.length()) {
|
| - inlined_functions_.Add(InlinedFunctionInfo(shared), zone());
|
| -
|
| - if (!shared->script()->IsUndefined()) {
|
| - Handle<Script> script(Script::cast(shared->script()));
|
| - if (!script->source()->IsUndefined()) {
|
| - CodeTracer::Scope tracing_scopex(isolate()->GetCodeTracer());
|
| - OFStream os(tracing_scopex.file());
|
| - os << "--- FUNCTION SOURCE (" << shared->DebugName()->ToCString().get()
|
| - << ") id{" << info()->optimization_id() << "," << id << "} ---\n";
|
| - {
|
| - DisallowHeapAllocation no_allocation;
|
| - int start = shared->start_position();
|
| - int len = shared->end_position() - start + 1;
|
| - String::SubStringRange source(String::cast(script->source()), start,
|
| - len);
|
| - for (const auto& c : source) {
|
| - os << AsReversiblyEscapedUC16(c);
|
| - }
|
| - }
|
| -
|
| - os << "\n--- END ---\n";
|
| - }
|
| - }
|
| - }
|
| -
|
| - int inline_id = inlining_id_to_function_id_.length();
|
| - inlining_id_to_function_id_.Add(id, zone());
|
| -
|
| - if (inline_id != 0) {
|
| - CodeTracer::Scope tracing_scope(isolate()->GetCodeTracer());
|
| - OFStream os(tracing_scope.file());
|
| - os << "INLINE (" << shared->DebugName()->ToCString().get() << ") id{"
|
| - << info()->optimization_id() << "," << id << "} AS " << inline_id
|
| - << " AT " << position << std::endl;
|
| - }
|
| -
|
| - return inline_id;
|
| -}
|
| -
|
| -
|
| int HGraph::SourcePositionToScriptPosition(HSourcePosition pos) {
|
| if (!FLAG_hydrogen_track_positions || pos.IsUnknown()) {
|
| return pos.raw();
|
| }
|
|
|
| - const int id = inlining_id_to_function_id_[pos.inlining_id()];
|
| - return inlined_functions_[id].start_position() + pos.position();
|
| + const int id = info()->inlining_id_to_function_id()->at(pos.inlining_id());
|
| + return info()->inlined_function_infos()->at(id).start_position() +
|
| + pos.position();
|
| }
|
|
|
|
|
| @@ -7987,7 +7931,8 @@ bool HOptimizedGraphBuilder::TryInline(Handle<JSFunction> target,
|
| DCHECK(target_shared->has_deoptimization_support());
|
| AstTyper::Run(&target_info);
|
|
|
| - int function_id = graph()->TraceInlinedFunction(target_shared, position);
|
| + int function_id =
|
| + top_info()->TraceInlinedFunction(target_shared, position.raw());
|
|
|
| // Save the pending call context. Set up new one for the inlined function.
|
| // The function state is new-allocated because we need to delete it
|
| @@ -9221,8 +9166,6 @@ void HOptimizedGraphBuilder::VisitCall(Call* expr) {
|
|
|
| if (FLAG_hydrogen_track_positions) SetSourcePosition(expr->position());
|
|
|
| -
|
| -
|
| if (function->IsConstant() &&
|
| HConstant::cast(function)->handle(isolate())->IsJSFunction()) {
|
| // Push the function under the receiver.
|
|
|