diff options
| -rw-r--r-- | scan.c | 20 | ||||
| -rw-r--r-- | tests/escaped-newline.c | 2 | ||||
| -rw-r--r-- | tests/escaped-newline.qbe | 1 | 
3 files changed, 19 insertions, 4 deletions
| @@ -47,13 +47,25 @@ bufget(struct buffer *b)  static void  nextchar(struct scanner *s)  { +	int c; +  	if (s->usebuf)  		bufadd(&s->buf, s->chr); -	s->chr = getchar(); -	if (s->chr == '\n') +	for (;;) { +		s->chr = getchar(); +		if (s->chr == '\n') +			++s->loc.line, s->loc.col = 1; +		else +			++s->loc.col; +		if (s->chr != '\\') +			break; +		c = getchar(); +		if (c != '\n') { +			ungetc(c, stdin); +			break; +		}  		++s->loc.line, s->loc.col = 1; -	else -		++s->loc.col; +	}  }  static int diff --git a/tests/escaped-newline.c b/tests/escaped-newline.c new file mode 100644 index 0000000..d659179 --- /dev/null +++ b/tests/escaped-newline.c @@ -0,0 +1,2 @@ +int split\ +ident = 3; diff --git a/tests/escaped-newline.qbe b/tests/escaped-newline.qbe new file mode 100644 index 0000000..cd2b5bf --- /dev/null +++ b/tests/escaped-newline.qbe @@ -0,0 +1 @@ +export data $splitident = align 4 { w 3, } | 
