let analyze ast =
let analyze_all env ast =
let (rast, env) = analyze_variables env ast
in let (rast, env) =
(rast, {
globals = env.globals;
num_globals = env.num_globals;
locals = env.locals;
num_locals = env.num_locals;
sdepth = env.sdepth;
max_depth = env.max_depth;
errors = env.errors;
warnings = env.warnings;
unique_id = env.unique_id;
names = List.rev env.names;
varprops = env.varprops;
imported = env.imported;
templates = env.templates;
constants = env.constants;
})
in let (rast, env) = (pass2 env rast, env)
in let _ = check_errors env
in let env = check_warnings env
in (rast, env)
in let env = Environment.new_analysis_environment()
in let env = Library.register_for_analysis env
in analyze_all env ast