@@ -1753,11 +1753,23 @@ mod _io {
17531753 }
17541754
17551755 #[ pyclass(
1756- with( Constructor , BufferedMixin , BufferedReadable ) ,
1756+ with( Constructor , BufferedMixin , BufferedReadable , Destructor ) ,
17571757 flags( BASETYPE , HAS_DICT )
17581758 ) ]
17591759 impl BufferedReader { }
17601760
1761+ impl Destructor for BufferedReader {
1762+ fn slot_del ( zelf : & PyObject , vm : & VirtualMachine ) -> PyResult < ( ) > {
1763+ let _ = vm. call_method ( zelf, "close" , ( ) ) ;
1764+ Ok ( ( ) )
1765+ }
1766+
1767+ #[ cold]
1768+ fn del ( _zelf : & Py < Self > , _vm : & VirtualMachine ) -> PyResult < ( ) > {
1769+ unreachable ! ( "slot_del is implemented" )
1770+ }
1771+ }
1772+
17611773 impl DefaultConstructor for BufferedReader { }
17621774
17631775 #[ pyclass]
@@ -1810,11 +1822,23 @@ mod _io {
18101822 }
18111823
18121824 #[ pyclass(
1813- with( Constructor , BufferedMixin , BufferedWritable ) ,
1825+ with( Constructor , BufferedMixin , BufferedWritable , Destructor ) ,
18141826 flags( BASETYPE , HAS_DICT )
18151827 ) ]
18161828 impl BufferedWriter { }
18171829
1830+ impl Destructor for BufferedWriter {
1831+ fn slot_del ( zelf : & PyObject , vm : & VirtualMachine ) -> PyResult < ( ) > {
1832+ let _ = vm. call_method ( zelf, "close" , ( ) ) ;
1833+ Ok ( ( ) )
1834+ }
1835+
1836+ #[ cold]
1837+ fn del ( _zelf : & Py < Self > , _vm : & VirtualMachine ) -> PyResult < ( ) > {
1838+ unreachable ! ( "slot_del is implemented" )
1839+ }
1840+ }
1841+
18181842 impl DefaultConstructor for BufferedWriter { }
18191843
18201844 #[ pyattr]
@@ -1852,11 +1876,29 @@ mod _io {
18521876 }
18531877
18541878 #[ pyclass(
1855- with( Constructor , BufferedMixin , BufferedReadable , BufferedWritable ) ,
1879+ with(
1880+ Constructor ,
1881+ BufferedMixin ,
1882+ BufferedReadable ,
1883+ BufferedWritable ,
1884+ Destructor
1885+ ) ,
18561886 flags( BASETYPE , HAS_DICT )
18571887 ) ]
18581888 impl BufferedRandom { }
18591889
1890+ impl Destructor for BufferedRandom {
1891+ fn slot_del ( zelf : & PyObject , vm : & VirtualMachine ) -> PyResult < ( ) > {
1892+ let _ = vm. call_method ( zelf, "close" , ( ) ) ;
1893+ Ok ( ( ) )
1894+ }
1895+
1896+ #[ cold]
1897+ fn del ( _zelf : & Py < Self > , _vm : & VirtualMachine ) -> PyResult < ( ) > {
1898+ unreachable ! ( "slot_del is implemented" )
1899+ }
1900+ }
1901+
18601902 impl DefaultConstructor for BufferedRandom { }
18611903
18621904 #[ pyattr]
@@ -1900,7 +1942,13 @@ mod _io {
19001942 }
19011943
19021944 #[ pyclass(
1903- with( Constructor , Initializer , BufferedReadable , BufferedWritable ) ,
1945+ with(
1946+ Constructor ,
1947+ Initializer ,
1948+ BufferedReadable ,
1949+ BufferedWritable ,
1950+ Destructor
1951+ ) ,
19041952 flags( BASETYPE , HAS_DICT )
19051953 ) ]
19061954 impl BufferedRWPair {
@@ -1942,6 +1990,18 @@ mod _io {
19421990 }
19431991 }
19441992
1993+ impl Destructor for BufferedRWPair {
1994+ fn slot_del ( zelf : & PyObject , vm : & VirtualMachine ) -> PyResult < ( ) > {
1995+ let _ = vm. call_method ( zelf, "close" , ( ) ) ;
1996+ Ok ( ( ) )
1997+ }
1998+
1999+ #[ cold]
2000+ fn del ( _zelf : & Py < Self > , _vm : & VirtualMachine ) -> PyResult < ( ) > {
2001+ unreachable ! ( "slot_del is implemented" )
2002+ }
2003+ }
2004+
19452005 #[ derive( FromArgs ) ]
19462006 struct TextIOWrapperArgs {
19472007 #[ pyarg( any, default ) ]
@@ -2413,7 +2473,7 @@ mod _io {
24132473 vm. call_method ( & textio. buffer , "flush" , ( ) )
24142474 }
24152475
2416- #[ pyclass( with( Constructor , Initializer ) , flags( BASETYPE ) ) ]
2476+ #[ pyclass( with( Constructor , Initializer , Destructor ) , flags( BASETYPE ) ) ]
24172477 impl TextIOWrapper {
24182478 #[ pymethod]
24192479 fn reconfigure ( & self , args : TextIOWrapperArgs , vm : & VirtualMachine ) -> PyResult < ( ) > {
@@ -3276,6 +3336,18 @@ mod _io {
32763336 }
32773337 }
32783338
3339+ impl Destructor for TextIOWrapper {
3340+ fn slot_del ( zelf : & PyObject , vm : & VirtualMachine ) -> PyResult < ( ) > {
3341+ let _ = vm. call_method ( zelf, "close" , ( ) ) ;
3342+ Ok ( ( ) )
3343+ }
3344+
3345+ #[ cold]
3346+ fn del ( _zelf : & Py < Self > , _vm : & VirtualMachine ) -> PyResult < ( ) > {
3347+ unreachable ! ( "slot_del is implemented" )
3348+ }
3349+ }
3350+
32793351 #[ pyattr]
32803352 #[ pyclass( name) ]
32813353 #[ derive( Debug , PyPayload , Default ) ]
0 commit comments