Skip to content

Commit 3e1f4a9

Browse files
committed
fix(py): repr(obj) missing "object" before "at"
1 parent e3f23a3 commit 3e1f4a9

File tree

1 file changed

+12
-13
lines changed

1 file changed

+12
-13
lines changed

Objects/typeobject.nim

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -67,16 +67,19 @@ proc defaultEq(o1, o2: PyObject): PyObject {. cdecl .} =
6767
if rawEq(o1, o2): pyTrueObj
6868
else: pyFalseObj
6969

70-
proc reprDefault(self: PyObject): PyObject {. cdecl .} =
71-
newPyString(fmt"<{self.pyType.name} at {self.idStr}>")
70+
71+
template asAttrNameOrRetE*(name: PyObject): PyStrObject =
72+
bind ofPyStrObject, typeName, newTypeError, newPyStr, PyStrObject
73+
bind formatValue, fmt
74+
if not ofPyStrObject(name):
75+
let n{.inject.} = typeName(name)
76+
return newTypeError newPyStr(
77+
fmt"attribute name must be string, not '{n:.200s}'",)
78+
PyStrObject name
7279

7380
# generic getattr
74-
proc getAttr(self: PyObject, nameObj: PyObject): PyObject {. cdecl .} =
75-
if not nameObj.ofPyStrObject:
76-
let typeStr = nameObj.pyType.name
77-
let msg = fmt"attribute name must be string, not {typeStr}"
78-
return newTypeError(newPyStr msg)
79-
let name = PyStrObject(nameObj)
81+
proc getAttr(self: PyObject, nameObj: PyObject): PyObject {. cdecl .} =
82+
let name = nameObj.asAttrNameOrRetE
8083
let typeDict = self.getTypeDict
8184
if typeDict.isNil:
8285
unreachable("for type object dict must not be nil")
@@ -99,11 +102,7 @@ proc getAttr(self: PyObject, nameObj: PyObject): PyObject {. cdecl .} =
99102

100103
# generic getattr
101104
proc setAttr(self: PyObject, nameObj: PyObject, value: PyObject): PyObject {. cdecl .} =
102-
if not nameObj.ofPyStrObject:
103-
let typeStr = nameObj.pyType.name
104-
let msg = fmt"attribute name must be string, not {typeStr}"
105-
return newTypeError(newPyStr msg)
106-
let name = PyStrObject(nameObj)
105+
let name = nameObj.asAttrNameOrRetE
107106
let typeDict = self.getTypeDict
108107
if typeDict.isNil:
109108
unreachable("for type object dict must not be nil")

0 commit comments

Comments
 (0)