@@ -1877,8 +1877,9 @@ mod _io {
18771877 }
18781878
18791879 #[ pymethod]
1880- fn seekable ( _self : PyObjectRef ) -> bool {
1881- true
1880+ fn seekable ( & self , vm : & VirtualMachine ) -> PyResult {
1881+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
1882+ vm. get_attribute ( buffer, "seekable" )
18821883 }
18831884
18841885 #[ pymethod]
@@ -1888,7 +1889,7 @@ mod _io {
18881889 how : OptionalArg < i32 > ,
18891890 vm : & VirtualMachine ,
18901891 ) -> PyResult {
1891- let data = self . lock ( vm) ?;
1892+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
18921893 let offset = get_offset ( offset, vm) ?;
18931894 let how = how. unwrap_or ( 0 ) ;
18941895 if how == 1 && offset != 0 {
@@ -1902,33 +1903,33 @@ mod _io {
19021903 "can't do nonzero end-relative seeks" . to_owned ( ) ,
19031904 ) ) ;
19041905 }
1905- call_method ( vm, & data . buffer , "seek" , ( offset, how) )
1906+ call_method ( vm, & buffer, "seek" , ( offset, how) )
19061907 }
19071908
19081909 #[ pymethod]
19091910 fn tell ( & self , vm : & VirtualMachine ) -> PyResult {
1910- let data = self . lock ( vm) ?;
1911- call_method ( vm, & data . buffer , "tell" , ( ) )
1911+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
1912+ call_method ( vm, & buffer, "tell" , ( ) )
19121913 }
19131914
19141915 #[ pyproperty]
19151916 fn name ( & self , vm : & VirtualMachine ) -> PyResult {
1916- let data = self . lock ( vm) ?;
1917- vm. get_attribute ( data . buffer . clone ( ) , "name" )
1917+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
1918+ vm. get_attribute ( buffer, "name" )
19181919 }
19191920
19201921 #[ pymethod]
19211922 fn fileno ( & self , vm : & VirtualMachine ) -> PyResult {
1922- let data = self . lock ( vm) ?;
1923- call_method ( vm, & data . buffer , "fileno" , ( ) )
1923+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
1924+ call_method ( vm, & buffer, "fileno" , ( ) )
19241925 }
19251926
19261927 #[ pymethod]
19271928 fn read ( & self , size : OptionalOption < PyObjectRef > , vm : & VirtualMachine ) -> PyResult < String > {
1928- let data = self . lock ( vm) ?;
1929- check_readable ( & data . buffer , vm) ?;
1929+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
1930+ check_readable ( & buffer, vm) ?;
19301931
1931- let bytes = call_method ( vm, & data . buffer , "read" , ( size. flatten ( ) , ) ) ?;
1932+ let bytes = call_method ( vm, & buffer, "read" , ( size. flatten ( ) , ) ) ?;
19321933 let bytes = PyBytesLike :: try_from_object ( vm, bytes) ?;
19331934 //format bytes into string
19341935 let rust_string = String :: from_utf8 ( bytes. to_cow ( ) . into_owned ( ) ) . map_err ( |e| {
@@ -1944,14 +1945,14 @@ mod _io {
19441945 fn write ( & self , obj : PyStrRef , vm : & VirtualMachine ) -> PyResult < usize > {
19451946 use std:: str:: from_utf8;
19461947
1947- let data = self . lock ( vm) ?;
1948- check_writable ( & data . buffer , vm) ?;
1948+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
1949+ check_writable ( & buffer, vm) ?;
19491950
19501951 let bytes = obj. borrow_value ( ) . as_bytes ( ) ;
19511952
1952- let len = call_method ( vm, & data . buffer , "write" , ( bytes. to_owned ( ) , ) ) ;
1953+ let len = call_method ( vm, & buffer, "write" , ( bytes. to_owned ( ) , ) ) ;
19531954 if obj. borrow_value ( ) . contains ( '\n' ) {
1954- let _ = call_method ( vm, & data . buffer , "flush" , ( ) ) ;
1955+ let _ = call_method ( vm, & buffer, "flush" , ( ) ) ;
19551956 }
19561957 let len = usize:: try_from_object ( vm, len?) ?;
19571958
@@ -1965,16 +1966,16 @@ mod _io {
19651966
19661967 #[ pymethod]
19671968 fn flush ( & self , vm : & VirtualMachine ) -> PyResult {
1968- let data = self . lock ( vm) ?;
1969- check_closed ( & data . buffer , vm) ?;
1970- call_method ( vm, & data . buffer , "flush" , ( ) )
1969+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
1970+ check_closed ( & buffer, vm) ?;
1971+ call_method ( vm, & buffer, "flush" , ( ) )
19711972 }
19721973
19731974 #[ pymethod]
19741975 fn isatty ( & self , vm : & VirtualMachine ) -> PyResult {
1975- let data = self . lock ( vm) ?;
1976- check_closed ( & data . buffer , vm) ?;
1977- call_method ( vm, & data . buffer , "isatty" , ( ) )
1976+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
1977+ check_closed ( & buffer, vm) ?;
1978+ call_method ( vm, & buffer, "isatty" , ( ) )
19781979 }
19791980
19801981 #[ pymethod]
@@ -1983,10 +1984,10 @@ mod _io {
19831984 size : OptionalOption < PyObjectRef > ,
19841985 vm : & VirtualMachine ,
19851986 ) -> PyResult < String > {
1986- let data = self . lock ( vm) ?;
1987- check_readable ( & data . buffer , vm) ?;
1987+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
1988+ check_readable ( & buffer, vm) ?;
19881989
1989- let bytes = call_method ( vm, & data . buffer , "readline" , ( size. flatten ( ) , ) ) ?;
1990+ let bytes = call_method ( vm, & buffer, "readline" , ( size. flatten ( ) , ) ) ?;
19901991 let bytes = PyBytesLike :: try_from_object ( vm, bytes) ?;
19911992 //format bytes into string
19921993 let rust_string = String :: from_utf8 ( bytes. borrow_value ( ) . to_vec ( ) ) . map_err ( |e| {
@@ -2000,18 +2001,17 @@ mod _io {
20002001
20012002 #[ pymethod]
20022003 fn close ( & self , vm : & VirtualMachine ) -> PyResult {
2003- let data = self . lock ( vm) ?;
2004- call_method ( vm, & data . buffer , "close" , ( ) )
2004+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
2005+ call_method ( vm, & buffer, "close" , ( ) )
20052006 }
20062007 #[ pyproperty]
20072008 fn closed ( & self , vm : & VirtualMachine ) -> PyResult {
2008- let data = self . lock ( vm) ?;
2009- vm. get_attribute ( data . buffer . clone ( ) , "closed" )
2009+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
2010+ vm. get_attribute ( buffer, "closed" )
20102011 }
20112012 #[ pyproperty]
20122013 fn buffer ( & self , vm : & VirtualMachine ) -> PyResult {
2013- let data = self . lock ( vm) ?;
2014- Ok ( data. buffer . clone ( ) )
2014+ Ok ( self . lock ( vm) ?. buffer . clone ( ) )
20152015 }
20162016
20172017 #[ pymethod( magic) ]
0 commit comments