Skip to content

Commit b3ab6e4

Browse files
committed
In JavaScriptEngineSwitcher.Jint added support of Jint version 3.0.0 Beta 2041
1 parent 48b1a52 commit b3ab6e4

File tree

6 files changed

+54
-42
lines changed

6 files changed

+54
-42
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
using System.Threading;
2+
3+
using OriginalConstraint = Jint.Constraint;
4+
using OriginalExecutionCanceledException = Jint.Runtime.ExecutionCanceledException;
5+
6+
namespace JavaScriptEngineSwitcher.Jint
7+
{
8+
internal class CustomCancellationConstraint : OriginalConstraint
9+
{
10+
private CancellationToken _cancellationToken;
11+
12+
13+
public CustomCancellationConstraint(CancellationToken cancellationToken)
14+
{
15+
_cancellationToken = cancellationToken;
16+
}
17+
18+
19+
public override void Check()
20+
{
21+
if (_cancellationToken.IsCancellationRequested)
22+
{
23+
throw new OriginalExecutionCanceledException();
24+
}
25+
}
26+
27+
public void Reset(CancellationToken cancellationToken)
28+
{
29+
_cancellationToken = cancellationToken;
30+
}
31+
32+
public override void Reset()
33+
{
34+
}
35+
}
36+
}

src/JavaScriptEngineSwitcher.Jint/JavaScriptEngineSwitcher.Jint.csproj

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,15 @@
1818
<Import Project="../../build/nuget-for-dotnet-lib.props" />
1919

