Skip to content

Commit 73b6cf3

Browse files
committed
1. In MsieJsEngine class was added SupportsScriptPrecompilation property and three new methods: Precompile, PrecompileFile and PrecompileResource;
2. In JsRT modes added a ability to pre-compile scripts.
1 parent b6fa144 commit 73b6cf3

32 files changed

+1620
-160
lines changed

MsieJavaScriptEngine.sln

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{1F9B41F3-5
1111
EndProject
1212
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SharedFiles", "SharedFiles", "{E3F8640B-91D8-4BBE-B807-D69D1DE0D818}"
1313
ProjectSection(SolutionItems) = preProject
14+
test\SharedFiles\declinationOfMinutes.js = test\SharedFiles\declinationOfMinutes.js
1415
test\SharedFiles\link.txt = test\SharedFiles\link.txt
1516
test\SharedFiles\square.js = test\SharedFiles\square.js
1617
EndProjectSection
@@ -77,4 +78,7 @@ Global
7778
{EF54F02A-7ECD-4D3E-9163-33BCA969FD1B} = {1F9B41F3-53ED-4254-98B7-F4309EA0D53E}
7879
{72233C70-DF61-449F-8D53-D456284CDA5D} = {1F9B41F3-53ED-4254-98B7-F4309EA0D53E}
7980
EndGlobalSection
81+
GlobalSection(ExtensibilityGlobals) = postSolution
82+
SolutionGuid = {5035D2B6-B7C8-4A7F-8764-07B60AD66E96}
83+
EndGlobalSection
8084
EndGlobal

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,13 @@ namespace MsieJavaScriptEngine.Example.Console
5454
{
5555
Console.WriteLine("During loading of JavaScript engine an error occurred.");
5656
Console.WriteLine();
57-
Console.WriteLine(JsErrorHelpers.Format(e));
57+
Console.WriteLine(JsErrorHelpers.GenerateErrorDetails(e));
5858
}
5959
catch (JsRuntimeException e)
6060
{
6161
Console.WriteLine("During execution of JavaScript code an error occurred.");
6262
Console.WriteLine();
63-
Console.WriteLine(JsErrorHelpers.Format(e));
63+
Console.WriteLine(JsErrorHelpers.GenerateErrorDetails(e));
6464
}
6565

6666
Console.ReadLine();

global.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"sdk": {
3-
"version": "2.1.103"
3+
"version": "2.1.200"
44
}
55
}

src/MsieJavaScriptEngine/ActiveScript/ActiveScriptJsEngineBase.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -644,12 +644,11 @@ private string ShortenErrorCategoryName(string categoryName)
644644

645645
#region IInnerJsEngine implementation
646646

647-
public override string Mode
647+
public override PrecompiledScript Precompile(string code, string documentName)
648648
{
649-
get { return _engineModeName; }
649+
throw new NotSupportedException();
650650
}
651651

652-
653652
public override object Evaluate(string expression, string documentName)
654653
{
655654
object result = _dispatcher.Invoke(() =>
@@ -688,6 +687,11 @@ public override void Execute(string code, string documentName)
688687
});
689688
}
690689

690+
public override void Execute(PrecompiledScript precompiledScript)
691+
{
692+
throw new NotSupportedException();
693+
}
694+
691695
public override object CallFunction(string functionName, params object[] args)
692696
{
693697
object[] processedArgs = MapToScriptType(args);

src/MsieJavaScriptEngine/ActiveScript/ChakraActiveScriptJsEngine.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,12 @@ protected override void InnerRemoveVariable(string variableName)
121121

122122
#region IInnerJsEngine implementation
123123

124+
public override bool SupportsScriptPrecompilation
125+
{
126+
get { return false; }
127+
}
128+
129+
124130
public override void Interrupt()
125131
{
126132
_interruptRequested = true;

src/MsieJavaScriptEngine/ActiveScript/ClassicActiveScriptJsEngine.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,12 @@ protected override void InnerRemoveVariable(string variableName)
191191

192192
#region IInnerJsEngine implementation
193193

194+
public override bool SupportsScriptPrecompilation
195+
{
196+
get { return false; }
197+
}
198+
199+
194200
public override void Interrupt()
195201
{
196202
var exceptionInfo = new EXCEPINFO

src/MsieJavaScriptEngine/Helpers/JsErrorHelpers.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@ public static JsEngineLoadException WrapEngineLoadException(Exception exception,
464464
internal static string GetSourceFragment(string sourceLine, int columnNumber,
465465
int maxFragmentLength = 100)
466466
{
467-
if (string.IsNullOrWhiteSpace(sourceLine))
467+
if (string.IsNullOrEmpty(sourceLine))
468468
{
469469
return string.Empty;
470470
}

src/MsieJavaScriptEngine/IInnerJsEngine.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,19 @@ internal interface IInnerJsEngine : IDisposable
1212
/// </summary>
1313
string Mode { get; }
1414

15+
/// <summary>
16+
/// Gets a value that indicates if the JS engine supports script pre-compilation
17+
/// </summary>
18+
bool SupportsScriptPrecompilation { get; }
19+
20+
21+
/// <summary>
22+
/// Creates a pre-compiled script from JS code
23+
/// </summary>
24+
/// <param name="code">JS code</param>
25+
/// <param name="documentName">Document name</param>
26+
/// <returns>A pre-compiled script that can be executed by different instances of JS engine</returns>
27+
PrecompiledScript Precompile(string code, string documentName);
1528

1629
/// <summary>
1730
/// Evaluates an expression
@@ -28,6 +41,13 @@ internal interface IInnerJsEngine : IDisposable
2841
/// <param name="documentName">Document name</param>
2942
void Execute(string code, string documentName);
3043

44+
/// <summary>
45+
/// Executes a pre-compiled script
46+
/// </summary>
47+
/// <param name="precompiledScript">A pre-compiled script that can be executed by different
48+
/// instances of JS engine</param>
49+
void Execute(PrecompiledScript precompiledScript);
50+
3151
/// <summary>
3252
/// Calls a function
3353
/// </summary>

src/MsieJavaScriptEngine/InnerJsEngineBase.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,22 @@ protected InnerJsEngineBase(JsEngineSettings settings)
3939

4040
#region IInnerJsEngine implementation
4141

42-
public abstract string Mode { get; }
42+
public string Mode
43+
{
44+
get { return _engineModeName; }
45+
}
46+
47+
public abstract bool SupportsScriptPrecompilation { get; }
4348

4449

50+
public abstract PrecompiledScript Precompile(string code, string documentName);
51+
4552
public abstract object Evaluate(string expression, string documentName);
4653

4754
public abstract void Execute(string code, string documentName);
4855

56+
public abstract void Execute(PrecompiledScript precompiledScript);
57+
4958
public abstract object CallFunction(string functionName, params object[] args);
5059

5160
public abstract bool HasVariable(string variableName);

src/MsieJavaScriptEngine/JsException.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ namespace MsieJavaScriptEngine
2020
public class JsException : Exception
2121
{
2222
/// <summary>
23-
/// JS engine mode
23+
/// Name of JS engine mode
2424
/// </summary>
2525
private readonly string _engineMode = string.Empty;
2626

0 commit comments

Comments
 (0)