Skip to content

Commit 7f7cc4e

Browse files
Version 7.1.3: Added V8Settings.EnableTopLevelAwait; host collections and async enumerables now support "for await...of" in V8 (GitHub Issue #259 ); added ScriptEngine.DisableExtensionMethods (GitHub Issue #261); fixed V8 property name/index retrieval bug (GitHub Issue #262); added ScriptEngine.AddHostTypes; updated API documentation. Tested with V8 9.1.269.28.
1 parent 8b5b794 commit 7f7cc4e

File tree

669 files changed

+1916
-1080
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

669 files changed

+1916
-1080
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ _ReSharper*/
3333
*.shfbproj_*
3434
*.VC.db
3535
V8/build/
36+
V8/DepotTools.zip
3637
.vs/
3738
packages/
3839
NuGet/Private/

ClearScript.NoV8.sln.DotSettings

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=AssignNullToNotNullAttribute/@EntryIndexedValue">DO_NOT_SHOW</s:String>
66
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=CheckNamespace/@EntryIndexedValue">DO_NOT_SHOW</s:String>
77
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConvertToLocalFunction/@EntryIndexedValue">HINT</s:String>
8+
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConvertToNullCoalescingCompoundAssignment/@EntryIndexedValue">DO_NOT_SHOW</s:String>
9+
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConvertToUsingDeclaration/@EntryIndexedValue">DO_NOT_SHOW</s:String>
810
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ForCanBeConvertedToForeach/@EntryIndexedValue">HINT</s:String>
911
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=JsPathNotFound/@EntryIndexedValue">DO_NOT_SHOW</s:String>
1012
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=PossibleNullReferenceException/@EntryIndexedValue">DO_NOT_SHOW</s:String>
@@ -101,6 +103,9 @@
101103
<s:Boolean x:Key="/Default/UserDictionary/Words/=Steptype/@EntryIndexedValue">True</s:Boolean>
102104
<s:Boolean x:Key="/Default/UserDictionary/Words/=sunspider/@EntryIndexedValue">True</s:Boolean>
103105
<s:Boolean x:Key="/Default/UserDictionary/Words/=Tristate/@EntryIndexedValue">True</s:Boolean>
106+
<s:Boolean x:Key="/Default/UserDictionary/Words/=trunc/@EntryIndexedValue">True</s:Boolean>
107+
<s:Boolean x:Key="/Default/UserDictionary/Words/=truthiness/@EntryIndexedValue">True</s:Boolean>
108+
<s:Boolean x:Key="/Default/UserDictionary/Words/=truthy/@EntryIndexedValue">True</s:Boolean>
104109
<s:Boolean x:Key="/Default/UserDictionary/Words/=TYPEATTR/@EntryIndexedValue">True</s:Boolean>
105110
<s:Boolean x:Key="/Default/UserDictionary/Words/=TYPEDESC/@EntryIndexedValue">True</s:Boolean>
106111
<s:Boolean x:Key="/Default/UserDictionary/Words/=TYPEFLAGS/@EntryIndexedValue">True</s:Boolean>

ClearScript.sln.DotSettings

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=AssignNullToNotNullAttribute/@EntryIndexedValue">DO_NOT_SHOW</s:String>
66
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=CheckNamespace/@EntryIndexedValue">DO_NOT_SHOW</s:String>
77
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConvertToLocalFunction/@EntryIndexedValue">HINT</s:String>
8+
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConvertToNullCoalescingCompoundAssignment/@EntryIndexedValue">DO_NOT_SHOW</s:String>
9+
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConvertToUsingDeclaration/@EntryIndexedValue">DO_NOT_SHOW</s:String>
810
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ForCanBeConvertedToForeach/@EntryIndexedValue">HINT</s:String>
911
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=JsPathNotFound/@EntryIndexedValue">DO_NOT_SHOW</s:String>
1012
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=PossibleNullReferenceException/@EntryIndexedValue">DO_NOT_SHOW</s:String>
@@ -101,6 +103,9 @@
101103
<s:Boolean x:Key="/Default/UserDictionary/Words/=Steptype/@EntryIndexedValue">True</s:Boolean>
102104
<s:Boolean x:Key="/Default/UserDictionary/Words/=sunspider/@EntryIndexedValue">True</s:Boolean>
103105
<s:Boolean x:Key="/Default/UserDictionary/Words/=Tristate/@EntryIndexedValue">True</s:Boolean>
106+
<s:Boolean x:Key="/Default/UserDictionary/Words/=trunc/@EntryIndexedValue">True</s:Boolean>
107+
<s:Boolean x:Key="/Default/UserDictionary/Words/=truthiness/@EntryIndexedValue">True</s:Boolean>
108+
<s:Boolean x:Key="/Default/UserDictionary/Words/=truthy/@EntryIndexedValue">True</s:Boolean>
104109
<s:Boolean x:Key="/Default/UserDictionary/Words/=TYPEATTR/@EntryIndexedValue">True</s:Boolean>
105110
<s:Boolean x:Key="/Default/UserDictionary/Words/=TYPEDESC/@EntryIndexedValue">True</s:Boolean>
106111
<s:Boolean x:Key="/Default/UserDictionary/Words/=TYPEFLAGS/@EntryIndexedValue">True</s:Boolean>

ClearScript/Exports/VersionSymbols.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
#pragma once
77

8-
#define CLEARSCRIPT_VERSION_STRING "7.1.2"
9-
#define CLEARSCRIPT_VERSION_COMMA_SEPARATED 7,1,2
10-
#define CLEARSCRIPT_VERSION_STRING_INFORMATIONAL "7.1.2"
8+
#define CLEARSCRIPT_VERSION_STRING "7.1.3"
9+
#define CLEARSCRIPT_VERSION_COMMA_SEPARATED 7,1,3
10+
#define CLEARSCRIPT_VERSION_STRING_INFORMATIONAL "7.1.3"
1111
#define CLEARSCRIPT_FILE_FLAGS 0L

ClearScript/HostItem.NetCore.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Licensed under the MIT license.
33

44
using System;
5+
using System.Collections;
56
using System.Collections.Generic;
67
using System.Diagnostics;
78
using System.Linq;
@@ -28,6 +29,41 @@ private static HostItem Create(ScriptEngine engine, HostTarget target, HostItemF
2829

2930
#endregion
3031

32+
#region internal members
33+
34+
#region member invocation
35+
36+
private object CreateAsyncEnumerator<T>(IEnumerable<T> enumerable)
37+
{
38+
return HostObject.Wrap(enumerable.GetEnumerator().ToAsyncEnumerator(Engine), typeof(IAsyncEnumeratorPromise<T>));
39+
}
40+
41+
private object CreateAsyncEnumerator()
42+
{
43+
if ((Target.InvokeTarget != null) && Target.Type.IsAssignableToGenericType(typeof(IAsyncEnumerable<>), out _))
44+
{
45+
var enumerableHelpersHostItem = Wrap(Engine, EnumerableHelpers.HostType, HostItemFlags.PrivateAccess);
46+
if (MiscHelpers.Try(out var enumerator, () => ((IDynamic)enumerableHelpersHostItem).InvokeMethod("GetAsyncEnumerator", this, Engine)))
47+
{
48+
return enumerator;
49+
}
50+
}
51+
else if (BindSpecialTarget(out IEnumerable _))
52+
{
53+
var enumerableHelpersHostItem = Wrap(Engine, EnumerableHelpers.HostType, HostItemFlags.PrivateAccess);
54+
if (MiscHelpers.Try(out var enumerator, () => ((IDynamic)enumerableHelpersHostItem).InvokeMethod("GetAsyncEnumerator", this, Engine)))
55+
{
56+
return enumerator;
57+
}
58+
}
59+
60+
throw new NotSupportedException("The object is not async-enumerable");
61+
}
62+
63+
#endregion
64+
65+
#endregion
66+
3167
#region Nested type: DispatchExHostItem
3268

3369
private sealed class DispatchExHostItem : ExpandoHostItem

ClearScript/HostItem.NetFramework.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

4+
using System;
5+
using System.Collections.Generic;
6+
47
namespace Microsoft.ClearScript
58
{
69
internal partial class HostItem
@@ -13,5 +16,24 @@ private static HostItem Create(ScriptEngine engine, HostTarget target, HostItemF
1316
}
1417

1518
#endregion
19+
20+
#region internal members
21+
22+
#region member invocation
23+
24+
// ReSharper disable once UnusedParameter.Local
25+
private static object CreateAsyncEnumerator<T>(IEnumerable<T> enumerable)
26+
{
27+
throw new PlatformNotSupportedException("Async enumerators are not supported on this platform");
28+
}
29+
30+
private object CreateAsyncEnumerator()
31+
{
32+
throw new PlatformNotSupportedException("Async enumerators are not supported on this platform");
33+
}
34+
35+
#endregion
36+
37+
#endregion
1638
}
1739
}

ClearScript/HostItem.cs

Lines changed: 44 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1031,7 +1031,12 @@ private object InvokePropertyBagMember(string name, BindingFlags invokeFlags, ob
10311031

10321032
if (name == SpecialMemberNames.NewEnum)
10331033
{
1034-
return HostObject.Wrap(TargetPropertyBag.GetEnumerator(), typeof(IEnumerator));
1034+
return CreateEnumerator(TargetPropertyBag);
1035+
}
1036+
1037+
if (name == SpecialMemberNames.NewAsyncEnum)
1038+
{
1039+
return CreateAsyncEnumerator(TargetPropertyBag);
10351040
}
10361041

10371042
if (!TargetPropertyBag.TryGetValue(name, out value))
@@ -1079,7 +1084,12 @@ private object InvokePropertyBagMember(string name, BindingFlags invokeFlags, ob
10791084

10801085
if (name == SpecialMemberNames.NewEnum)
10811086
{
1082-
return HostObject.Wrap(TargetPropertyBag.GetEnumerator(), typeof(IEnumerator));
1087+
return CreateEnumerator(TargetPropertyBag);
1088+
}
1089+
1090+
if (name == SpecialMemberNames.NewAsyncEnum)
1091+
{
1092+
return CreateAsyncEnumerator(TargetPropertyBag);
10831093
}
10841094

10851095
if (args.Length < 1)
@@ -1272,19 +1282,12 @@ private object InvokeHostMember(string name, BindingFlags invokeFlags, object[]
12721282

12731283
if (name == SpecialMemberNames.NewEnum)
12741284
{
1275-
if ((Target is HostObject) || (Target is IHostVariable) || (Target is IByRefArg))
1276-
{
1277-
if (BindSpecialTarget(out IEnumerable _))
1278-
{
1279-
var enumerableHelpersHostItem = Wrap(Engine, EnumerableHelpers.HostType, HostItemFlags.PrivateAccess);
1280-
if (MiscHelpers.Try(out var enumerator, () => ((IDynamic)enumerableHelpersHostItem).InvokeMethod("GetEnumerator", this)))
1281-
{
1282-
return enumerator;
1283-
}
1284-
}
1285-
}
1285+
return CreateEnumerator();
1286+
}
12861287

1287-
throw new NotSupportedException("The object is not enumerable");
1288+
if (name == SpecialMemberNames.NewAsyncEnum)
1289+
{
1290+
return CreateAsyncEnumerator();
12881291
}
12891292

12901293
if ((TargetDynamicMetaObject != null) && TargetDynamicMetaObject.HasMember(name, invokeFlags.HasFlag(BindingFlags.IgnoreCase)))
@@ -1381,19 +1384,12 @@ private object GetHostProperty(string name, BindingFlags invokeFlags, object[] a
13811384

13821385
if (name == SpecialMemberNames.NewEnum)
13831386
{
1384-
if ((Target is HostObject) || (Target is IHostVariable) || (Target is IByRefArg))
1385-
{
1386-
if (BindSpecialTarget(out IEnumerable _))
1387-
{
1388-
var enumerableHelpersHostItem = Wrap(Engine, EnumerableHelpers.HostType, HostItemFlags.PrivateAccess);
1389-
if (MiscHelpers.Try(out var enumerator, () => ((IDynamic)enumerableHelpersHostItem).InvokeMethod("GetEnumerator", this)))
1390-
{
1391-
return enumerator;
1392-
}
1393-
}
1394-
}
1387+
return CreateEnumerator();
1388+
}
13951389

1396-
throw new NotSupportedException("The object is not enumerable");
1390+
if (name == SpecialMemberNames.NewAsyncEnum)
1391+
{
1392+
return CreateAsyncEnumerator();
13971393
}
13981394

13991395
if ((TargetDynamicMetaObject != null) && (args.Length < 1))
@@ -1693,6 +1689,28 @@ private object SetHostProperty(PropertyInfo property, BindingFlags invokeFlags,
16931689
throw new ArgumentException("Invalid property assignment");
16941690
}
16951691

1692+
private static object CreateEnumerator<T>(IEnumerable<T> enumerable)
1693+
{
1694+
return HostObject.Wrap(enumerable.GetEnumerator(), typeof(IEnumerator<T>));
1695+
}
1696+
1697+
private object CreateEnumerator()
1698+
{
1699+
if ((Target is HostObject) || (Target is IHostVariable) || (Target is IByRefArg))
1700+
{
1701+
if (BindSpecialTarget(out IEnumerable _))
1702+
{
1703+
var enumerableHelpersHostItem = Wrap(Engine, EnumerableHelpers.HostType, HostItemFlags.PrivateAccess);
1704+
if (MiscHelpers.Try(out var enumerator, () => ((IDynamic)enumerableHelpersHostItem).InvokeMethod("GetEnumerator", this)))
1705+
{
1706+
return enumerator;
1707+
}
1708+
}
1709+
}
1710+
1711+
throw new NotSupportedException("The object is not enumerable");
1712+
}
1713+
16961714
#endregion
16971715

16981716
#endregion

ClearScript/Properties/AssemblyInfo.Core.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,15 @@
1818
[assembly: InternalsVisibleTo("ClearScriptTest")]
1919

2020
[assembly: ComVisible(false)]
21-
[assembly: AssemblyVersion("7.1.2")]
22-
[assembly: AssemblyFileVersion("7.1.2")]
23-
[assembly: AssemblyInformationalVersion("7.1.2")]
21+
[assembly: AssemblyVersion("7.1.3")]
22+
[assembly: AssemblyFileVersion("7.1.3")]
23+
[assembly: AssemblyInformationalVersion("7.1.3")]
2424

2525
namespace Microsoft.ClearScript.Properties
2626
{
2727
internal static class ClearScriptVersion
2828
{
29-
public const string Triad = "7.1.2";
30-
public const string Informational = "7.1.2";
29+
public const string Triad = "7.1.3";
30+
public const string Informational = "7.1.3";
3131
}
3232
}

ClearScript/Properties/AssemblyInfo.V8.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@
1515
[assembly: InternalsVisibleTo("ClearScriptTest")]
1616

1717
[assembly: ComVisible(false)]
18-
[assembly: AssemblyVersion("7.1.2")]
19-
[assembly: AssemblyFileVersion("7.1.2")]
20-
[assembly: AssemblyInformationalVersion("7.1.2")]
18+
[assembly: AssemblyVersion("7.1.3")]
19+
[assembly: AssemblyFileVersion("7.1.3")]
20+
[assembly: AssemblyInformationalVersion("7.1.3")]

ClearScript/Properties/AssemblyInfo.Windows.Core.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@
1616
[assembly: InternalsVisibleTo("ClearScriptTest")]
1717

1818
[assembly: ComVisible(false)]
19-
[assembly: AssemblyVersion("7.1.2")]
20-
[assembly: AssemblyFileVersion("7.1.2")]
21-
[assembly: AssemblyInformationalVersion("7.1.2")]
19+
[assembly: AssemblyVersion("7.1.3")]
20+
[assembly: AssemblyFileVersion("7.1.3")]
21+
[assembly: AssemblyInformationalVersion("7.1.3")]

0 commit comments

Comments
 (0)