|
44 | 44 | import static com.oracle.graal.python.nodes.SpecialAttributeNames.__DICT__;
|
45 | 45 | import static com.oracle.graal.python.nodes.SpecialAttributeNames.__FUNC__;
|
46 | 46 | import static com.oracle.graal.python.nodes.SpecialMethodNames.__INIT__;
|
| 47 | +import static com.oracle.graal.python.nodes.SpecialMethodNames.__ISABSTRACTMETHOD__; |
47 | 48 |
|
48 | 49 | import java.util.List;
|
49 | 50 |
|
|
66 | 67 | import com.oracle.truffle.api.dsl.ImportStatic;
|
67 | 68 | import com.oracle.truffle.api.dsl.NodeFactory;
|
68 | 69 | import com.oracle.truffle.api.dsl.Specialization;
|
| 70 | +import com.oracle.truffle.api.frame.VirtualFrame; |
69 | 71 | import com.oracle.truffle.api.interop.UnsupportedMessageException;
|
70 | 72 | import com.oracle.truffle.api.library.CachedLibrary;
|
| 73 | +import com.oracle.truffle.api.profiles.ConditionProfile; |
71 | 74 |
|
72 | 75 | @CoreFunctions(extendClasses = {PythonBuiltinClassType.PStaticmethod, PythonBuiltinClassType.PClassmethod})
|
73 | 76 | public class DecoratedMethodBuiltins extends PythonBuiltins {
|
@@ -134,4 +137,19 @@ protected Object setDict(@SuppressWarnings("unused") PDecoratedMethod self, Obje
|
134 | 137 | throw raise(TypeError, ErrorMessages.DICT_MUST_BE_SET_TO_DICT, mapping);
|
135 | 138 | }
|
136 | 139 | }
|
| 140 | + |
| 141 | + @Builtin(name = __ISABSTRACTMETHOD__, minNumOfPositionalArgs = 1, isGetter = true) |
| 142 | + @GenerateNodeFactory |
| 143 | + abstract static class IsAbstractMethodNode extends PythonUnaryBuiltinNode { |
| 144 | + @Specialization |
| 145 | + static boolean isAbstract(VirtualFrame frame, PDecoratedMethod self, |
| 146 | + @CachedLibrary(limit = "4") PythonObjectLibrary lib, |
| 147 | + @Cached ConditionProfile hasAttrProfile) { |
| 148 | + Object result = lib.lookupAttribute(self.getCallable(), frame, __ISABSTRACTMETHOD__); |
| 149 | + if (hasAttrProfile.profile(result != PNone.NO_VALUE)) { |
| 150 | + return lib.isTrue(result, frame); |
| 151 | + } |
| 152 | + return false; |
| 153 | + } |
| 154 | + } |
137 | 155 | }
|
0 commit comments