diff --git a/src/lexer/SolsToken.h b/src/lexer/SolsToken.h index e7248b1..da9ed3e 100644 --- a/src/lexer/SolsToken.h +++ b/src/lexer/SolsToken.h @@ -31,6 +31,10 @@ typedef struct SolsToken { char* idName; char* inlineGround; } as; + struct { + size_t num; + char* content; + } line; } SolsToken; Result(SolsToken, charptr); diff --git a/src/lexer/lexer.c b/src/lexer/lexer.c index 468f6e7..e7be6ac 100644 --- a/src/lexer/lexer.c +++ b/src/lexer/lexer.c @@ -481,6 +481,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) { DESTROY_ESTR(currentLine); return Error(Nothing, charptr, err); } + result.as.success.line.num = lineNum; + result.as.success.line.content = malloc(strlen(currentLine.str) + 1); + if (result.as.success.line.content == NULL) { + char* err = createParsingError(lineNum, currentLine.str, "Couldn't allocate memory to store line information in token (in lex() function)"); + DESTROY_ESTR(buf); + DESTROY_ESTR(currentLine); + return Error(Nothing, charptr, err); + } + strcpy(result.as.success.line.content, currentLine.str); addTokenToSolsTokens(&lexer->output, result.as.success); DESTROY_ESTR(buf); buf = CREATE_ESTR(""); @@ -493,6 +502,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) { DESTROY_ESTR(currentLine); return Error(Nothing, charptr, err); } + result.as.success.line.num = lineNum; + result.as.success.line.content = malloc(strlen(currentLine.str) + 1); + if (result.as.success.line.content == NULL) { + char* err = createParsingError(lineNum, currentLine.str, "Couldn't allocate memory to store line information in token (in lex() function)"); + DESTROY_ESTR(buf); + DESTROY_ESTR(currentLine); + return Error(Nothing, charptr, err); + } + strcpy(result.as.success.line.content, currentLine.str); addTokenToSolsTokens(&lexer->output, result.as.success); break; @@ -509,6 +527,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) { DESTROY_ESTR(currentLine); return Error(Nothing, charptr, err); } + result.as.success.line.num = lineNum; + result.as.success.line.content = malloc(strlen(currentLine.str) + 1); + if (result.as.success.line.content == NULL) { + char* err = createParsingError(lineNum, currentLine.str, "Couldn't allocate memory to store line information in token (in lex() function)"); + DESTROY_ESTR(buf); + DESTROY_ESTR(currentLine); + return Error(Nothing, charptr, err); + } + strcpy(result.as.success.line.content, currentLine.str); addTokenToSolsTokens(&lexer->output, result.as.success); DESTROY_ESTR(buf); buf = CREATE_ESTR(""); @@ -523,6 +550,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) { DESTROY_ESTR(currentLine); return Error(Nothing, charptr, err); } + result.as.success.line.num = lineNum; + result.as.success.line.content = malloc(strlen(currentLine.str) + 1); + if (result.as.success.line.content == NULL) { + char* err = createParsingError(lineNum, currentLine.str, "Couldn't allocate memory to store line information in token (in lex() function)"); + DESTROY_ESTR(buf); + DESTROY_ESTR(currentLine); + return Error(Nothing, charptr, err); + } + strcpy(result.as.success.line.content, currentLine.str); addTokenToSolsTokens(&lexer->output, result.as.success); } if (next.as.success == '=') { @@ -534,6 +570,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) { DESTROY_ESTR(currentLine); return Error(Nothing, charptr, err); } + result.as.success.line.num = lineNum; + result.as.success.line.content = malloc(strlen(currentLine.str) + 1); + if (result.as.success.line.content == NULL) { + char* err = createParsingError(lineNum, currentLine.str, "Couldn't allocate memory to store line information in token (in lex() function)"); + DESTROY_ESTR(buf); + DESTROY_ESTR(currentLine); + return Error(Nothing, charptr, err); + } + strcpy(result.as.success.line.content, currentLine.str); addTokenToSolsTokens(&lexer->output, result.as.success); lexerConsume(lexer); } @@ -546,6 +591,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) { DESTROY_ESTR(currentLine); return Error(Nothing, charptr, err); } + result.as.success.line.num = lineNum; + result.as.success.line.content = malloc(strlen(currentLine.str) + 1); + if (result.as.success.line.content == NULL) { + char* err = createParsingError(lineNum, currentLine.str, "Couldn't allocate memory to store line information in token (in lex() function)"); + DESTROY_ESTR(buf); + DESTROY_ESTR(currentLine); + return Error(Nothing, charptr, err); + } + strcpy(result.as.success.line.content, currentLine.str); addTokenToSolsTokens(&lexer->output, result.as.success); lexerConsume(lexer); } @@ -567,6 +621,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) { DESTROY_ESTR(currentLine); return Error(Nothing, charptr, err); } + result.as.success.line.num = lineNum; + result.as.success.line.content = malloc(strlen(currentLine.str) + 1); + if (result.as.success.line.content == NULL) { + char* err = createParsingError(lineNum, currentLine.str, "Couldn't allocate memory to store line information in token (in lex() function)"); + DESTROY_ESTR(buf); + DESTROY_ESTR(currentLine); + return Error(Nothing, charptr, err); + } + strcpy(result.as.success.line.content, currentLine.str); addTokenToSolsTokens(&lexer->output, result.as.success); DESTROY_ESTR(buf); buf = CREATE_ESTR(""); @@ -581,6 +644,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) { DESTROY_ESTR(currentLine); return Error(Nothing, charptr, err); } + result.as.success.line.num = lineNum; + result.as.success.line.content = malloc(strlen(currentLine.str) + 1); + if (result.as.success.line.content == NULL) { + char* err = createParsingError(lineNum, currentLine.str, "Couldn't allocate memory to store line information in token (in lex() function)"); + DESTROY_ESTR(buf); + DESTROY_ESTR(currentLine); + return Error(Nothing, charptr, err); + } + strcpy(result.as.success.line.content, currentLine.str); addTokenToSolsTokens(&lexer->output, result.as.success); } if (next.as.success == '=') { @@ -592,6 +664,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) { DESTROY_ESTR(currentLine); return Error(Nothing, charptr, err); } + result.as.success.line.num = lineNum; + result.as.success.line.content = malloc(strlen(currentLine.str) + 1); + if (result.as.success.line.content == NULL) { + char* err = createParsingError(lineNum, currentLine.str, "Couldn't allocate memory to store line information in token (in lex() function)"); + DESTROY_ESTR(buf); + DESTROY_ESTR(currentLine); + return Error(Nothing, charptr, err); + } + strcpy(result.as.success.line.content, currentLine.str); addTokenToSolsTokens(&lexer->output, result.as.success); lexerConsume(lexer); } @@ -614,6 +695,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) { DESTROY_ESTR(currentLine); return Error(Nothing, charptr, err); } + result.as.success.line.num = lineNum; + result.as.success.line.content = malloc(strlen(currentLine.str) + 1); + if (result.as.success.line.content == NULL) { + char* err = createParsingError(lineNum, currentLine.str, "Couldn't allocate memory to store line information in token (in lex() function)"); + DESTROY_ESTR(buf); + DESTROY_ESTR(currentLine); + return Error(Nothing, charptr, err); + } + strcpy(result.as.success.line.content, currentLine.str); addTokenToSolsTokens(&lexer->output, result.as.success); DESTROY_ESTR(buf); buf = CREATE_ESTR(""); @@ -634,6 +724,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) { DESTROY_ESTR(currentLine); return Error(Nothing, charptr, err); } + result.as.success.line.num = lineNum; + result.as.success.line.content = malloc(strlen(currentLine.str) + 1); + if (result.as.success.line.content == NULL) { + char* err = createParsingError(lineNum, currentLine.str, "Couldn't allocate memory to store line information in token (in lex() function)"); + DESTROY_ESTR(buf); + DESTROY_ESTR(currentLine); + return Error(Nothing, charptr, err); + } + strcpy(result.as.success.line.content, currentLine.str); addTokenToSolsTokens(&lexer->output, result.as.success); DESTROY_ESTR(buf); buf = CREATE_ESTR(""); @@ -675,6 +774,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) { DESTROY_ESTR(currentLine); return Error(Nothing, charptr, err); } + result.as.success.line.num = lineNum; + result.as.success.line.content = malloc(strlen(currentLine.str) + 1); + if (result.as.success.line.content == NULL) { + char* err = createParsingError(lineNum, currentLine.str, "Couldn't allocate memory to store line information in token (in lex() function)"); + DESTROY_ESTR(buf); + DESTROY_ESTR(currentLine); + return Error(Nothing, charptr, err); + } + strcpy(result.as.success.line.content, currentLine.str); addTokenToSolsTokens(&lexer->output, result.as.success); }