added option to load files once

This commit is contained in:
2014-06-13 17:49:41 +01:00
parent cb8fa74fe7
commit 0c138cfe20
3 changed files with 61 additions and 11 deletions

24
lenv.c
View File

@@ -8,15 +8,24 @@ lenv* lenv_new() {
env->count = 0;
env->parent = NULL;
env->syms = NULL;
env->loaded_files_count = 0;
env->loaded_files = NULL;
return env;
}
void lenv_delete(lenv* env) {
for(int i = 0; i < env->count; i++) {
lval_delete(env->syms[i]->lval);
free(env->syms[i]->sym);
free(env->syms[i]);
symtab_delete(env->syms[i]);
}
free(env->syms);
for(int i = 0; i < env->loaded_files_count; i++) {
free(env->loaded_files[i]);
}
if (env->loaded_files_count > 0) {
free(env->loaded_files);
}
if (env->syms != NULL) {
free(env->syms);
}
env->parent = NULL;
free(env);
}
lenv* lenv_copy(lenv* env) {
@@ -59,6 +68,13 @@ symtab* lenv_search(lenv* env, char* sym) {
}
return *result;
}
lenv* lenv_get_root(lenv* env) {
if (env->parent == NULL) {
return env;
} else {
return lenv_get_root(env->parent);
}
}
lval* lenv_get(lenv* env, lval* sym) {
LASSERT(sym, sym->type == LVAL_SYM, LERR_BAD_OP, "Expected symbol");