48 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Factor
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Factor
		
	
	
		
			Executable File
		
	
! Copyright (C) 2008 Slava Pestov.
 | 
						|
! See http://factorcode.org/license.txt for BSD license.
 | 
						|
USING: assocs namespaces sequences kernel words ;
 | 
						|
IN: inference.state
 | 
						|
 | 
						|
! Nesting state to solve recursion
 | 
						|
SYMBOL: recursive-state
 | 
						|
 | 
						|
! Number of inputs current word expects from the stack
 | 
						|
SYMBOL: d-in
 | 
						|
 | 
						|
! Compile-time data stack
 | 
						|
SYMBOL: meta-d
 | 
						|
 | 
						|
: push-d meta-d get push ;
 | 
						|
: pop-d meta-d get pop ;
 | 
						|
: peek-d meta-d get peek ;
 | 
						|
 | 
						|
! Compile-time retain stack
 | 
						|
SYMBOL: meta-r
 | 
						|
 | 
						|
: push-r meta-r get push ;
 | 
						|
: pop-r meta-r get pop ;
 | 
						|
: peek-r meta-r get peek ;
 | 
						|
 | 
						|
! Head of dataflow IR
 | 
						|
SYMBOL: dataflow-graph
 | 
						|
 | 
						|
SYMBOL: current-node
 | 
						|
 | 
						|
! Words that the current dataflow IR depends on
 | 
						|
SYMBOL: dependencies
 | 
						|
 | 
						|
: depends-on ( word how -- )
 | 
						|
    swap dependencies get dup [
 | 
						|
        2dup at +inlined+ eq? [ 3drop ] [ set-at ] if
 | 
						|
    ] [ 3drop ] if ;
 | 
						|
 | 
						|
: computing-dependencies ( quot -- dependencies )
 | 
						|
    H{ } clone [ dependencies rot with-variable ] keep ;
 | 
						|
    inline
 | 
						|
 | 
						|
! Did the current control-flow path throw an error?
 | 
						|
SYMBOL: terminated?
 | 
						|
 | 
						|
! Words we've inferred the stack effect of, for rollback
 | 
						|
SYMBOL: recorded
 |