diff options
Diffstat (limited to 'src/compiler/lexer')
-rw-r--r-- | src/compiler/lexer/lexer.c | 18 | ||||
-rw-r--r-- | src/compiler/lexer/lexer.h | 2 |
2 files changed, 11 insertions, 9 deletions
diff --git a/src/compiler/lexer/lexer.c b/src/compiler/lexer/lexer.c index ebcccc8..b6aeb2e 100644 --- a/src/compiler/lexer/lexer.c +++ b/src/compiler/lexer/lexer.c @@ -69,11 +69,13 @@ void printNodes(Nodes nodes) { void deleteNodes(Nodes nodes) { free(nodes.nodes); } -Nodes lexer(char const *const restrict code) { +Nodes lexer(SourceCode *sourceCode, size_t sourceIndex) { size_t nodes_size = 10; Node *nodes = a404m_malloc(nodes_size * sizeof(Node)); size_t nodes_inserted = 0; + const char *const code = sourceCode->codes[sourceIndex]->code; + Node node = { .strBegin = code, .strEnd = code, @@ -105,7 +107,7 @@ Nodes lexer(char const *const restrict code) { for (i += 2;; ++i) { switch (code[i]) { case '\0': - printError("Expected multi line comment to end", code, + printError("Expected multi line comment to end", sourceCode, node.strBegin, code + i); goto RETURN_ERROR; case '*': @@ -116,7 +118,7 @@ Nodes lexer(char const *const restrict code) { goto END_OF_BLOCK_COMMENT_LOOP; } } else if (code[i] == '\0') { - printError("Expected multi line comment to end", code, + printError("Expected multi line comment to end", sourceCode, node.strBegin, code + i); goto RETURN_ERROR; } @@ -126,7 +128,7 @@ Nodes lexer(char const *const restrict code) { if (code[i] == '*') { ++in; } else if (code[i] == '\0') { - printError("Expected multi line comment to end", code, + printError("Expected multi line comment to end", sourceCode, node.strBegin, code + i); goto RETURN_ERROR; } @@ -158,7 +160,7 @@ Nodes lexer(char const *const restrict code) { if (current == c) { break; } else if (current == '\0') { - printError("Expected %c to end", code, node.strBegin, code + i, c); + printError("Expected %c to end", sourceCode, node.strBegin, code + i, c); goto RETURN_ERROR; } } @@ -182,7 +184,7 @@ Nodes lexer(char const *const restrict code) { } else if (current == '\\') { ++i; } else if (current == '\0') { - printError("Expected %c to end", code, node.strBegin, code + i, c); + printError("Expected %c to end", sourceCode, node.strBegin, code + i, c); goto RETURN_ERROR; } } @@ -199,7 +201,7 @@ Nodes lexer(char const *const restrict code) { } else { node.token = getOperator(node.strBegin, code + i); if (node.token == TOKEN_NONE) { - printError("Unknown operator '%.*s'", code, node.strBegin, + printError("Unknown operator '%.*s'", sourceCode, node.strBegin, node.strEnd, (int)(code + i - node.strBegin), node.strBegin); goto RETURN_ERROR; @@ -217,7 +219,7 @@ Nodes lexer(char const *const restrict code) { TOKEN_SYMBOL); } } else { - printError("Unexpected char '%c'", code, code + i, code + i + 1, c); + printError("Unexpected char '%c'", sourceCode, code + i, code + i + 1, c); goto RETURN_ERROR; } } diff --git a/src/compiler/lexer/lexer.h b/src/compiler/lexer/lexer.h index 8d88a90..66db1cf 100644 --- a/src/compiler/lexer/lexer.h +++ b/src/compiler/lexer/lexer.h @@ -47,7 +47,7 @@ typedef struct Nodes { extern void printNodes(Nodes nodes); extern void deleteNodes(Nodes nodes); -extern Nodes lexer(char const *const restrict code); +extern Nodes lexer(SourceCode *sourceCode,size_t sourceIndex); extern void push_if_not_empty(Node **restrict nodes, size_t *restrict nodes_size, |