Lexed tokens now hold line information
This commit is contained in:
@@ -31,6 +31,10 @@ typedef struct SolsToken {
|
|||||||
char* idName;
|
char* idName;
|
||||||
char* inlineGround;
|
char* inlineGround;
|
||||||
} as;
|
} as;
|
||||||
|
struct {
|
||||||
|
size_t num;
|
||||||
|
char* content;
|
||||||
|
} line;
|
||||||
} SolsToken;
|
} SolsToken;
|
||||||
|
|
||||||
Result(SolsToken, charptr);
|
Result(SolsToken, charptr);
|
||||||
|
|||||||
@@ -481,6 +481,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) {
|
|||||||
DESTROY_ESTR(currentLine);
|
DESTROY_ESTR(currentLine);
|
||||||
return Error(Nothing, charptr, err);
|
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);
|
addTokenToSolsTokens(&lexer->output, result.as.success);
|
||||||
DESTROY_ESTR(buf);
|
DESTROY_ESTR(buf);
|
||||||
buf = CREATE_ESTR("");
|
buf = CREATE_ESTR("");
|
||||||
@@ -493,6 +502,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) {
|
|||||||
DESTROY_ESTR(currentLine);
|
DESTROY_ESTR(currentLine);
|
||||||
return Error(Nothing, charptr, err);
|
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);
|
addTokenToSolsTokens(&lexer->output, result.as.success);
|
||||||
break;
|
break;
|
||||||
@@ -509,6 +527,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) {
|
|||||||
DESTROY_ESTR(currentLine);
|
DESTROY_ESTR(currentLine);
|
||||||
return Error(Nothing, charptr, err);
|
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);
|
addTokenToSolsTokens(&lexer->output, result.as.success);
|
||||||
DESTROY_ESTR(buf);
|
DESTROY_ESTR(buf);
|
||||||
buf = CREATE_ESTR("");
|
buf = CREATE_ESTR("");
|
||||||
@@ -523,6 +550,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) {
|
|||||||
DESTROY_ESTR(currentLine);
|
DESTROY_ESTR(currentLine);
|
||||||
return Error(Nothing, charptr, err);
|
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);
|
addTokenToSolsTokens(&lexer->output, result.as.success);
|
||||||
}
|
}
|
||||||
if (next.as.success == '=') {
|
if (next.as.success == '=') {
|
||||||
@@ -534,6 +570,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) {
|
|||||||
DESTROY_ESTR(currentLine);
|
DESTROY_ESTR(currentLine);
|
||||||
return Error(Nothing, charptr, err);
|
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);
|
addTokenToSolsTokens(&lexer->output, result.as.success);
|
||||||
lexerConsume(lexer);
|
lexerConsume(lexer);
|
||||||
}
|
}
|
||||||
@@ -546,6 +591,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) {
|
|||||||
DESTROY_ESTR(currentLine);
|
DESTROY_ESTR(currentLine);
|
||||||
return Error(Nothing, charptr, err);
|
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);
|
addTokenToSolsTokens(&lexer->output, result.as.success);
|
||||||
lexerConsume(lexer);
|
lexerConsume(lexer);
|
||||||
}
|
}
|
||||||
@@ -567,6 +621,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) {
|
|||||||
DESTROY_ESTR(currentLine);
|
DESTROY_ESTR(currentLine);
|
||||||
return Error(Nothing, charptr, err);
|
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);
|
addTokenToSolsTokens(&lexer->output, result.as.success);
|
||||||
DESTROY_ESTR(buf);
|
DESTROY_ESTR(buf);
|
||||||
buf = CREATE_ESTR("");
|
buf = CREATE_ESTR("");
|
||||||
@@ -581,6 +644,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) {
|
|||||||
DESTROY_ESTR(currentLine);
|
DESTROY_ESTR(currentLine);
|
||||||
return Error(Nothing, charptr, err);
|
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);
|
addTokenToSolsTokens(&lexer->output, result.as.success);
|
||||||
}
|
}
|
||||||
if (next.as.success == '=') {
|
if (next.as.success == '=') {
|
||||||
@@ -592,6 +664,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) {
|
|||||||
DESTROY_ESTR(currentLine);
|
DESTROY_ESTR(currentLine);
|
||||||
return Error(Nothing, charptr, err);
|
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);
|
addTokenToSolsTokens(&lexer->output, result.as.success);
|
||||||
lexerConsume(lexer);
|
lexerConsume(lexer);
|
||||||
}
|
}
|
||||||
@@ -614,6 +695,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) {
|
|||||||
DESTROY_ESTR(currentLine);
|
DESTROY_ESTR(currentLine);
|
||||||
return Error(Nothing, charptr, err);
|
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);
|
addTokenToSolsTokens(&lexer->output, result.as.success);
|
||||||
DESTROY_ESTR(buf);
|
DESTROY_ESTR(buf);
|
||||||
buf = CREATE_ESTR("");
|
buf = CREATE_ESTR("");
|
||||||
@@ -634,6 +724,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) {
|
|||||||
DESTROY_ESTR(currentLine);
|
DESTROY_ESTR(currentLine);
|
||||||
return Error(Nothing, charptr, err);
|
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);
|
addTokenToSolsTokens(&lexer->output, result.as.success);
|
||||||
DESTROY_ESTR(buf);
|
DESTROY_ESTR(buf);
|
||||||
buf = CREATE_ESTR("");
|
buf = CREATE_ESTR("");
|
||||||
@@ -675,6 +774,15 @@ ResultType(Nothing, charptr) lex(SolsLexer* lexer) {
|
|||||||
DESTROY_ESTR(currentLine);
|
DESTROY_ESTR(currentLine);
|
||||||
return Error(Nothing, charptr, err);
|
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);
|
addTokenToSolsTokens(&lexer->output, result.as.success);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user