| Index: Source/bindings/v8/ScriptDebugServer.cpp
 | 
| diff --git a/Source/bindings/v8/ScriptDebugServer.cpp b/Source/bindings/v8/ScriptDebugServer.cpp
 | 
| index 9d14375e83af0d1df3fef7fd8e327093727841f4..ad871fe86b6418432ee680aa490a23f595618c08 100644
 | 
| --- a/Source/bindings/v8/ScriptDebugServer.cpp
 | 
| +++ b/Source/bindings/v8/ScriptDebugServer.cpp
 | 
| @@ -30,17 +30,18 @@
 | 
|  
 | 
|  #include "config.h"
 | 
|  #include "bindings/v8/ScriptDebugServer.h"
 | 
| -
 | 
|  #include "DebuggerScriptSource.h"
 | 
|  #include "V8JavaScriptCallFrame.h"
 | 
| -#include "bindings/dart/DartDebugServer.h"
 | 
| +#include "bindings/dart/DartScriptDebugServer.h"
 | 
|  #include "bindings/v8/ScopedPersistent.h"
 | 
| +#include "bindings/v8/ScriptCallStackFactory.h"
 | 
|  #include "bindings/v8/ScriptController.h"
 | 
|  #include "bindings/v8/ScriptObject.h"
 | 
|  #include "bindings/v8/ScriptSourceCode.h"
 | 
|  #include "bindings/v8/V8Binding.h"
 | 
|  #include "bindings/v8/V8ScriptRunner.h"
 | 
|  #include "core/inspector/JavaScriptCallFrame.h"
 | 
| +#include "core/inspector/ScriptCallFrame.h"
 | 
|  #include "core/inspector/ScriptDebugListener.h"
 | 
|  #include "platform/JSONValues.h"
 | 
|  #include "wtf/StdLibExtras.h"
 | 
| @@ -172,10 +173,8 @@ void ScriptDebugServer::setPauseOnNextStatement(bool pause)
 | 
|      if (isPaused())
 | 
|          return;
 | 
|      if (pause) {
 | 
| -        DartDebugServer::shared().debugBreak();
 | 
|          v8::Debug::DebugBreak(m_isolate);
 | 
|      } else {
 | 
| -        DartDebugServer::shared().cancelDebugBreak();
 | 
|          v8::Debug::CancelDebugBreak(m_isolate);
 | 
|      }
 | 
|  }
 | 
| @@ -243,17 +242,19 @@ void ScriptDebugServer::stepCommandWithFrame(const char* functionName, const Scr
 | 
|      continueProgram();
 | 
|  }
 | 
|  
 | 
| -void ScriptDebugServer::stepOverStatement(const ScriptValue& frame)
 | 
| +void ScriptDebugServer::stepOverStatement(const ActivationFrame& frame)
 | 
|  {
 | 
| -    stepCommandWithFrame("stepOverStatement", frame);
 | 
| +    ASSERT(frame.isJavaScript());
 | 
| +    stepCommandWithFrame("stepOverStatement", frame.asJavaScript());
 | 
|  }
 | 
|  
 | 
| -void ScriptDebugServer::stepOutOfFunction(const ScriptValue& frame)
 | 
| +void ScriptDebugServer::stepOutOfFunction(const ActivationFrame& frame)
 | 
|  {
 | 
| -    stepCommandWithFrame(stepOutV8MethodName, frame);
 | 
| +    ASSERT(frame.isJavaScript());
 | 
| +    stepCommandWithFrame(stepOutV8MethodName, frame.asJavaScript());
 | 
|  }
 | 
|  
 | 
| -bool ScriptDebugServer::setScriptSource(const String& sourceID, const String& newContent, bool preview, String* error, RefPtr<TypeBuilder::Debugger::SetScriptSourceError>& errorData, ScriptValue* newCallFrames, RefPtr<JSONObject>* result)
 | 
| +bool ScriptDebugServer::setScriptSource(const String& sourceID, const String& newContent, bool preview, String* error, RefPtr<TypeBuilder::Debugger::SetScriptSourceError>& errorData, StackTrace* newCallFrames, RefPtr<JSONObject>& result)
 | 
