diff options
-rw-r--r-- | Makefile | 1 | ||||
-rw-r--r-- | src/compiler/ast-tree.c | 38 | ||||
-rw-r--r-- | src/compiler/parser.c | 4 | ||||
-rw-r--r-- | src/main.c | 7 |
4 files changed, 36 insertions, 14 deletions
@@ -47,6 +47,7 @@ lsp-files: clean .PHONY: clean clean: rm -rf $(BUILD_DIR) + rm -rf ./val.log* run: $(EXEC_FILE) $(EXEC_FILE) $(args) diff --git a/src/compiler/ast-tree.c b/src/compiler/ast-tree.c index 65e7a4d..299f989 100644 --- a/src/compiler/ast-tree.c +++ b/src/compiler/ast-tree.c @@ -1836,8 +1836,12 @@ AstTreeRoots makeAstTree(const char *filePath .size = 0, }; - if (getAstTreeRoot(strClone(filePath), &roots, lexingTime, parsingTime) == - NULL) { + if (getAstTreeRoot(strClone(filePath), &roots +#ifdef PRINT_STATISTICS + , + lexingTime, parsingTime +#endif + ) == NULL) { goto RETURN_ERROR; } @@ -1867,15 +1871,24 @@ AstTreeRoot *getAstTreeRoot(char *filePath, AstTreeRoots *roots } } +#ifdef PRINT_STATISTICS Time start = get_time(); +#endif - ParserNode *parserNode = parserFromPath(filePath, lexingTime); + ParserNode *parserNode = parserFromPath(filePath +#ifdef PRINT_STATISTICS + , + lexingTime +#endif + ); if (parserNode == NULL) { goto RETURN_ERROR; } +#ifdef PRINT_STATISTICS Time end = get_time(); *parsingTime = time_add(*parsingTime, time_diff(end, start)); +#endif AstTreeRoot *root = makeAstRoot(parserNode, filePath); parserNodeDelete(parserNode); if (root == NULL) { @@ -1959,15 +1972,6 @@ bool astTreeDoImport(AstTreeRoots *roots, AstTreeRoot *root, AstTree *tree, return false; } - AstTree *type = makeStringType(); - if (!typeIsEqual(type, parameter->type, helper.scope)) { - printError(parameter->str_begin, parameter->str_end, - "Type mismatch (must be a []u8 aka string)"); - astTreeDelete(type); - return false; - } - astTreeDelete(type); - char *str = u8ArrayToCString(parameter); astTreeDelete(parameter); @@ -6869,6 +6873,14 @@ bool setTypesBuiltinImport(AstTree *tree, AstTreeSetTypesHelper helper, return false; } + AstTree *fileType = makeStringType(); + + if (!typeIsEqual(file->type, fileType, helper.scope)) { + astTreeDelete(fileType); + printError(file->str_begin, file->str_end, "Bad paramter"); + return false; + } + AstTreeTypeFunction *type_metadata = a404m_malloc(sizeof(*type_metadata)); type_metadata->arguments_size = 1; type_metadata->arguments = a404m_malloc(type_metadata->arguments_size * @@ -6878,7 +6890,7 @@ bool setTypesBuiltinImport(AstTree *tree, AstTreeSetTypesHelper helper, type_metadata->returnType = copyAstTree(&AST_TREE_NAMESPACE_TYPE); type_metadata->arguments[0] = (AstTreeTypeFunctionArgument){ - .type = copyAstTree(file->type), + .type = fileType, .name_begin = PATH_STR, .name_end = PATH_STR + PATH_STR_SIZE, .str_begin = NULL, diff --git a/src/compiler/parser.c b/src/compiler/parser.c index d5906a5..a35800c 100644 --- a/src/compiler/parser.c +++ b/src/compiler/parser.c @@ -811,7 +811,9 @@ ParserNode *parserFromPath(const char *filePath Time *lexingTime #endif ) { +#ifdef PRINT_STATISTICS Time start = get_time(); +#endif char *code = readWholeFile(filePath); if (code == NULL) { return NULL; @@ -821,8 +823,10 @@ ParserNode *parserFromPath(const char *filePath if (lexerNodeArrayIsError(lexed)) { return NULL; } +#ifdef PRINT_STATISTICS Time end = get_time(); *lexingTime = time_add(*lexingTime, time_diff(end, start)); +#endif ParserNode *root = parser(lexed); lexerNodeArrayDestroy(lexed); @@ -19,7 +19,12 @@ static int run(const char *filePath) { Time totalTime = {0}; start = get_time(); #endif - AstTreeRoots astTrees = makeAstTree(filePath, &lexTime, &parseTime); + AstTreeRoots astTrees = makeAstTree(filePath +#ifdef PRINT_STATISTICS + , + &lexTime, &parseTime +#endif + ); if (astTrees.size == AST_TREE_ROOTS_ERROR.size) { return 1; } |