1
0
mirror of https://github.com/cc65/cc65.git synced 2024-06-07 07:29:33 +00:00

Support for three line ending types: \r, \r\n, \n.

#1894
This commit is contained in:
bbbradsmith 2023-05-03 05:03:11 -04:00
parent 805e98a7aa
commit 86e3a640d5

View File

@ -112,6 +112,7 @@ struct CharSource {
CharSource* Next; /* Linked list of char sources */
token_t Tok; /* Last token */
int C; /* Last character */
int SkipN; /* For '\r\n' line endings, skip '\n\ if next */
const CharSourceFunctions* Func; /* Pointer to function table */
union {
InputFile File; /* File data */
@ -325,6 +326,7 @@ static void UseCharSource (CharSource* S)
Source = S;
/* Read the first character from the new file */
S->SkipN = 0;
S->Func->NextChar (S);
/* Setup the next token so it will be skipped on the next call to
@ -386,6 +388,10 @@ static void IFNextChar (CharSource* S)
while (1) {
int N = fgetc (S->V.File.F);
if (N == '\n' && S->SkipN)
N = fgetc (S->V.File.F);
S->SkipN = 0;
if (N == EOF) {
/* End of file. Accept files without a newline at the end */
if (SB_NotEmpty (&S->V.File.Line)) {
@ -401,9 +407,12 @@ static void IFNextChar (CharSource* S)
/* Check for end of line */
} else if (N == '\n') {
/* End of line */
break;
} else if (N == '\r') {
/* End of line, skip '\n' if it's the next character */
S->SkipN = 1;
break;
/* Collect other stuff */
} else {