Skip to content

Commit dcaf1f3

Browse files
committed
fixed error type when setting an readonly buitin attr
1 parent 1db1253 commit dcaf1f3

File tree

2 files changed

+80
-8
lines changed
  • graalpython

2 files changed

+80
-8
lines changed

graalpython/com.oracle.graal.python.test/src/tests/test_type.py

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,4 +329,66 @@ class C():
329329

330330
class C(tuple):
331331
__itemsize__ = 42
332-
assert C.__itemsize__ == 8
332+
assert C.__itemsize__ == 8
333+
334+
def test_descr_name_qualname():
335+
assert float.real.__qualname__ == 'float.real'
336+
assert float.real.__name__ == 'real'
337+
class C: __slots__ = ['a']
338+
assert C.a.__name__ == 'a'
339+
assert C.a.__qualname__ == 'test_descr_name_qualname.<locals>.C.a'
340+
raised = False
341+
try:
342+
C.a.__qualname__ = 'b'
343+
except AttributeError:
344+
raised = True
345+
assert raised
346+
raised = False
347+
try:
348+
C.a.__name__ = 'b'
349+
except AttributeError:
350+
raised = True
351+
assert raised
352+
353+
def test_cant_set_builtin_attributes():
354+
raised = False
355+
try:
356+
float.__name__ = 'b'
357+
except TypeError:
358+
raised = True
359+
assert raised
360+
361+
raised = False
362+
try:
363+
float.__qualname__ = 'b'
364+
except TypeError:
365+
raised = True
366+
assert raised
367+
368+
raised = False
369+
try:
370+
float.__dictoffset__ = 'b'
371+
except TypeError:
372+
raised = True
373+
assert raised
374+
375+
raised = False
376+
try:
377+
float.__module__ = 'b'
378+
except TypeError:
379+
raised = True
380+
assert raised
381+
382+
raised = False
383+
try:
384+
float.__itemsize__ = 'b'
385+
except TypeError:
386+
raised = True
387+
assert raised
388+
389+
raised = False
390+
try:
391+
float.__basicsize__ = 'b'
392+
except TypeError:
393+
raised = True
394+
assert raised

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/type/TypeBuiltins.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -852,12 +852,12 @@ static String getNameBuiltin(PythonManagedClass cls, @SuppressWarnings("unused")
852852

853853
@Specialization(guards = "!isNoValue(value)")
854854
Object setName(@SuppressWarnings("unused") PythonBuiltinClassType cls, @SuppressWarnings("unused") Object value) {
855-
throw raise(PythonErrorType.RuntimeError, ErrorMessages.CANT_SET_ATTRIBUTES_OF_TYPE, "built-in/extension 'type'");
855+
throw raise(PythonErrorType.TypeError, ErrorMessages.CANT_SET_ATTRIBUTES_OF_TYPE, "built-in/extension 'type'");
856856
}
857857

858858
@Specialization(guards = "!isNoValue(value)")
859859
Object setName(@SuppressWarnings("unused") PythonBuiltinClass cls, @SuppressWarnings("unused") Object value) {
860-
throw raise(PythonErrorType.RuntimeError, ErrorMessages.CANT_SET_ATTRIBUTES_OF_TYPE, "built-in/extension 'type'");
860+
throw raise(PythonErrorType.TypeError, ErrorMessages.CANT_SET_ATTRIBUTES_OF_TYPE, "built-in/extension 'type'");
861861
}
862862

863863
@Specialization(guards = {"!isNoValue(value)", "!isPythonBuiltinClass(cls)"})
@@ -943,6 +943,16 @@ Object setNative(@SuppressWarnings("unused") PythonNativeClass cls, @SuppressWar
943943
throw raise(PythonErrorType.RuntimeError, ErrorMessages.CANT_SET_ATTRIBUTES_OF_TYPE, "native type");
944944
}
945945

946+
@Specialization(guards = "!isNoValue(value)")
947+
Object setModuleType(@SuppressWarnings("unused") PythonBuiltinClassType cls, @SuppressWarnings("unused") Object value) {
948+
throw raise(PythonErrorType.TypeError, ErrorMessages.CANT_SET_ATTRIBUTES_OF_TYPE, "built-in/extension 'type'");
949+
}
950+
951+
@Specialization(guards = "!isNoValue(value)")
952+
Object setModuleBuiltin(@SuppressWarnings("unused") PythonBuiltinClass cls, @SuppressWarnings("unused") Object value) {
953+
throw raise(PythonErrorType.TypeError, ErrorMessages.CANT_SET_ATTRIBUTES_OF_TYPE, "built-in/extension 'type'");
954+
}
955+
946956
@TruffleBoundary
947957
private static Object getModuleName(String fqname) {
948958
int firstDotIdx = fqname.indexOf('.');
@@ -967,7 +977,7 @@ static String getName(PythonManagedClass cls, @SuppressWarnings("unused") PNone
967977

968978
@Specialization(guards = "!isNoValue(value)")
969979
Object setName(@SuppressWarnings("unused") PythonBuiltinClass cls, @SuppressWarnings("unused") Object value) {
970-
throw raise(PythonErrorType.RuntimeError, ErrorMessages.CANT_SET_ATTRIBUTES_OF_TYPE, "built-in/extension 'type'");
980+
throw raise(PythonErrorType.TypeError, ErrorMessages.CANT_SET_ATTRIBUTES_OF_TYPE, "built-in/extension 'type'");
971981
}
972982

973983
@Specialization(guards = {"!isNoValue(value)", "!isPythonBuiltinClass(cls)"})
@@ -1026,12 +1036,12 @@ static Object getDictoffsetManaged(PythonManagedClass cls, @SuppressWarnings("un
10261036

10271037
@Specialization(guards = "!isNoValue(value)")
10281038
Object setDictoffsetType(@SuppressWarnings("unused") PythonBuiltinClassType cls, @SuppressWarnings("unused") Object value) {
1029-
throw raise(PythonErrorType.RuntimeError, ErrorMessages.CANT_SET_ATTRIBUTES_OF_TYPE, "built-in/extension 'type'");
1039+
throw raise(PythonErrorType.TypeError, ErrorMessages.CANT_SET_ATTRIBUTES_OF_TYPE, "built-in/extension 'type'");
10301040
}
10311041

10321042
@Specialization(guards = "!isNoValue(value)")
10331043
Object setDictoffsetBuiltin(@SuppressWarnings("unused") PythonBuiltinClass cls, @SuppressWarnings("unused") Object value) {
1034-
throw raise(PythonErrorType.RuntimeError, ErrorMessages.CANT_SET_ATTRIBUTES_OF_TYPE, "built-in/extension 'type'");
1044+
throw raise(PythonErrorType.TypeError, ErrorMessages.CANT_SET_ATTRIBUTES_OF_TYPE, "built-in/extension 'type'");
10351045
}
10361046

10371047
@Specialization(guards = {"!isNoValue(value)", "!isPythonBuiltinClass(cls)"})
@@ -1118,12 +1128,12 @@ static Object getBasicsizeManaged(PythonManagedClass cls, @SuppressWarnings("unu
11181128

11191129
@Specialization(guards = "!isNoValue(value)")
11201130
Object setBasicsizeType(@SuppressWarnings("unused") PythonBuiltinClassType cls, @SuppressWarnings("unused") Object value) {
1121-
throw raise(PythonErrorType.RuntimeError, ErrorMessages.CANT_SET_ATTRIBUTES_OF_TYPE, "built-in/extension 'type'");
1131+
throw raise(PythonErrorType.TypeError, ErrorMessages.CANT_SET_ATTRIBUTES_OF_TYPE, "built-in/extension 'type'");
11221132
}
11231133

11241134
@Specialization(guards = "!isNoValue(value)")
11251135
Object setBasicsizeBuiltin(@SuppressWarnings("unused") PythonBuiltinClass cls, @SuppressWarnings("unused") Object value) {
1126-
throw raise(PythonErrorType.RuntimeError, ErrorMessages.CANT_SET_ATTRIBUTES_OF_TYPE, "built-in/extension 'type'");
1136+
throw raise(PythonErrorType.TypeError, ErrorMessages.CANT_SET_ATTRIBUTES_OF_TYPE, "built-in/extension 'type'");
11271137
}
11281138

11291139
@Specialization(guards = {"!isNoValue(value)", "!isPythonBuiltinClass(cls)"})

0 commit comments

Comments
 (0)