diff --git a/cirilisp.c b/cirilisp.c index 9e7eb8c..a9e0f0a 100644 --- a/cirilisp.c +++ b/cirilisp.c @@ -172,5 +172,5 @@ int main(int argc, char **argv) ; printf("\nДостигнут крај улазног тока.\nЗбогом и дођите нам опет!\n"); - return 0; + exitCirilisp(0); } diff --git a/doc/list.png b/doc/maturskiRad/list.png similarity index 100% rename from doc/list.png rename to doc/maturskiRad/list.png diff --git a/doc/lit.bib b/doc/maturskiRad/lit.bib similarity index 100% rename from doc/lit.bib rename to doc/maturskiRad/lit.bib diff --git a/doc/rad.tex b/doc/maturskiRad/rad.tex similarity index 100% rename from doc/rad.tex rename to doc/maturskiRad/rad.tex diff --git a/eval.c b/eval.c index 1b0505e..34e2927 100644 --- a/eval.c +++ b/eval.c @@ -172,31 +172,30 @@ object apply(object procedure, object parameters, env currentEnv) --currentRecursionDepth; SIGERR(maxRecursionDepthError); } - object args = copyObject(PROC_COMP_ARGS(procedure)); - object body = copyObject(PROC_COMP_BODY(procedure)); + + object args = PROC_COMP_ARGS(procedure); env definitionEnv = PROC_COMP_ENV(procedure); env procEnv = createEnvironment(definitionEnv); if (!bindArgs(parameters, args, procEnv)) { deleteObject(args); - deleteObject(body); removeEnvironment(procEnv); SIGERR(argumentNumberError); } - object *currentSubProc = &body; - while (TYPE(*currentSubProc) != nilObject) + object *currentExprPointer = &PROC_COMP_BODY(procedure); + while (TYPE(*currentExprPointer) != nilObject) { - CAR(*currentSubProc) = Eval(CAR(*currentSubProc), procEnv); - if (TYPE(CDR(*currentSubProc)) == nilObject) + object currentExpr = copyObject(CAR(*currentExprPointer)); + currentExpr = Eval(currentExpr, procEnv); + if (TYPE(CDR(*currentExprPointer)) == nilObject) { - result = copyObject(CAR(*currentSubProc)); + result = copyObject(currentExpr); } - currentSubProc = &CDR(*currentSubProc); + currentExprPointer = &CDR(*currentExprPointer); + deleteObject(currentExpr); } - deleteObject(args); - deleteObject(body); removeEnvironment(procEnv); --currentRecursionDepth;