#include "MEM.h"
#define GLOBAL_VARIABLE_DEFINE
#include "calc.h"
CLC_Interpreter
CLC_create_interpreter(void)
{
MEM_Storage storage = MEM_open_storage(0);
CLC_Interpreter interpreter
= MEM_storage_malloc(storage, sizeof(struct CLC_Interpreter_tag));
interpreter->input_mode = CLC_TTY_INPUT_MODE;
interpreter->input_fp = NULL;
interpreter->current_storage = NULL;
interpreter->global_storage = storage;
interpreter->variable = NULL;
interpreter->function_list = NULL;
return interpreter;
}
void
CLC_interpret(CLC_Interpreter interpreter, FILE *fp, CLC_InputMode input_mode)
{
extern int yyparse(void);
interpreter->input_mode = input_mode;
interpreter->input_fp = fp;
interpreter->current_storage = MEM_open_storage(0);
clc_current_interpreter = interpreter;
if (yyparse()) {
fprintf(stderr, "Error ! Error ! Error !\n");
exit(1);
}
if (interpreter->current_storage) {
MEM_dispose_storage(interpreter->current_storage);
}
}
void
CLC_dispose_interpreter(CLC_Interpreter interpreter)
{
MEM_dispose_storage(interpreter->current_storage);
while (interpreter->function_list) {
FunctionDefinition *temp;
temp = interpreter->function_list->next;
MEM_dispose_storage(interpreter->function_list->storage);
interpreter->function_list = temp;
}
}