]> gitweb.factorcode.org Git - factor.git/blob - core/inference/state/state.factor
Fixing everything for mandatory stack effects
[factor.git] / core / inference / state / state.factor
1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: assocs namespaces sequences kernel definitions ;
4 IN: inference.state
5
6 ! Nesting state to solve recursion
7 SYMBOL: recursive-state
8
9 ! Number of inputs current word expects from the stack
10 SYMBOL: d-in
11
12 ! Compile-time data stack
13 SYMBOL: meta-d
14
15 : push-d ( obj -- ) meta-d get push ;
16 : pop-d  ( -- obj ) meta-d get pop ;
17 : peek-d ( -- obj ) meta-d get peek ;
18
19 ! Compile-time retain stack
20 SYMBOL: meta-r
21
22 : push-r ( obj -- ) meta-r get push ;
23 : pop-r  ( -- obj ) meta-r get pop ;
24 : peek-r ( -- obj ) meta-r get peek ;
25
26 ! Head of dataflow IR
27 SYMBOL: dataflow-graph
28
29 SYMBOL: current-node
30
31 ! Words that the current dataflow IR depends on
32 SYMBOL: dependencies
33
34 : depends-on ( word how -- )
35     swap dependencies get dup [
36         2dup at +inlined+ eq? [ 3drop ] [ set-at ] if
37     ] [ 3drop ] if ;
38
39 ! Did the current control-flow path throw an error?
40 SYMBOL: terminated?
41
42 ! Words we've inferred the stack effect of, for rollback
43 SYMBOL: recorded