Commit 2497023a authored by tzik's avatar tzik Committed by Commit Bot

Refine the type of Context to NativeContext around JSObject

This updates the type of contexts to NativeContext instead of Context,
namely on GetFunctionRealm(), GetCreationContext(), and
JSGlobalObject::native_context.

They should be semantically NativeContexts, but the return type hides
the underlying NativeContext, and causes its user to cast the context
to native.

Change-Id: I2f234b0df8c2dcaeab25cb543e09d80d12ca7369
Reviewed-on: https://chromium-review.googlesource.com/c/1469541Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
Commit-Queue: Taiju Tsuiki <tzik@chromium.org>
Cr-Commit-Position: refs/heads/master@{#59543}
parent 8bf60985
......@@ -4845,7 +4845,8 @@ Local<v8::Object> v8::Object::Clone() {
Local<v8::Context> v8::Object::CreationContext() {
auto self = Utils::OpenHandle(this);
return Utils::ToLocal(self->GetCreationContext());
i::Handle<i::Context> context = self->GetCreationContext();
return Utils::ToLocal(context);
}
......
......@@ -565,6 +565,7 @@ class MessageLocation;
class ModuleScope;
class Name;
class NameDictionary;
class NativeContext;
class NewSpace;
class NewLargeObjectSpace;
class NumberDictionary;
......
......@@ -3126,11 +3126,12 @@ MaybeHandle<JSProxy> JSProxy::New(Isolate* isolate, Handle<Object> target,
// static
MaybeHandle<Context> JSProxy::GetFunctionRealm(Handle<JSProxy> proxy) {
MaybeHandle<NativeContext> JSProxy::GetFunctionRealm(Handle<JSProxy> proxy) {
DCHECK(proxy->map()->is_constructor());
if (proxy->IsRevoked()) {
THROW_NEW_ERROR(proxy->GetIsolate(),
NewTypeError(MessageTemplate::kProxyRevoked), Context);
NewTypeError(MessageTemplate::kProxyRevoked),
NativeContext);
}
Handle<JSReceiver> target(JSReceiver::cast(proxy->target()),
proxy->GetIsolate());
......
......@@ -464,7 +464,7 @@ ACCESSORS(JSBoundFunction, bound_arguments, FixedArray, kBoundArgumentsOffset)
ACCESSORS(JSFunction, raw_feedback_cell, FeedbackCell, kFeedbackCellOffset)
ACCESSORS(JSGlobalObject, native_context, Context, kNativeContextOffset)
ACCESSORS(JSGlobalObject, native_context, NativeContext, kNativeContextOffset)
ACCESSORS(JSGlobalObject, global_proxy, JSObject, kGlobalProxyOffset)
ACCESSORS(JSGlobalProxy, native_context, Object, kNativeContextOffset)
......@@ -604,7 +604,9 @@ bool JSFunction::has_context() const {
JSGlobalProxy JSFunction::global_proxy() { return context()->global_proxy(); }
Context JSFunction::native_context() { return context()->native_context(); }
NativeContext JSFunction::native_context() {
return context()->native_context();
}
void JSFunction::set_context(Object value) {
DCHECK(value->IsUndefined() || value->IsContext());
......
......@@ -476,7 +476,7 @@ Handle<String> JSReceiver::GetConstructorName(Handle<JSReceiver> receiver) {
return GetConstructorHelper(receiver).second;
}
Handle<Context> JSReceiver::GetCreationContext() {
Handle<NativeContext> JSReceiver::GetCreationContext() {
JSReceiver receiver = *this;
// Externals are JSObjects with null as a constructor.
DCHECK(!receiver->IsExternal(GetIsolate()));
......@@ -486,7 +486,7 @@ Handle<Context> JSReceiver::GetCreationContext() {
function = JSFunction::cast(constructor);
} else if (constructor->IsFunctionTemplateInfo()) {
// Remote objects don't have a creation context.
return Handle<Context>::null();
return Handle<NativeContext>::null();
} else if (receiver->IsJSGeneratorObject()) {
function = JSGeneratorObject::cast(receiver)->function();
} else {
......@@ -497,13 +497,14 @@ Handle<Context> JSReceiver::GetCreationContext() {
}
return function->has_context()
? Handle<Context>(function->context()->native_context(),
? Handle<NativeContext>(function->context()->native_context(),
receiver->GetIsolate())
: Handle<Context>::null();
: Handle<NativeContext>::null();
}
// static
MaybeHandle<Context> JSReceiver::GetFunctionRealm(Handle<JSReceiver> receiver) {
MaybeHandle<NativeContext> JSReceiver::GetFunctionRealm(
Handle<JSReceiver> receiver) {
if (receiver->IsJSProxy()) {
return JSProxy::GetFunctionRealm(Handle<JSProxy>::cast(receiver));
}
......@@ -3001,7 +3002,7 @@ Handle<Map> JSObject::GetElementsTransitionMap(Handle<JSObject> object,
}
// static
MaybeHandle<Context> JSObject::GetFunctionRealm(Handle<JSObject> object) {
MaybeHandle<NativeContext> JSObject::GetFunctionRealm(Handle<JSObject> object) {
DCHECK(object->map()->is_constructor());
DCHECK(!object->IsJSFunction());
return object->GetCreationContext();
......@@ -4767,7 +4768,7 @@ bool JSObject::IsDroppableApiWrapper() {
}
// static
MaybeHandle<Context> JSBoundFunction::GetFunctionRealm(
MaybeHandle<NativeContext> JSBoundFunction::GetFunctionRealm(
Handle<JSBoundFunction> function) {
DCHECK(function->map()->is_constructor());
return JSReceiver::GetFunctionRealm(
......@@ -4863,7 +4864,8 @@ Maybe<int> JSFunction::GetLength(Isolate* isolate,
}
// static
Handle<Context> JSFunction::GetFunctionRealm(Handle<JSFunction> function) {
Handle<NativeContext> JSFunction::GetFunctionRealm(
Handle<JSFunction> function) {
DCHECK(function->map()->is_constructor());
return handle(function->context()->native_context(), function->GetIsolate());
}
......
......@@ -77,7 +77,8 @@ class JSReceiver : public HeapObject {
V8_WARN_UNUSED_RESULT static MaybeHandle<Object> OrdinaryToPrimitive(
Handle<JSReceiver> receiver, OrdinaryToPrimitiveHint hint);
static MaybeHandle<Context> GetFunctionRealm(Handle<JSReceiver> receiver);
static MaybeHandle<NativeContext> GetFunctionRealm(
Handle<JSReceiver> receiver);
// Get the first non-hidden prototype.
static inline MaybeHandle<Object> GetPrototype(Isolate* isolate,
......@@ -203,7 +204,7 @@ class JSReceiver : public HeapObject {
// function that was used to instantiate the object).
static Handle<String> GetConstructorName(Handle<JSReceiver> receiver);
Handle<Context> GetCreationContext();
Handle<NativeContext> GetCreationContext();
V8_WARN_UNUSED_RESULT static inline Maybe<PropertyAttributes>
GetPropertyAttributes(Handle<JSReceiver> object, Handle<Name> name);
......@@ -281,7 +282,7 @@ class JSObject : public JSReceiver {
Handle<JSFunction> constructor, Handle<JSReceiver> new_target,
Handle<AllocationSite> site);
static MaybeHandle<Context> GetFunctionRealm(Handle<JSObject> object);
static MaybeHandle<NativeContext> GetFunctionRealm(Handle<JSObject> object);
// 9.1.12 ObjectCreate ( proto [ , internalSlotsList ] )
// Notice: This is NOT 19.1.2.2 Object.create ( O, Properties )
......@@ -921,7 +922,7 @@ class JSBoundFunction : public JSObject {
Handle<JSBoundFunction> function);
static Maybe<int> GetLength(Isolate* isolate,
Handle<JSBoundFunction> function);
static MaybeHandle<Context> GetFunctionRealm(
static MaybeHandle<NativeContext> GetFunctionRealm(
Handle<JSBoundFunction> function);
DECL_CAST(JSBoundFunction)
......@@ -960,11 +961,11 @@ class JSFunction : public JSObject {
inline bool has_context() const;
inline void set_context(Object context);
inline JSGlobalProxy global_proxy();
inline Context native_context();
inline NativeContext native_context();
static Handle<Object> GetName(Isolate* isolate, Handle<JSFunction> function);
static Maybe<int> GetLength(Isolate* isolate, Handle<JSFunction> function);
static Handle<Context> GetFunctionRealm(Handle<JSFunction> function);
static Handle<NativeContext> GetFunctionRealm(Handle<JSFunction> function);
// [code]: The generated code object for this function. Executed
// when the function is invoked, e.g. foo() or new foo(). See
......@@ -1173,7 +1174,7 @@ class JSGlobalProxy : public JSObject {
class JSGlobalObject : public JSObject {
public:
// [native context]: the natives corresponding to this global object.
DECL_ACCESSORS(native_context, Context)
DECL_ACCESSORS(native_context, NativeContext)
// [global proxy]: the global proxy object of the context
DECL_ACCESSORS(global_proxy, JSObject)
......
......@@ -25,7 +25,7 @@ class JSProxy : public JSReceiver {
// [target]: The target property.
DECL_ACCESSORS(target, Object)
static MaybeHandle<Context> GetFunctionRealm(Handle<JSProxy> proxy);
static MaybeHandle<NativeContext> GetFunctionRealm(Handle<JSProxy> proxy);
DECL_CAST(JSProxy)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment