let record_usage env loc op =
        let uid = match loc with
                | GlobalVar(uid, _) -> uid
                | LocalVar(uid, _, _) -> uid
        in let props =
                try Hashtbl.find env.varprops uid
                with Not_found ->
                                { written_after_declared = false;
                                        read_after_declared = false;
                                        declaration_loc = ("", 0);
                                }
        in let new_props =
                match op with
                | ReadOp ->
                                { written_after_declared = props.written_after_declared;
                                        read_after_declared = true;
                                        declaration_loc = props.declaration_loc;
                                }
                | WriteOp ->
                                {        written_after_declared = true;
                                        read_after_declared = props.read_after_declared;
                                        declaration_loc = props.declaration_loc;
                                }
                | DeclareOp(loc) ->
                                (match props.declaration_loc with
                                        | ("", 0) ->
                                                        { written_after_declared = false;
                                                                read_after_declared = props.read_after_declared;
                                                                declaration_loc = loc
                                                        }
                                        | _ ->
                                                        { written_after_declared = true;
                                                                read_after_declared = props.read_after_declared;
                                                                declaration_loc = props.declaration_loc
                                                        })
                | DeclareWriteOp(loc) ->
                                match props.declaration_loc with
                                | ("", 0) ->
                                                { written_after_declared = true;
                                                        read_after_declared = true;
                                                        declaration_loc = loc
                                                }
                                | _ ->
                                                { written_after_declared = true;
                                                        read_after_declared = true;
                                                        declaration_loc = props.declaration_loc
                                                }
        in Hashtbl.replace env.varprops uid new_props