10000 Move __bases__ and __instancecheck__ from ForeignObjectBuiltins to Fo… · oracle/graalpython@17c4bf0 · GitHub
[go: up one dir, main page]

Skip to content

Commit 17c4bf0

Browse files
eregonansalond
authored andcommitted
Move __bases__ and __instancecheck__ from ForeignObjectBuiltins to ForeignAbstractClassBuiltins
(cherry picked from commit f69bb09)
1 parent 195d4bb commit 17c4bf0

File tree

6 files changed

+101
-51
lines changed

6 files changed

+101
-51
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,7 @@
259259
import com.oracle.graal.python.builtins.objects.exception.UnicodeTranslateErrorBuiltins;
260260
import com.oracle.graal.python.builtins.objects.floats.FloatBuiltins;
261261
import com.oracle.graal.python.builtins.objects.floats.PFloat;
262+
import com.oracle.graal.python.builtins.objects.foreign.ForeignAbstractClassBuiltins;
262263
import com.oracle.graal.python.builtins.objects.foreign.ForeignBooleanBuiltins;
263264
import com.oracle.graal.python.builtins.objects.foreign.ForeignNumberBuiltins;
264265
import com.oracle.graal.python.builtins.objects.foreign.ForeignObjectBuiltins;
@@ -487,6 +488,7 @@ private static PythonBuiltins[] initializeBuiltins(boolean nativeAccessAllowed,
487488
new ForeignObjectBuiltins(),
488489
new ForeignNumberBuiltins(),
489490
new ForeignBooleanBuiltins(),
491+
new ForeignAbstractClassBuiltins(),
490492
new ListBuiltins(),
491493
new DictBuiltins(),
492494
new DictReprBuiltin(),

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,7 @@ public enum PythonBuiltinClassType implements TruffleObject {
304304
ForeignObject("ForeignObject", J_POLYGLOT, Flags.PUBLIC_BASE_WDICT, ForeignObjectBuiltins.SLOTS),
305305
ForeignNumber("ForeignNumber", J_POLYGLOT, Flags.PUBLIC_BASE_WDICT, FOREIGNNUMBER_M_FLAGS, ForeignNumberBuiltins.SLOTS),
306306
ForeignBoolean("ForeignBoolean", J_POLYGLOT, Flags.PUBLIC_BASE_WDICT, FOREIGNNUMBER_M_FLAGS, ForeignBooleanBuiltins.SLOTS),
307+
ForeignAbstractClass("ForeignAbstractClass", J_POLYGLOT, Flags.PUBLIC_BASE_WDICT),
307308

308309
// bz2
309310
BZ2Compressor("BZ2Compressor", "_bz2"),
@@ -839,6 +840,7 @@ public final Shape getInstanceShape(PythonLanguage lang) {
839840

840841
ForeignNumber.base = ForeignObject;
841842
ForeignBoolean.base = ForeignNumber;
843+
ForeignAbstractClass.base = ForeignObject;
842844

843845
PBaseExceptionGroup.base = PBaseException;
844846
SystemExit.base = PBaseException;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
/*
2+
* Copyright (c) 2017, 2025, Oracle and/or its affiliates.
3+
* Copyright (c) 2014, Regents of the University of California
4+
*
5+
* All rights reserved.
6+
*
7+
* Redistribution and use in source and binary forms, with or without modification, are
8+
* permitted provided that the following conditions are met:
9+
*
10+
* 1. Redistributions of source code must retain the above copyright notice, this list of
11+
* conditions and the following disclaimer.
12+
* 2. Redistributions in binary form must reproduce the above copyright notice, this list of
13+
* conditions and the following disclaimer in the documentation and/or other materials provided
14+
* with the distribution.
15+
*
16+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
17+
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18+
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19+
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20+
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
21+
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
22+
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
23+
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
24+
* OF THE POSSIBILITY OF SUCH DAMAGE.
25+
*/
26+
27+
package com.oracle.graal.python.builtins.objects.foreign;
28+
29+
import com.oracle.graal.python.builtins.Builtin;
30+
import com.oracle.graal.python.builtins.CoreFunctions;
31+
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
32+
import com.oracle.graal.python.builtins.PythonBuiltins;
33+
import com.oracle.graal.python.nodes.functi F438 on.PythonBuiltinBaseNode;
34+
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
35+
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
36+
import com.oracle.graal.python.runtime.GilNode;
37+
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
38+
import com.oracle.graal.python.util.PythonUtils;
39+
import com.oracle.truffle.api.CompilerDirectives;
40+
import com.oracle.truffle.api.dsl.Cached;
41+
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
42+
import com.oracle.truffle.api.dsl.NodeFactory;
43+
import com.oracle.truffle.api.dsl.Specialization;
44+
import com.oracle.truffle.api.interop.InteropLibrary;
45+
import com.oracle.truffle.api.interop.UnsupportedMessageException;
46+
import com.oracle.truffle.api.library.CachedLibrary;
47+
48+
import java.util.List;
49+
50+
import static com.oracle.graal.python.nodes.SpecialAttributeNames.J___BASES__;
51+
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___INSTANCECHECK__;
52+
53+
/*
54+
* NOTE: We are not using IndirectCallContext here in this file (except for CallNode)
55+
* because it seems unlikely that these interop messages would call back to Python
56+
* and that we would also need precise frame info for that case.
57+
* Adding it shouldn't hurt peak, but might be a non-trivial overhead in interpreter.
58+
*/
59+
@CoreFunctions(extendClasses = PythonBuiltinClassType.ForeignAbstractClass)
60+
public final class ForeignAbstractClassBuiltins extends PythonBuiltins {
61+
@Override
62+
protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFactories() {
63+
return ForeignAbstractClassBuiltinsFactory.getFactories();
64+
}
65+
66+
@Builtin(name = J___BASES__, minNumOfPositionalArgs = 1, isGetter = true, isSetter = false)
67+
@GenerateNodeFactory
68+
abstract static class BasesNode extends PythonUnaryBuiltinNode {
69+
@Specialization
70+
static Object getBases(Object self,
71+
@Cached PythonObjectFactory factory) {
72+
return factory.createTuple(PythonUtils.EMPTY_OBJECT_ARRAY);
73+
}
74+
}
75+
76+
@Builtin(name = J___INSTANCECHECK__, minNumOfPositionalArgs = 2)
77+
@GenerateNodeFactory
78+
abstract static class InstancecheckNode extends PythonBinaryBuiltinNode {
79+
@Specialization(limit = "3")
80+
static Object check(Object self, Object instance,
81+
@CachedLibrary("self") InteropLibrary lib,
82+
@Cached GilNode gil) {
83+
gil.release(true);
84+
try {
85+
return lib.isMetaInstance(self, instance);
86+
} catch (UnsupportedMessageException e) {
87+
throw CompilerDirectives.shouldNotReachHere();
88+
} finally {
89+
gil.acquire();
90+
}
91+
}
92+
}
93+
94+
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/foreign/ForeignObjectBuiltins.java

Lines changed: 1 addition & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017, 2024, Oracle and/or its affiliates.
2+
* Copyright (c) 2017, 2025, Oracle and/or its affiliates.
33
* Copyright (c) 2014, Regents of the University of California
44
*
55
* All rights reserved.
@@ -29,17 +29,13 @@
2929
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.AttributeError;
3030
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.TypeError;
3131
import static com.oracle.graal.python.builtins.objects.str.StringUtils.simpleTruffleStringFormatUncached;
32-
import static com.oracle.graal.python.nodes.SpecialAttributeNames.J___BASES__;
33-
import static com.oracle.graal.python.nodes.SpecialAttributeNames.T___BASES__;
3432
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___CALL__;
3533
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___DIR__;
3634
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___HASH__;
37-
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___INSTANCECHECK__;
3835
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___ITER__;
3936
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___NEW__;
4037
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___REPR__;
4138
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___STR__;
42-
import static com.oracle.graal.python.nodes.SpecialMethodNames.T___INSTANCECHECK__;
4339
import static com.oracle.graal.python.util.PythonUtils.TS_ENCODING;
4440

4541
import java.util.List;
@@ -66,7 +62,6 @@
6662
import com.oracle.graal.python.nodes.call.special.LookupAndCallUnaryNode;
6763
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
6864
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
69-
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
7065
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
7166
import com.oracle.graal.python.nodes.interop.PForeignToPTypeNode;
7267
import com.oracle.graal.python.nodes.object.BuiltinClassProfiles.IsBuiltinObjectProfile;
@@ -82,7 +77,6 @@
8277
import com.oracle.graal.python.runtime.exception.PException;
8378
import com.oracle.graal.python.runtime.exception.PythonErrorType;
8479
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
85-
import com.oracle.graal.python.util.PythonUtils;
8680
import com.oracle.truffle.api.CompilerDirectives;
8781
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
8882
import com.oracle.truffle.api.dsl.Bind;
@@ -497,47 +491,4 @@ protected TruffleString defaultConversion(VirtualFrame frame, InteropLibrary lib
497491
}
498492
}
499493

500-
@Builtin(name = J___BASES__, minNumOfPositionalArgs = 1, isGetter = true, isSetter = false)
501-
@GenerateNodeFactory
502-
@ImportStatic(PGuards.class)
503-
abstract static class BasesNode extends PythonUnaryBuiltinNode {
504-
@Specialization(limit = "3")
505-
static Object getBases(Object self,
506-
@Bind("this") Node inliningTarget,
507-
@CachedLibrary("self") InteropLibrary lib,
508-
@Cached PythonObjectFactory factory,
509-
@Cached PRaiseNode.Lazy raiseNode) {
510-
if (lib.isMetaObject(self)) {
511-
return factory.createTuple(PythonUtils.EMPTY_OBJECT_ARRAY);
512-
} else {
513-
throw raiseNode.get(inliningTarget).raise(AttributeError, ErrorMessages.FOREIGN_OBJ_HAS_NO_ATTR_S, T___BASES__);
514-
}
515-
}
516-
}
517-
518-
@Builtin(name = J___INSTANCECHECK__, minNumOfPositionalArgs = 2)
519-
@GenerateNodeFactory
520-
@ImportStatic(PGuards.class)
521-
abstract static class InstancecheckNode extends PythonBinaryBuiltinNode {
522-
@Specialization(limit = "3")
523-
static Object check(Object self, Object instance,
524-
@Bind("this") Node inliningTarget,
525-
@CachedLibrary("self") InteropLibrary lib,
526-
@Cached GilNode gil,
527-
@Cached PRaiseNode.Lazy raiseNode) {
528-
if (lib.isMetaObject(self)) {
529-
gil.release(true);
530-
try {
531-
return lib.isMetaInstance(self, instance);
532-
} catch (UnsupportedMessageException e) {
533-
throw CompilerDirectives.shouldNotReachHere();
534-
} finally {
535-
gil.acquire();
536-
}
537-
} else {
538-
throw raiseNode.get(inliningTarget).raise(AttributeError, ErrorMessages.FOREIGN_OBJ_HAS_NO_ATTR_S, T___INSTANCECHECK__);
539-
}
540-
}
541-
}
542-
543494
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/object/GetForeignObjectClassNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public enum Trait {
9393
NUMBER("Number", PythonBuiltinClassType.ForeignNumber), // int, float, complex
9494
STRING("String", PythonBuiltinClassType.PString),
9595
EXCEPTION("Exception", PythonBuiltinClassType.PBaseException),
96-
META_OBJECT("AbstractClass"), // PythonBuiltinClassType.PythonClass ?
96+
META_OBJECT("AbstractClass", PythonBuiltinClassType.ForeignAbstractClass),
9797

9898
// Interop traits
9999
EXECUTABLE("Executable"),

mx.graalpython/copyrights/overrides

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -617,6 +617,7 @@ graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects
617617
graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/floats/FloatBuiltins.java,zippy.copyright
618618
graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/floats/PFloat.java,zippy.copyright
619619
graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/foreign/ForeignObjectBuiltins.java,zippy.copyright
620+
graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/foreign/ForeignAbstractClassBuiltins.java,zippy.copyright
620621
graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/foreign/ForeignBooleanBuiltins.java,zippy.copyright
621622
graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/foreign/ForeignNumberBuiltins.java,zippy.copyright
622623
graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/frame/FrameBuiltins.java,zippy.copyright

0 commit comments

Comments
 (0)
0