Skip to content

Commit db9eaf6

Browse files
committed
[GR-38617] Avoid importing whole threading module when creating a ContextVar.
PullRequest: graalpython/2251
2 parents d81a52d + 9a91b8e commit db9eaf6

File tree

1 file changed

+7
-16
lines changed

1 file changed

+7
-16
lines changed

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

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -42,21 +42,20 @@
4242

4343
import static com.oracle.graal.python.nodes.BuiltinNames.CONTEXTVARS;
4444

45-
import com.oracle.graal.python.builtins.Builtin;
4645
import java.util.List;
4746

47+
import com.oracle.graal.python.builtins.Builtin;
4848
import com.oracle.graal.python.builtins.CoreFunctions;
4949
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
5050
import com.oracle.graal.python.builtins.PythonBuiltins;
5151
import com.oracle.graal.python.builtins.objects.PNone;
5252
import com.oracle.graal.python.builtins.objects.contextvars.PContextVar;
53-
import com.oracle.graal.python.lib.PyObjectLookupAttr;
54-
import com.oracle.graal.python.nodes.call.CallNode;
53+
import com.oracle.graal.python.builtins.objects.function.PKeyword;
5554
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
5655
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
5756
import com.oracle.graal.python.nodes.function.builtins.PythonTernaryBuiltinNode;
5857
import com.oracle.graal.python.nodes.statement.ImportNode;
59-
import com.oracle.truffle.api.dsl.Cached;
58+
import com.oracle.graal.python.util.PythonUtils;
6059
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
6160
import com.oracle.truffle.api.dsl.NodeFactory;
6261
import com.oracle.truffle.api.dsl.Specialization;
@@ -83,21 +82,13 @@ protected Object copyCtx() {
8382
@GenerateNodeFactory
8483
public abstract static class ContextVarNode extends PythonTernaryBuiltinNode {
8584
@Specialization
86-
protected Object construct(VirtualFrame frame, Object cls, String name, PNone def,
87-
@Cached("createImportThreading()") ImportNode.ImportExpression threadingImport,
88-
@Cached PyObjectLookupAttr lookupAttrNode,
89-
@Cached CallNode callNode) {
90-
return constructDef(frame, cls, name, PContextVar.NO_DEFAULT, threadingImport, lookupAttrNode, callNode);
85+
protected Object construct(VirtualFrame frame, Object cls, String name, PNone def) {
86+
return constructDef(frame, cls, name, PContextVar.NO_DEFAULT);
9187
}
9288

9389
@Specialization(guards = "!isPNone(def)")
94-
protected Object constructDef(VirtualFrame frame, Object cls, String name, Object def,
95-
@Cached("createImportThreading()") ImportNode.ImportExpression threadingImport,
96-
@Cached PyObjectLookupAttr lookupAttrNode,
97-
@Cached CallNode callNode) {
98-
Object threading = threadingImport.execute(frame);
99-
Object localCallable = lookupAttrNode.execute(frame, threading, "local");
100-
Object local = callNode.execute(frame, localCallable);
90+
protected Object constructDef(VirtualFrame frame, Object cls, String name, Object def) {
91+
Object local = factory().createThreadLocal(PythonBuiltinClassType.PThreadLocal, PythonUtils.EMPTY_OBJECT_ARRAY, PKeyword.EMPTY_KEYWORDS);
10192
return factory().createContextVar(name, def, local);
10293
}
10394

0 commit comments

Comments
 (0)