#ifndef RAVA_REPL_SESSION_H #define RAVA_REPL_SESSION_H #include "repl_types.h" #include "repl_history.h" typedef struct { RavaREPLVariable_t *variables; size_t variable_count; size_t variable_capacity; RavaREPLMethod_t *methods; size_t method_count; size_t method_capacity; RavaREPLClass_t *classes; size_t class_count; size_t class_capacity; RavaProgram_t *program; RavaClass_t *session_class; RavaVM_t *vm; RavaREPLHistory_t *history; time_t start_time; int execution_count; bool debug_mode; char *last_error; } RavaREPLSession_t; RavaREPLSession_t* rava_repl_session_create(void); void rava_repl_session_destroy(RavaREPLSession_t *session); bool rava_repl_session_add_variable(RavaREPLSession_t *session, const char *name, const char *type_name, const char *initializer, RavaValueType_e type, RavaValue_t value); RavaREPLVariable_t* rava_repl_session_get_variable(RavaREPLSession_t *session, const char *name); bool rava_repl_session_set_variable(RavaREPLSession_t *session, const char *name, RavaValue_t value); void rava_repl_session_clear_variables(RavaREPLSession_t *session); bool rava_repl_session_add_method(RavaREPLSession_t *session, const char *name, const char *return_type, const char *source); RavaREPLMethod_t* rava_repl_session_get_method(RavaREPLSession_t *session, const char *name); bool rava_repl_session_add_class(RavaREPLSession_t *session, const char *name, const char *source); RavaREPLClass_t* rava_repl_session_get_class(RavaREPLSession_t *session, const char *name); char* rava_repl_session_generate_source(RavaREPLSession_t *session); bool rava_repl_session_recompile(RavaREPLSession_t *session); void rava_repl_session_set_error(RavaREPLSession_t *session, const char *error); const char* rava_repl_session_get_error(RavaREPLSession_t *session); #endif