From c409b8aaf6b6f63bd68a3356e146ab80b2ec8c4b Mon Sep 17 00:00:00 2001 From: A404M Date: Wed, 25 Sep 2024 19:47:29 +0330 Subject: fixed multiple variable definition bug tried to implement import --- src/main.c | 75 ++++++++++++++++++++++---------------------------------------- 1 file changed, 27 insertions(+), 48 deletions(-) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index ea85110..0764388 100644 --- a/src/main.c +++ b/src/main.c @@ -1,22 +1,19 @@ +#include #include #include #include #include +#include #include -#include "compiler/tree_parser/tree_parser.h" -#include "utils/types.h" +#include "compiler/source_code/source_code.h" -static const char *codes[] = { - "print(\"Hello\\n\");", -}; - -Clock runWithPrint(char const *restrict code) { +Clock runWithPrint(SourceCode *code) { Clock sum = 0; Clock diff = 0; - fprintf(stderr, "----code:\n%s\n----\n", code); + fprintf(stderr, "----code:\n%s\n----\n", code->codes[0]->code); Clock start = getTimeInNano(); - const Nodes nodes = lexer(code); + const Nodes nodes = lexer(code, 0); diff += getTimeInNano() - start; sum += diff; if (nodes.size != ERROR_SIZE) { @@ -70,53 +67,35 @@ Clock runWithPrint(char const *restrict code) { return sum; } -Clock process() { - Clock sumAll = 0; - for (size_t i = 0; i < sizeof(codes) / sizeof(char *); ++i) { - Clock start = getTimeInNano(); - runWithPrint(codes[i]); - sumAll += getTimeInNano() - start; - } - return sumAll; -} - -void runBenchmark() { - Clock sum = 0; - const int times = 100; - for (int i = 0; i < times; ++i) { - sum += process(); - } - printf("\n\navg = %fns", ((float)sum) / times); -} - int main(int argc, char *argv[]) { - /*runBenchmark();*/ if (argc < 2) { fprintf(stderr, "no file"); return 1; } - char *code = read_whole_file(argv[1]); + SourceCode sourceCode = makeSourceCode(); + const char *const filePath = argv[1]; + + Code *code; + code = read_whole_file("std/builtins.felan"); + if (code == NULL) { + goto RETURN_ERROR; + } + pushToSourceCode(&sourceCode, code); + + code = read_whole_file(filePath); if (code == NULL) { - return 1; + goto RETURN_ERROR; } - char *import = read_whole_file("stdlib/builtins.felan"); - if (import == NULL) { - return 1; + pushToSourceCode(&sourceCode, code); + + if (!runner(&sourceCode)) { + goto RETURN_ERROR; } - char *lastCode = code; - code = a404m_malloc(strlen(code) + strlen(import) + 2); - strcpy(code, import); - strcat(code, "\n"); - strcat(code, lastCode); - free(lastCode); - free(import); - bool ret = runner(code); + deleteSourceCodeInners(sourceCode); + return 0; - free(code); - if (ret) { - return 0; - } else { - return 1; - } +RETURN_ERROR: + deleteSourceCodeInners(sourceCode); + return 1; } -- cgit v1.2.3