forget the old struct class when redefining a struct class so the old accessors get purged
							parent
							
								
									102df64ec7
								
							
						
					
					
						commit
						521b3ab12c
					
				| 
						 | 
				
			
			@ -3,9 +3,9 @@ USING: accessors alien alien.c-types alien.structs
 | 
			
		|||
alien.structs.fields arrays byte-arrays classes classes.parser
 | 
			
		||||
classes.tuple classes.tuple.parser classes.tuple.private
 | 
			
		||||
combinators combinators.short-circuit combinators.smart
 | 
			
		||||
functors.backend fry generalizations generic.parser kernel
 | 
			
		||||
kernel.private lexer libc locals macros make math math.order parser
 | 
			
		||||
quotations sequences slots slots.private struct-arrays vectors
 | 
			
		||||
definitions functors.backend fry generalizations generic.parser
 | 
			
		||||
kernel kernel.private lexer libc locals macros make math math.order
 | 
			
		||||
parser quotations sequences slots slots.private struct-arrays vectors
 | 
			
		||||
words compiler.tree.propagation.transforms specialized-arrays.direct.uchar ;
 | 
			
		||||
FROM: slots => reader-word writer-word ;
 | 
			
		||||
IN: classes.struct
 | 
			
		||||
| 
						 | 
				
			
			@ -236,10 +236,13 @@ M: struct-class heap-size
 | 
			
		|||
: check-struct-slots ( slots -- )
 | 
			
		||||
    [ c-type>> c-type drop ] each ;
 | 
			
		||||
 | 
			
		||||
: redefine-struct-tuple-class ( class -- )
 | 
			
		||||
    [ dup class? [ forget-class ] [ drop ] if ] [ struct f define-tuple-class ] bi ;
 | 
			
		||||
 | 
			
		||||
: (define-struct-class) ( class slots offsets-quot -- )
 | 
			
		||||
    [ 
 | 
			
		||||
        [ struct-must-have-slots ]
 | 
			
		||||
        [ drop struct f define-tuple-class ] if-empty
 | 
			
		||||
        [ drop redefine-struct-tuple-class ] if-empty
 | 
			
		||||
    ]
 | 
			
		||||
    swap '[
 | 
			
		||||
        make-slots dup
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue