blob: 57fb54b60112d9e6616056d191ab8ef6e2e535d8 [file] [log] [blame]
// 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_SCOPE_H_
#define COBALT_SCRIPT_SCOPE_H_
#include <memory>
#include <string>
#include "base/logging.h"
#include "base/optional.h"
#include "cobalt/script/value_handle.h"
namespace cobalt {
namespace script {
// Opaque type that encapsulates a scope object, as used by the JavaScript
// debugger and devtools. Each call frame has a scope chain: a list of the
// individual scopes valid at that call frame. The scope objects are only
// guaranteed to be valid while the script debugger is paused in that call
// frame.
// https://developer.chrome.com/devtools/docs/protocol/1.1/debugger#type-CallFrame
// https://developer.chrome.com/devtools/docs/protocol/1.1/debugger#type-Scope
class Scope {
public:
// Possible values returned by |GetType|.
// One of the set of enumerated strings defined here:
// https://developer.chrome.com/devtools/docs/protocol/1.1/debugger#type-Scope
enum Type { kCatch, kClosure, kGlobal, kLocal, kWith };
virtual ~Scope() {}
// An opaque handle to the underlying JavaScript object encapsulating the
// scope.
virtual const ValueHandleHolder* GetObject() = 0;
// The type of the scope object. One of the enumerated values in |Type|.
// Devtools expects a string, which can be obtained from the
// |TypeToString| method.
virtual Type GetType() = 0;
// The next entry in the scope chain.
virtual std::unique_ptr<Scope> GetNext() = 0;
// Converts an enumerated type value to the string expected by devtools.
static const char* TypeToString(Type type) {
static const char kCatchString[] = "catch";
static const char kClosureString[] = "closure";
static const char kGlobalString[] = "global";
static const char kLocalString[] = "local";
static const char kWithString[] = "with";
switch (type) {
case kCatch:
return kCatchString;
case kClosure:
return kClosureString;
case kGlobal:
return kGlobalString;
case kLocal:
return kLocalString;
case kWith:
return kWithString;
}
NOTREACHED();
return kLocalString;
}
};
} // namespace script
} // namespace cobalt
#endif // COBALT_SCRIPT_SCOPE_H_