@@ -59,6 +59,41 @@ impl From<i32> for Tag {
5959 }
6060 }
6161}
62+ #[ derive( Default ) ]
63+ pub struct Entry {
64+ pub name : Value < Ptr < u8 > > ,
65+ pub color : Value < Color > ,
66+ pub opt : Value < Option > ,
67+ }
68+ impl ByteRepr for Entry { }
69+ thread_local ! (
70+ pub static global_color: Value <Color > = Rc :: new( RefCell :: new( Color :: GREEN ) ) ;
71+ ) ;
72+ thread_local ! (
73+ pub static global_opt: Value <Option > = Rc :: new( RefCell :: new( Option :: OPT_B ) ) ;
74+ ) ;
75+ thread_local ! (
76+ pub static global_tag: Value <Tag > = Rc :: new( RefCell :: new( Tag :: TAG_TWO ) ) ;
77+ ) ;
78+ thread_local ! (
79+ pub static entries: Value <Box <[ Entry ] >> = Rc :: new( RefCell :: new( Box :: new( [
80+ Entry {
81+ name: Rc :: new( RefCell :: new( Ptr :: from_string_literal( "first" ) ) ) ,
82+ color: Rc :: new( RefCell :: new( Color :: RED ) ) ,
83+ opt: Rc :: new( RefCell :: new( Option :: OPT_NONE ) ) ,
84+ } ,
85+ Entry {
86+ name: Rc :: new( RefCell :: new( Ptr :: from_string_literal( "second" ) ) ) ,
87+ color: Rc :: new( RefCell :: new( Color :: GREEN ) ) ,
88+ opt: Rc :: new( RefCell :: new( Option :: OPT_A ) ) ,
89+ } ,
90+ Entry {
91+ name: Rc :: new( RefCell :: new( Ptr :: from_string_literal( "third" ) ) ) ,
92+ color: Rc :: new( RefCell :: new( Color :: BLUE ) ) ,
93+ opt: Rc :: new( RefCell :: new( Option :: OPT_C ) ) ,
94+ } ,
95+ ] ) ) ) ;
96+ ) ;
6297pub fn as_int_0 ( c : Color ) -> i32 {
6398 let c: Value < Color > = Rc :: new ( RefCell :: new ( c) ) ;
6499 return ( ( * c. borrow ( ) ) as i32 ) . clone ( ) ;
@@ -95,7 +130,7 @@ pub fn main() {
95130 std:: process:: exit ( main_0 ( ) ) ;
96131}
97132fn main_0 ( ) -> i32 {
98- let c: Value < Color > = Rc :: new ( RefCell :: new ( Color :: from ( ( Color :: RED as i32 ) ) ) ) ;
133+ let c: Value < Color > = Rc :: new ( RefCell :: new ( Color :: RED ) ) ;
99134 assert ! ( ( ( ( ( ( * c. borrow( ) ) as u32 ) == ( ( Color :: RED as i32 ) as u32 ) ) as i32 ) != 0 ) ) ;
100135 assert ! ( ( ( ( ( ( * c. borrow( ) ) as u32 ) == 0_u32 ) as i32 ) != 0 ) ) ;
101136 assert ! ( ( ( ( ( ( * c. borrow( ) ) as u32 ) != 1_u32 ) as i32 ) != 0 ) ) ;
@@ -137,7 +172,7 @@ fn main_0() -> i32 {
137172 ( ( ( * c. borrow ( ) ) as u32 ) . wrapping_add ( 1_u32 ) ) as i32 ,
138173 ) ) ) ;
139174 assert ! ( ( ( ( ( ( * cmp. borrow( ) ) as u32 ) == ( ( Color :: BLUE as i32 ) as u32 ) ) as i32 ) != 0 ) ) ;
140- let o: Value < Option > = Rc :: new ( RefCell :: new ( Option :: from ( ( Option :: OPT_A as i32 ) ) ) ) ;
175+ let o: Value < Option > = Rc :: new ( RefCell :: new ( Option :: OPT_A ) ) ;
141176 assert ! ( ( ( ( ( ( * o. borrow( ) ) as u32 ) == ( ( Option :: OPT_A as i32 ) as u32 ) ) as i32 ) != 0 ) ) ;
142177 assert ! ( ( ( ( ( ( * o. borrow( ) ) as u32 ) == 10_u32 ) as i32 ) != 0 ) ) ;
143178 let oi: Value < i32 > = Rc :: new ( RefCell :: new ( ( ( * o. borrow ( ) ) as i32 ) . clone ( ) ) ) ;
@@ -161,7 +196,7 @@ fn main_0() -> i32 {
161196 classify_option_1 ( _option)
162197 } ) ;
163198 assert ! ( ( ( ( ( * rc. borrow( ) ) == 3 ) as i32 ) != 0 ) ) ;
164- let t: Value < Tag > = Rc :: new ( RefCell :: new ( Tag :: from ( ( Tag :: TAG_ONE as i32 ) ) ) ) ;
199+ let t: Value < Tag > = Rc :: new ( RefCell :: new ( Tag :: TAG_ONE ) ) ;
165200 assert ! ( ( ( ( ( ( * t. borrow( ) ) as u32 ) == 1_u32 ) as i32 ) != 0 ) ) ;
166201 assert ! ( ( ( ( ( ( * t. borrow( ) ) as u32 ) == ( ( Tag :: TAG_ONE as i32 ) as u32 ) ) as i32 ) != 0 ) ) ;
167202 let ti: Value < i32 > = Rc :: new ( RefCell :: new ( ( ( * t. borrow ( ) ) as i32 ) . clone ( ) ) ) ;
@@ -187,5 +222,62 @@ fn main_0() -> i32 {
187222 ( ( ( Color :: RED as i32 ) + ( Color :: GREEN as i32 ) ) + ( Color :: BLUE as i32 ) ) ,
188223 ) ) ;
189224 assert ! ( ( ( ( ( * extra. borrow( ) ) == ( ( 0 + 1 ) + 2 ) ) as i32 ) != 0 ) ) ;
225+ assert ! (
226+ ( ( ( ( ( * global_color. with( Value :: clone) . borrow( ) ) as u32 ) == ( ( Color :: GREEN as i32 ) as u32 ) )
227+ as i32 )
228+ != 0 )
229+ ) ;
230+ assert ! (
231+ ( ( ( ( ( * global_opt. with( Value :: clone) . borrow( ) ) as u32 ) == ( ( Option :: OPT_B as i32 ) as u32 ) )
232+ as i32 )
233+ != 0 )
234+ ) ;
235+ assert ! (
236+ ( ( ( ( ( * global_tag. with( Value :: clone) . borrow( ) ) as u32 ) == ( ( Tag :: TAG_TWO as i32 ) as u32 ) )
237+ as i32 )
238+ != 0 )
239+ ) ;
240+ assert ! (
241+ ( ( ( ( ( * ( * entries. with( Value :: clone) . borrow( ) ) [ ( 0 ) as usize ]
242+ . color
243+ . borrow( ) ) as u32 )
244+ == ( ( Color :: RED as i32 ) as u32 ) ) as i32 )
245+ != 0 )
246+ ) ;
247+ assert ! (
248+ ( ( ( ( ( * ( * entries. with( Value :: clone) . borrow( ) ) [ ( 0 ) as usize ]
249+ . opt
250+ . borrow( ) ) as u32 )
251+ == ( ( Option :: OPT_NONE as i32 ) as u32 ) ) as i32 )
252+ != 0 )
253+ ) ;
254+ assert ! (
255+ ( ( ( ( ( * ( * entries. with( Value :: clone) . borrow( ) ) [ ( 1 ) as usize ]
256+ . color
257+ . borrow( ) ) as u32 )
258+ == ( ( Color :: GREEN as i32 ) as u32 ) ) as i32 )
259+ != 0 )
260+ ) ;
261+ assert ! (
262+ ( ( ( ( ( * ( * entries. with( Value :: clone) . borrow( ) ) [ ( 1 ) as usize ]
263+ . opt
264+ . borrow( ) ) as u32 )
265+ == ( ( Option :: OPT_A as i32 ) as u32 ) ) as i32 )
266+ != 0 )
267+ ) ;
268+ assert ! (
269+ ( ( ( ( ( * ( * entries. with( Value :: clone) . borrow( ) ) [ ( 2 ) as usize ]
270+ . color
271+ . borrow( ) ) as u32 )
272+ == ( ( Color :: BLUE as i32 ) as u32 ) ) as i32 )
273+ != 0 )
274+ ) ;
275+ assert ! (
276+ ( ( ( ( ( * ( * entries. with( Value :: clone) . borrow( ) ) [ ( 2 ) as usize ]
277+ . opt
278+ . borrow( ) ) as u32 )
279+ == ( ( Option :: OPT_C as i32 ) as u32 ) ) as i32 )
280+ != 0 )
281+ ) ;
190282 return 0 ;
191283}
0 commit comments