let register_for_analysis env =
        let env = Environment.declare_variable_and_value env "args" (RMapValue(Hashtbl.create 10, ArraySubtype))
        in let env = Environment.declare_variable_and_value env "String" (RMapValue(Hashtbl.create 10, MapSubtype))
        in let env = Environment.declare_variable_and_value env "Integer" (RMapValue(Hashtbl.create 10, MapSubtype))
        in let h = Hashtbl.create 10
        in let _ = Hashtbl.add h "infinity" (RFloatValue(infinity))
        in let _ = Hashtbl.add h "nan" (RFloatValue(nan))
        in let _ = Hashtbl.add h "negativeInfinity" (RFloatValue(neg_infinity))
        in let env = Environment.declare_variable_and_value env "Float" (RMapValue(h, MapSubtype))
        in let env = Environment.declare_variable_and_value env "Boolean" (RMapValue(Hashtbl.create 10, MapSubtype))
        in let env = Environment.declare_variable_and_value env "Function" (RMapValue(Hashtbl.create 10, MapSubtype))
        in let env = Environment.declare_variable_and_value env "Void" (RMapValue(Hashtbl.create 10, MapSubtype))
        in let env = Environment.declare_variable_and_value env "Nan" (RMapValue(Hashtbl.create 10, MapSubtype))
        in let env = Environment.declare_variable_and_value env "Array" (RMapValue(Hashtbl.create 10, MapSubtype))
        in let env = Environment.declare_variable_and_value env "Map" (RMapValue(Hashtbl.create 10, MapSubtype))
        in let env = Environment.declare_variable_and_value env "void" RVoid
        in let rec define_map_lib_call h libdef = function
                | name::[] -> Hashtbl.replace h name libdef
                | name:: tl ->
                                let h = (try
                                                match Hashtbl.find h name with
                                                | RMapValue(h, MapSubtype-> h
                                                | _ -> raise (RuntimeError.InternalError "inconsistent library call definition")
                                        with Not_found ->
                                                        let nh = Hashtbl.create 10
                                                        in Hashtbl.replace h name (RMapValue(nh, MapSubtype)); nh)
                                in define_map_lib_call h libdef tl
                | [] -> raise (RuntimeError.InternalError "invalid library call definition")
        in let rec loop env = function
                | [] -> env
                | def:: tl ->
                                (match def.name with
                                        | name::[] ->
                                                        let env = Environment.declare_variable_and_value env name (RLibraryFunction(def))
                                                        in loop env tl
                                        | name:: name_rest ->
                                                        let (h, env) = (try
                                                                        match resolve_variable_value name env with
                                                                        | (RMapValue(h, MapSubtype), loc) -> (h, env)
                                                                        | _ -> raise (RuntimeError.InternalError "inconsistent library call definition")
                                                                with
                                                                | Variable_not_found(_) ->
                                                                                let h = Hashtbl.create 10
                                                                                in let env = Environment.declare_variable_and_value env name (RMapValue(h, MapSubtype))
                                                                                in (h, env)
                                                                )
                                                        in define_map_lib_call h (RLibraryFunction(def)) name_rest;
                                                        loop env tl
                                        | [] -> raise (RuntimeError.InternalError "invalid library call definition")
                                )
        in let (exported, env) = Library_builtin.initialize env
        in let env = loop env exported
        in let (exported, env) = Library_string.initialize env
        in let env = loop env exported
        in let (exported, env) = Library_io.initialize env
        in loop env exported