Skip to content

Commit aba1ae9

Browse files
committed
[GR-23218] Make test_descr pass - bunch of smaller fixes.
PullRequest: graalpython/1088
2 parents 916ae5c + 4c2bbf2 commit aba1ae9

File tree

6 files changed

+39
-10
lines changed

6 files changed

+39
-10
lines changed

graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_descr.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,15 @@
1818
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_evil_type_name
1919
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_ex5_from_c3_switch
2020
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_file_fault
21+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_funny_new
2122
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_hash_inheritance
2223
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_imul_bug
2324
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_init
2425
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_ipow
2526
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_isinst_isclass
27+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_keywords
2628
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_meth_class_get
29+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_method_wrapper
2730
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_methods_in_c
2831
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_mixing_slot_wrappers
2932
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_monotonicity

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1902,7 +1902,7 @@ public PSet listObject(@SuppressWarnings("unused") Object cls, Object arg) {
19021902

19031903
// str(object='')
19041904
// str(object=b'', encoding='utf-8', errors='strict')
1905-
@Builtin(name = STR, minNumOfPositionalArgs = 1, parameterNames = {"cls", "object", "encoding", "errors"}, takesVarKeywordArgs = true, constructsClass = PythonBuiltinClassType.PString)
1905+
@Builtin(name = STR, minNumOfPositionalArgs = 1, parameterNames = {"cls", "object", "encoding", "errors"}, constructsClass = PythonBuiltinClassType.PString)
19061906
@GenerateNodeFactory
19071907
public abstract static class StrNode extends PythonBuiltinNode {
19081908
@Child private LookupAndCallTernaryNode callDecodeNode;
@@ -1934,14 +1934,15 @@ Object strOneArg(Object strClass, Object obj, @SuppressWarnings("unused") PNone
19341934
return result;
19351935
}
19361936

1937-
@Specialization(guards = {"!isNativeClass(strClass)", "!isNoValue(encoding)"}, limit = "3")
1937+
@Specialization(guards = {"!isNativeClass(strClass)", "!isNoValue(encoding) || !isNoValue(errors)"}, limit = "3")
19381938
Object doBuffer(VirtualFrame frame, Object strClass, Object obj, Object encoding, Object errors,
19391939
@CachedLibrary("obj") PythonObjectLibrary bufferLib) {
19401940
if (bufferLib.isBuffer(obj)) {
19411941
try {
19421942
// TODO(fa): we should directly call '_codecs.decode'
19431943
PBytes bytesObj = factory().createBytes(bufferLib.getBufferBytes(obj));
1944-
return decodeBytes(frame, strClass, bytesObj, encoding, errors);
1944+
Object en = encoding == PNone.NO_VALUE ? "utf-8" : encoding;
1945+
return decodeBytes(frame, strClass, bytesObj, en, errors);
19451946
} catch (UnsupportedMessageException e) {
19461947
// fall through
19471948
}

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/builtins/objects/type/TypeBuiltins.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ public abstract static class CallNode extends PythonVarargsBuiltinNode {
206206
@Child private LookupAttributeInMRONode lookupNew = LookupAttributeInMRONode.create(__NEW__);
207207
@Child private CallVarargsMethodNode dispatchInit = CallVarargsMethodNode.create();
208208
@Child private LookupAttributeInMRONode lookupInit = LookupAttributeInMRONode.create(__INIT__);
209-
@Child private TypeNodes.IsSameTypeNode isSameTypeNode;
209+
@Child private IsSubtypeNode isSubTypeNode;
210210
@Child private TypeNodes.GetNameNode getNameNode;
211211
@Child private IsBuiltinClassProfile isClassClassProfile = IsBuiltinClassProfile.create();
212212

@@ -354,7 +354,7 @@ private Object op(VirtualFrame frame, Object self, Object[] arguments, PKeyword[
354354
newInstance = dispatchNew.execute(frame, callNewGet.execute(frame, newMethod, PNone.NONE, self), newArgs, keywords);
355355
}
356356
Object newInstanceKlass = lib.getLazyPythonClass(newInstance);
357-
if (isSameType(newInstanceKlass, self)) {
357+
if (isSubType(newInstanceKlass, self)) {
358358
if (arguments.length == 2 && isClassClassProfile.profileClass(self, PythonBuiltinClassType.PythonClass)) {
359359
// do not call init if we are creating a new instance of type and we are
360360
// passing keywords or more than one argument see:
@@ -383,12 +383,12 @@ private Object op(VirtualFrame frame, Object self, Object[] arguments, PKeyword[
383383
}
384384
}
385385

386-
private boolean isSameType(Object left, Object right) {
387-
if (isSameTypeNode == null) {
386+
private boolean isSubType(Object left, Object right) {
387+
if (isSubTypeNode == null) {
388388
CompilerDirectives.transferToInterpreterAndInvalidate();
389-
isSameTypeNode = insert(IsSameTypeNodeGen.create());
389+
isSubTypeNode = insert(IsSubtypeNode.create());
390390
}
391-
return isSameTypeNode.execute(left, right);
391+
return isSubTypeNode.execute(left, right);
392392
}
393393

394394
private String getTypeName(Object clazz) {

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)