#include "calc.h" void * clc_malloc(size_t size) { void *p; p = MEM_storage_malloc(clc_current_interpreter->current_storage, size); return p; } void * clc_global_malloc(size_t size) { void *p; p = MEM_storage_malloc(clc_current_interpreter->global_storage, size); return p; } Value * clc_search_local_variable(LocalEnvironment *env, char *identifier) { Variable *pos; if (env == NULL) return NULL; for (pos = env->variable; pos; pos = pos->next) { if (!strcmp(pos->name, identifier)) break; } if (pos == NULL) { return NULL; } else { return &pos->value; } } Value * clc_search_global_variable(char *identifier) { Variable *pos; for (pos = clc_current_interpreter->variable; pos; pos = pos->next) { if (!strcmp(pos->name, identifier)) break; } if (pos == NULL) { return NULL; } else { return &pos->value; } } void clc_add_local_variable(LocalEnvironment *env, char *identifier, Value *value) { Variable *new_variable; new_variable = MEM_malloc(sizeof(Variable)); new_variable->name = identifier; new_variable->value = *value; new_variable->next = env->variable; env->variable = new_variable; } void clc_add_global_variable(char *identifier, Value *value) { Variable *new_variable; new_variable = clc_global_malloc(sizeof(Variable)); new_variable->name = clc_global_malloc(strlen(identifier) + 1); strcpy(new_variable->name, identifier); new_variable->value = *value; new_variable->next = clc_current_interpreter->variable; clc_current_interpreter->variable = new_variable; } FunctionDefinition * clc_search_function(char *name) { FunctionDefinition *pos; for (pos = clc_current_interpreter->function_list; pos; pos = pos->next) { if (!strcmp(pos->name, name)) break; } return pos; } void clc_reopen_current_storage(void) { MEM_dispose_storage(clc_current_interpreter->current_storage); clc_current_interpreter->current_storage = MEM_open_storage(0); }