Skip to content

Commit 5c70bdf

Browse files
committed
Correct LHS error reporting + correct Tokenizer.Reset + get rid of Tokenizer.MoveTo
1 parent 221116b commit 5c70bdf

File tree

5 files changed

+10
-29
lines changed

5 files changed

+10
-29
lines changed

src/Acornima.Extras/Jsx/JsxTokenizer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public JsxTokenizer(string input, SourceType sourceType, string? sourceFile, Jsx
3333
public JsxTokenizer(string input, int start, int length, SourceType sourceType, string? sourceFile, JsxTokenizerOptions options)
3434
: this(options)
3535
{
36-
Reset(input, start, length, sourceType, sourceFile);
36+
_tokenizer.ResetInternal(input, start, length, sourceType, sourceFile, trackRegExpContext: true);
3737
}
3838

3939
bool IExtension.SupportsMinimalContextTracking => false;

src/Acornima/Parser.LVal.cs

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -209,9 +209,7 @@ private NodeList<Node> ToAssignableProperties(in NodeList<Node> properties, bool
209209
&& last is RestElement restElement && restElement.Argument.Type != NodeType.Identifier)
210210
{
211211
// Unexpected(restElement.Argument.Start); // original acornjs error reporting
212-
_tokenizer.MoveTo(restElement.Argument.Start, expressionAllowed: false);
213-
Next(ignoreEscapeSequenceInKeyword: true);
214-
Unexpected();
212+
Raise(restElement.Argument.Start, InvalidDestructuringTarget);
215213
}
216214

217215
return NodeList.From(ref bindingList);
@@ -640,13 +638,7 @@ private void CheckLocalExport(Identifier id)
640638
[DoesNotReturn]
641639
private void HandleLeftHandSideError(Node node, bool isBinding, LeftHandSideKind lhsKind)
642640
{
643-
if (isBinding)
644-
{
645-
_tokenizer.MoveTo(node.Start, expressionAllowed: false);
646-
Next(ignoreEscapeSequenceInKeyword: true);
647-
Unexpected();
648-
}
649-
else
641+
if (!isBinding)
650642
{
651643
switch (lhsKind)
652644
{
@@ -665,12 +657,10 @@ private void HandleLeftHandSideError(Node node, bool isBinding, LeftHandSideKind
665657
case LeftHandSideKind.ForInOf:
666658
Raise(node.Start, InvalidLhsInFor);
667659
break;
668-
669-
default:
670-
Raise(node.Start, InvalidDestructuringTarget);
671-
break;
672660
}
673661
}
662+
663+
Raise(node.Start, InvalidDestructuringTarget);
674664
}
675665

676666
private enum LeftHandSideKind : byte

src/Acornima/Parser.State.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,6 @@ public partial class Parser
5252
internal void Reset(string input, int start, int length, SourceType sourceType, string? sourceFile, bool strict)
5353
{
5454
_tokenizer.ResetInternal(input, start, length, sourceType, sourceFile, trackRegExpContext: _options.OnToken is not null);
55-
_tokenizer._stringPool = default;
56-
_tokenizerOptions._errorHandler.Reset();
5755

5856
_inModule = _tokenizer._inModule;
5957
_strict = _tokenizer._strict || strict;

src/Acornima/Tokenizer.State.cs

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,7 @@ public void Reset(string input, int start, SourceType sourceType = SourceType.Sc
7272
=> Reset(input ?? ThrowArgumentNullException<string>(nameof(input)), start, input.Length - start, sourceType, sourceFile);
7373

7474
public void Reset(string input, int start, int length, SourceType sourceType = SourceType.Script, string? sourceFile = null)
75-
{
76-
ResetInternal(input, start, length, sourceType, sourceFile, trackRegExpContext: true);
77-
_stringPool = default;
78-
_options._errorHandler.Reset();
79-
}
75+
=> ResetInternal(input, start, length, sourceType, sourceFile, _trackRegExpContext);
8076

8177
internal void ResetInternal(string input, int start, int length, SourceType sourceType, string? sourceFile, bool trackRegExpContext)
8278
{
@@ -122,6 +118,9 @@ internal void ResetInternal(string input, int start, int length, SourceType sour
122118
_inModule = _strict = sourceType == SourceType.Module;
123119

124120
_sb = _sb is not null ? _sb.Clear() : new StringBuilder();
121+
_stringPool = default;
122+
123+
_options._errorHandler.Reset();
125124
}
126125

127126
internal void ReleaseLargeBuffers()
@@ -165,10 +164,4 @@ internal void ReleaseStringBuilder(ref StringBuilder? sb)
165164
_sb = sb;
166165
sb = null;
167166
}
168-
169-
internal void MoveTo(int position, bool expressionAllowed)
170-
{
171-
ResetInternal(_input, position, _endPosition - position, _sourceType, _sourceFile, _trackRegExpContext);
172-
_expressionAllowed = _trackRegExpContext && expressionAllowed;
173-
}
174167
}

src/Acornima/Tokenizer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public Tokenizer(string input, SourceType sourceType, string? sourceFile, Tokeni
4040
public Tokenizer(string input, int start, int length, SourceType sourceType, string? sourceFile, TokenizerOptions options)
4141
: this(options, extension: null)
4242
{
43-
Reset(input, start, length, sourceType, sourceFile);
43+
ResetInternal(input, start, length, sourceType, sourceFile, trackRegExpContext: true);
4444
}
4545

4646
public string Input => _input;

0 commit comments

Comments
 (0)