|  {
 | 
|      class EnableLiveEditScope {
 | 
|      public:
 | 
| @@ -297,7 +298,7 @@ bool ScriptDebugServer::setScriptSource(const String& sourceID, const String& ne
 | 
|              v8::Local<v8::Value> normalResult = resultTuple->Get(1);
 | 
|              RefPtr<JSONValue> jsonResult = v8ToJSONValue(m_isolate, normalResult, JSONValue::maxDepth);
 | 
|              if (jsonResult)
 | 
| -                *result = jsonResult->asObject();
 | 
| +                result = jsonResult->asObject();
 | 
|              // Call stack may have changed after if the edited function was on the stack.
 | 
|              if (!preview && isPaused())
 | 
|                  *newCallFrames = currentCallFrames();
 | 
| @@ -342,27 +343,27 @@ PassRefPtr<JavaScriptCallFrame> ScriptDebugServer::wrapCallFrames(v8::Handle<v8:
 | 
|      return JavaScriptCallFrame::create(v8::Debug::GetDebugContext(), v8::Handle<v8::Object>::Cast(currentCallFrameV8));
 | 
|  }
 | 
|  
 | 
| -ScriptValue ScriptDebugServer::currentCallFramesInner(ScopeInfoDetails scopeDetails)
 | 
| +StackTrace ScriptDebugServer::currentCallFramesInner(ScopeInfoDetails scopeDetails)
 | 
|  {
 | 
|      v8::HandleScope scope(m_isolate);
 | 
|      v8::Handle<v8::Context> pausedContext = m_pausedContext.IsEmpty() ? m_isolate->GetCurrentContext() : m_pausedContext;
 | 
|      if (pausedContext.IsEmpty())
 | 
| -        return ScriptValue();
 | 
| +        return StackTrace(ScriptValue());
 | 
|  
 | 
|      RefPtr<JavaScriptCallFrame> currentCallFrame = wrapCallFrames(m_executionState.newLocal(m_isolate), 0, scopeDetails);
 | 
|      if (!currentCallFrame)
 | 
| -        return ScriptValue();
 | 
| +        return StackTrace(ScriptValue());
 | 
|  
 | 
|      v8::Context::Scope contextScope(pausedContext);
 | 
| -    return ScriptValue(ScriptState::from(pausedContext), toV8(currentCallFrame.release(), v8::Handle<v8::Object>(), pausedContext->GetIsolate()));
 | 
| +    return StackTrace(ScriptValue(ScriptState::from(pausedContext), toV8(currentCallFrame.release(), v8::Handle<v8::Object>(), pausedContext->GetIsolate())));
 | 
|  }
 | 
|  
 | 
| -ScriptValue ScriptDebugServer::currentCallFrames()
 | 
| +StackTrace ScriptDebugServer::currentCallFrames()
 | 
|  {
 | 
|      return currentCallFramesInner(AllScopes);
 | 
|  }
 | 
|  
 | 
| -ScriptValue ScriptDebugServer::currentCallFramesForAsyncStack()
 | 
| +StackTrace ScriptDebugServer::currentCallFramesForAsyncStack()
 | 
|  {
 | 
|      return currentCallFramesInner(FastAsyncScopes);
 | 
|  }
 | 
| @@ -494,8 +495,8 @@ void ScriptDebugServer::handleV8DebugEvent(const v8::Debug::EventDetails& eventD
 | 
|                  if (!currentCallFrame->IsObject())
 | 
|                      return;
 | 
|              }
 | 
| -            RefPtr<JavaScriptCallFrame> topFrame = wrapCallFrames(eventDetails.GetExecutionState(), 1, NoScopes);
 | 
| -            if (executeSkipPauseRequest(listener->shouldSkipExceptionPause(topFrame), eventDetails.GetExecutionState()))
 | 
| +
 | 
| +            if (stackTrace->GetFrameCount() && executeSkipPauseRequest(listener->shouldSkipExceptionPause(toScriptCallFrame(stackTrace->GetFrame(0))), eventDetails.GetExecutionState()))
 | 
|                  return;
 | 
|              v8::Handle<v8::Object> eventData = eventDetails.GetEventData();
 | 
|              v8::Handle<v8::Value> exceptionGetterValue = eventData->Get(v8AtomicString(m_isolate, "exception"));
 | 
| @@ -507,12 +508,14 @@ void ScriptDebugServer::handleV8DebugEvent(const v8::Debug::EventDetails& eventD
 | 
|              v8::Handle<v8::Value> argv[] = { eventDetails.GetEventData() };
 | 
|              v8::Handle<v8::Value> hitBreakpoints = V8ScriptRunner::callInternalFunction(getBreakpointNumbersFunction, debuggerScript, WTF_ARRAY_LENGTH(argv), argv, m_isolate);
 | 
|              ASSERT(hitBreakpoints->IsArray());
 | 
| -            RefPtr<JavaScriptCallFrame> topFrame = wrapCallFrames(eventDetails.GetExecutionState(), 1, NoScopes);
 | 
| +            v8::Local<v8::StackTrace> stackTrace = v8::StackTrace::CurrentStackTrace(m_isolate, 1);
 | 
| +            ScriptCallFrame topCallFrame = toScriptCallFrame(stackTrace->GetFrame(0));
 | 
| +
 | 
|              ScriptDebugListener::SkipPauseRequest skipRequest;
 | 
|              if (v8::Handle<v8::Array>::Cast(hitBreakpoints)->Length())
 | 
| -                skipRequest = listener->shouldSkipBreakpointPause(topFrame);
 | 
| +                skipRequest = listener->shouldSkipBreakpointPause(topCallFrame);
 | 
|              else
 | 
| -                skipRequest = listener->shouldSkipStepPause(topFrame);
 | 
| +                skipRequest = listener->shouldSkipStepPause(topCallFrame);
 | 
|              if (executeSkipPauseRequest(skipRequest, eventDetails.GetExecutionState()))
 | 
|                  return;
 | 
|              handleProgramBreak(eventDetails, v8::Handle<v8::Value>(), hitBreakpoints.As<v8::Array>());
 | 
| 
 |