Comments should no longer be able to break overlay parser.

This commit is contained in:
Scott Duensing 2024-02-18 18:20:16 -06:00
parent f1031351ed
commit a6cee7f529
2 changed files with 23 additions and 5 deletions

View file

@ -23,6 +23,11 @@
#define SEGMENT_TEST
/*
*/
/*
Breaking things { with comments!
*/
void test(int arg1, int arg2) {
}

View file

@ -83,6 +83,8 @@ void parseCFile(char *filename, char *targetFile, FILE *trampoline, char *trampo
char *b;
bool found;
int x;
int comments = 0;
bool inComment = false;
int brackets = 0;
int crSinceStart = 0;
int pos = 0;
@ -93,7 +95,6 @@ void parseCFile(char *filename, char *targetFile, FILE *trampoline, char *trampo
*
* - It only handles C, not C++.
* - It can only handle single-line function definitions with the opening '{' on the same line as the function.
* - It can be borked by comments.
* - It always generates trampolines, not just when they're needed.
*
* Someone should fix it. :-)
@ -124,16 +125,28 @@ void parseCFile(char *filename, char *targetFile, FILE *trampoline, char *trampo
// Read next byte from C input file.
if ((c = fgetc(in)) == EOF) break;
// Look for '//' comments.
if ((c == '/') && (pos > 0) && (buffer[pos-1] == '/')) inComment = true;
// Look for '/*' comment start.
if ((c == '*') && (pos > 0) && (buffer[pos-1] == '/')) comments++;
// Look for '*/' comment end.
if ((c == '/') && (pos > 0) && (buffer[pos-1] == '*')) comments--;
// Count brackets so we know if we're inside a function or not.
if (c == '{') {
brackets++;
crSinceStart = 0;
if ((!inComment) && (comments == 0)) {
if (c == '{') {
brackets++;
crSinceStart = 0;
}
if (c == '}') brackets--;
}
if (c == '}') brackets--;
// End of line?
if ((c == 13) || (c == 10)) {
inComment = false;
crSinceStart++;
// End the line and trim the tail.