Skip to content

Commit 0df6fc6

Browse files
committed
Implementation of Context::GetExtrasBindingObject().
1 parent 97ec16a commit 0df6fc6

8 files changed

Lines changed: 59 additions & 2 deletions

File tree

graal-nodejs/deps/v8/src/graal/graal_context.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,3 +110,9 @@ v8::Local<v8::Value> GraalContext::GetSecurityToken() {
110110
void GraalContext::UseDefaultSecurityToken() {
111111
SetSecurityToken(Global());
112112
}
113+
114+
v8::Local<v8::Object> GraalContext::GetExtrasBindingObject() {
115+
JNI_CALL(jobject, java_extras, Isolate(), GraalAccessMethod::context_get_extras_binding_object, Object, GetJavaObject());
116+
GraalObject* graal_extras = new GraalObject(Isolate(), java_extras);
117+
return reinterpret_cast<v8::Object*> (graal_extras);
118+
}

graal-nodejs/deps/v8/src/graal/graal_context.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class GraalContext : public GraalHandleContent {
5858
void SetSecurityToken(v8::Local<v8::Value> token);
5959
void UseDefaultSecurityToken();
6060
v8::Local<v8::Value> GetSecurityToken();
61+
v8::Local<v8::Object> GetExtrasBindingObject();
6162

6263
inline v8::Isolate* GetIsolate() {
6364
return reinterpret_cast<v8::Isolate*> (Isolate());

graal-nodejs/deps/v8/src/graal/graal_isolate.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -753,6 +753,7 @@ GraalIsolate::GraalIsolate(JavaVM* jvm, JNIEnv* env) : function_template_data(),
753753
ACCESS_METHOD(GraalAccessMethod::context_new, "contextNew", "(Ljava/lang/Object;)Ljava/lang/Object;")
754754
ACCESS_METHOD(GraalAccessMethod::context_set_security_token, "contextSetSecurityToken", "(Ljava/lang/Object;Ljava/lang/Object;)V")
755755
ACCESS_METHOD(GraalAccessMethod::context_get_security_token, "contextGetSecurityToken", "(Ljava/lang/Object;)Ljava/lang/Object;")
756+
ACCESS_METHOD(GraalAccessMethod::context_get_extras_binding_object, "contextGetExtrasBindingObject", "(Ljava/lang/Object;)Ljava/lang/Object;")
756757
ACCESS_METHOD(GraalAccessMethod::find_dynamic_object_fields, "findDynamicObjectFields", "(Ljava/lang/Object;)[Ljava/lang/Object;")
757758
ACCESS_METHOD(GraalAccessMethod::proxy_is_function, "proxyIsFunction", "(Ljava/lang/Object;)Z")
758759
ACCESS_METHOD(GraalAccessMethod::proxy_get_handler, "proxyGetHandler", "(Ljava/lang/Object;)Ljava/lang/Object;")

graal-nodejs/deps/v8/src/graal/graal_isolate.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@ enum GraalAccessMethod {
248248
context_get_pointer_in_embedder_data,
249249
context_set_embedder_data,
250250
context_get_embedder_data,
251+
context_get_extras_binding_object,
251252
try_catch_exception,
252253
try_catch_has_terminated,
253254
message_get_script_resource_name,

graal-nodejs/deps/v8/src/graal/v8.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2685,8 +2685,7 @@ namespace v8 {
26852685
}
26862686

26872687
Local<Object> Context::GetExtrasBindingObject() {
2688-
TRACE
2689-
return Global();
2688+
return reinterpret_cast<GraalContext*> (this)->GetExtrasBindingObject();
26902689
}
26912690

26922691
void Isolate::DiscardThreadSpecificMetadata() {

graal-nodejs/mx.graal-nodejs/com.oracle.truffle.trufflenode/src/com/oracle/truffle/trufflenode/GraalJSAccess.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2396,6 +2396,44 @@ public Object contextGetSecurityToken(Object context) {
23962396
return (securityToken == null) ? Undefined.instance : securityToken;
23972397
}
23982398

2399+
public Object contextGetExtrasBindingObject(Object context) {
2400+
RealmData contextData = getRealmEmbedderData(context);
2401+
DynamicObject extras = contextData.getExtrasBindingObject();
2402+
if (extras == null) {
2403+
extras = initializeExtrasBindingObject((JSRealm) context);
2404+
contextData.setExtrasBindingObject(extras);
2405+
}
2406+
return extras;
2407+
}
2408+
2409+
private DynamicObject initializeExtrasBindingObject(JSRealm realm) {
2410+
DynamicObject extras = JSUserObject.create(realm.getContext(), realm);
2411+
2412+
// isTraceCategoryEnabled
2413+
JavaScriptRootNode isEnabledRootNode = new JavaScriptRootNode() {
2414+
@Override
2415+
public Object execute(VirtualFrame vf) {
2416+
return false; // tracing is not supported
2417+
}
2418+
};
2419+
JSFunctionData isEnabledFunctionData = JSFunctionData.createCallOnly(realm.getContext(), Truffle.getRuntime().createCallTarget(isEnabledRootNode), 0, "isTraceCategoryEnabled");
2420+
DynamicObject isEnabledFunction = JSFunction.create(realm, isEnabledFunctionData);
2421+
JSObject.set(extras, "isTraceCategoryEnabled", isEnabledFunction);
2422+
2423+
// trace
2424+
JavaScriptRootNode traceRootNode = new JavaScriptRootNode() {
2425+
@Override
2426+
public Object execute(VirtualFrame vf) {
2427+
return Undefined.instance; // tracing is not supported
2428+
}
2429+
};
2430+
JSFunctionData traceFunctionData = JSFunctionData.createCallOnly(realm.getContext(), Truffle.getRuntime().createCallTarget(traceRootNode), 0, "trace");
2431+
DynamicObject traceFunction = JSFunction.create(realm, traceFunctionData);
2432+
JSObject.set(extras, "trace", traceFunction);
2433+
2434+
return extras;
2435+
}
2436+
23992437
public void contextSetPointerInEmbedderData(Object context, int index, long pointer) {
24002438
contextSetEmbedderData(context, index, pointer);
24012439
}

graal-nodejs/mx.graal-nodejs/com.oracle.truffle.trufflenode/src/com/oracle/truffle/trufflenode/RealmData.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ public final class RealmData {
5555
private DynamicObject nativeUtf8Write;
5656
private DynamicObject nativeUtf8Slice;
5757
private DynamicObject resolverFactory;
58+
private DynamicObject extrasBindingObject;
5859

5960
public RealmData() {
6061
}
@@ -98,4 +99,13 @@ public void setResolverFactory(DynamicObject resolverFactory) {
9899
public DynamicObject getResolverFactory() {
99100
return resolverFactory;
100101
}
102+
103+
public void setExtrasBindingObject(DynamicObject extrasBindingObject) {
104+
this.extrasBindingObject = extrasBindingObject;
105+
}
106+
107+
public DynamicObject getExtrasBindingObject() {
108+
return extrasBindingObject;
109+
}
110+
101111
}

graal-nodejs/mx.graal-nodejs/com.oracle.truffle.trufflenode/src/svmnodejs.jniconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
{ "name": "booleanObjectValueOf" },
2929
{ "name": "clearWeak" },
3030
{ "name": "contextGetEmbedderData" },
31+
{ "name": "contextGetExtrasBindingObject" },
3132
{ "name": "contextGetPointerInEmbedderData" },
3233
{ "name": "contextGetSecurityToken" },
3334
{ "name": "contextGlobal" },

0 commit comments

Comments
 (0)