Skip to content

Commit d90c595

Browse files
committed
In configuration settings of the Jint JS engine was added new property - DebuggerExceptionThrownCallback (default null)
1 parent 6f6eb9c commit d90c595

4 files changed

Lines changed: 33 additions & 4 deletions

File tree

src/JavaScriptEngineSwitcher.Jint/JavaScriptEngineSwitcher.Jint.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<Description>JavaScriptEngineSwitcher.Jint contains a `JintJsEngine` adapter (wrapper for the Jint).</Description>
2424
<PackageTags>$(PackageCommonTags);Jint</PackageTags>
2525
<PackageReleaseNotes>1. Jint was updated to version 4.8.0;
26-
2. In configuration settings of the Jint JS engine was added one new property - `CompileRegex` (default `false`).</PackageReleaseNotes>
26+
2. In configuration settings of the Jint JS engine was added two new properties: `CompileRegex` (default `false`) and `DebuggerExceptionThrownCallback` (default `null`).</PackageReleaseNotes>
2727
</PropertyGroup>
2828

2929
<ItemGroup>

src/JavaScriptEngineSwitcher.Jint/JintJsEngine.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@
1010
using IOriginalPrimitive = Jint.Native.IJsPrimitive;
1111
using OriginalCancellationConstraint = Jint.Constraints.CancellationConstraint;
1212
using OriginalDebuggerEventHandler = Jint.Runtime.Debugger.DebugHandler.DebugEventHandler;
13+
using OriginalDebuggerExceptionThrownEventHandler = Jint.Runtime.Debugger.DebugHandler.ExceptionThrownEventHandler;
1314
using OriginalDebuggerStatementHandlingMode = Jint.Runtime.Debugger.DebuggerStatementHandling;
1415
using OriginalEngine = Jint.Engine;
1516
using OriginalErrorPosition = Acornima.Position;
16-
using OriginalExecutionCanceledException = Jint.Runtime.ExecutionCanceledException;
1717
using OriginalException = Jint.JintException;
18+
using OriginalExecutionCanceledException = Jint.Runtime.ExecutionCanceledException;
1819
using OriginalJavaScriptException = Jint.Runtime.JavaScriptException;
1920
using OriginalMemoryLimitExceededException = Jint.Runtime.MemoryLimitExceededException;
2021
using OriginalObjectInstance = Jint.Native.Object.ObjectInstance;
@@ -90,6 +91,11 @@ public sealed class JintJsEngine : JsEngineBase
9091
/// </summary>
9192
private OriginalDebuggerEventHandler _debuggerStepCallback;
9293

94+
/// <summary>
95+
/// Debugger exception thrown callback
96+
/// </summary>
97+
private OriginalDebuggerExceptionThrownEventHandler _debuggerExceptionThrownCallback;
98+
9399
/// <summary>
94100
/// Flag for whether to allow run the script in strict mode
95101
/// </summary>
@@ -125,6 +131,7 @@ public JintJsEngine(JintSettings settings)
125131
JintSettings jintSettings = settings ?? new JintSettings();
126132
_debuggerBreakCallback = jintSettings.DebuggerBreakCallback;
127133
_debuggerStepCallback = jintSettings.DebuggerStepCallback;
134+
_debuggerExceptionThrownCallback = jintSettings.DebuggerExceptionThrownCallback;
128135
var debuggerStatementHandlingMode = Utils.GetEnumFromOtherEnum<JsDebuggerStatementHandlingMode, OriginalDebuggerStatementHandlingMode>(
129136
jintSettings.DebuggerStatementHandlingMode);
130137

@@ -175,6 +182,10 @@ public JintJsEngine(JintSettings settings)
175182
{
176183
_jsEngine.Debugger.Step += _debuggerStepCallback;
177184
}
185+
if (_debuggerExceptionThrownCallback is not null)
186+
{
187+
_jsEngine.Debugger.ExceptionThrown += _debuggerExceptionThrownCallback;
188+
}
178189
_strictMode = settings.StrictMode;
179190
}
180191
catch (Exception e)
@@ -709,6 +720,11 @@ public override void Dispose()
709720
{
710721
if (_jsEngine is not null)
711722
{
723+
if (_debuggerExceptionThrownCallback is not null)
724+
{
725+
_jsEngine.Debugger.ExceptionThrown -= _debuggerExceptionThrownCallback;
726+
}
727+
712728
if (_debuggerStepCallback is not null)
713729
{
714730
_jsEngine.Debugger.Step -= _debuggerStepCallback;
@@ -723,6 +739,7 @@ public override void Dispose()
723739
_jsEngine = null;
724740
}
725741

742+
_debuggerExceptionThrownCallback = null;
726743
_debuggerStepCallback = null;
727744
_debuggerBreakCallback = null;
728745
_cancellationConstraint = null;

src/JavaScriptEngineSwitcher.Jint/JintSettings.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Text.RegularExpressions;
33

44
using OriginalDebuggerEventHandler = Jint.Runtime.Debugger.DebugHandler.DebugEventHandler;
5+
using OriginalDebuggerExceptionThrownEventHandler = Jint.Runtime.Debugger.DebugHandler.ExceptionThrownEventHandler;
56

67
namespace JavaScriptEngineSwitcher.Jint
78
{
@@ -56,6 +57,15 @@ public OriginalDebuggerEventHandler DebuggerBreakCallback
5657
set;
5758
}
5859

60+
/// <summary>
61+
/// Gets or sets a debugger exception thrown callback
62+
/// </summary>
63+
public OriginalDebuggerExceptionThrownEventHandler DebuggerExceptionThrownCallback
64+
{
65+
get;
66+
set;
67+
}
68+
5969
/// <summary>
6070
/// Gets or sets a handling mode for script <c>debugger</c> statements
6171
/// </summary>
@@ -199,6 +209,7 @@ public JintSettings()
199209
AllowReflection = false;
200210
CompileRegex = false;
201211
DebuggerBreakCallback = null;
212+
DebuggerExceptionThrownCallback = null;
202213
DebuggerStatementHandlingMode = JsDebuggerStatementHandlingMode.Ignore;
203214
DebuggerStepCallback = null;
204215
DisableEval = false;

src/JavaScriptEngineSwitcher.Jint/readme.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@
1818
RELEASE NOTES
1919
=============
2020
1. Jint was updated to version 4.8.0;
21-
2. In configuration settings of the Jint JS engine was added one new property -
22-
`CompileRegex` (default `false`).
21+
2. In configuration settings of the Jint JS engine was added two new properties:
22+
`CompileRegex` (default `false`) and `DebuggerExceptionThrownCallback`
23+
(default `null`).
2324

2425
=============
2526
DOCUMENTATION

0 commit comments

Comments
 (0)