Skip to content

Commit a6cc122

Browse files
fix: Maximum call stack size (#713)
* add #712 reproduction case * remove unnecesary code * Rewrite readText as an iterative version Fix warning in test Co-authored-by: kazuya kawaguchi <[email protected]>
1 parent 2d036d7 commit a6cc122

File tree

4 files changed

+650
-12
lines changed

4 files changed

+650
-12
lines changed

packages/message-compiler/src/tokenizer.ts

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -438,45 +438,40 @@ export function createTokenizer(
438438
}
439439

440440
function readText(scnr: Scanner): string {
441-
const fn = (buf: string): string => {
441+
let buf = ''
442+
while (true) {
442443
const ch = scnr.currentChar()
443444
if (
444445
ch === TokenChars.BraceLeft ||
445446
ch === TokenChars.BraceRight ||
446447
ch === TokenChars.LinkedAlias ||
448+
ch === TokenChars.Pipe ||
447449
!ch
448450
) {
449-
return buf
451+
break
450452
} else if (ch === TokenChars.Modulo) {
451453
if (isTextStart(scnr)) {
452454
buf += ch
453455
scnr.next()
454-
return fn(buf)
455456
} else {
456-
return buf
457+
break
457458
}
458-
} else if (ch === TokenChars.Pipe) {
459-
return buf
460459
} else if (ch === SPACE || ch === NEW_LINE) {
461460
if (isTextStart(scnr)) {
462461
buf += ch
463462
scnr.next()
464-
return fn(buf)
465463
} else if (isPluralStart(scnr)) {
466-
return buf
464+
break
467465
} else {
468466
buf += ch
469467
scnr.next()
470-
return fn(buf)
471468
}
472469
} else {
473470
buf += ch
474471
scnr.next()
475-
return fn(buf)
476472
}
477473
}
478-
479-
return fn('')
474+
return buf
480475
}
481476

482477
function readNamedIdentifier(scnr: Scanner): string {

0 commit comments

Comments
 (0)