Annotation of researchv10no/cmd/hdr/flow.h, revision 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.