// Copyright 2016 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef COBALT_SCRIPT_CALL_FRAME_H_
#define COBALT_SCRIPT_CALL_FRAME_H_

#include <string>

#include "base/memory/scoped_ptr.h"
#include "base/optional.h"
#include "cobalt/script/scope.h"
#include "cobalt/script/value_handle.h"

namespace cobalt {
namespace script {

// Opaque type that encapsulates a call frame, as used by the JavaScript
// debugger and devtools. When the script debugger pauses, an instance of a
// derived class is created and passed to the handler, representing the top of
// the call stack. The instance is only valid while the script debugger is
// paused.
// https://developer.chrome.com/devtools/docs/protocol/1.1/debugger#type-CallFrame
// https://developer.chrome.com/devtools/docs/protocol/1.1/debugger#event-paused
class CallFrame {
 public:
  virtual ~CallFrame() {}

  // A unique string identifying this call frame.
  // https://developer.chrome.com/devtools/docs/protocol/1.1/debugger#type-CallFrameId
  virtual std::string GetCallFrameId() = 0;

  // The next call frame on the stack.
  virtual scoped_ptr<CallFrame> GetCaller() = 0;

  // The name of the function called at this stack frame. May be empty for
  // anonymous functions.
  virtual std::string GetFunctionName() = 0;

  // Current line number being executed.
  virtual int GetLineNumber() = 0;

  // Current column number of executed statement.
  virtual base::optional<int> GetColumnNumber() = 0;

  // The ID of the script being executed. Corresponds to the scriptId parameter
  // in the Debugger.scriptParsed event notification when the script was first
  // parsed.
  // https://developer.chrome.com/devtools/docs/protocol/1.1/debugger#event-scriptParsed
  virtual std::string GetScriptId() = 0;

  // The first entry in the scope chain for this call frame.
  // https://developer.chrome.com/devtools/docs/protocol/1.1/debugger#type-Scope
  virtual scoped_ptr<Scope> GetScopeChain() = 0;

  // An opaque handle to the current JavaScript |this| object.
  // May be NULL if the value of |this| in the call frame is not an object.
  virtual const ValueHandleHolder* GetThis() = 0;
};

}  // namespace script
}  // namespace cobalt

#endif  // COBALT_SCRIPT_CALL_FRAME_H_
