typed: update for dependency changes
							parent
							
								
									ea9dbf2ea1
								
							
						
					
					
						commit
						36618bc46e
					
				| 
						 | 
				
			
			@ -4,6 +4,7 @@ combinators.short-circuit definitions effects fry hints
 | 
			
		|||
math kernel kernel.private namespaces parser quotations
 | 
			
		||||
sequences slots words locals 
 | 
			
		||||
locals.parser macros stack-checker.dependencies ;
 | 
			
		||||
FROM: classes.tuple.private => tuple-layout ;
 | 
			
		||||
IN: typed
 | 
			
		||||
 | 
			
		||||
ERROR: type-mismatch-error word expected-types ;
 | 
			
		||||
| 
						 | 
				
			
			@ -31,6 +32,7 @@ PREDICATE: typed-word < word "typed-word" word-prop ;
 | 
			
		|||
 | 
			
		||||
: (unboxer) ( type -- quot )
 | 
			
		||||
    dup unboxable-tuple-class? [
 | 
			
		||||
        dup dup tuple-layout depends-on-tuple-layout
 | 
			
		||||
        all-slots [
 | 
			
		||||
            [ name>> reader-word 1quotation ]
 | 
			
		||||
            [ class>> (unboxer) ] bi compose
 | 
			
		||||
| 
						 | 
				
			
			@ -49,7 +51,10 @@ PREDICATE: typed-word < word "typed-word" word-prop ;
 | 
			
		|||
 | 
			
		||||
: (unboxed-types) ( type -- types )
 | 
			
		||||
    dup unboxable-tuple-class?
 | 
			
		||||
    [ all-slots [ class>> (unboxed-types) ] map concat ]
 | 
			
		||||
    [
 | 
			
		||||
        dup dup tuple-layout depends-on-tuple-layout
 | 
			
		||||
        all-slots [ class>> (unboxed-types) ] map concat
 | 
			
		||||
    ]
 | 
			
		||||
    [ 1array ] if ;
 | 
			
		||||
 | 
			
		||||
: unboxed-types ( types -- types' )
 | 
			
		||||
| 
						 | 
				
			
			@ -75,7 +80,12 @@ DEFER: make-boxer
 | 
			
		|||
 | 
			
		||||
: boxer ( type -- quot )
 | 
			
		||||
    dup unboxable-tuple-class?
 | 
			
		||||
    [ [ all-slots [ class>> ] map make-boxer ] [ [ boa ] curry ] bi compose ]
 | 
			
		||||
    [
 | 
			
		||||
        dup dup tuple-layout depends-on-tuple-layout
 | 
			
		||||
        [ all-slots [ class>> ] map make-boxer ]
 | 
			
		||||
        [ [ boa ] curry ]
 | 
			
		||||
        bi compose
 | 
			
		||||
    ]
 | 
			
		||||
    [ drop [ ] ] if ;
 | 
			
		||||
 | 
			
		||||
: make-boxer ( types -- quot )
 | 
			
		||||
| 
						 | 
				
			
			@ -84,18 +94,15 @@ DEFER: make-boxer
 | 
			
		|||
 | 
			
		||||
! defining typed words
 | 
			
		||||
 | 
			
		||||
: (depends-on) ( types -- types )
 | 
			
		||||
    dup [ inlined-dependency depends-on ] each ; inline
 | 
			
		||||
 | 
			
		||||
MACRO: (typed) ( word def effect -- quot )
 | 
			
		||||
    [ swap ] dip
 | 
			
		||||
    [
 | 
			
		||||
        nip effect-in-types (depends-on) swap
 | 
			
		||||
        nip effect-in-types swap
 | 
			
		||||
        [ [ unboxed-types ] [ make-boxer ] bi ] dip
 | 
			
		||||
        '[ _ declare @ @ ]
 | 
			
		||||
    ]
 | 
			
		||||
    [
 | 
			
		||||
        effect-out-types (depends-on)
 | 
			
		||||
        effect-out-types
 | 
			
		||||
        dup typed-stack-effect? [ typed-outputs ] [ 2drop ] if
 | 
			
		||||
    ] 2bi ;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -118,9 +125,9 @@ M: typed-gensym crossref?
 | 
			
		|||
    [ 2nip ] 3tri define-declared ;
 | 
			
		||||
 | 
			
		||||
MACRO: typed ( quot word effect -- quot' )
 | 
			
		||||
    [ effect-in-types (depends-on) dup typed-stack-effect? [ typed-inputs ] [ 2drop ] if ] 
 | 
			
		||||
    [ effect-in-types dup typed-stack-effect? [ typed-inputs ] [ 2drop ] if ] 
 | 
			
		||||
    [
 | 
			
		||||
        nip effect-out-types (depends-on) dup typed-stack-effect?
 | 
			
		||||
        nip effect-out-types dup typed-stack-effect?
 | 
			
		||||
        [ [ unboxed-types ] [ make-boxer ] bi '[ @ _ declare @ ] ] [ drop ] if
 | 
			
		||||
    ] 2bi ;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue