let check_warnings env =
        (* check for unused templates *)
        let env = Hashtbl.fold (fun name spec env ->
                                                let (_, _, cloc) = spec
                                                in Environment.add_warning env cloc ("Template definition '" ^ name ^ "' is never used.")
                        )        env.templates env
        (* check variables usage *)
        in let rec loop_names env max names = function
                | n when n = max -> env
                | n ->
                                let env =
                                        try
                                                let varprop = Hashtbl.find env.varprops n
                                                in let (_, line) = varprop.declaration_loc
                                                in match line with
                                                | 0 -> env
                                                | _ ->
                                                                let env = if varprop.read_after_declared = false && line!= 0 then
                                                                                add_warning env varprop.declaration_loc ("Variable "^(List.hd names)^" is never read.")
                                                                        else
                                                                                env
                                                                in env
                                        with Not_found ->
                                                        env
                                in loop_names env max (List.tl names) (n + 1)
        in let env = loop_names env (List.length env.names) env.names 0
        (* print warnings *)
        in List.fold_left (fun _ warning -> print_string ("WARNING: "^warning^"\n")) () (List.rev env.warnings);
        env