Skip to content

Commit

Permalink
fix(lexer): fix missed new line char in jsx parser
Browse files Browse the repository at this point in the history
closes #90
  • Loading branch information
3cp committed Jul 24, 2020
1 parent 5fa94bd commit f8be7de
Show file tree
Hide file tree
Showing 2 changed files with 351 additions and 33 deletions.
22 changes: 20 additions & 2 deletions src/lexer/jsx.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { CharFlags, CharTypes } from './charClassifier';
import { Chars } from '../chars';
import { Token } from '../token';
import { ParserState, Context } from '../common';
import { scanNewLine, consumeLineFeed } from './common';
import { report, Errors } from '../errors';
import { advanceChar, LexerState, TokenLookup } from './';
import { scanSingleToken } from './scan';
Expand Down Expand Up @@ -77,11 +78,28 @@ export function scanJSXToken(parser: ParserState): Token {
parser.token = Token.LeftBrace;
break;
}
default:
while (parser.index < parser.end && (CharTypes[advanceChar(parser)] & CharFlags.JSXToken) === 0) {}
default: {
let state = LexerState.None;

while (parser.index < parser.end) {
const type = CharTypes[parser.source.charCodeAt(parser.index)];

if (type & CharFlags.CarriageReturn) {
state |= LexerState.NewLine | LexerState.LastIsCR;
scanNewLine(parser);
} else if (type & CharFlags.LineFeed) {
consumeLineFeed(parser, state);
state = (state & ~LexerState.LastIsCR) | LexerState.NewLine;
} else {
advanceChar(parser);
}

if (CharTypes[parser.currentChar] & CharFlags.JSXToken) break;
}

parser.tokenValue = parser.source.slice(parser.tokenPos, parser.index);
parser.token = Token.JSXText;
}
}

return parser.token;
Expand Down
Loading

0 comments on commit f8be7de

Please sign in to comment.