Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ def test_build_install_and_run(self):
else:
python = venv_dir / "Scripts" / "python.exe"

cmd = [str(python), "-m", "pip", "install", "build"]
cmd = [str(python), "-m", "pip", "install", "build==1.0.3"]
print("Running:", shlex.join(cmd))
subprocess.check_call(cmd)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -595,6 +595,7 @@ public abstract static class SaveNode extends BasePickleWriteNode {
@Child private PyObjectReprAsTruffleStringNode reprNode;
@Child private PyObjectGetIter getIterNode;
@Child private HashingStorageLen hashingStorageLenNode;
@Child private PyTupleCheckNode.CachedNode tupleCheckNode;

private int getHashingStorageLength(HashingStorage storage) {
if (hashingStorageLenNode == null) {
Expand All @@ -605,7 +606,11 @@ private int getHashingStorageLength(HashingStorage storage) {
}

private boolean isTuple(Object object) {
return PyTupleCheckNode.executeUncached(object);
if (tupleCheckNode == null) {
CompilerDirectives.transferToInterpreterAndInvalidate();
tupleCheckNode = insert(PyTupleCheckNode.CachedNode.create());
}
return tupleCheckNode.execute(object);
}

private void save(VirtualFrame frame, PPickler pickler, Object obj, int persSave) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,6 @@
import com.oracle.truffle.api.CompilerAsserts;
import com.oracle.truffle.api.CompilerDirectives;
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
import com.oracle.truffle.api.HostCompilerDirectives.InliningCutoff;

@CApiFields
public enum CFields {
Expand Down Expand Up @@ -438,7 +437,6 @@ CStructs struct() {
return struct;
}

@InliningCutoff
private static void resolve() {
CompilerAsserts.neverPartOfCompilation();
long offsetsPointer = CApiContext.getNativeCAPIMetadataPointer(null) + (CConstants.VALUES.length + 1L) * Long.BYTES;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ static SequenceStorage doNativeTuple(PythonAbstractNativeObject seq) {
}

static boolean isNativeTuple(PythonAbstractNativeObject seq) {
return PyTupleCheckNode.checkNative(seq);
return PyTupleCheckNode.doNative(seq);
}

// Note: this does not seem currently used but is good to accept foreign lists in more
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
import com.oracle.graal.python.runtime.PythonOptions;
import com.oracle.truffle.api.CompilerAsserts;
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
import com.oracle.truffle.api.HostCompilerDirectives.InliningCutoff;
import com.oracle.truffle.api.dsl.NeverDefault;
import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.api.object.DynamicObject;
Expand Down Expand Up @@ -199,6 +200,7 @@ public final void clearNativePointer() {
this.nativePointer = UNINITIALIZED;
}

@InliningCutoff
public final boolean isNative() {
return nativePointer != UNINITIALIZED;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,6 @@ static boolean doSequence(@SuppressWarnings("unused") PythonAbstractNativeObject
return true;
}

static boolean isNativeTuple(PythonAbstractNativeObject object) {
return PyTupleCheckNode.checkNative(object);
}

@Specialization
static boolean doString(@SuppressWarnings("unused") PString object) {
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,10 +94,6 @@ static boolean doNativeTuple(@SuppressWarnings("unused") PythonAbstractNativeObj
return true;
}

static boolean isNativeTuple(PythonAbstractNativeObject object) {
return PyTupleCheckNode.checkNative(object);
}

@Fallback
static boolean doGeneric(Node inliningTarget, Object object,
@Cached PyDictCheckNode dictCheckNode,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,13 @@
import com.oracle.graal.python.nodes.object.BuiltinClassProfiles.IsBuiltinObjectProfile;
import com.oracle.truffle.api.dsl.Bind;
import com.oracle.truffle.api.dsl.Cached;
import com.oracle.truffle.api.dsl.Fallback;
import com.oracle.truffle.api.dsl.GenerateCached;
import com.oracle.truffle.api.dsl.GenerateInline;
import com.oracle.truffle.api.dsl.GenerateUncached;
import com.oracle.truffle.api.dsl.NeverDefault;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.api.profiles.InlinedBranchProfile;

/** Equivalent of CPython's {@code PyTuple_Check}. */
@GenerateInline
Expand All @@ -77,41 +77,33 @@ public static boolean executeUncached(Object object) {
}

@Specialization
public static boolean doGeneric(Node inliningTarget, Object object,
@Cached InlinedBranchProfile isPTupleProfile,
@Cached InlinedBranchProfile isNativeProfile) {
if (object instanceof PTuple) {
isPTupleProfile.enter(inliningTarget);
return true;
}
if (object instanceof PythonAbstractNativeObject nativeObject) {
isNativeProfile.enter(inliningTarget);
return checkNative(nativeObject);
}
return false;
static boolean doPTuple(@SuppressWarnings("unused") PTuple object) {
return true;
}

public static boolean checkNative(PythonAbstractNativeObject nativeObject) {
@Specialization
public static boolean doNative(PythonAbstractNativeObject nativeObject) {
long obType = readPtrField(nativeObject.pointer, PyObject__ob_type);
boolean isTupleSubclass = (readLongField(obType, CFields.PyTypeObject__tp_flags) & TypeFlags.TUPLE_SUBCLASS) != 0L;
assert IsBuiltinObjectProfile.profileObjectUncached(nativeObject, PythonBuiltinClassType.PTuple) == isTupleSubclass;
return isTupleSubclass;
}

@Fallback
static boolean doOther(@SuppressWarnings("unused") Object object) {
assert !(object instanceof PTuple || object instanceof PythonAbstractNativeObject);
return false;
}

@GenerateInline(false)
public abstract static class CachedNode extends Node {
public abstract boolean execute(Object object);

public final boolean isTupleOrList(Object object) {
return object instanceof PList || execute(object);
}

@Specialization
static boolean doGeneric(Object object,
@Bind Node inliningTarget,
@Cached InlinedBranchProfile isPTupleProfile,
@Cached InlinedBranchProfile isNativeProfile) {
return PyTupleCheckNode.doGeneric(inliningTarget, object, isPTupleProfile, isNativeProfile);
@Cached PyTupleCheckNode tupleCheckNode) {
return tupleCheckNode.execute(inliningTarget, object);
}

@NeverDefault
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
import com.oracle.graal.python.builtins.objects.bytes.PByteArray;
import com.oracle.graal.python.builtins.objects.bytes.PBytes;
import com.oracle.graal.python.builtins.objects.bytes.PBytesLike;
import com.oracle.graal.python.builtins.objects.cext.PythonAbstractNativeObject;
import com.oracle.graal.python.builtins.objects.cext.PythonNativeClass;
import com.oracle.graal.python.builtins.objects.cext.PythonNativeObject;
import com.oracle.graal.python.builtins.objects.code.PCode;
Expand Down Expand Up @@ -90,6 +91,7 @@
import com.oracle.graal.python.builtins.objects.type.TpSlots.GetCachedTpSlotsNode;
import com.oracle.graal.python.builtins.objects.type.TypeNodes;
import com.oracle.graal.python.lib.PyIndexCheckNode;
import com.oracle.graal.python.lib.PyTupleCheckNode;
import com.oracle.graal.python.nodes.object.GetClassNode.GetPythonObjectClassNode;
import com.oracle.graal.python.nodes.object.IsForeignObjectNode;
import com.oracle.graal.python.runtime.exception.PException;
Expand Down Expand Up @@ -327,6 +329,10 @@ public static boolean isPTuple(Object obj) {
return obj instanceof PTuple;
}

public static boolean isNativeTuple(PythonAbstractNativeObject obj) {
return PyTupleCheckNode.doNative(obj);
}

public static boolean isPSequence(Object obj) {
return obj instanceof PSequence;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public abstract class TupleNodes {

@GenerateUncached
@GenerateInline(false) // footprint reduction 40 -> 21
@ImportStatic({PGuards.class, PyTupleCheckNode.class})
@ImportStatic(PGuards.class)
public abstract static class ConstructTupleNode extends PNodeWithContext {
public abstract PTuple execute(Frame frame, Object value);

Expand All @@ -101,7 +101,7 @@ static PTuple list(PList iterable,
return PFactory.createTuple(language, copyNode.execute(inliningTarget, iterable.getSequenceStorage()));
}

@Specialization(guards = "checkNative(iterable)")
@Specialization(guards = "isNativeTuple(iterable)")
static PTuple nativeTuple(PythonAbstractNativeObject iterable,
@Bind Node inliningTarget,
@Bind PythonLanguage language,
Expand Down Expand Up @@ -172,7 +172,7 @@ static PTuple doGeneric(Node inliningTarget, Object object,
if (object instanceof PTuple managedTuple) {
return managedTuple;
}
if (object instanceof PythonAbstractNativeObject nativeTuple && PyTupleCheckNode.checkNative(nativeTuple)) {
if (object instanceof PythonAbstractNativeObject nativeTuple && PyTupleCheckNode.doNative(nativeTuple)) {
// 'GetTupleStorageNode.doNative' will just "wrap" the 'ob_item' pointer. The memory is then still
// owned by the native tuple object. Therefore, we need to copy the storage to a managed storage.
NativeObjectSequenceStorage nativeObjectSequenceStorage = GetTupleStorage.doNative(nativeTuple);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@
import com.oracle.graal.python.builtins.objects.cext.PythonAbstractNativeObject;
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
import com.oracle.graal.python.lib.PyTupleCheckNode;
import com.oracle.graal.python.nodes.PGuards;
import com.oracle.graal.python.nodes.PRaiseNode;
import com.oracle.graal.python.nodes.builtins.TupleNodes;
Expand All @@ -61,7 +60,7 @@
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.nodes.Node;

@ImportStatic({PGuards.class, PyTupleCheckNode.class})
@ImportStatic(PGuards.class)
public abstract class TupleConversionNode extends ArgumentCastNode {
@Specialization
static Object[] doNone(@SuppressWarnings("unused") PNone none) {
Expand All @@ -75,7 +74,7 @@ static Object[] doTuple(PTuple t,
return getInternalArrayNode.execute(inliningTarget, t.getSequenceStorage());
}

@Specialization(guards = "checkNative(t)")
@Specialization(guards = "isNativeTuple(t)")
static Object[] doNativeTuple(PythonAbstractNativeObject t,
@Bind Node inliningTarget,
@Cached TupleNodes.GetTupleStorage getTupleStorage,
Expand Down
Loading