From f79290084948f3cf140395c270c07cf29ca58e8d Mon Sep 17 00:00:00 2001 From: A404M Date: Sun, 22 Sep 2024 19:34:43 +0330 Subject: Better errors Added variables --- src/main.c | 108 +++++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 66 insertions(+), 42 deletions(-) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index c23696e..ea85110 100644 --- a/src/main.c +++ b/src/main.c @@ -1,62 +1,70 @@ #include +#include #include #include #include +#include "compiler/tree_parser/tree_parser.h" +#include "utils/types.h" + static const char *codes[] = { - "print(\"\");", + "print(\"Hello\\n\");", }; -bool run(char const *restrict code) { - bool ranSuccess = false; - const Nodes nodes = lexer(code); - ParsedNode *parsedNode = parser(nodes); - if (parsedNode != NULL) { - Instructions instructions = codeGenerator(parsedNode); - if (instructions.size != ERROR_SIZE) { - ranSuccess = runner(instructions); - deleteInstructions(instructions); - } - deleteParsedNode(parsedNode); - } - deleteNodes(nodes); - return ranSuccess; -} - Clock runWithPrint(char const *restrict code) { Clock sum = 0; Clock diff = 0; - printf("----code:\n%s\n----\n", code); + fprintf(stderr, "----code:\n%s\n----\n", code); Clock start = getTimeInNano(); const Nodes nodes = lexer(code); diff += getTimeInNano() - start; sum += diff; - printNodes(nodes); - printf("----lexing in %ldns\n", diff); - start = getTimeInNano(); - ParsedNode *parsedNode = parser(nodes); - diff = getTimeInNano() - start; - sum += diff; - printf("----parsing in %ldns\n", diff); - if (parsedNode != NULL) { - printParsedNode(parsedNode); + if (nodes.size != ERROR_SIZE) { + printNodes(nodes); + fprintf(stderr, "----lexing in %ldns\n", diff); start = getTimeInNano(); - Instructions instructions = codeGenerator(parsedNode); - if (instructions.size != ERROR_SIZE) { - diff = getTimeInNano() - start; - sum += diff; - printf("----code_generator in %ldns\n", diff); - printInstructions(instructions); + ParsedNode *parsedNode = _parser(nodes, code); + diff = getTimeInNano() - start; + sum += diff; + if (parsedNode != NULL) { + printParsedNode(parsedNode); + fprintf(stderr, "----node parsing in %ldns\n", diff); start = getTimeInNano(); - bool ranSuccess = runner(instructions); + ParsedTree *parsedTree = _treeParser(parsedNode, code); diff = getTimeInNano() - start; sum += diff; - printf("----runner in %ldns\n", diff); - printf("ran sucessfully = %s\n", ranSuccess ? "true" : "false"); - printf("----sum %ldns\n", sum); - deleteInstructions(instructions); + if (parsedTree != NULL) { + printParsedTreeNode(parsedTree); + fprintf(stderr, "----tree parsing in %ldns\n", diff); + start = getTimeInNano(); + Instructions instructions = _codeGenerator(parsedTree, code); + diff = getTimeInNano() - start; + sum += diff; + if (instructions.size != ERROR_SIZE) { + printInstructions(instructions); + fprintf(stderr, "----code_generator in %ldns\n", diff); + start = getTimeInNano(); + bool ranSuccess = _runner(instructions); + diff = getTimeInNano() - start; + sum += diff; + fprintf(stderr, "----runner in %ldns\n", diff); + fprintf(stderr, "ran sucessfully = %s\n", + ranSuccess ? "true" : "false"); + fprintf(stderr, "----sum %ldns\n", sum); + deleteInstructions(instructions); + } else { + fprintf(stderr, "----returned error"); + } + deleteParsedTree(parsedTree); + } else { + fprintf(stderr, "----returned error"); + } + deleteParsedNode(parsedNode); + } else { + fprintf(stderr, "----returned error"); } - deleteParsedNode(parsedNode); + } else { + fprintf(stderr, "----returned error"); } deleteNodes(nodes); return sum; @@ -66,7 +74,7 @@ Clock process() { Clock sumAll = 0; for (size_t i = 0; i < sizeof(codes) / sizeof(char *); ++i) { Clock start = getTimeInNano(); - run(codes[i]); + runWithPrint(codes[i]); sumAll += getTimeInNano() - start; } return sumAll; @@ -74,7 +82,7 @@ Clock process() { void runBenchmark() { Clock sum = 0; - const int times = 10000; + const int times = 100; for (int i = 0; i < times; ++i) { sum += process(); } @@ -88,7 +96,23 @@ int main(int argc, char *argv[]) { return 1; } char *code = read_whole_file(argv[1]); - const bool ret = run(code); + if (code == NULL) { + return 1; + } + char *import = read_whole_file("stdlib/builtins.felan"); + if (import == NULL) { + return 1; + } + 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); + free(code); if (ret) { return 0; -- cgit v1.2.3