Skip to content

Commit db89da6

Browse files
Version 5.3.1: Fixed JScriptEngine dynamic binding issue.
1 parent 9ebc236 commit db89da6

File tree

11 files changed

+58
-14
lines changed

11 files changed

+58
-14
lines changed

ClearScript/Exports/VersionSymbols.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,5 +63,5 @@
6363

6464
#pragma once
6565

66-
#define CLEARSCRIPT_VERSION_STRING "5.3.0.0"
67-
#define CLEARSCRIPT_VERSION_COMMA_SEPARATED 5,3,0,0
66+
#define CLEARSCRIPT_VERSION_STRING "5.3.1.0"
67+
#define CLEARSCRIPT_VERSION_COMMA_SEPARATED 5,3,1,0

ClearScript/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,5 +73,5 @@
7373
[assembly: InternalsVisibleTo("ClearScriptTest")]
7474

7575
[assembly: ComVisible(false)]
76-
[assembly: AssemblyVersion("5.3.0.0")]
77-
[assembly: AssemblyFileVersion("5.3.0.0")]
76+
[assembly: AssemblyVersion("5.3.1.0")]
77+
[assembly: AssemblyFileVersion("5.3.1.0")]

ClearScript/Util/DynamicHelpers.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
using System;
6363
using System.Diagnostics;
6464
using System.Dynamic;
65+
using System.Globalization;
6566
using System.Linq;
6667
using System.Linq.Expressions;
6768
using System.Reflection;
@@ -130,6 +131,17 @@ public static bool TryBindAndInvoke(DynamicMetaObjectBinder binder, object targe
130131
return true;
131132
}
132133
}
134+
else
135+
{
136+
var invokeMemberBinder = binder as InvokeMemberBinder;
137+
if (invokeMemberBinder != null)
138+
{
139+
if (TryInvokeMethod(reflect, invokeMemberBinder.Name, false, args, out result))
140+
{
141+
return true;
142+
}
143+
}
144+
}
133145
}
134146
}
135147
}
@@ -197,6 +209,25 @@ private static bool TrySetProperty(IReflect target, string name, bool ignoreCase
197209
return false;
198210
}
199211

212+
private static bool TryInvokeMethod(IReflect target, string name, bool ignoreCase, object[] args, out object result)
213+
{
214+
var flags = BindingFlags.InvokeMethod | BindingFlags.Public;
215+
if (ignoreCase)
216+
{
217+
flags |= BindingFlags.IgnoreCase;
218+
}
219+
220+
var method = target.GetMethod(name, flags);
221+
if (method != null)
222+
{
223+
result = method.Invoke(target, flags, null, args, CultureInfo.InvariantCulture);
224+
return true;
225+
}
226+
227+
result = null;
228+
return false;
229+
}
230+
200231
private static DynamicMetaObject CreateDynamicTarget(object target)
201232
{
202233
var byRefArg = target as IByRefArg;

ClearScript/V8/V8/V8Patch.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Index: tools/gyp/v8.gyp
22
===================================================================
3-
--- tools/gyp/v8.gyp (revision 14724)
3+
--- tools/gyp/v8.gyp (revision 14901)
44
+++ tools/gyp/v8.gyp (working copy)
55
@@ -30,6 +30,7 @@
66
'targets': [

ClearScript/Windows/WindowsScriptItem.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ protected override bool TryBindAndInvoke(DynamicMetaObjectBinder binder, object[
220220
protected override object[] AdjustInvokeArgs(object[] args)
221221
{
222222
// WORKAROUND: JScript seems to require at least one argument to invoke a function
223-
return ((engine is JScriptEngine) && (args.Length < 1)) ? new object[] { 0 } : args;
223+
return ((engine is JScriptEngine) && (args.Length < 1)) ? new object[] { Undefined.Value } : args;
224224
}
225225

226226
#endregion

ClearScriptBenchmarks/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,5 +69,5 @@
6969
[assembly: AssemblyCopyright("© Microsoft Corporation")]
7070

7171
[assembly: ComVisible(false)]
72-
[assembly: AssemblyVersion("5.3.0.0")]
73-
[assembly: AssemblyFileVersion("5.3.0.0")]
72+
[assembly: AssemblyVersion("5.3.1.0")]
73+
[assembly: AssemblyFileVersion("5.3.1.0")]

ClearScriptConsole/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,5 +69,5 @@
6969
[assembly: AssemblyCopyright("© Microsoft Corporation")]
7070

7171
[assembly: ComVisible(false)]
72-
[assembly: AssemblyVersion("5.3.0.0")]
73-
[assembly: AssemblyFileVersion("5.3.0.0")]
72+
[assembly: AssemblyVersion("5.3.1.0")]
73+
[assembly: AssemblyFileVersion("5.3.1.0")]

ClearScriptTest/BugFixTest.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
using System.Diagnostics.CodeAnalysis;
6464
using Microsoft.CSharp.RuntimeBinder;
6565
using Microsoft.ClearScript.V8;
66+
using Microsoft.ClearScript.Windows;
6667
using Microsoft.VisualStudio.TestTools.UnitTesting;
6768

6869
namespace Microsoft.ClearScript.Test
@@ -129,6 +130,18 @@ public void BugFix_DelegateConstructionSyntax_DoubleWrap()
129130
Assert.AreEqual(25, func(5));
130131
}
131132

133+
[TestMethod, TestCategory("BugFix")]
134+
public void BugFix_JScriptCaseInsensitivity()
135+
{
136+
engine.Dispose();
137+
engine = new JScriptEngine();
138+
engine.Execute("abc = 1; ABC = 2; function foo() { return 3; } function FOO() { return 4; }");
139+
Assert.AreEqual(1, engine.Script.abc);
140+
Assert.AreEqual(2, engine.Script.ABC);
141+
Assert.AreEqual(3, engine.Script.foo());
142+
Assert.AreEqual(4, engine.Script.FOO());
143+
}
144+
132145
// ReSharper restore InconsistentNaming
133146

134147
#endregion

ClearScriptTest/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,5 +69,5 @@
6969
[assembly: AssemblyCopyright("© Microsoft Corporation")]
7070

7171
[assembly: ComVisible(false)]
72-
[assembly: AssemblyVersion("5.3.0.0")]
73-
[assembly: AssemblyFileVersion("5.3.0.0")]
72+
[assembly: AssemblyVersion("5.3.1.0")]
73+
[assembly: AssemblyFileVersion("5.3.1.0")]

V8Update.cmd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ setlocal
55
:: process arguments
66
::-----------------------------------------------------------------------------
77

8-
set testedV8rev=14721
8+
set testedV8rev=14901
99

1010
:ProcessArgs
1111

0 commit comments

Comments
 (0)