From d9b8904f88633e9475be9bdd88ab6c017bb4d0c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?b=CA=B0edoh=E2=82=82=20sw=C3=A9?= Date: Mon, 17 Jun 2024 20:49:31 +0500 Subject: [PATCH] Add "call" --- src/execute.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/execute.c b/src/execute.c index bf5bc90..816555b 100644 --- a/src/execute.c +++ b/src/execute.c @@ -481,6 +481,47 @@ void execute(Stack *stack, Stack *originstack, char *modname) continue; } + if (!strcmp(NAME, "call")) + { + + unsigned short len = stack_pop(stack); + char *string = calloc(len, sizeof(char)); + + for (int i = len - 1; i != -1; i--) + string[i] = stack_pop(stack); + + if (!strcmp(string, modname)) + { + printf("MODULE %s: CAN'T EXECUTE ITSELF\n", string); + kms(stack, "CAN'T EXECUTE ITSELF"); + } + + FILE *file = fopen(string, "r"); + if (!file) + { + printf("ERROR OPENING MODULE: %s\n", string); + kms(stack, "ERROR OPENING MODULE"); + } + + DATA = DATA ? DATA : STACK_SIZE; + + Stack *tempstack = program_init(DATA); + + parse_and_process(tempstack, file); + + fclose(file); + + execute(tempstack, stack, string); + + for (int i = 0; i < tempstack->pointer; i++) + stack_push(stack, tempstack->memory[i]); + + free(tempstack); + free(string); + + continue; + } + // Native if (!strcmp(NAME, "native"))