Skip to content

Commit f2151d7

Browse files
committed
In configuration settings of the MSIE JS engine was added one new property - MaxStackSize (default 492 or 984 KB)
1 parent 3eaf6e7 commit f2151d7

File tree

8 files changed

+389
-3
lines changed

8 files changed

+389
-3
lines changed

src/JavaScriptEngineSwitcher.Msie/JavaScriptEngineSwitcher.Msie.csproj

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
1111
<NoWarn>$(NoWarn);CS1591</NoWarn>
1212
<GenerateDocumentationFile>true</GenerateDocumentationFile>
13+
<DisableDefaultResxToCsConversionTarget>true</DisableDefaultResxToCsConversionTarget>
1314
<Description>JavaScriptEngineSwitcher.Msie contains adapter `MsieJsEngine` (wrapper for the MSIE JavaScript Engine for .Net (http://github.com/Taritsyn/MsieJavaScriptEngine)). For correct working of the MSIE JavaScript Engine it is recommended to install Internet Explorer 9+ or Microsoft Edge on the machine.</Description>
1415
<PackageIconUrl>https://raw.githubusercontent.com/Taritsyn/JavaScriptEngineSwitcher/master/Icons/JavaScriptEngineSwitcher_Msie_Logo128x128.png</PackageIconUrl>
1516
<PackageTags>JavaScriptEngineSwitcher;JavaScript;ECMAScript;MSIE;IE;Chakra</PackageTags>
16-
<PackageReleaseNotes>Added support of MSIE JavaScript Engine version 3.0.0 RC 1.</PackageReleaseNotes>
17+
<PackageReleaseNotes>1. Added support of MSIE JavaScript Engine version 3.0.0 RC 1;
18+
2. In configuration settings of the MSIE JS engine was added one new property - `MaxStackSize` (default `492` or `984` KB).</PackageReleaseNotes>
1719
</PropertyGroup>
1820

1921
<Import Project="../../build/common.props" />
@@ -23,6 +25,7 @@
2325

2426
<ItemGroup>
2527
<PackageReference Include="MsieJavaScriptEngine" Version="3.0.0-rc1" />
28+
<PackageReference Include="ResxToCs.MSBuild" Version="1.0.0-alpha5" PrivateAssets="All" />
2629

2730
<ProjectReference Include="../JavaScriptEngineSwitcher.Core/JavaScriptEngineSwitcher.Core.csproj" />
2831
</ItemGroup>
@@ -39,4 +42,8 @@
3942
</Content>
4043
</ItemGroup>
4144

45+
<Target Name="СonvertResxToCs" BeforeTargets="BeforeCompile">
46+
<ResxToCsTask InputDirectory="./Resources/" Namespace="$(RootNamespace).Resources" InternalAccessModifier="true" />
47+
</Target>
48+
4249
</Project>

src/JavaScriptEngineSwitcher.Msie/MsieJsEngine.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ public MsieJsEngine(MsieSettings settings)
7979
EnableDebugging = msieSettings.EnableDebugging,
8080
EngineMode = Utils.GetEnumFromOtherEnum<JsEngineMode, OriginalEngineMode>(
8181
msieSettings.EngineMode),
82+
#if !NETSTANDARD1_3
83+
MaxStackSize = msieSettings.MaxStackSize,
84+
#endif
8285
UseEcmaScript5Polyfill = msieSettings.UseEcmaScript5Polyfill,
8386
UseJson2Library = msieSettings.UseJson2Library
8487
});

