// proc assert_type(Lisp_Object*, Lisp_Object_Type) -> void; proc built_in_load(String*, Environment*) -> Lisp_Object*; proc create_error(const char* c_file_name, int c_file_line, Lisp_Object* type, String* message) -> void; proc create_error(const char* c_file_name, int c_file_line, Lisp_Object* type, const char* format, ...) -> void; proc create_error(Lisp_Object* type, const char* message, const char* c_file_name, int c_file_line) -> void; proc eval_arguments(Lisp_Object*, Environment*, int*) -> Lisp_Object*; proc eval_expr(Lisp_Object*, Environment*) -> Lisp_Object*; proc is_truthy (Lisp_Object*, Environment*) -> bool; proc list_length(Lisp_Object*) -> int; proc load_built_ins_into_environment(Environment*) -> void; proc parse_argument_list(Lisp_Object*, Function*) -> void; proc print_environment(Environment*) -> void; proc Lisp_Object_Type_to_string(Lisp_Object_Type type) -> const char*; namespace Memory { proc get_or_create_lisp_object_keyword(const char* identifier) -> Lisp_Object*; inline proc get_type(Lisp_Object* node) -> Lisp_Object_Type; } namespace Globals { Lisp_Object* current_source_code = nullptr; Error* error; }