Skip to content

Commit 7d04ee2

Browse files
committed
added BuiltinMethodBuiltins.__objclass__
1 parent 61aa95e commit 7d04ee2

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/function/BuiltinFunctionBuiltins.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__NAME__;
3030
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__QUALNAME__;
3131
import static com.oracle.graal.python.nodes.SpecialMethodNames.__REPR__;
32+
import static com.oracle.graal.python.nodes.SpecialMethodNames.__OBJCLASS__;
3233

3334
import java.util.List;
3435

@@ -107,7 +108,7 @@ Object setQualname(@SuppressWarnings("unused") PBuiltinFunction self, @SuppressW
107108
}
108109
}
109110

110-
@Builtin(name = "__objclass__", minNumOfPositionalArgs = 1, isGetter = true)
111+
@Builtin(name = __OBJCLASS__, minNumOfPositionalArgs = 1, isGetter = true)
111112
@TypeSystemReference(PythonArithmeticTypes.class)
112113
@GenerateNodeFactory
113114
public abstract static class ObjclassNode extends PythonUnaryBuiltinNode {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/method/BuiltinMethodBuiltins.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,25 +42,31 @@
4242
import com.oracle.graal.python.builtins.objects.function.PFunction;
4343
import com.oracle.graal.python.builtins.objects.module.PythonModule;
4444
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
45+
import com.oracle.graal.python.builtins.objects.type.PythonAbstractClass;
4546
import com.oracle.graal.python.builtins.objects.type.TypeNodes.GetNameNode;
4647
import com.oracle.graal.python.nodes.ErrorMessages;
4748
import com.oracle.graal.python.nodes.SpecialAttributeNames;
49+
import static com.oracle.graal.python.nodes.SpecialMethodNames.__OBJCLASS__;
4850
import com.oracle.graal.python.nodes.attributes.GetAttributeNode;
4951
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
5052
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
5153
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
54+
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
5255
import com.oracle.graal.python.nodes.util.CannotCastException;
5356
import com.oracle.graal.python.nodes.util.CastToJavaStringNode;
5457
import com.oracle.graal.python.runtime.exception.PException;
58+
import com.oracle.graal.python.runtime.exception.PythonErrorType;
5559
import com.oracle.truffle.api.CompilerDirectives;
5660
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
5761
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.dsl.TypeSystemReference;
6267
import com.oracle.truffle.api.frame.VirtualFrame;
6368
import com.oracle.truffle.api.library.CachedLibrary;
69+
import com.oracle.truffle.api.profiles.ConditionProfile;
6470

6571
@CoreFunctions(extendClasses = {PythonBuiltinClassType.PBuiltinMethod})
6672
public class BuiltinMethodBuiltins extends PythonBuiltins {
@@ -194,4 +200,21 @@ Object getTextSignature(VirtualFrame frame, PMethod self, Object value) {
194200
return subNode.execute(frame, self.getFunction(), value);
195201
}
196202
}
203+
204+
@Builtin(name = __OBJCLASS__, minNumOfPositionalArgs = 1, isGetter = true)
205+
@TypeSystemReference(PythonArithmeticTypes.class)
206+
@GenerateNodeFactory
207+
public abstract static class ObjclassNode extends PythonUnaryBuiltinNode {
208+
@Specialization(guards = "self.getFunction().getEnclosingType() == null")
209+
Object objclassMissing(@SuppressWarnings("unused") PBuiltinMethod self) {
210+
throw raise(PythonErrorType.AttributeError, ErrorMessages.OBJ_P_HAS_NO_ATTR_S, "builtin_function_or_method", "__objclass__");
211+
}
212+
213+
@Specialization(guards = "self.getFunction().getEnclosingType() != null")
214+
@TruffleBoundary
215+
PythonAbstractClass objclass(PBuiltinMethod self,
216+
@Cached("createBinaryProfile()") ConditionProfile profile) {
217+
return getPythonClass(self.getFunction().getEnclosingType(), profile);
218+
}
219+
}
197220
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/SpecialMethodNames.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ public abstract class SpecialMethodNames {
156156
public static final String __SETSTATE__ = "__setstate__";
157157
public static final String __GETFORMAT__ = "__getformat__";
158158
public static final String __SETFORMAT__ = "__setformat__";
159+
public static final String __OBJCLASS__ = "__objclass__";
159160
public static final String KEYS = "keys";
160161
public static final String ITEMS = "items";
161162
public static final String VALUES = "values";

0 commit comments

Comments
 (0)