blob: 0d820db348a1c936503999863365f970dab513e0 [file] [log] [blame]
/*
* Copyright 2016 Google Inc. 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 <string>
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
#include "base/optional.h"
#include "cobalt/script/opaque_handle.h"
#include "cobalt/script/script_object.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 OpaqueHandleHolder* 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 scoped_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;
default: {
NOTREACHED();
return kLocalString;
}
}
}
};
} // namespace script
} // namespace cobalt
#endif // COBALT_SCRIPT_SCOPE_H_