| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 3ddbe50f75904e7099ac25752d4c1edec6bec22e..ab6fa54859416d80a4601f1d25358bfe2cbd5221 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -14063,12 +14063,12 @@ void Code::CopyFrom(const CodeDesc& desc) {
|
| Assembler::FlushICache(GetIsolate(), instruction_start(), instruction_size());
|
| }
|
|
|
| -
|
| -// Locate the source position which is closest to the address in the code. This
|
| -// is using the source position information embedded in the relocation info.
|
| +// Locate the source position which is closest to the code offset. This is
|
| +// using the source position information embedded in the relocation info.
|
| // The position returned is relative to the beginning of the script where the
|
| // source for this function is found.
|
| -int Code::SourcePosition(Address pc) {
|
| +int Code::SourcePosition(int code_offset) {
|
| + Address pc = instruction_start() + code_offset;
|
| int distance = kMaxInt;
|
| int position = RelocInfo::kNoPosition; // Initially no position found.
|
| // Run through all the relocation info to find the best matching source
|
| @@ -14100,10 +14100,10 @@ int Code::SourcePosition(Address pc) {
|
|
|
| // Same as Code::SourcePosition above except it only looks for statement
|
| // positions.
|
| -int Code::SourceStatementPosition(Address pc) {
|
| +int Code::SourceStatementPosition(int code_offset) {
|
| // First find the position as close as possible using all position
|
| // information.
|
| - int position = SourcePosition(pc);
|
| + int position = SourcePosition(code_offset);
|
| // Now find the closest statement position before the position.
|
| int statement_position = 0;
|
| RelocIterator it(this, RelocInfo::kPositionMask);
|
| @@ -14304,6 +14304,10 @@ void Code::ClearInlineCaches(Code::Kind* kind) {
|
| }
|
| }
|
|
|
| +int AbstractCode::SourcePosition(int offset) {
|
| + if (IsBytecodeArray()) return GetBytecodeArray()->SourcePosition(offset);
|
| + return GetCode()->SourcePosition(offset);
|
| +}
|
|
|
| void SharedFunctionInfo::ClearTypeFeedbackInfo() {
|
| feedback_vector()->ClearSlots(this);
|
| @@ -14996,6 +15000,10 @@ void Code::Disassemble(const char* name, std::ostream& os) { // NOLINT
|
| }
|
| #endif // ENABLE_DISASSEMBLER
|
|
|
| +int BytecodeArray::SourcePosition(int offset) {
|
| + // TODO(yangguo): implement this.
|
| + return 0;
|
| +}
|
|
|
| void BytecodeArray::Disassemble(std::ostream& os) {
|
| os << "Parameter count " << parameter_count() << "\n";
|
| @@ -19050,35 +19058,31 @@ bool JSWeakCollection::Delete(Handle<JSWeakCollection> weak_collection,
|
| return was_present;
|
| }
|
|
|
| -
|
| -// Check if there is a break point at this code position.
|
| -bool DebugInfo::HasBreakPoint(int code_position) {
|
| - // Get the break point info object for this code position.
|
| - Object* break_point_info = GetBreakPointInfo(code_position);
|
| +// Check if there is a break point at this code offset.
|
| +bool DebugInfo::HasBreakPoint(int code_offset) {
|
| + // Get the break point info object for this code offset.
|
| + Object* break_point_info = GetBreakPointInfo(code_offset);
|
|
|
| // If there is no break point info object or no break points in the break
|
| - // point info object there is no break point at this code position.
|
| + // point info object there is no break point at this code offset.
|
| if (break_point_info->IsUndefined()) return false;
|
| return BreakPointInfo::cast(break_point_info)->GetBreakPointCount() > 0;
|
| }
|
|
|
| -
|
| -// Get the break point info object for this code position.
|
| -Object* DebugInfo::GetBreakPointInfo(int code_position) {
|
| - // Find the index of the break point info object for this code position.
|
| - int index = GetBreakPointInfoIndex(code_position);
|
| +// Get the break point info object for this code offset.
|
| +Object* DebugInfo::GetBreakPointInfo(int code_offset) {
|
| + // Find the index of the break point info object for this code offset.
|
| + int index = GetBreakPointInfoIndex(code_offset);
|
|
|
| // Return the break point info object if any.
|
| if (index == kNoBreakPointInfo) return GetHeap()->undefined_value();
|
| return BreakPointInfo::cast(break_points()->get(index));
|
| }
|
|
|
| -
|
| -// Clear a break point at the specified code position.
|
| -void DebugInfo::ClearBreakPoint(Handle<DebugInfo> debug_info,
|
| - int code_position,
|
| +// Clear a break point at the specified code offset.
|
| +void DebugInfo::ClearBreakPoint(Handle<DebugInfo> debug_info, int code_offset,
|
| Handle<Object> break_point_object) {
|
| - Handle<Object> break_point_info(debug_info->GetBreakPointInfo(code_position),
|
| + Handle<Object> break_point_info(debug_info->GetBreakPointInfo(code_offset),
|
| debug_info->GetIsolate());
|
| if (break_point_info->IsUndefined()) return;
|
| BreakPointInfo::ClearBreakPoint(
|
| @@ -19086,14 +19090,11 @@ void DebugInfo::ClearBreakPoint(Handle<DebugInfo> debug_info,
|
| break_point_object);
|
| }
|
|
|
| -
|
| -void DebugInfo::SetBreakPoint(Handle<DebugInfo> debug_info,
|
| - int code_position,
|
| - int source_position,
|
| - int statement_position,
|
| +void DebugInfo::SetBreakPoint(Handle<DebugInfo> debug_info, int code_offset,
|
| + int source_position, int statement_position,
|
| Handle<Object> break_point_object) {
|
| Isolate* isolate = debug_info->GetIsolate();
|
| - Handle<Object> break_point_info(debug_info->GetBreakPointInfo(code_position),
|
| + Handle<Object> break_point_info(debug_info->GetBreakPointInfo(code_offset),
|
| isolate);
|
| if (!break_point_info->IsUndefined()) {
|
| BreakPointInfo::SetBreakPoint(
|
| @@ -19102,7 +19103,7 @@ void DebugInfo::SetBreakPoint(Handle<DebugInfo> debug_info,
|
| return;
|
| }
|
|
|
| - // Adding a new break point for a code position which did not have any
|
| + // Adding a new break point for a code offset which did not have any
|
| // break points before. Try to find a free slot.
|
| int index = kNoBreakPointInfo;
|
| for (int i = 0; i < debug_info->break_points()->length(); i++) {
|
| @@ -19131,7 +19132,7 @@ void DebugInfo::SetBreakPoint(Handle<DebugInfo> debug_info,
|
| // Allocate new BreakPointInfo object and set the break point.
|
| Handle<BreakPointInfo> new_break_point_info = Handle<BreakPointInfo>::cast(
|
| isolate->factory()->NewStruct(BREAK_POINT_INFO_TYPE));
|
| - new_break_point_info->set_code_position(code_position);
|
| + new_break_point_info->set_code_offset(code_offset);
|
| new_break_point_info->set_source_position(source_position);
|
| new_break_point_info->set_statement_position(statement_position);
|
| new_break_point_info->set_break_point_objects(
|
| @@ -19140,10 +19141,9 @@ void DebugInfo::SetBreakPoint(Handle<DebugInfo> debug_info,
|
| debug_info->break_points()->set(index, *new_break_point_info);
|
| }
|
|
|
| -
|
| -// Get the break point objects for a code position.
|
| -Handle<Object> DebugInfo::GetBreakPointObjects(int code_position) {
|
| - Object* break_point_info = GetBreakPointInfo(code_position);
|
| +// Get the break point objects for a code offset.
|
| +Handle<Object> DebugInfo::GetBreakPointObjects(int code_offset) {
|
| + Object* break_point_info = GetBreakPointInfo(code_offset);
|
| if (break_point_info->IsUndefined()) {
|
| return GetIsolate()->factory()->undefined_value();
|
| }
|
| @@ -19189,13 +19189,13 @@ Handle<Object> DebugInfo::FindBreakPointInfo(
|
|
|
| // Find the index of the break point info object for the specified code
|
| // position.
|
| -int DebugInfo::GetBreakPointInfoIndex(int code_position) {
|
| +int DebugInfo::GetBreakPointInfoIndex(int code_offset) {
|
| if (break_points()->IsUndefined()) return kNoBreakPointInfo;
|
| for (int i = 0; i < break_points()->length(); i++) {
|
| if (!break_points()->get(i)->IsUndefined()) {
|
| BreakPointInfo* break_point_info =
|
| BreakPointInfo::cast(break_points()->get(i));
|
| - if (break_point_info->code_position() == code_position) {
|
| + if (break_point_info->code_offset() == code_offset) {
|
| return i;
|
| }
|
| }
|
|
|