Skip to content

Commit 654673b

Browse files
committed
pass out the main module directly as top scope and make sure it is writable
1 parent a7e0ec4 commit 654673b

File tree

4 files changed

+12
-2
lines changed

4 files changed

+12
-2
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ language runtime. The main focus is on user-observable behavior of the engine.
66
## Version 20.0.0 beta 2
77

88
* Add `java.add_to_classpath` API to dynamically extend the host class path
9+
* Allow write access to main module bindings for embedder
910

1011
## Version 20.0.0 beta 1
1112

graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/test/interop/JavaInteropTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -501,6 +501,14 @@ public void accessJavaObjectGetters() throws IOException {
501501
"True <class 'bool'>\n" +
502502
"c <class 'str'>\n", out.toString("UTF-8"));
503503
}
504+
505+
@Test
506+
public void writableBindings() {
507+
context.getBindings("python").putMember("javaObj", 42);
508+
Value javaObj = context.eval("python", "javaObj");
509+
assertTrue(javaObj.isNumber());
510+
assertEquals(javaObj.asInt(), 42);
511+
}
504512
}
505513

506514
@RunWith(Parameterized.class)

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/PythonLanguage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,7 @@ protected Iterable<Scope> findTopScopes(PythonContext context) {
458458
ArrayList<Scope> scopes = new ArrayList<>();
459459
if (context.getBuiltins() != null) {
460460
// false during initialization
461-
scopes.add(Scope.newBuilder("__main__", scopeFromObject(context.getMainModule())).build());
461+
scopes.add(Scope.newBuilder("__main__", context.getMainModule()).build());
462462
scopes.add(Scope.newBuilder("builtins", scopeFromObject(context.getBuiltins())).build());
463463
}
464464
return scopes;

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/PythonAbstractObject.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import com.oracle.graal.python.builtins.objects.function.PKeyword;
5757
import com.oracle.graal.python.builtins.objects.ints.PInt;
5858
import com.oracle.graal.python.builtins.objects.list.PList;
59+
import com.oracle.graal.python.builtins.objects.module.PythonModule;
5960
import com.oracle.graal.python.builtins.objects.object.PythonBuiltinObject;
6061
import com.oracle.graal.python.builtins.objects.object.PythonObject;
6162
import com.oracle.graal.python.builtins.objects.str.PString;
@@ -675,7 +676,7 @@ public boolean isImmutable(Object object,
675676
// 'type'
676677
if (object instanceof PythonBuiltinClass || object instanceof PythonBuiltinObject || PGuards.isNativeClass(object) || PGuards.isNativeObject(object)) {
677678
return true;
678-
} else if (object instanceof PythonClass) {
679+
} else if (object instanceof PythonClass || object instanceof PythonModule) {
679680
return false;
680681
} else {
681682
LazyPythonClass klass = getClass.execute(object);

0 commit comments

Comments
 (0)