Skip to content

Commit a7e0ec4

Browse files
committed
add java.add_to_classpath API
1 parent a483150 commit a7e0ec4

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
This changelog summarizes major changes between GraalVM versions of the Python
44
language runtime. The main focus is on user-observable behavior of the engine.
55

6+
## Version 20.0.0 beta 2
7+
8+
* Add `java.add_to_classpath` API to dynamically extend the host class path
9+
610
## Version 20.0.0 beta 1
711

812
* Update Python standard library files to Python 3.7.3

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/JavaModuleBuiltins.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,22 @@
4848
import com.oracle.graal.python.builtins.Builtin;
4949
import com.oracle.graal.python.builtins.CoreFunctions;
5050
import com.oracle.graal.python.builtins.PythonBuiltins;
51+
import com.oracle.graal.python.builtins.objects.PNone;
5152
import com.oracle.graal.python.builtins.objects.str.PString;
5253
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
54+
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
5355
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
5456
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
57+
import com.oracle.graal.python.nodes.util.CastToStringNode;
5558
import com.oracle.graal.python.runtime.PythonCore;
5659
import com.oracle.graal.python.runtime.exception.PythonErrorType;
5760
import com.oracle.truffle.api.TruffleLanguage.Env;
61+
import com.oracle.truffle.api.dsl.Cached;
5862
import com.oracle.truffle.api.dsl.Fallback;
5963
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
6064
import com.oracle.truffle.api.dsl.NodeFactory;
6165
import com.oracle.truffle.api.dsl.Specialization;
66+
import com.oracle.truffle.api.frame.VirtualFrame;
6267
import com.oracle.truffle.api.interop.TruffleObject;
6368

6469
@CoreFunctions(defineModule = "java")
@@ -106,6 +111,25 @@ Object type(PString name) {
106111
}
107112
}
108113

114+
@Builtin(name = "add_to_classpath", takesVarArgs = true)
115+
@GenerateNodeFactory
116+
abstract static class AddToClassPathNode extends PythonBuiltinNode {
117+
@Specialization
118+
PNone add(VirtualFrame frame, Object[] args,
119+
@Cached CastToStringNode castToString) {
120+
Env env = getContext().getEnv();
121+
for (Object arg : args) {
122+
String entry = castToString.execute(frame, arg);
123+
try {
124+
env.addToHostClassPath(env.getTruffleFile(entry));
125+
} catch (SecurityException e) {
126+
throw raise(TypeError, "invalid or unreadable classpath: '%s' - %m", entry, e);
127+
}
128+
}
129+
return PNone.NONE;
130+
}
131+
}
132+
109133
@Builtin(name = "is_function", minNumOfPositionalArgs = 1)
110134
@GenerateNodeFactory
111135
abstract static class IsFunctionNode extends PythonUnaryBuiltinNode {

0 commit comments

Comments
 (0)