Skip to content

Commit e92dc94

Browse files
committed
allow more code sharing
1 parent bfd6e6a commit e92dc94

File tree

8 files changed

+29
-14
lines changed

8 files changed

+29
-14
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/Python3Core.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,9 +282,14 @@ public final class Python3Core implements PythonCore {
282282
@CompilationFinal(dimensions = 1) private PythonClass[] errorClasses;
283283
private final PythonParser parser;
284284

285-
@CompilationFinal private boolean initialized;
286285
@CompilationFinal private PythonContext singletonContext;
287286

287+
/*
288+
* This field cannot be made CompilationFinal since code might get compiled during context
289+
* initialization.
290+
*/
291+
private boolean initialized;
292+
288293
private final PythonObjectFactory factory = PythonObjectFactory.create();
289294

290295
public Python3Core(PythonParser parser) {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2027,6 +2027,7 @@ Object call(PythonClass getSetClass, PNone set, PNone get, String name, PythonCl
20272027
}
20282028

20292029
@Fallback
2030+
@TruffleBoundary
20302031
Object call(Object klsas, Object set, Object get, Object name, Object owner) {
20312032
denyInstantiationAfterInitialization();
20322033
throw new RuntimeException("error in creating getset_descriptor during core initialization");

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/PythonObjectNativeWrapperMR.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -657,6 +657,7 @@ long doTpBasicsize(PythonBuiltinClass object, @SuppressWarnings("unused") String
657657
}
658658

659659
@Specialization(guards = {"eq(TP_BASICSIZE, key)", "isPythonUserClass(object)"})
660+
@TruffleBoundary
660661
long doTpBasicsize(PythonClass object, @SuppressWarnings("unused") String key, long basicsize) {
661662
// Do deliberately not use "SetAttributeNode" because we want to directly set the
662663
// attribute an bypass any user code.

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/common/HashingStorageNodes.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -710,11 +710,6 @@ protected HashingStorage doDynamicObjectGeneralize(FastDictStorage storage, Stri
710710
@TruffleBoundary
711711
@Specialization(guards = {"!storage.getStore().getShape().isValid()"})
712712
protected HashingStorage doDynamicObjectUpdateShape(DynamicObjectStorage storage, String name, Object value) {
713-
/*
714-
* Slow path that we do not handle in compiled code. But no need to invalidate compiled
715-
* code.
716-
*/
717-
CompilerDirectives.transferToInterpreter();
718713
storage.getStore().updateShape();
719714
return doDynamicObjectUncached(storage, name, value);
720715
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/type/PythonBuiltinClass.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
3333
import com.oracle.graal.python.builtins.objects.function.Arity;
3434
import com.oracle.graal.python.builtins.objects.function.PythonCallable;
35-
import com.oracle.truffle.api.CompilerDirectives;
35+
import com.oracle.truffle.api.CompilerAsserts;
3636
import com.oracle.truffle.api.object.HiddenKey;
3737

3838
/**
@@ -49,7 +49,7 @@ public PythonBuiltinClass(PythonBuiltinClassType builtinClass, PythonClass base)
4949

5050
@Override
5151
public void setAttribute(Object name, Object value) {
52-
CompilerDirectives.transferToInterpreter();
52+
CompilerAsserts.neverPartOfCompilation();
5353
if (name instanceof HiddenKey || !PythonLanguage.getCore().isInitialized()) {
5454
setAttributeUnsafe(name, value);
5555
} else {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/frame/ReadGlobalOrBuiltinNode.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.oracle.graal.python.builtins.objects.common.HashingStorageNodes;
3333
import com.oracle.graal.python.builtins.objects.dict.PDict;
3434
import com.oracle.graal.python.builtins.objects.function.PArguments;
35+
import com.oracle.graal.python.builtins.objects.module.PythonModule;
3536
import com.oracle.graal.python.builtins.objects.object.PythonObject;
3637
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromObjectNode;
3738
import com.oracle.graal.python.nodes.expression.ExpressionNode;
@@ -56,6 +57,7 @@ public abstract class ReadGlobalOrBuiltinNode extends ExpressionNode implements
5657
protected final String attributeId;
5758
protected final ConditionProfile isGlobalProfile = ConditionProfile.createBinaryProfile();
5859
protected final ConditionProfile isBuiltinProfile = ConditionProfile.createBinaryProfile();
60+
protected final ConditionProfile isInitializedProfile = ConditionProfile.createBinaryProfile();
5961
@Child private HashingStorageNodes.GetItemNode getHashingItemNode;
6062
@Child private GetItemNode readFromDictNode;
6163

@@ -115,13 +117,13 @@ private Object returnGlobalOrBuiltin(Object result) {
115117
}
116118
PythonContext context = getContext();
117119
PythonCore core = context.getCore();
118-
Object builtin;
119-
if (core.isInitialized()) {
120-
builtin = readFromBuiltinsNode.execute(context.getBuiltins(), attributeId);
120+
PythonModule builtins;
121+
if (isInitializedProfile.profile(core.isInitialized())) {
122+
builtins = context.getBuiltins();
121123
} else {
122-
CompilerDirectives.transferToInterpreter();
123-
builtin = readFromBuiltinsNode.execute(core.lookupBuiltinModule("builtins"), attributeId);
124+
builtins = core.lookupBuiltinModule("builtins");
124125
}
126+
Object builtin = readFromBuiltinsNode.execute(builtins, attributeId);
125127
if (isBuiltinProfile.profile(builtin != PNone.NO_VALUE)) {
126128
return builtin;
127129
} else {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/literal/BuiltinsLiteralNode.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@
2525
*/
2626
package com.oracle.graal.python.nodes.literal;
2727

28+
import com.oracle.graal.python.runtime.PythonContext;
29+
import com.oracle.graal.python.runtime.PythonCore;
30+
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
2831
import com.oracle.truffle.api.frame.VirtualFrame;
2932
import com.oracle.truffle.api.nodes.NodeInfo;
3033

@@ -33,6 +36,12 @@ public final class BuiltinsLiteralNode extends LiteralNode {
3336

3437
@Override
3538
public Object execute(VirtualFrame frame) {
36-
return getCore().isInitialized() ? getContext().getBuiltins() : getCore().lookupBuiltinModule("builtins");
39+
return builtinsLiteral(getContext());
40+
}
41+
42+
@TruffleBoundary
43+
private static Object builtinsLiteral(PythonContext context) {
44+
PythonCore core = context.getCore();
45+
return core.isInitialized() ? context.getBuiltins() : core.lookupBuiltinModule("builtins");
3746
}
3847
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/statement/AbstractImportNode.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import com.oracle.graal.python.nodes.call.CallNode;
5252
import com.oracle.graal.python.nodes.object.GetDictNode;
5353
import com.oracle.truffle.api.CompilerDirectives;
54+
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
5455
import com.oracle.truffle.api.instrumentation.StandardTags;
5556
import com.oracle.truffle.api.instrumentation.Tag;
5657

@@ -83,6 +84,7 @@ private GetDictNode getGetDictNode() {
8384
return getDictNode;
8485
}
8586

87+
@TruffleBoundary
8688
protected Object importModule(String name, Object globals, String[] fromList, int level) {
8789
// Look up built-in modules supported by GraalPython
8890
if (!getCore().isInitialized()) {

0 commit comments

Comments
 (0)