2020
<PropertyGroup>
21-
<Description>JavaScriptEngineSwitcher.Jint contains adapter `JintJsEngine` (wrapper for the Jint JavaScript Engine (http://github.com/sebastienros/jint) version 3.0.0 Beta 2040).</Description>
21+
<Description>JavaScriptEngineSwitcher.Jint contains adapter `JintJsEngine` (wrapper for the Jint JavaScript Engine (http://github.com/sebastienros/jint) version 3.0.0 Beta 2041).</Description>
2222
<PackageTags>$(PackageCommonTags);Jint</PackageTags>
2323
<PackageIconFullPath>../../Icons/JavaScriptEngineSwitcher_Jint_Logo128x128.png</PackageIconFullPath>
24-
<PackageReleaseNotes>Now only one instance of JS parser per engine is used during pre-compilation of scripts.</PackageReleaseNotes>
24+
<PackageReleaseNotes>Jint was updated to version 3.0.0 Beta 2041.</PackageReleaseNotes>
2525
</PropertyGroup>
2626

2727
<ItemGroup>
2828
<PackageReference Include="AdvancedStringBuilder" Version="0.1.0" />
29-
<PackageReference Include="Jint" Version="3.0.0-beta-2040" />
29+
<PackageReference Include="Jint" Version="3.0.0-beta-2041" />
3030

3131
<ProjectReference Include="../JavaScriptEngineSwitcher.Core/JavaScriptEngineSwitcher.Core.csproj" />
3232
</ItemGroup>

src/JavaScriptEngineSwitcher.Jint/JintJsEngine.cs

+11-34
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
using Jint;
55
using IOriginalPrimitiveInstance = Jint.Native.IPrimitiveInstance;
6-
using OriginalCancellationConstraint = Jint.Constraints.CancellationConstraint;
76
using OriginalDebuggerEventHandler = Jint.Runtime.Debugger.DebugHandler.DebugEventHandler;
87
using OriginalDebuggerStatementHandlingMode = Jint.Runtime.Debugger.DebuggerStatementHandling;
98
using OriginalEngine = Jint.Engine;
@@ -13,9 +12,7 @@
1312
using OriginalMemoryLimitExceededException = Jint.Runtime.MemoryLimitExceededException;
1413
using OriginalObjectInstance = Jint.Native.Object.ObjectInstance;
1514
using OriginalParsedScript = Esprima.Ast.Script;
16-
using OriginalParser = Esprima.JavaScriptParser;
1715
using OriginalParserException = Esprima.ParserException;
18-
using OriginalParserOptions = Esprima.ParserOptions;
1916
using OriginalRecursionDepthOverflowException = Jint.Runtime.RecursionDepthOverflowException;
2017
using OriginalRuntimeException = Jint.Runtime.JintException;
2118
using OriginalStatementsCountOverflowException = Jint.Runtime.StatementsCountOverflowException;
@@ -52,19 +49,13 @@ public sealed class JintJsEngine : JsEngineBase
5249
/// <summary>
5350
/// Version of original JS engine
5451
/// </summary>
55-
private const string EngineVersion = "3.0.0 Beta 2040";
52+
private const string EngineVersion = "3.0.0 Beta 2041";
5653

5754
/// <summary>
5855
/// Jint JS engine
5956
/// </summary>
6057
private OriginalEngine _jsEngine;
6158

62-
/// <summary>
63-
/// Esprima .NET JS parser
64-
/// </summary>
65-
/// <remarks>Used for pre-compilation of scripts.</remarks>
66-
private OriginalParser _jsParser;
67-
6859
/// <summary>
6960
/// Token source for canceling of script execution
7061
/// </summary>
@@ -73,7 +64,7 @@ public sealed class JintJsEngine : JsEngineBase
7364
/// <summary>
7465
/// Constraint for canceling of script execution
7566
/// </summary>
76-
private OriginalCancellationConstraint _cancellationConstraint;
67+
private CustomCancellationConstraint _cancellationConstraint;
7768

7869
/// <summary>
7970
/// Debugger break callback
@@ -90,11 +81,6 @@ public sealed class JintJsEngine : JsEngineBase
9081
/// </summary>
9182
private readonly object _executionSynchronizer = new object();
9283

93-
/// <summary>
94-
/// Synchronizer of script pre-compilation
95-
/// </summary>
96-
private readonly object _precompilationSynchronizer = new object();
97-
9884
/// <summary>
9985
/// Unique document name manager
10086
/// </summary>
@@ -116,7 +102,7 @@ public JintJsEngine()
116102
public JintJsEngine(JintSettings settings)
117103
{
118104
_cancellationTokenSource = new CancellationTokenSource();
119-
_cancellationConstraint = new OriginalCancellationConstraint(_cancellationTokenSource.Token);
105+
_cancellationConstraint = new CustomCancellationConstraint(_cancellationTokenSource.Token);
120106

121107
JintSettings jintSettings = settings ?? new JintSettings();
122108
_debuggerBreakCallback = jintSettings.DebuggerBreakCallback;
@@ -128,7 +114,7 @@ public JintJsEngine(JintSettings settings)
128114
{
129115
_jsEngine = new OriginalEngine(options => {
130116
options
131-
.WithoutConstraint(c => c is OriginalCancellationConstraint)
117+
.WithoutConstraint(c => c is CustomCancellationConstraint)
132118
.Constraint(_cancellationConstraint)
133119
.DebuggerStatementHandling(debuggerStatementHandlingMode)
134120
.DebugMode(jintSettings.EnableDebugging)
@@ -206,7 +192,7 @@ private static WrapperCompilationException WrapParserException(OriginalParserExc
206192
{
207193
string description = originalParserException.Description;
208194
string type = JsErrorType.Syntax;
209-
string documentName = originalParserException.SourceText;
195+
string documentName = originalParserException.SourceLocation ?? string.Empty;
210196
int lineNumber = originalParserException.LineNumber;
211197
int columnNumber = originalParserException.Column;
212198
string message = JsErrorHelpers.GenerateScriptErrorMessage(type, description, documentName, lineNumber,
@@ -363,21 +349,13 @@ protected override IPrecompiledScript InnerPrecompile(string code, string docume
363349
OriginalParsedScript parsedScript;
364350
string uniqueDocumentName = _documentNameManager.GetUniqueName(documentName);
365351

366-
lock (_precompilationSynchronizer)
352+
try
367353
{
368-
if (_jsParser == null)
369-
{
370-
_jsParser = new OriginalParser(OriginalParserOptions.Default);
371-
}
372-
373-
try
374-
{
375-
parsedScript = _jsParser.ParseScript(code, uniqueDocumentName);
376-
}
377-
catch (OriginalParserException e)
378-
{
379-
throw WrapParserException(e);
380-
}
354+
parsedScript = OriginalEngine.PrepareScript(code, uniqueDocumentName);
355+
}
356+
catch (OriginalParserException e)
357+
{
358+
throw WrapParserException(e);
381359
}
382360

383361
return new JintPrecompiledScript(parsedScript);
@@ -725,7 +703,6 @@ public override void Dispose()
725703
_jsEngine = null;
726704
}
727705

728-
_jsParser = null;
729706
_debuggerStepCallback = null;
730707
_debuggerBreakCallback = null;
731708
_cancellationConstraint = null;

src/JavaScriptEngineSwitcher.Jint/readme.txt

+2-3
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,12 @@
1313
===========
1414
JavaScriptEngineSwitcher.Jint contains adapter `JintJsEngine` (wrapper for the
1515
Jint JavaScript Engine (http://github.com/sebastienros/jint) version
16-
3.0.0 Beta 2040).
16+
3.0.0 Beta 2041).
1717

1818
=============
1919
RELEASE NOTES
2020
=============
21-
Now only one instance of JS parser per engine is used during pre-compilation of
22-
scripts.
21+
Jint was updated to version 3.0.0 Beta 2041.
2322

2423
=============
2524
DOCUMENTATION

test/JavaScriptEngineSwitcher.Tests/Jint/CommonTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public void MappingRuntimeErrorDuringEvaluationOfExpressionIsCorrect()
8888
Assert.Equal("ReferenceError", exception.Type);
8989
Assert.Equal("variables.js", exception.DocumentName);
9090
Assert.Equal(5, exception.LineNumber);
91-
Assert.Equal(1, exception.ColumnNumber);
91+
Assert.Equal(15, exception.ColumnNumber);
9292
Assert.Empty(exception.SourceFragment);
9393
Assert.Equal(" at Global code (variables.js:5:15)", exception.CallStack);
9494
}

test/JavaScriptEngineSwitcher.Tests/Jint/InteropTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ public void MappingRuntimeErrorDuringRecursiveEvaluationOfFilesIsCorrect()
171171
Assert.Equal("ReferenceError", exception.Type);
172172
Assert.Equal("math.js", exception.DocumentName);
173173
Assert.Equal(10, exception.LineNumber);
174-
Assert.Equal(4, exception.ColumnNumber);
174+
Assert.Equal(14, exception.ColumnNumber);
175175
Assert.Empty(exception.SourceFragment);
176176
Assert.Equal(
177177
" at sum (math.js:10:14)" + Environment.NewLine +

0 commit comments

Comments
 (0)