From 35cd4b13cfded3dfcfa0763bbeca40da0e8fbfb9 Mon Sep 17 00:00:00 2001 From: kappa Date: Sat, 23 Mar 2019 22:07:31 +0100 Subject: [PATCH] =?UTF-8?q?apply=20=D1=81=D0=B0=D0=B4=D0=B0=20=D0=BF=D0=BE?= =?UTF-8?q?=D1=98=D0=B5=D0=B4=D0=B8=D0=BD=D0=B0=D1=87=D0=BD=D0=BE=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BF=D0=B8=D1=80=D0=B0=20=D0=B8=20=D0=B1=D1=80=D0=B8?= =?UTF-8?q?=D1=88=D0=B5=20=D0=B8=D0=B7=D1=80=D0=B0=D0=B7=D0=B5=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D1=86=D0=B5=D0=B4=D1=83=D1=80=D0=B5,=20=D1=83?= =?UTF-8?q?=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20=D1=86=D0=B5=D0=BB=D0=BE=D0=B3?= =?UTF-8?q?=20=D1=82=D0=B5=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cirilisp.c | 2 +- doc/{ => maturskiRad}/list.png | Bin doc/{ => maturskiRad}/lit.bib | 0 doc/{ => maturskiRad}/rad.tex | 0 eval.c | 21 ++++++++++----------- 5 files changed, 11 insertions(+), 12 deletions(-) rename doc/{ => maturskiRad}/list.png (100%) rename doc/{ => maturskiRad}/lit.bib (100%) rename doc/{ => maturskiRad}/rad.tex (100%) 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;