compiler.tree.propagation.info: better code for wrap-interval
							parent
							
								
									7301da0314
								
							
						
					
					
						commit
						a3be724f5a
					
				|  | @ -46,6 +46,10 @@ HELP: value-info-state | |||
| HELP: value-infos | ||||
| { $var-description "Assoc stack of current value --> info mapping" } ; | ||||
| 
 | ||||
| HELP: wrap-interval | ||||
| { $values { "interval" interval } { "class" class } { "interval'" interval } } | ||||
| { $description "Wraps an interval to the given numeric types interval." } ; | ||||
| 
 | ||||
| ARTICLE: "compiler.tree.propagation.info" "Value info data type and operations" | ||||
| "Querying words:" | ||||
| { $subsections | ||||
|  |  | |||
|  | @ -1,5 +1,6 @@ | |||
| USING: accessors alien byte-arrays classes.struct math math.intervals sequences | ||||
| classes.algebra kernel tools.test compiler.tree.propagation.info arrays ; | ||||
| USING: accessors alien arrays byte-arrays classes.algebra | ||||
| classes.struct compiler.tree.propagation.info kernel literals math | ||||
| math.intervals sequences sequences.private tools.test ; | ||||
| IN: compiler.tree.propagation.info.tests | ||||
| 
 | ||||
| { f } [ 0.0 -0.0 eql? ] unit-test | ||||
|  | @ -191,3 +192,31 @@ TUPLE: tup2 < tup1 bar ; | |||
|     tup2 <class-info> tup1 <class-info> value-info<= | ||||
|     tup1 <class-info> tup2 <class-info> value-info<= | ||||
| ] unit-test | ||||
| 
 | ||||
| ! init-interval | ||||
| { | ||||
|     T{ value-info-state | ||||
|        { class array-capacity } | ||||
|        { interval $[ array-capacity-interval ] } | ||||
|     } | ||||
| } [ | ||||
|     <value-info> -100 100 [a,b] >>interval array-capacity >>class | ||||
|     init-interval | ||||
| ] unit-test | ||||
| 
 | ||||
| ! wrap-interval | ||||
| ${ | ||||
|     full-interval | ||||
|     empty-interval | ||||
|     fixnum-interval | ||||
|     array-capacity-interval | ||||
|     array-capacity-interval | ||||
|     -100 100 [a,b] | ||||
| } [ | ||||
|     full-interval integer wrap-interval | ||||
|     empty-interval integer wrap-interval | ||||
|     full-interval fixnum wrap-interval | ||||
|     fixnum-interval array-capacity wrap-interval | ||||
|     -100 100 [a,b] array-capacity wrap-interval | ||||
|     -100 100 [a,b] integer wrap-interval | ||||
| ] unit-test | ||||
|  |  | |||
|  | @ -108,12 +108,7 @@ UNION: fixed-length array byte-array string ; | |||
|     } case ; | ||||
| 
 | ||||
| : wrap-interval ( interval class -- interval' ) | ||||
|     { | ||||
|         { [ over empty-interval eq? ] [ drop ] } | ||||
|         { [ over full-interval eq? ] [ nip class-interval ] } | ||||
|         { [ 2dup class-interval interval-subset? not ] [ nip class-interval ] } | ||||
|         [ drop ] | ||||
|     } cond ; | ||||
|     class-interval 2dup interval-subset? [ drop ] [ nip ] if ; | ||||
| 
 | ||||
| : init-interval ( info -- info ) | ||||
|     dup [ interval>> full-interval or ] [ class>> ] bi wrap-interval >>interval | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue