@@ -7,24 +7,31 @@ use std::io::Seek;
77use std:: io:: { Read , Write } ;
88use std:: os:: fd:: AsFd ;
99use std:: rc:: { Rc , Weak } ;
10+ pub fn my_alternative_fread_0 ( p : Ptr < u8 > , n : u64 , m : u64 , f : AnyPtr ) -> u64 {
11+ let p: Value < Ptr < u8 > > = Rc :: new ( RefCell :: new ( p) ) ;
12+ let n: Value < u64 > = Rc :: new ( RefCell :: new ( n) ) ;
13+ let m: Value < u64 > = Rc :: new ( RefCell :: new ( m) ) ;
14+ let f: Value < AnyPtr > = Rc :: new ( RefCell :: new ( f) ) ;
15+ return 22_u64 ;
16+ }
1017pub fn main ( ) {
1118 std:: process:: exit ( main_0 ( ) ) ;
1219}
1320fn main_0 ( ) -> i32 {
14- let rfn : Value < FnPtr < fn ( AnyPtr , u64 , u64 , Ptr < :: std:: fs:: File > ) -> u64 > > =
21+ let fn1 : Value < FnPtr < fn ( AnyPtr , u64 , u64 , Ptr < :: std:: fs:: File > ) -> u64 > > =
1522 Rc :: new ( RefCell :: new ( fn_ptr ! (
1623 rules:: stdio_tgt_refcount:: f5,
1724 fn ( AnyPtr , u64 , u64 , Ptr <:: std:: fs:: File >) -> u64
1825 ) ) ) ;
1926 assert ! ( {
20- let _lhs = ( * rfn . borrow( ) ) . clone( ) ;
27+ let _lhs = ( * fn1 . borrow( ) ) . clone( ) ;
2128 _lhs == fn_ptr!(
2229 rules:: stdio_tgt_refcount:: f5,
2330 fn ( AnyPtr , u64 , u64 , Ptr <:: std:: fs:: File >) -> u64
2431 )
2532 } ) ;
26- assert ! ( !( ( * rfn . borrow( ) ) . is_null( ) ) ) ;
27- let rfn2 : Value < FnPtr < fn ( Ptr < u8 > , u64 , u64 , AnyPtr ) -> u64 > > = Rc :: new ( RefCell :: new (
33+ assert ! ( !( ( * fn1 . borrow( ) ) . is_null( ) ) ) ;
34+ let fn2 : Value < FnPtr < fn ( Ptr < u8 > , u64 , u64 , AnyPtr ) -> u64 > > = Rc :: new ( RefCell :: new (
2835 fn_ptr ! (
2936 rules:: stdio_tgt_refcount:: f5,
3037 fn ( AnyPtr , u64 , u64 , Ptr <:: std:: fs:: File >) -> u64
@@ -41,9 +48,30 @@ fn main_0() -> i32 {
4148 ) ) ,
4249 ) ) ;
4350 assert ! ( {
44- let _lhs = ( * rfn . borrow( ) ) . clone( ) ;
45- _lhs == ( ( * rfn2 . borrow( ) ) . cast:: <fn ( AnyPtr , u64 , u64 , Ptr <:: std:: fs:: File >) -> u64 >( None ) )
51+ let _lhs = ( * fn1 . borrow( ) ) . clone( ) ;
52+ _lhs == ( ( * fn2 . borrow( ) ) . cast:: <fn ( AnyPtr , u64 , u64 , Ptr <:: std:: fs:: File >) -> u64 >( None ) )
4653 . clone( )
4754 } ) ;
55+ let f3: Value < FnPtr < fn ( AnyPtr , u64 , u64 , Ptr < :: std:: fs:: File > ) -> u64 > > =
56+ Rc :: new ( RefCell :: new (
57+ fn_ptr ! (
58+ my_alternative_fread_0,
59+ fn ( Ptr :: <u8 >, u64 , u64 , AnyPtr ) -> u64
60+ )
61+ . cast :: < fn ( AnyPtr , u64 , u64 , Ptr < :: std:: fs:: File > ) -> u64 > ( Some (
62+ ( |a0 : AnyPtr , a1 : u64 , a2 : u64 , a3 : Ptr < :: std:: fs:: File > | -> u64 {
63+ my_alternative_fread_0 ( a0. cast :: < u8 > ( ) . unwrap ( ) , a1, a2, a3. to_any ( ) )
64+ } ) as fn ( AnyPtr , u64 , u64 , Ptr < :: std:: fs:: File > ) -> u64 ,
65+ ) ) ,
66+ ) ) ;
67+ assert ! (
68+ ( ( {
69+ let _arg0: AnyPtr = Default :: default ( ) ;
70+ let _arg1: u64 = 0_u64 ;
71+ let _arg2: u64 = 0_u64 ;
72+ let _arg3: Ptr <:: std:: fs:: File > = Default :: default ( ) ;
73+ ( * ( * f3. borrow( ) ) ) ( _arg0, _arg1, _arg2, _arg3)
74+ } ) == 22_u64 )
75+ ) ;
4876 return 0 ;
4977}
0 commit comments