From 2b9cc75ed54e3cc1e8e80eed9ea48770c36ed3ba Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Mon, 1 May 2023 19:28:26 -0400 Subject: [PATCH] step: savepoint. --- mumble | Bin 99416 -> 103664 bytes src/mumble.c | 79 ++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 69 insertions(+), 10 deletions(-) diff --git a/mumble b/mumble index 73d85916c731f2f1fa52d854140d39793bc0fc97..ae4f8d41cbee0921d2b21a9c9652ba382a6ddb78 100755 GIT binary patch delta 30561 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 VFDS2}+SOdlRaaU0YnJT(e*nf7gjN6m delta 27944 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 qo||G#ajNq&Q>;^*EWkb}TScell[i]; @@ -229,21 +229,77 @@ lispval* take_lispval(lispval* v, int i){ return x; } +lispval* builtin_op(char* op, lispval* v){ + // For now, ensure all args are numbers + for(int i=0; icount; i++){ + if(v->cell[i]->type != LISPVAL_NUM){ + return lispval_err("Error: Operating on non-numbers"); + } + } + // Check how many elements + if(v->count == 0){ + return lispval_err("Error: No numbers on which to operate!"); + } else if(v->count == 1) { + if(strcmp(op, "-")){ + return lispval_num(-v->cell[0]->num); + }else { + return lispval_err("Error: Non minus unary operation"); + } + } else if (v->count >= 2){ + lispval* x = pop_lispval(v,0); + + while(v->count > 0){ + /* Pop the next element */ + lispval* y = pop_lispval(v, 0); + + if (strcmp(op, "+") == 0) { x->num += y->num; } + if (strcmp(op, "-") == 0) { x->num -= y->num; } + if (strcmp(op, "*") == 0) { x->num *= y->num; } + + if (strcmp(op, "/") == 0) { + if (y->num == 0) { + delete_lispval(x); delete_lispval(y); + return lispval_err("Error: Division By Zero!"); + } + x->num /= y->num; + } + + delete_lispval(y); + } + return x; + } else { + return lispval_err("Error: Incorrect number of args. Perhaps a lispval->count was wrongly initialized?"); + } +} + lispval* evaluate_lispval(lispval* l) { // Evaluate the children for(int i=0; icount; i++){ l->cell[i] = evaluate_lispval(l->cell[i]); + } // Check if any are errors. + for(int i=0; icount; i++){ if(l->cell[i]->type == LISPVAL_ERR){ - char* msg = l->cell[i]->err; // lispval_take - lispval* l2 = lispval_err(msg); - delete_lispval(l); - return l2; + return pop_lispval(l, i); } } - + + // Check if the first item of a list is a symbol. + if(l->count > 0 && l->cell[0]->type == LISPVAL_SYM){ + /* lispval* lisp_op = pop_lispval(l, 0); + lispval* result = builtin_op(lisp_op->sym, l); + delete_lispval(l); + delete_lispval(lisp_op); + return result; + */ + return l; + }else{ + return l; + // In particular, leave (5) (the list that contains 5) as is + // rather than returning 5. + } return l; } @@ -295,12 +351,15 @@ int main(int argc, char** argv) // if(VERBOSE) printf("\n\nEvaluating the AST"); // lispval result = evaluate_ast(ast); lispval* l = read_lispval(ast); - if (VERBOSE) + if (VERBOSE){ printf("\n\nTree printing: "); - print_lispval_tree(l, 0); - if (VERBOSE) + print_lispval_tree(l, 0); + } + if (VERBOSE){ printf("\nParenthesis printing: \n"); - print_lispval_parenthesis(l); + print_lispval_parenthesis(l); + } + evaluate_lispval(l); delete_lispval(l); } else { /* Otherwise Print the Error */