aboutsummaryrefslogtreecommitdiff
path: root/src/compiler/lexer/lexer.c
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2024-09-25 19:47:29 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2024-09-25 19:47:29 +0330
commitc409b8aaf6b6f63bd68a3356e146ab80b2ec8c4b (patch)
tree65ea5801fd910fc6bcff3f2e8f06b5fd7d249c78 /src/compiler/lexer/lexer.c
parentf79290084948f3cf140395c270c07cf29ca58e8d (diff)
fixed multiple variable definition bug
tried to implement import
Diffstat (limited to 'src/compiler/lexer/lexer.c')
-rw-r--r--src/compiler/lexer/lexer.c18
1 files changed, 10 insertions, 8 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;
}
}