From 98c7f0b9f03911b7340e5c4658c988e68326a305 Mon Sep 17 00:00:00 2001 From: Marko Lahma Date: Thu, 16 Mar 2023 21:03:56 +0200 Subject: [PATCH] Introduce Advanced API and ProcessTasks (#1499) --- .../AdvancedApiTests.cs | 11 +++++++++ Jint/Engine.Advanced.cs | 24 +++++++++++++++++++ Jint/Engine.cs | 2 ++ 3 files changed, 37 insertions(+) create mode 100644 Jint.Tests.PublicInterface/AdvancedApiTests.cs create mode 100644 Jint/Engine.Advanced.cs diff --git a/Jint.Tests.PublicInterface/AdvancedApiTests.cs b/Jint.Tests.PublicInterface/AdvancedApiTests.cs new file mode 100644 index 0000000000..fac99adf37 --- /dev/null +++ b/Jint.Tests.PublicInterface/AdvancedApiTests.cs @@ -0,0 +1,11 @@ +namespace Jint.Tests.PublicInterface; + +public class AdvancedApiTests +{ + [Fact] + public void CanProcessTasks() + { + var engine = new Engine(); + engine.Advanced.ProcessTasks(); + } +} diff --git a/Jint/Engine.Advanced.cs b/Jint/Engine.Advanced.cs new file mode 100644 index 0000000000..d1469c1b8e --- /dev/null +++ b/Jint/Engine.Advanced.cs @@ -0,0 +1,24 @@ +namespace Jint; + +public partial class Engine +{ + public AdvancedOperations Advanced { get; } +} + +public class AdvancedOperations +{ + private readonly Engine _engine; + + public AdvancedOperations(Engine engine) + { + _engine = engine; + } + + /// + /// Forcefully processes the current task queues (micro and regular), this API may break and change behavior! + /// + public void ProcessTasks() + { + _engine.RunAvailableContinuations(); + } +} diff --git a/Jint/Engine.cs b/Jint/Engine.cs index ced8cc3588..b274e81172 100644 --- a/Jint/Engine.cs +++ b/Jint/Engine.cs @@ -96,6 +96,8 @@ public Engine(Options options) : this((e, o) => e.Options = options) /// The provided engine instance in callback is not guaranteed to be fully configured public Engine(Action options) { + Advanced = new AdvancedOperations(this); + _executionContexts = new ExecutionContextStack(2); Options = new Options();