Annotation of researchv10no/cmd/hdr/flow.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  *     Code flow analysis.
                      3:  */
                      4: 
                      5: /*
                      6:  *     A flow set for an expression defines three sets of pure variables.
                      7:  *
                      8:  *     cut     - those whose lifetime must be cut within the expression
                      9:  *               by a pure assignment
                     10:  *     mod     - those which must be modified by the expression
                     11:  *     ref     - those which may be referenced by the expression
                     12:  *               the expression must be able to use the value of
                     13:  *               the variable as it is at the beginning of the expression
                     14:  *     hide    - possible read after last write
                     15:  *     cmod    - might be modified
                     16:  */
                     17: typedef struct
                     18: {
                     19:     xnode      *f_cut;
                     20:     xnode      *f_mod;
                     21:     xnode      *f_ref;
                     22:     xnode      *f_hide;
                     23:     xnode      *f_cmod;
                     24: }
                     25:        flow_set;
                     26: 
                     27: #define        is_pure(d)      (((d)->id_value.i & PURE) != 0)
                     28: 
                     29: #define        make_set(p, id) (\
                     30:                                (*(p)) = new_xnode(),\
                     31:                                (*(p))->x_left = NULL,\
                     32:                                (*(p))->x_value.d = (id)\
                     33:                        )
                     34: 
                     35: #define        pure_var(p)     (\
                     36:                                (p)->x_what == xt_dot\
                     37:                                &&\
                     38:                                (p)->x_left != NULL\
                     39:                                &&\
                     40:                                (p)->x_left->x_what == xt_name\
                     41:                                &&\
                     42:                                is_pure((p)->x_left->x_value.d)\
                     43:                        )
                     44: 
                     45: /*
                     46:  *     Life time defines.
                     47:  */
                     48: #define        L_NONE          0
                     49: #define        L_ACTIVE        1
                     50: #define        L_EQUIV         2
                     51: #define        L_DEAD          -1
                     52: #define        L_HEAD          -2
                     53: 
                     54: #define        L_ORD(i)        (-1 - (i))
                     55: 
                     56: /*
                     57:  *     Equivalence path definition values.
                     58:  */
                     59: #define        E_NONE          0
                     60: #define        E_SOME          1
                     61: #define        E_ALL           2
                     62: #define        E_SUSP          3
                     63: 
                     64: extern ident   *alloced_ids;
                     65: extern int     eord;
                     66: extern char    *equiv_value;
                     67: extern int     equiv_max;
                     68: extern int     trace_argument;
                     69: extern cnset   expressions;
                     70: extern cnset   mip_dead_ends;
                     71: extern xnode   *err_set;
                     72: extern xnode   *eq_set;
                     73: extern xnode   *merr_set;
                     74: 
                     75: extern int     flow_flags();
                     76: extern int     is_member();
                     77: extern xnode   *copy_xlist();
                     78: extern xnode   *flow_diff();
                     79: extern xnode   *flow_inter();
                     80: extern xnode   *flow_pack();
                     81: extern xnode   *flow_union();
                     82: extern void    add_element();
                     83: extern void    alloc_ids();
                     84: extern void    equiv_init();
                     85: extern void    eval_check();
                     86: extern void    expr_flow();
                     87: extern void    free_xlist();
                     88: extern void    life_list();
                     89: extern void    make_pure();
                     90: extern void    mod_check();
                     91: extern void    print_errs();
                     92: extern void    print_list();
                     93: extern void    print_set();
                     94: extern void    sync_back();
                     95: extern void    trace_back();
                     96: extern void    trace_life();
                     97: 
                     98: #define        E_ROUND(i)      (((i) & ~0xF) + 0x10)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.