aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/ast-tree.c20
-rw-r--r--src/compiler/ast-tree.h14
-rw-r--r--src/compiler/parser.c7
-rw-r--r--src/compiler/parser.h4
-rw-r--r--src/main.c20
-rw-r--r--src/utils/time.c16
-rw-r--r--src/utils/time.h8
7 files changed, 46 insertions, 43 deletions
diff --git a/src/compiler/ast-tree.c b/src/compiler/ast-tree.c
index b343cc7..688fc8b 100644
--- a/src/compiler/ast-tree.c
+++ b/src/compiler/ast-tree.c
@@ -1395,8 +1395,7 @@ AstTreeVariables copyAstTreeVariables(AstTreeVariables variables,
AstTreeRoots makeAstTree(const char *filePath
#ifdef PRINT_STATISTICS
,
- struct timespec *lexingTime,
- struct timespec *parsingTime
+ Time *lexingTime, Time *parsingTime
#endif
) {
AstTreeRoots roots = {
@@ -1425,8 +1424,7 @@ RETURN_ERROR:
AstTreeRoot *getAstTreeRoot(char *filePath, AstTreeRoots *roots
#ifdef PRINT_STATISTICS
,
- struct timespec *lexingTime,
- struct timespec *parsingTime
+ Time *lexingTime, Time *parsingTime
#endif
) {
for (size_t i = 0; i < roots->size; ++i) {
@@ -1436,15 +1434,14 @@ AstTreeRoot *getAstTreeRoot(char *filePath, AstTreeRoots *roots
}
}
- struct timespec start, end;
- clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start);
+ Time start = get_time();
ParserNode *parserNode = parserFromPath(filePath, lexingTime);
if (parserNode == NULL) {
goto RETURN_ERROR;
}
- clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end);
+ Time end = get_time();
*parsingTime = time_add(*parsingTime, time_diff(end, start));
AstTreeRoot *root = makeAstRoot(parserNode, filePath);
parserNodeDelete(parserNode);
@@ -2016,7 +2013,7 @@ AstTree *astTreeParse(const ParserNode *parserNode, AstTreeHelper *helper) {
case PARSER_TOKEN_KEYWORD_UNDEFINED:
return astTreeParseKeyword(parserNode, AST_TREE_TOKEN_VALUE_UNDEFINED);
case PARSER_TOKEN_KEYWORD_PUTC:
- return astTreeParsePrintU64(parserNode, helper);
+ return astTreeParsePutc(parserNode, helper);
case PARSER_TOKEN_KEYWORD_RETURN:
return astTreeParseReturn(parserNode, helper);
case PARSER_TOKEN_OPERATOR_ASSIGN:
@@ -2528,8 +2525,7 @@ AstTree *astTreeParseKeyword(const ParserNode *parserNode, AstTreeToken token) {
parserNode->str_end);
}
-AstTree *astTreeParsePrintU64(const ParserNode *parserNode,
- AstTreeHelper *helper) {
+AstTree *astTreeParsePutc(const ParserNode *parserNode, AstTreeHelper *helper) {
ParserNodeSingleChildMetadata *node_metadata = parserNode->metadata;
AstTree *operand = astTreeParse(node_metadata, helper);
@@ -4089,7 +4085,7 @@ bool setAllTypes(AstTree *tree, AstTreeSetTypesHelper helper,
case AST_TREE_TOKEN_FUNCTION:
return setTypesFunction(tree, helper);
case AST_TREE_TOKEN_KEYWORD_PUTC:
- return setTypesPrintU64(tree, helper);
+ return setTypesPutc(tree, helper);
case AST_TREE_TOKEN_KEYWORD_RETURN:
return setTypesReturn(tree, helper, function);
case AST_TREE_TOKEN_TYPE_FUNCTION:
@@ -4465,7 +4461,7 @@ bool setTypesFunction(AstTree *tree, AstTreeSetTypesHelper _helper) {
return true;
}
-bool setTypesPrintU64(AstTree *tree, AstTreeSetTypesHelper _helper) {
+bool setTypesPutc(AstTree *tree, AstTreeSetTypesHelper _helper) {
AstTreeSingleChild *metadata = tree->metadata;
AstTreeSetTypesHelper helper = {
.lookingType = &AST_TREE_U8_TYPE,
diff --git a/src/compiler/ast-tree.h b/src/compiler/ast-tree.h
index bd357d2..c1f0464 100644
--- a/src/compiler/ast-tree.h
+++ b/src/compiler/ast-tree.h
@@ -1,7 +1,7 @@
#pragma once
#include "compiler/parser.h"
-#include <time.h>
+#include "utils/time.h"
typedef enum AstTreeToken {
AST_TREE_TOKEN_FUNCTION,
@@ -312,15 +312,15 @@ AstTreeVariables copyAstTreeVariables(AstTreeVariables variables,
AstTreeRoots makeAstTree(const char *filePath
#ifdef PRINT_STATISTICS
,
- struct timespec *lexingTime,
- struct timespec *parsingTime
+ Time *lexingTime,
+ Time *parsingTime
#endif
);
AstTreeRoot *getAstTreeRoot(char *filePath, AstTreeRoots *roots
#ifdef PRINT_STATISTICS
,
- struct timespec *lexingTime,
- struct timespec *parsingTime
+ Time *lexingTime,
+ Time *parsingTime
#endif
);
AstTreeRoot *makeAstRoot(const ParserNode *parsedRoot, char *filePath);
@@ -342,7 +342,7 @@ AstTree *astTreeParseValue(const ParserNode *parserNode, AstTreeToken token,
AstTree *astTreeParseString(const ParserNode *parserNode,
AstTreeHelper *helper);
AstTree *astTreeParseKeyword(const ParserNode *parserNode, AstTreeToken token);
-AstTree *astTreeParsePrintU64(const ParserNode *parserNode,
+AstTree *astTreeParsePutc(const ParserNode *parserNode,
AstTreeHelper *helper);
AstTree *astTreeParseReturn(const ParserNode *parserNode,
AstTreeHelper *helper);
@@ -396,7 +396,7 @@ bool setTypesValueNull(AstTree *tree, AstTreeSetTypesHelper helper);
bool setTypesValueUndefined(AstTree *tree, AstTreeSetTypesHelper helper);
bool setTypesValueObject(AstTree *tree, AstTreeSetTypesHelper helper);
bool setTypesFunction(AstTree *tree, AstTreeSetTypesHelper helper);
-bool setTypesPrintU64(AstTree *tree, AstTreeSetTypesHelper helper);
+bool setTypesPutc(AstTree *tree, AstTreeSetTypesHelper helper);
bool setTypesReturn(AstTree *tree, AstTreeSetTypesHelper helper,
AstTreeFunction *function);
bool setTypesTypeFunction(AstTree *tree, AstTreeSetTypesHelper helper);
diff --git a/src/compiler/parser.c b/src/compiler/parser.c
index 7bb0f1d..388e69a 100644
--- a/src/compiler/parser.c
+++ b/src/compiler/parser.c
@@ -731,11 +731,10 @@ ParserNode *newParserNode(ParserToken token, char const *str_begin,
ParserNode *parserFromPath(const char *filePath
#ifdef PRINT_STATISTICS
,
- struct timespec *lexingTime
+ Time *lexingTime
#endif
) {
- struct timespec start, end;
- clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start);
+ Time start = get_time();
char *code = readWholeFile(filePath);
if (code == NULL) {
return NULL;
@@ -745,7 +744,7 @@ ParserNode *parserFromPath(const char *filePath
if (lexerNodeArrayIsError(lexed)) {
return NULL;
}
- clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end);
+ Time end = get_time();
*lexingTime = time_add(*lexingTime, time_diff(end, start));
ParserNode *root = parser(lexed);
diff --git a/src/compiler/parser.h b/src/compiler/parser.h
index 05409fb..0e43c34 100644
--- a/src/compiler/parser.h
+++ b/src/compiler/parser.h
@@ -1,8 +1,8 @@
#pragma once
#include "compiler/lexer.h"
+#include "utils/time.h"
#include "utils/type.h"
-#include <time.h>
typedef enum ParserToken {
PARSER_TOKEN_ROOT,
@@ -200,7 +200,7 @@ void parserNodeDelete(ParserNode *node);
ParserNode *parserFromPath(const char *filePath
#ifdef PRINT_STATISTICS
,
- struct timespec *lexingTime
+ Time *lexingTime
#endif
);
ParserNode *parser(LexerNodeArray lexed);
diff --git a/src/main.c b/src/main.c
index 1e04d0b..2906c2d 100644
--- a/src/main.c
+++ b/src/main.c
@@ -10,20 +10,20 @@
static int run(const char *filePath) {
#ifdef PRINT_STATISTICS
- struct timespec start, end;
- struct timespec lexTime = {0};
- struct timespec parseTime = {0};
- struct timespec astTime;
- struct timespec runTime;
- struct timespec totalTime = {0};
- clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start);
+ Time start, end;
+ Time lexTime = {0};
+ Time parseTime = {0};
+ Time astTime;
+ Time runTime;
+ Time totalTime = {0};
+ start = get_time();
#endif
AstTreeRoots astTrees = makeAstTree(filePath, &lexTime, &parseTime);
if (astTrees.size == AST_TREE_ROOTS_ERROR.size) {
return 1;
}
#ifdef PRINT_STATISTICS
- clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end);
+ end = get_time();
astTime = time_diff(end, start);
totalTime = time_add(totalTime, astTime);
#endif
@@ -33,7 +33,7 @@ static int run(const char *filePath) {
}
#endif
#ifdef PRINT_STATISTICS
- clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start);
+ start =get_time();
#endif
int ret;
@@ -44,7 +44,7 @@ static int run(const char *filePath) {
}
astTreeRootsDestroy(astTrees);
#ifdef PRINT_STATISTICS
- clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end);
+ end = get_time();
runTime = time_diff(end, start);
totalTime = time_add(totalTime, runTime);
#endif
diff --git a/src/utils/time.c b/src/utils/time.c
index 979a2c8..462ba02 100644
--- a/src/utils/time.c
+++ b/src/utils/time.c
@@ -3,8 +3,8 @@
#include <stdio.h>
#ifdef PRINT_STATISTICS
-struct timespec time_diff(struct timespec end, struct timespec start) {
- struct timespec temp;
+Time time_diff(Time end, Time start) {
+ Time temp;
if ((end.tv_nsec - start.tv_nsec) < 0) {
temp.tv_sec = end.tv_sec - start.tv_sec - 1;
temp.tv_nsec = 1000000000 + end.tv_nsec - start.tv_nsec;
@@ -15,18 +15,24 @@ struct timespec time_diff(struct timespec end, struct timespec start) {
return temp;
}
-struct timespec time_add(struct timespec left, struct timespec right) {
- struct timespec result;
+Time time_add(Time left, Time right) {
+ Time result;
result.tv_nsec = left.tv_nsec + right.tv_nsec;
result.tv_sec = (left.tv_sec + right.tv_sec) + result.tv_nsec / 1000000000;
result.tv_nsec %= 1000000000;
return result;
}
-void time_print(struct timespec time) {
+void time_print(Time time) {
printf("%02ld:%02ld.%06ldus", time.tv_sec / 60, time.tv_sec % 60,
time.tv_nsec / 1000);
}
+
+Time get_time(){
+ Time t;
+ clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t);
+ return t;
+}
#endif
diff --git a/src/utils/time.h b/src/utils/time.h
index 6d5f2f6..3e7cf41 100644
--- a/src/utils/time.h
+++ b/src/utils/time.h
@@ -2,6 +2,8 @@
#include <time.h>
-struct timespec time_diff(struct timespec end, struct timespec start);
-struct timespec time_add(struct timespec left, struct timespec right);
-void time_print(struct timespec time);
+typedef struct timespec Time;
+Time time_diff(Time end, Time start);
+Time time_add(Time left, Time right);
+void time_print(Time time);
+Time get_time();