classes.union: Disallow unions to refer to themselves. Fixes #420 lol. Thanks @mrjbq7 for the patch.
							parent
							
								
									a55a367bf3
								
							
						
					
					
						commit
						980d5f44b2
					
				| 
						 | 
				
			
			@ -132,3 +132,7 @@ PREDICATE: numba-ova-10 < union{ float integer }
 | 
			
		|||
[ t ] [ 100.0 numba-ova-10? ] unit-test
 | 
			
		||||
[ f ] [ 5 numba-ova-10? ] unit-test
 | 
			
		||||
[ f ] [ 5.75 numba-ova-10? ] unit-test
 | 
			
		||||
 | 
			
		||||
! Issue #420 lol
 | 
			
		||||
[ "IN: issue-420 UNION: omg omg ;" eval( -- ) ]
 | 
			
		||||
[ error>> cannot-reference-self? ] must-fail-with
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,10 +53,15 @@ M: union-class update-class define-union-predicate ;
 | 
			
		|||
: (define-union-class) ( class members -- )
 | 
			
		||||
    f swap f union-class make-class-props (define-class) ;
 | 
			
		||||
 | 
			
		||||
ERROR: cannot-reference-self class members ;
 | 
			
		||||
 | 
			
		||||
: check-self-reference ( class members -- class members )
 | 
			
		||||
    2dup member-eq? [ cannot-reference-self ] when ;
 | 
			
		||||
 | 
			
		||||
PRIVATE>
 | 
			
		||||
 | 
			
		||||
: define-union-class ( class members -- )
 | 
			
		||||
    [ (define-union-class) ]
 | 
			
		||||
    [ check-self-reference (define-union-class) ]
 | 
			
		||||
    [ drop changed-conditionally ]
 | 
			
		||||
    [ drop update-classes ]
 | 
			
		||||
    2tri ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue