| Index: src/debug/debug.cc
 | 
| diff --git a/src/debug/debug.cc b/src/debug/debug.cc
 | 
| index 38e56ca6ca10666b0e6730627491d5c181ed7c93..00f1c793338010166a9d63a27d6a05db2ca320be 100644
 | 
| --- a/src/debug/debug.cc
 | 
| +++ b/src/debug/debug.cc
 | 
| @@ -86,11 +86,11 @@ BreakLocation::BreakLocation(Handle<DebugInfo> debug_info, DebugBreakType type,
 | 
|      SharedFunctionInfo* shared = debug_info->shared();
 | 
|      if (shared->HasSourceCode()) {
 | 
|        return_position =
 | 
| -          std::max(shared->end_position() - shared->start_position() - 1, 0);
 | 
| +          std::max(shared->end_position() - 1, shared->start_position());
 | 
|      }
 | 
|      // TODO(yangguo): find out why return position is wrong for liveedit.
 | 
|      position_ = return_position;
 | 
| -    statement_position = return_position;
 | 
| +    statement_position_ = return_position;
 | 
|    }
 | 
|  }
 | 
|  
 | 
| @@ -104,10 +104,10 @@ BreakLocation::Iterator* BreakLocation::GetIterator(
 | 
|  }
 | 
|  
 | 
|  BreakLocation::Iterator::Iterator(Handle<DebugInfo> debug_info)
 | 
| -    : debug_info_(debug_info),
 | 
| -      break_index_(-1),
 | 
| -      position_(1),
 | 
| -      statement_position_(1) {}
 | 
| +    : debug_info_(debug_info), break_index_(-1) {
 | 
| +  position_ = debug_info->shared()->start_position();
 | 
| +  statement_position_ = position_;
 | 
| +}
 | 
|  
 | 
|  BreakLocation::CodeIterator::CodeIterator(Handle<DebugInfo> debug_info,
 | 
|                                            BreakLocatorType type)
 | 
| @@ -115,8 +115,7 @@ BreakLocation::CodeIterator::CodeIterator(Handle<DebugInfo> debug_info,
 | 
|        reloc_iterator_(debug_info->abstract_code()->GetCode(),
 | 
|                        GetModeMask(type)),
 | 
|        source_position_iterator_(
 | 
| -          debug_info->abstract_code()->GetCode()->source_position_table()),
 | 
| -      start_position_(debug_info_->shared()->start_position()) {
 | 
| +          debug_info->abstract_code()->GetCode()->source_position_table()) {
 | 
|    // There is at least one break location.
 | 
|    DCHECK(!Done());
 | 
|    Next();
 | 
| @@ -150,7 +149,7 @@ void BreakLocation::CodeIterator::Next() {
 | 
|    int offset = code_offset();
 | 
|    while (!source_position_iterator_.done() &&
 | 
|           source_position_iterator_.code_offset() <= offset) {
 | 
| -    position_ = source_position_iterator_.source_position() - start_position_;
 | 
| +    position_ = source_position_iterator_.source_position();
 | 
|      if (source_position_iterator_.is_statement()) {
 | 
|        statement_position_ = position_;
 | 
|      }
 | 
| @@ -189,8 +188,7 @@ BreakLocation::BytecodeArrayIterator::BytecodeArrayIterator(
 | 
|        source_position_iterator_(debug_info->abstract_code()
 | 
|                                      ->GetBytecodeArray()
 | 
|                                      ->source_position_table()),
 | 
| -      break_locator_type_(type),
 | 
| -      start_position_(debug_info->shared()->start_position()) {
 | 
| +      break_locator_type_(type) {
 | 
|    // There is at least one break location.
 | 
|    DCHECK(!Done());
 | 
|    Next();
 | 
| @@ -204,7 +202,7 @@ void BreakLocation::BytecodeArrayIterator::Next() {
 | 
|      if (!first) source_position_iterator_.Advance();
 | 
|      first = false;
 | 
|      if (Done()) return;
 | 
| -    position_ = source_position_iterator_.source_position() - start_position_;
 | 
| +    position_ = source_position_iterator_.source_position();
 | 
|      if (source_position_iterator_.is_statement()) {
 | 
|        statement_position_ = position_;
 | 
|      }
 | 
| @@ -806,28 +804,22 @@ bool Debug::SetBreakPointForScript(Handle<Script> script,
 | 
|  
 | 
|    // Find position within function. The script position might be before the
 | 
|    // source position of the first function.
 | 
| -  int position;
 | 
|    if (shared->start_position() > *source_position) {
 | 
| -    position = 0;
 | 
| -  } else {
 | 
| -    position = *source_position - shared->start_position();
 | 
| +    *source_position = shared->start_position();
 | 
|    }
 | 
|  
 | 
|    Handle<DebugInfo> debug_info(shared->GetDebugInfo());
 | 
| -  // Source positions starts with zero.
 | 
| -  DCHECK(position >= 0);
 | 
|  
 | 
|    // Find the break point and change it.
 | 
|    BreakLocation location =
 | 
| -      BreakLocation::FromPosition(debug_info, position, alignment);
 | 
| +      BreakLocation::FromPosition(debug_info, *source_position, alignment);
 | 
|    location.SetBreakPoint(break_point_object);
 | 
|  
 | 
|    feature_tracker()->Track(DebugFeatureTracker::kBreakPoint);
 | 
|  
 | 
| -  position = (alignment == STATEMENT_ALIGNED) ? location.statement_position()
 | 
| -                                              : location.position();
 | 
| -
 | 
| -  *source_position = position + shared->start_position();
 | 
| +  *source_position = (alignment == STATEMENT_ALIGNED)
 | 
| +                         ? location.statement_position()
 | 
| +                         : location.position();
 | 
|  
 | 
|    // At least one active break point now.
 | 
|    DCHECK(debug_info->GetBreakPointCount() > 0);
 | 
| 
 |