diff --git a/lexer.js b/lexer.js index 1614fd9..aa06c38 100755 --- a/lexer.js +++ b/lexer.js @@ -158,7 +158,8 @@ function parseSource (cjsSource) { } break; case 99/*c*/: - if (keywordStart(pos) && source.startsWith('lass', pos + 1) && isBrOrWs(source.charCodeAt(pos + 5))) + if (source.charCodeAt(pos + 1) === 108/*l*/ && keywordStart(pos) && + source.startsWith('ass', pos + 2) && isBrOrWs(source.charCodeAt(pos + 5))) nextBraceIsClass = true; break; case 109/*m*/: diff --git a/test/_unit.js b/test/_unit.js index 0458f17..fdf9996 100755 --- a/test/_unit.js +++ b/test/_unit.js @@ -478,6 +478,23 @@ suite('Lexer', () => { `); }); + test('Class keyword detection', () => { + for (const whitespace of ['\t', '\n', '\v', '\f', '\r', ' ', '\u00a0']) { + const result = parse(`class${whitespace}Example {}/regex/.test('regex'); exports.value = 1`); + assert.deepStrictEqual(result.exports, ['value']); + assert.deepStrictEqual(result.reexports, []); + } + for (const source of [ + 'const className = {} / 2; exports.value = className', + 'const close = {} / 2; exports.value = close', + 'const value = {}; value.class = {} / 2; exports.value = value' + ]) { + const result = parse(source); + assert.deepStrictEqual(result.exports, ['value']); + assert.deepStrictEqual(result.reexports, []); + } + }); + test('Regexp division', () => { parse(`\nconst x = num / /'/.exec(l)[0].slice(1, -1)//'"`); });