src/JavaScriptEngineSwitcher.Msie/MsieSettings.cs

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,33 @@
1-
namespace JavaScriptEngineSwitcher.Msie
1+
using System;
2+
3+
using JavaScriptEngineSwitcher.Core.Utilities;
4+
5+
using JavaScriptEngineSwitcher.Msie.Resources;
6+
7+
namespace JavaScriptEngineSwitcher.Msie
28
{
39
/// <summary>
410
/// Settings of the MSIE JS engine
511
/// </summary>
612
public sealed class MsieSettings
713
{
14+
#if !NETSTANDARD1_3
15+
/// <summary>
16+
/// The stack size is sufficient to run the code of modern JavaScript libraries in 32-bit process
17+
/// </summary>
18+
const int STACK_SIZE_32 = 492 * 1024; // like 32-bit Node.js
19+
20+
/// <summary>
21+
/// The stack size is sufficient to run the code of modern JavaScript libraries in 64-bit process
22+
/// </summary>
23+
const int STACK_SIZE_64 = 984 * 1024; // like 64-bit Node.js
24+
25+
/// <summary>
26+
/// The maximum stack size in bytes
27+
/// </summary>
28+
private int _maxStackSize;
29+
30+
#endif
831
/// <summary>
932
/// Gets or sets a flag for whether to enable script debugging features
1033
/// </summary>
@@ -22,6 +45,33 @@ public JsEngineMode EngineMode
2245
get;
2346
set;
2447
}
48+
#if !NETSTANDARD1_3
49+
50+
/// <summary>
51+
/// Gets or sets a maximum stack size in bytes
52+
/// </summary>
53+
/// <remarks>
54+
/// <para>Set a <code>0</code> to use the default maximum stack size specified in the header
55+
/// for the executable.
56+
/// </para>
57+
/// </remarks>
58+
public int MaxStackSize
59+
{
60+
get { return _maxStackSize; }
61+
set
62+
{
63+
if (value < 0)
64+
{
65+
throw new ArgumentOutOfRangeException(
66+
nameof(value),
67+
Strings.Engine_MaxStackSizeMustBeNonNegative
68+
);
69+
}
70+
71+
_maxStackSize = value;
72+
}
73+
}
74+
#endif
2575

2676
/// <summary>
2777
/// Gets or sets a flag for whether to use the ECMAScript 5 Polyfill
@@ -49,6 +99,9 @@ public MsieSettings()
4999
{
50100
EnableDebugging = false;
51101
EngineMode = JsEngineMode.Auto;
102+
#if !NETSTANDARD1_3
103+
MaxStackSize = Utils.Is64BitProcess() ? STACK_SIZE_64 : STACK_SIZE_32;
104+
#endif
52105
UseEcmaScript5Polyfill = false;
53106
UseJson2Library = false;
54107
}

src/JavaScriptEngineSwitcher.Msie/Resources/Strings.Designer.cs

Lines changed: 75 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<root>
3+
<!--
4+
Microsoft ResX Schema
5+
6+
Version 2.0
7+
8+
The primary goals of this format is to allow a simple XML format
9+
that is mostly human readable. The generation and parsing of the
10+
various data types are done through the TypeConverter classes
11+
associated with the data types.
12+
13+
Example:
14+
15+
... ado.net/XML headers & schema ...
16+
<resheader name="resmimetype">text/microsoft-resx</resheader>
17+
<resheader name="version">2.0</resheader>
18+
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
19+
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
20+
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
21+
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
22+
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
23+
<value>[base64 mime encoded serialized .NET Framework object]</value>
24+
</data>
25+
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
26+
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
27+
<comment>This is a comment</comment>
28+
</data>
29+
30+
There are any number of "resheader" rows that contain simple
31+
name/value pairs.
32+
33+
Each data row contains a name, and value. The row also contains a
34+
type or mimetype. Type corresponds to a .NET class that support
35+
text/value conversion through the TypeConverter architecture.
36+
Classes that don't support this are serialized and stored with the
37+
mimetype set.
38+
39+
The mimetype is used for serialized objects, and tells the
40+
ResXResourceReader how to depersist the object. This is currently not
41+
extensible. For a given mimetype the value must be set accordingly:
42+
43+
Note - application/x-microsoft.net.object.binary.base64 is the format
44+
that the ResXResourceWriter will generate, however the reader can
45+
read any of the formats listed below.
46+
47+
mimetype: application/x-microsoft.net.object.binary.base64
48+
value : The object must be serialized with
49+
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
50+
: and then encoded with base64 encoding.
51+
52+
mimetype: application/x-microsoft.net.object.soap.base64
53+
value : The object must be serialized with
54+
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
55+
: and then encoded with base64 encoding.
56+
57+
mimetype: application/x-microsoft.net.object.bytearray.base64
58+
value : The object must be serialized into a byte array
59+
: using a System.ComponentModel.TypeConverter
60+
: and then encoded with base64 encoding.
61+
-->
62+
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
63+
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
64+
<xsd:element name="root" msdata:IsDataSet="true">
65+
<xsd:complexType>
66+
<xsd:choice maxOccurs="unbounded">
67+
<xsd:element name="metadata">
68+
<xsd:complexType>
69+
<xsd:sequence>
70+
<xsd:element name="value" type="xsd:string" minOccurs="0" />
71+
</xsd:sequence>
72+
<xsd:attribute name="name" use="required" type="xsd:string" />
73+
<xsd:attribute name="type" type="xsd:string" />
74+
<xsd:attribute name="mimetype" type="xsd:string" />
75+
<xsd:attribute ref="xml:space" />
76+
</xsd:complexType>
77+
</xsd:element>
78+
<xsd:element name="assembly">
79+
<xsd:complexType>
80+
<xsd:attribute name="alias" type="xsd:string" />
81+
<xsd:attribute name="name" type="xsd:string" />
82+
</xsd:complexType>
83+
</xsd:element>
84+
<xsd:element name="data">
85+
<xsd:complexType>
86+
<xsd:sequence>
87+
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
88+
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
89+
</xsd:sequence>
90+
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
91+
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
92+
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
93+
<xsd:attribute ref="xml:space" />
94+
</xsd:complexType>
95+
</xsd:element>
96+
<xsd:element name="resheader">
97+
<xsd:complexType>
98+
<xsd:sequence>
99+
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
100+
</xsd:sequence>
101+
<xsd:attribute name="name" type="xsd:string" use="required" />
102+
</xsd:complexType>
103+
</xsd:element>
104+
</xsd:choice>
105+
</xsd:complexType>
106+
</xsd:element>
107+
</xsd:schema>
108+
<resheader name="resmimetype">
109+
<value>text/microsoft-resx</value>
110+
</resheader>
111+
<resheader name="version">
112+
<value>2.0</value>
113+
</resheader>
114+
<resheader name="reader">
115+
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
116+
</resheader>
117+
<resheader name="writer">
118+
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
119+
</resheader>
120+
<data name="Engine_MaxStackSizeMustBeNonNegative" xml:space="preserve">
121+
<value>Maximum stack size must be non-negative.</value>
122+
</data>
123+
</root>

src/JavaScriptEngineSwitcher.Msie/Resources/Strings.ru-ru.Designer.cs

Whitespace-only changes.

0 commit comments

Comments
 (0)