From 1d452ff64d10878df917b8a963a3a6f2b8e7a9d3 Mon Sep 17 00:00:00 2001 From: "Kreijstal (aider)" Date: Sat, 20 Jul 2024 10:16:56 +0200 Subject: [PATCH 01/13] Added a declaration for the `strip_spaces` function to remove a compiler warning. --- src/lisp.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lisp.c b/src/lisp.c index e3320a5..5a337eb 100644 --- a/src/lisp.c +++ b/src/lisp.c @@ -4,6 +4,7 @@ #include "lisp.h" #include "list.h" #include "operators.h" +void strip_spaces(char* string); const char* type_names[] = {"INTEGER", "SYMBOL", "LIST", "PROCEDURE", "BINDING", "ERROR", "OPERATOR"}; From aeb2f7c4a426257d32e33c5ff2399929dc35cb51 Mon Sep 17 00:00:00 2001 From: Kreijstal Date: Sat, 20 Jul 2024 10:17:58 +0200 Subject: [PATCH 02/13] Added parser header file to the project. --- src/parser.h | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/parser.h diff --git a/src/parser.h b/src/parser.h new file mode 100644 index 0000000..e69de29 From 798e5aa1bd10097cc89a4c267bb0a52f34576af7 Mon Sep 17 00:00:00 2001 From: "Kreijstal (aider)" Date: Sat, 20 Jul 2024 10:17:59 +0200 Subject: [PATCH 03/13] Added the declaration of the `strip_spaces` function to `src/parser.h` to resolve implicit declaration warnings. --- src/parser.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/parser.h b/src/parser.h index e69de29..bf910e4 100644 --- a/src/parser.h +++ b/src/parser.h @@ -0,0 +1 @@ +void strip_spaces(char* string); From d71fc316908400f61d6899082176a50dc24ee3e9 Mon Sep 17 00:00:00 2001 From: "Kreijstal (aider)" Date: Sat, 20 Jul 2024 10:18:27 +0200 Subject: [PATCH 04/13] Added `parser.h` to `parser.c` and `lisp.c` and removed the double declaration of `strip_spaces`. --- src/lisp.c | 2 +- src/parser.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lisp.c b/src/lisp.c index 5a337eb..cdbbc72 100644 --- a/src/lisp.c +++ b/src/lisp.c @@ -4,7 +4,7 @@ #include "lisp.h" #include "list.h" #include "operators.h" -void strip_spaces(char* string); +#include "parser.h" const char* type_names[] = {"INTEGER", "SYMBOL", "LIST", "PROCEDURE", "BINDING", "ERROR", "OPERATOR"}; diff --git a/src/parser.c b/src/parser.c index e9b40e6..cf96c41 100644 --- a/src/parser.c +++ b/src/parser.c @@ -4,6 +4,7 @@ #include #include "lisp.h" #include "list.h" +#include "parser.h" int check_number(char* str) { From c6bed4fd871a77875a4a50706c530f7cf8444824 Mon Sep 17 00:00:00 2001 From: "Kreijstal (aider)" Date: Sat, 20 Jul 2024 10:22:47 +0200 Subject: [PATCH 05/13] Added type casting to return values in `primitive_lesseq` and `primitive_greatereq` to fix warnings. --- src/primitives.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/primitives.c b/src/primitives.c index a78fa36..76a2774 100644 --- a/src/primitives.c +++ b/src/primitives.c @@ -137,12 +137,12 @@ Value* primitive_greater(List* arguments) Value* primitive_lesseq(List* arguments) { - return primitive_less(arguments) || primitive_eq(arguments); + return (Value*)((intptr_t)primitive_less(arguments) || (intptr_t)primitive_eq(arguments)); } Value* primitive_greatereq(List* arguments) { - return primitive_greater(arguments) || primitive_eq(arguments); + return (Value*)((intptr_t)primitive_greater(arguments) || (intptr_t)primitive_eq(arguments)); } Value* primitive_list(List* arguments) From 6b4628e38927eaf3ace338dc6f18b2e505238d22 Mon Sep 17 00:00:00 2001 From: "Kreijstal (aider)" Date: Sat, 20 Jul 2024 10:23:17 +0200 Subject: [PATCH 06/13] Cast `type_names[val->type]` to `void*` to resolve const qualifier warning in `alloc_value` call. --- src/primitives.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/primitives.c b/src/primitives.c index 76a2774..1a58136 100644 --- a/src/primitives.c +++ b/src/primitives.c @@ -236,5 +236,5 @@ Value* primitive_type(List* arguments) { Value* val = arguments->first->value; - return alloc_value(TYPE_SYMBOL, type_names[val->type]); + return alloc_value(TYPE_SYMBOL, (void*)type_names[val->type]); } From a0c66df6ab0ff655f0576a030e719a704113895e Mon Sep 17 00:00:00 2001 From: "Kreijstal (aider)" Date: Sat, 20 Jul 2024 10:24:04 +0200 Subject: [PATCH 07/13] Cast `const char*` to `void*` in calls to `alloc_value` to resolve type warnings. --- src/primitives.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/primitives.c b/src/primitives.c index 1a58136..5b1794b 100644 --- a/src/primitives.c +++ b/src/primitives.c @@ -113,7 +113,7 @@ Value* primitive_eq(List* arguments) Node* current_argument = arguments->first; for (int i = 0; i < arguments->length - 1; i++) { if (!compare_values(current_argument->value, current_argument->next->value)) - return alloc_value(TYPE_SYMBOL, "NIL"); + return alloc_value(TYPE_SYMBOL, (void*)"NIL"); current_argument = current_argument->next; } return alloc_value(TYPE_SYMBOL, "T"); From 2ebc7b55c1b62454d605bb94fc7517615c02c7c9 Mon Sep 17 00:00:00 2001 From: "Kreijstal (aider)" Date: Sat, 20 Jul 2024 10:25:08 +0200 Subject: [PATCH 08/13] Included `` and corrected logical operations in `primitive_lesseq` and `primitive_greatereq`. --- src/primitives.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/primitives.c b/src/primitives.c index 5b1794b..5a01f6a 100644 --- a/src/primitives.c +++ b/src/primitives.c @@ -1,6 +1,7 @@ #include #include #include "lisp.h" +#include #include "list.h" #include "primitives.h" @@ -137,12 +138,14 @@ Value* primitive_greater(List* arguments) Value* primitive_lesseq(List* arguments) { - return (Value*)((intptr_t)primitive_less(arguments) || (intptr_t)primitive_eq(arguments)); + return (Value*)((intptr_t)primitive_less(arguments) == (intptr_t)alloc_value(TYPE_SYMBOL, "T") || + (intptr_t)primitive_eq(arguments) == (intptr_t)alloc_value(TYPE_SYMBOL, "T")); } Value* primitive_greatereq(List* arguments) { - return (Value*)((intptr_t)primitive_greater(arguments) || (intptr_t)primitive_eq(arguments)); + return (Value*)((intptr_t)primitive_greater(arguments) == (intptr_t)alloc_value(TYPE_SYMBOL, "T") || + (intptr_t)primitive_eq(arguments) == (intptr_t)alloc_value(TYPE_SYMBOL, "T")); } Value* primitive_list(List* arguments) From 3ea0a5c2949d2d51a2b131b0eb7fcf3f11b7dc56 Mon Sep 17 00:00:00 2001 From: "Kreijstal (aider)" Date: Sat, 20 Jul 2024 10:25:16 +0200 Subject: [PATCH 09/13] Corrected logical operations in `primitive_lesseq` and `primitive_greatereq` for proper comparisons. --- src/primitives.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/primitives.c b/src/primitives.c index 5a01f6a..4f495a2 100644 --- a/src/primitives.c +++ b/src/primitives.c @@ -138,14 +138,28 @@ Value* primitive_greater(List* arguments) Value* primitive_lesseq(List* arguments) { - return (Value*)((intptr_t)primitive_less(arguments) == (intptr_t)alloc_value(TYPE_SYMBOL, "T") || - (intptr_t)primitive_eq(arguments) == (intptr_t)alloc_value(TYPE_SYMBOL, "T")); + Value* less_result = primitive_less(arguments); + Value* eq_result = primitive_eq(arguments); + if (less_result->type == TYPE_SYMBOL && strcmp((char*)less_result->data, "T") == 0) { + return alloc_value(TYPE_SYMBOL, "T"); + } + if (eq_result->type == TYPE_SYMBOL && strcmp((char*)eq_result->data, "T") == 0) { + return alloc_value(TYPE_SYMBOL, "T"); + } + return alloc_value(TYPE_SYMBOL, "NIL"); } Value* primitive_greatereq(List* arguments) { - return (Value*)((intptr_t)primitive_greater(arguments) == (intptr_t)alloc_value(TYPE_SYMBOL, "T") || - (intptr_t)primitive_eq(arguments) == (intptr_t)alloc_value(TYPE_SYMBOL, "T")); + Value* greater_result = primitive_greater(arguments); + Value* eq_result = primitive_eq(arguments); + if (greater_result->type == TYPE_SYMBOL && strcmp((char*)greater_result->data, "T") == 0) { + return alloc_value(TYPE_SYMBOL, "T"); + } + if (eq_result->type == TYPE_SYMBOL && strcmp((char*)eq_result->data, "T") == 0) { + return alloc_value(TYPE_SYMBOL, "T"); + } + return alloc_value(TYPE_SYMBOL, "NIL"); } Value* primitive_list(List* arguments) From b6e612287da65350163a3355dcf212beb0759ef9 Mon Sep 17 00:00:00 2001 From: "Kreijstal (aider)" Date: Sat, 20 Jul 2024 10:25:51 +0200 Subject: [PATCH 10/13] Included the `` header to resolve the implicit declaration of the `strcmp` function. --- src/primitives.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/primitives.c b/src/primitives.c index 4f495a2..64ed768 100644 --- a/src/primitives.c +++ b/src/primitives.c @@ -4,6 +4,7 @@ #include #include "list.h" #include "primitives.h" +#include #define OPERATION_PLUS 0 #define OPERATION_MINUS 1 From 69dd6fea69d4752ea4d21875d493eb933964dcf8 Mon Sep 17 00:00:00 2001 From: Kreijstal Date: Sat, 20 Jul 2024 10:31:53 +0200 Subject: [PATCH 11/13] Refactored the `primitive_lesseq` and `primitive_greatereq` functions to simplify their return logic. --- src/primitives.c | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/src/primitives.c b/src/primitives.c index 64ed768..7d42573 100644 --- a/src/primitives.c +++ b/src/primitives.c @@ -139,28 +139,12 @@ Value* primitive_greater(List* arguments) Value* primitive_lesseq(List* arguments) { - Value* less_result = primitive_less(arguments); - Value* eq_result = primitive_eq(arguments); - if (less_result->type == TYPE_SYMBOL && strcmp((char*)less_result->data, "T") == 0) { - return alloc_value(TYPE_SYMBOL, "T"); - } - if (eq_result->type == TYPE_SYMBOL && strcmp((char*)eq_result->data, "T") == 0) { - return alloc_value(TYPE_SYMBOL, "T"); - } - return alloc_value(TYPE_SYMBOL, "NIL"); + return primitive_less(arguments) || primitive_eq(arguments); } Value* primitive_greatereq(List* arguments) { - Value* greater_result = primitive_greater(arguments); - Value* eq_result = primitive_eq(arguments); - if (greater_result->type == TYPE_SYMBOL && strcmp((char*)greater_result->data, "T") == 0) { - return alloc_value(TYPE_SYMBOL, "T"); - } - if (eq_result->type == TYPE_SYMBOL && strcmp((char*)eq_result->data, "T") == 0) { - return alloc_value(TYPE_SYMBOL, "T"); - } - return alloc_value(TYPE_SYMBOL, "NIL"); + return primitive_greater(arguments) || primitive_eq(arguments); } Value* primitive_list(List* arguments) From 2f380df851c245814c55ca66d4284fd6993c0a36 Mon Sep 17 00:00:00 2001 From: "Kreijstal (aider)" Date: Sat, 20 Jul 2024 10:31:55 +0200 Subject: [PATCH 12/13] Fixed type conversion issues in `primitive_lesseq` and `primitive_greatereq` by adding explicit casts to `Value*`. --- src/primitives.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/primitives.c b/src/primitives.c index 7d42573..e579ff8 100644 --- a/src/primitives.c +++ b/src/primitives.c @@ -139,12 +139,12 @@ Value* primitive_greater(List* arguments) Value* primitive_lesseq(List* arguments) { - return primitive_less(arguments) || primitive_eq(arguments); + return (Value*)((intptr_t)primitive_less(arguments) || (intptr_t)primitive_eq(arguments)); } Value* primitive_greatereq(List* arguments) { - return primitive_greater(arguments) || primitive_eq(arguments); + return (Value*)((intptr_t)primitive_greater(arguments) || (intptr_t)primitive_eq(arguments)); } Value* primitive_list(List* arguments) From b95192ada4374b37f3aabafbed7df017b3fdf1b7 Mon Sep 17 00:00:00 2001 From: "Kreijstal (aider)" Date: Sat, 20 Jul 2024 10:32:50 +0200 Subject: [PATCH 13/13] Typecasted pointer return values in `primitive_lesseq` and `primitive_greatereq` to address warnings without changing semantics. --- src/primitives.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/primitives.c b/src/primitives.c index e579ff8..ad83f90 100644 --- a/src/primitives.c +++ b/src/primitives.c @@ -139,12 +139,12 @@ Value* primitive_greater(List* arguments) Value* primitive_lesseq(List* arguments) { - return (Value*)((intptr_t)primitive_less(arguments) || (intptr_t)primitive_eq(arguments)); + return (Value*)(intptr_t)((intptr_t)primitive_less(arguments) || (intptr_t)primitive_eq(arguments)); } Value* primitive_greatereq(List* arguments) { - return (Value*)((intptr_t)primitive_greater(arguments) || (intptr_t)primitive_eq(arguments)); + return (Value*)(intptr_t)((intptr_t)primitive_greater(arguments) || (intptr_t)primitive_eq(arguments)); } Value* primitive_list(List* arguments)