Version 5.5.3: Changed V8Update to use V8's GN-based build system; fixed VB.NET access to nonexistent JavaScript properties (GitHub Issue #47, Take 2); fixed script object serialization via Json.NET (GitHub Issue #60); added host item invocability assessment and patched V8's typeof implementation to return "object" for all non-delegate host objects (GitHub Issue #62); added DocumentInfo and related APIs to address GitHub Issue #46; fixed property bag invocation; updated deployment and API documentation. Tested with V8 6.8.275.28.

This commit is contained in:
ClearScript 2018-08-20 13:45:15 -04:00
Родитель 69ce8fadba
Коммит 8591cc5415
507 изменённых файлов: 3421 добавлений и 1429 удалений

3
.gitignore поставляемый
Просмотреть файл

@ -34,4 +34,5 @@ _ReSharper*/
ClearScript/V8/V8/build/
ClearScript/V8/V8/lib/
ClearScript/V8/V8/include/
.vs/
.vs/
packages/

Просмотреть файл

@ -2,6 +2,7 @@
<s:String x:Key="/Default/CodeInspection/CSharpLanguageProject/LanguageLevel/@EntryValue">CSharp50</s:String>
<s:Boolean x:Key="/Default/CodeInspection/ExcludedFiles/FileMasksToSkip/=_002A_002Ecpp/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/ExcludedFiles/FileMasksToSkip/=_002A_002Eh/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/Highlighting/CalculateUnusedTypeMembers/@EntryValue">False</s:Boolean>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ArrangeRedundantParentheses/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConvertIfStatementToConditionalTernaryExpression/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConvertIfStatementToNullCoalescingExpression/@EntryIndexedValue">DO_NOT_SHOW</s:String>

Просмотреть файл

@ -2,6 +2,7 @@
<s:String x:Key="/Default/CodeInspection/CSharpLanguageProject/LanguageLevel/@EntryValue">CSharp50</s:String>
<s:Boolean x:Key="/Default/CodeInspection/ExcludedFiles/FileMasksToSkip/=_002A_002Ecpp/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/ExcludedFiles/FileMasksToSkip/=_002A_002Eh/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/Highlighting/CalculateUnusedTypeMembers/@EntryValue">False</s:Boolean>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ArrangeRedundantParentheses/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConvertIfStatementToConditionalTernaryExpression/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConvertIfStatementToNullCoalescingExpression/@EntryIndexedValue">DO_NOT_SHOW</s:String>

Просмотреть файл

@ -83,6 +83,11 @@ namespace Microsoft.ClearScript
return target.TryInvoke(context, invokeFlags, args, bindArgs, out result);
}
public override Invocability GetInvocability(BindingFlags bindFlags, ScriptAccess defaultAccess, bool ignoreDynamic)
{
return target.GetInvocability(bindFlags, defaultAccess, ignoreDynamic);
}
#endregion
#region IByRefArg implementation

Просмотреть файл

@ -64,6 +64,9 @@
<ItemGroup>
<Compile Include="CanonicalRefTable.cs" />
<Compile Include="ContinuationCallback.cs" />
<Compile Include="DocumentFlags.cs" />
<Compile Include="DocumentInfo.cs" />
<Compile Include="Invocability.cs" />
<Compile Include="ImmutableValueAttribute.cs" />
<Compile Include="HostItemCollateral.cs" />
<Compile Include="HostItemFlags.cs" />

Просмотреть файл

@ -0,0 +1,25 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
using System;
namespace Microsoft.ClearScript
{
/// <summary>
/// Defines script document attributes.
/// </summary>
[Flags]
public enum DocumentFlags
{
/// <summary>
/// Indicates that no attributes are present.
/// </summary>
None = 0,
/// <summary>
/// Indicates that the script document is temporary and can be discarded after execution.
/// Only Windows Script engines honor this attribute.
/// </summary>
IsTransient = 0x00000001
}
}

Просмотреть файл

@ -0,0 +1,77 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
using System;
using System.IO;
using Microsoft.ClearScript.Util;
namespace Microsoft.ClearScript
{
/// <summary>
/// Contains information about a script document.
/// </summary>
public struct DocumentInfo
{
internal const string DefaultName = "Script Document";
private readonly string name;
private readonly Uri uri;
/// <summary>
/// Initializes a new <see cref="DocumentInfo"/> structure with the specified document name.
/// </summary>
/// <param name="name">The document name.</param>
public DocumentInfo(string name)
: this()
{
this.name = MiscHelpers.EnsureNonBlank(name, DefaultName);
}
/// <summary>
/// Initializes a new <see cref="DocumentInfo"/> structure with the specified document URI.
/// </summary>
/// <param name="uri">The document URI.</param>
public DocumentInfo(Uri uri)
: this()
{
MiscHelpers.VerifyNonNullArgument(uri, "uri");
this.uri = uri.IsAbsoluteUri ? uri : new Uri(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + uri);
name = Path.GetFileName(this.uri.AbsolutePath);
}
/// <summary>
/// Gets the document's name.
/// </summary>
/// <remarks>
/// This property always returns a non-blank string. If a null or blank document name was
/// specified at instantiation time, this property returns a default document name.
/// </remarks>
public string Name
{
get { return MiscHelpers.EnsureNonBlank(name, DefaultName); }
}
/// <summary>
/// Gets the document's URI.
/// </summary>
/// <remarks>
/// This property returns <c>null</c> if a URI was not specified at instantiation time.
/// </remarks>
public Uri Uri
{
get { return uri; }
}
/// <summary>
/// Gets or sets a source map URI for the document.
/// </summary>
public Uri SourceMapUri { get; set; }
/// <summary>
/// Gets or sets optional document attributes.
/// </summary>
public DocumentFlags? Flags { get; set; }
internal string UniqueName { get; set; }
}
}

Просмотреть файл

@ -5,5 +5,5 @@
#pragma once
#define CLEARSCRIPT_VERSION_STRING "5.5.2.0"
#define CLEARSCRIPT_VERSION_COMMA_SEPARATED 5,5,2,0
#define CLEARSCRIPT_VERSION_STRING "5.5.3.0"
#define CLEARSCRIPT_VERSION_COMMA_SEPARATED 5,5,3,0

Просмотреть файл

@ -223,12 +223,12 @@ namespace Microsoft.ClearScript
/// <item>
/// <term><c>out</c></term>
/// <term>read-only</term>
/// <description>A reference to the host variable that can be passed as an <c><see href="http://msdn.microsoft.com/en-us/library/t3c3bfhx(VS.80).aspx">out</see></c> argument.</description>
/// <description>A reference to the host variable that can be passed as an <c><see href="https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/out-parameter-modifier">out</see></c> argument.</description>
/// </item>
/// <item>
/// <term><c>ref</c></term>
/// <term>read-only</term>
/// <description>A reference to the host variable that can be passed as a <c><see href="http://msdn.microsoft.com/en-us/library/14akc2c7(VS.80).aspx">ref</see></c> argument.</description>
/// <description>A reference to the host variable that can be passed as a <c><see href="https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/ref">ref</see></c> argument.</description>
/// </item>
/// </list>
/// </para>
@ -305,7 +305,7 @@ namespace Microsoft.ClearScript
/// This function creates a delegate that accepts <paramref name="argCount"/> arguments and
/// returns no value. The type of all parameters is <see cref="System.Object"/>. Such a
/// delegate is often useful in strongly typed contexts because of
/// <see href="http://msdn.microsoft.com/en-us/library/ms173174(VS.80).aspx">contravariance</see>.
/// <see href="https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/covariance-contravariance/">contravariance</see>.
/// </remarks>
/// <example>
/// The following code demonstrates delegating a callback to a script function.
@ -344,7 +344,7 @@ namespace Microsoft.ClearScript
/// returns a value of the specified type. The type of all parameters is
/// <see cref="System.Object"/>. Such a delegate is often useful in strongly typed contexts
/// because of
/// <see href="http://msdn.microsoft.com/en-us/library/ms173174(VS.80).aspx">contravariance</see>.
/// <see href="https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/covariance-contravariance/">contravariance</see>.
/// </remarks>
/// <example>
/// The following code demonstrates delegating a callback to a script function.
@ -385,7 +385,7 @@ namespace Microsoft.ClearScript
/// returns the result of invoking <paramref name="scriptFunc"/>. The type of all
/// parameters and the return value is <see cref="System.Object"/>. Such a delegate is
/// often useful in strongly typed contexts because of
/// <see href="http://msdn.microsoft.com/en-us/library/ms173174(VS.80).aspx">contravariance</see>.
/// <see href="https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/covariance-contravariance/">contravariance</see>.
/// </para>
/// <para>
/// For information about the types of result values that script code can return, see
@ -407,7 +407,7 @@ namespace Microsoft.ClearScript
/// <remarks>
/// <para>
/// This function is similar to C#'s
/// <c><see href="http://msdn.microsoft.com/en-us/library/58918ffs(VS.71).aspx">typeof</see></c>
/// <c><see href="https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/typeof">typeof</see></c>
/// operator. It is overloaded with <see cref="typeOf(object)"/> and selected at runtime if
/// <typeparamref name="T"/> can be used as a type argument.
/// </para>
@ -442,7 +442,7 @@ namespace Microsoft.ClearScript
/// <remarks>
/// <para>
/// This function is similar to C#'s
/// <c><see href="http://msdn.microsoft.com/en-us/library/58918ffs(VS.71).aspx">typeof</see></c>
/// <c><see href="https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/typeof">typeof</see></c>
/// operator. It is overloaded with <see cref="typeOf{T}"/> and selected at runtime if
/// <paramref name="value"/> cannot be used as a type argument. Note that this applies to
/// some host types; examples are static types and overloaded generic type groups.
@ -477,7 +477,7 @@ namespace Microsoft.ClearScript
/// <returns><c>True</c> if <paramref name="value"/> is compatible with the specified type, <c>false</c> otherwise.</returns>
/// <remarks>
/// This function is similar to C#'s
/// <c><see href="http://msdn.microsoft.com/en-us/library/scekt9xw(VS.71).aspx">is</see></c>
/// <c><see href="https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/is">is</see></c>
/// operator.
/// </remarks>
/// <example>
@ -508,7 +508,7 @@ namespace Microsoft.ClearScript
/// <returns>The result of the cast if successful, <c>null</c> otherwise.</returns>
/// <remarks>
/// This function is similar to C#'s
/// <c><see href="http://msdn.microsoft.com/en-us/library/cscsdfbt(VS.71).aspx">as</see></c>
/// <c><see href="https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/as">as</see></c>
/// operator.
/// </remarks>
/// <example>

Просмотреть файл

@ -88,6 +88,11 @@ namespace Microsoft.ClearScript
return true;
}
public override Invocability GetInvocability(BindingFlags bindFlags, ScriptAccess defaultAccess, bool ignoreDynamic)
{
return Invocability.Delegate;
}
#endregion
}
}

Просмотреть файл

@ -130,6 +130,19 @@ namespace Microsoft.ClearScript
get { return flags; }
}
public Invocability Invocability
{
get
{
if (TargetInvocability == null)
{
TargetInvocability = target.GetInvocability(GetCommonBindFlags(), defaultAccess, flags.HasFlag(HostItemFlags.HideDynamicMembers));
}
return TargetInvocability.GetValueOrDefault();
}
}
public object InvokeMember(string name, BindingFlags invokeFlags, object[] args, object[] bindArgs, CultureInfo culture, bool bypassTunneling)
{
bool isCacheable;
@ -378,6 +391,12 @@ namespace Microsoft.ClearScript
set { targetMemberData.ExtensionMethodSummary = value; }
}
private Invocability? TargetInvocability
{
get { return targetMemberData.TargetInvocability; }
set { targetMemberData.TargetInvocability = value; }
}
#endregion
#region initialization
@ -525,6 +544,13 @@ namespace Microsoft.ClearScript
return;
}
if (target is ScriptMethod)
{
// script methods can share their (dummy) member data
targetMemberData = engine.SharedScriptMethodMemberData;
return;
}
var hostObject = target as HostObject;
if (hostObject != null)
{
@ -1014,14 +1040,24 @@ namespace Microsoft.ClearScript
{
if (invokeFlags.HasFlag(BindingFlags.InvokeMethod))
{
object value;
if (name == SpecialMemberNames.Default)
{
if (invokeFlags.HasFlag(BindingFlags.GetField) && (args.Length < 1))
if (invokeFlags.HasFlag(BindingFlags.GetField))
{
return TargetPropertyBag;
if (args.Length < 1)
{
return TargetPropertyBag;
}
if (args.Length == 1)
{
return TargetPropertyBag.TryGetValue(Convert.ToString(args[0]), out value) ? value : Nonexistent.Value;
}
}
throw new NotSupportedException("Object does not support invocation");
throw new NotSupportedException("Object does not support the requested invocation operation");
}
if (name == SpecialMemberNames.NewEnum)
@ -1029,7 +1065,6 @@ namespace Microsoft.ClearScript
return HostObject.Wrap(TargetPropertyBag.GetEnumerator(), typeof(IEnumerator));
}
object value;
if (!TargetPropertyBag.TryGetValue(name, out value))
{
throw new MissingMemberException(MiscHelpers.FormatInvariant("Object has no property named '{0}'", name));
@ -1041,9 +1076,22 @@ namespace Microsoft.ClearScript
return result;
}
if (invokeFlags.HasFlag(BindingFlags.GetField) && (args.Length < 1))
if (invokeFlags.HasFlag(BindingFlags.GetField))
{
return value;
if (args.Length < 1)
{
return value;
}
if (args.Length == 1)
{
if (value == null)
{
throw new InvalidOperationException("Cannot invoke a null property value");
}
return ((HostItem)Wrap(engine, value)).InvokeMember(SpecialMemberNames.Default, invokeFlags, args, bindArgs, null, true);
}
}
throw new NotSupportedException("Object does not support the requested invocation operation");
@ -1051,6 +1099,16 @@ namespace Microsoft.ClearScript
if (invokeFlags.HasFlag(BindingFlags.GetField))
{
if (name == SpecialMemberNames.Default)
{
if (args.Length == 1)
{
return TargetPropertyBag[Convert.ToString(args[0])];
}
throw new InvalidOperationException("Invalid argument count");
}
if (args.Length < 1)
{
object value;
@ -1062,11 +1120,37 @@ namespace Microsoft.ClearScript
if (invokeFlags.HasFlag(BindingFlags.SetField))
{
if (name == SpecialMemberNames.Default)
{
if (args.Length == 2)
{
return TargetPropertyBag[Convert.ToString(args[0])] = args[1];
}
throw new InvalidOperationException("Invalid argument count");
}
if (args.Length == 1)
{
return TargetPropertyBag[name] = args[0];
}
if (args.Length == 2)
{
object value;
if (TargetPropertyBag.TryGetValue(name, out value))
{
if (value == null)
{
throw new InvalidOperationException("Cannot invoke a null property value");
}
return ((HostItem)Wrap(engine, value)).InvokeMember(SpecialMemberNames.Default, invokeFlags, args, bindArgs, null, true);
}
throw new MissingMemberException(MiscHelpers.FormatInvariant("Object has no property named '{0}'", name));
}
throw new InvalidOperationException("Invalid argument count");
}
@ -1206,7 +1290,12 @@ namespace Microsoft.ClearScript
return target;
}
return result;
if (TargetDynamicMetaObject != null)
{
// dynamic target; don't throw for default indexed property retrieval failure
return result;
}
}
throw new NotSupportedException("Object does not support the requested invocation operation");

Просмотреть файл

@ -60,6 +60,11 @@ namespace Microsoft.ClearScript
return true;
}
public override Invocability GetInvocability(BindingFlags bindFlags, ScriptAccess defaultAccess, bool ignoreDynamic)
{
return Invocability.Delegate;
}
#endregion
}
}

Просмотреть файл

@ -126,6 +126,11 @@ namespace Microsoft.ClearScript
get { return HostTargetFlags.AllowInstanceMembers | HostTargetFlags.AllowExtensionMethods; }
}
public override Invocability GetInvocability(BindingFlags bindFlags, ScriptAccess defaultAccess, bool ignoreDynamic)
{
return type.GetInvocability(bindFlags, defaultAccess, ignoreDynamic);
}
#endregion
#region Nested type: NullWrapper<T>

Просмотреть файл

@ -40,5 +40,7 @@ namespace Microsoft.ClearScript
result = null;
return false;
}
public abstract Invocability GetInvocability(BindingFlags bindFlags, ScriptAccess defaultAccess, bool ignoreDynamic);
}
}

Просмотреть файл

@ -25,6 +25,7 @@ namespace Microsoft.ClearScript
public object EnumerationSettingsToken;
public ExtensionMethodSummary ExtensionMethodSummary;
public Invocability? TargetInvocability;
}
internal sealed class SharedHostObjectMemberData : HostTargetMemberData

Просмотреть файл

@ -233,6 +233,11 @@ namespace Microsoft.ClearScript
return true;
}
public override Invocability GetInvocability(BindingFlags bindFlags, ScriptAccess defaultAccess, bool ignoreDynamic)
{
return Invocability.Delegate;
}
#endregion
#region IScriptableObject implementation

Просмотреть файл

@ -160,6 +160,11 @@ namespace Microsoft.ClearScript
return false;
}
public override Invocability GetInvocability(BindingFlags bindFlags, ScriptAccess defaultAccess, bool ignoreDynamic)
{
return typeof(T).GetInvocability(bindFlags, defaultAccess, ignoreDynamic);
}
#endregion
#region IHostVariable implementation

Просмотреть файл

@ -0,0 +1,13 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
namespace Microsoft.ClearScript
{
internal enum Invocability
{
None,
Delegate,
Dynamic,
DefaultProperty
}
}

Просмотреть файл

@ -17,13 +17,13 @@ using System.Runtime.InteropServices;
[assembly: InternalsVisibleTo("ClearScriptTest")]
[assembly: ComVisible(false)]
[assembly: AssemblyVersion("5.5.2.0")]
[assembly: AssemblyFileVersion("5.5.2.0")]
[assembly: AssemblyVersion("5.5.3.0")]
[assembly: AssemblyFileVersion("5.5.3.0")]
namespace Microsoft.ClearScript.Properties
{
internal static class ClearScriptVersion
{
public const string Value = "5.5.2.0";
public const string Value = "5.5.3.0";
}
}

Просмотреть файл

@ -926,7 +926,22 @@ namespace Microsoft.ClearScript
/// </remarks>
public void Execute(string documentName, bool discard, string code)
{
Execute(documentName, code, false, discard);
Execute(new DocumentInfo(documentName) { Flags = discard ? DocumentFlags.IsTransient : DocumentFlags.None }, code);
}
/// <summary>
/// Executes script code with the specified document information.
/// </summary>
/// <param name="documentInfo">A structure containing information about the script document.</param>
/// <param name="code">The script code to execute.</param>
/// <remarks>
/// In some script languages the distinction between statements and expressions is
/// significant but ambiguous for certain syntactic elements. This method always
/// interprets the specified script code as a statement.
/// </remarks>
public void Execute(DocumentInfo documentInfo, string code)
{
Execute(documentInfo, code, false);
}
/// <summary>
@ -942,7 +957,7 @@ namespace Microsoft.ClearScript
/// </remarks>
public virtual string ExecuteCommand(string command)
{
return GetCommandResultString(Evaluate("Command", true, command, false));
return GetCommandResultString(Evaluate(new DocumentInfo("Command") { Flags = DocumentFlags.IsTransient }, command, false));
}
/// <summary>
@ -1097,7 +1112,29 @@ namespace Microsoft.ClearScript
/// </remarks>
public object Evaluate(string documentName, bool discard, string code)
{
return Evaluate(documentName, discard, code, true);
return Evaluate(new DocumentInfo(documentName) { Flags = discard ? DocumentFlags.IsTransient : DocumentFlags.None }, code);
}
/// <summary>
/// Evaluates script code with the specified document information.
/// </summary>
/// <param name="documentInfo">A structure containing information about the script document.</param>
/// <param name="code">The script code to evaluate.</param>
/// <returns>The result value.</returns>
/// <remarks>
/// <para>
/// In some script languages the distinction between statements and expressions is
/// significant but ambiguous for certain syntactic elements. This method always
/// interprets the specified script code as an expression.
/// </para>
/// <para>
/// For information about the types of result values that script code can return, see
/// <see cref="Evaluate(string, bool, string)"/>.
/// </para>
/// </remarks>
public object Evaluate(DocumentInfo documentInfo, string code)
{
return Evaluate(documentInfo, code, true);
}
/// <summary>
@ -1193,11 +1230,16 @@ namespace Microsoft.ClearScript
return args.Select(arg => MarshalToHost(arg, preserveHostTargets)).ToArray();
}
internal abstract object Execute(string documentName, string code, bool evaluate, bool discard);
internal abstract object Execute(DocumentInfo documentInfo, string code, bool evaluate);
internal object Evaluate(string documentName, bool discard, string code, bool marshalResult)
internal object Evaluate(DocumentInfo documentInfo, string code, bool marshalResult)
{
var result = Execute(documentName, code, true, discard);
if (!documentInfo.Flags.HasValue)
{
documentInfo.Flags = DocumentFlags.IsTransient;
}
var result = Execute(documentInfo, code, true);
if (marshalResult)
{
result = MarshalToHost(result, false);
@ -1577,6 +1619,7 @@ namespace Microsoft.ClearScript
internal readonly HostTargetMemberData SharedHostMethodMemberData = new HostTargetMemberData();
internal readonly HostTargetMemberData SharedHostIndexedPropertyMemberData = new HostTargetMemberData();
internal readonly HostTargetMemberData SharedScriptMethodMemberData = new HostTargetMemberData();
private readonly ConditionalWeakTable<Type, List<WeakReference>> sharedHostObjectMemberDataCache = new ConditionalWeakTable<Type, List<WeakReference>>();

Просмотреть файл

@ -246,7 +246,7 @@ namespace Microsoft.ClearScript
public MemberInfo[] GetMember(string name, BindingFlags bindFlags)
{
// ReSharper disable CoVariantArrayConversion
return GetFields(bindFlags).Where(propertyInfo => propertyInfo.Name == name).ToArray();
return new [] { MemberMap.GetField(name) };
// ReSharper restore CoVariantArrayConversion
}

Просмотреть файл

@ -66,6 +66,11 @@ namespace Microsoft.ClearScript
return true;
}
public override Invocability GetInvocability(BindingFlags bindFlags, ScriptAccess defaultAccess, bool ignoreDynamic)
{
return Invocability.Delegate;
}
#endregion
#region IReflect implementation

Просмотреть файл

@ -7,7 +7,7 @@ namespace Microsoft.ClearScript
/// </summary>
/// <remarks>
/// Use this class in conjunction with C#'s
/// <c><see href="http://msdn.microsoft.com/en-us/library/scekt9xw(VS.71).aspx">is</see></c>
/// <c><see href="https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/is">is</see></c>
/// operator to identify script objects.
/// </remarks>
/// <seealso cref="ScriptEngine.Evaluate(string, bool, string)"/>

Просмотреть файл

@ -68,7 +68,16 @@ namespace Microsoft.ClearScript.Util
public override FieldAttributes Attributes
{
get { throw new NotImplementedException(); }
get
{
// This occurs during VB-based dynamic script item invocation. It was not
// observed before script items gained an IReflect/IExpando implementation that
// exposes script item properties as fields. Apparently VB's dynamic invocation
// support not only recognizes IReflect/IExpando but actually favors it over
// DynamicObject.
return FieldAttributes.Public;
}
}
public override RuntimeFieldHandle FieldHandle

Просмотреть файл

@ -155,6 +155,28 @@ namespace Microsoft.ClearScript.Util
return string.Join("\n", lines) + '\n';
}
public static string GetUrlOrPath(Uri uri, string alternate)
{
Debug.Assert(alternate != null);
if (uri == null)
{
return alternate;
}
if (!uri.IsAbsoluteUri)
{
return uri.ToString();
}
if (uri.IsFile)
{
return uri.LocalPath;
}
return uri.AbsoluteUri;
}
#endregion
#region index helpers

Просмотреть файл

@ -87,6 +87,7 @@ namespace Microsoft.ClearScript.Util
public static readonly int E_NOINTERFACE = 0x80004002U.ToSigned();
public static readonly int E_ABORT = 0x80004004U.ToSigned();
public static readonly int E_FAIL = 0x80004005U.ToSigned();
public static readonly int E_INVALIDARG = 0x80070057U.ToSigned();
public static readonly int DISP_E_UNKNOWNNAME = 0x80020006U.ToSigned();

Просмотреть файл

@ -2,8 +2,10 @@
// Licensed under the MIT license.
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Dynamic;
using System.Globalization;
using System.Linq;
using System.Reflection;
@ -40,6 +42,8 @@ namespace Microsoft.ClearScript.Util
typeof(decimal?)
};
private static readonly ConcurrentDictionary<Tuple<Type, BindingFlags, ScriptAccess, bool>, Invocability> invocabilityMap = new ConcurrentDictionary<Tuple<Type, BindingFlags, ScriptAccess, bool>, Invocability>();
public static bool IsStatic(this Type type)
{
return type.IsAbstract && type.IsSealed;
@ -331,6 +335,12 @@ namespace Microsoft.ClearScript.Util
public static IEnumerable<PropertyInfo> GetScriptableDefaultProperties(this Type type, BindingFlags bindFlags, ScriptAccess defaultAccess)
{
if (type.IsArray)
{
var property = typeof(IList<>).MakeSpecificType(type.GetElementType()).GetProperty("Item");
return (property != null) ? new[] { property } : ArrayHelpers.GetEmptyArray<PropertyInfo>();
}
var properties = type.GetProperties(bindFlags).AsEnumerable();
if (type.IsInterface)
{
@ -363,6 +373,11 @@ namespace Microsoft.ClearScript.Util
return type.GetNestedTypes(bindFlags).Where(nestedType => nestedType.IsScriptable(defaultAccess));
}
public static Invocability GetInvocability(this Type type, BindingFlags bindFlags, ScriptAccess defaultAccess, bool ignoreDynamic)
{
return invocabilityMap.GetOrAdd(Tuple.Create(type, bindFlags, defaultAccess, ignoreDynamic), GetInvocabilityInternal);
}
public static object CreateInstance(this Type type, params object[] args)
{
return type.CreateInstance(BindingFlags.Public, args);
@ -537,6 +552,26 @@ namespace Microsoft.ClearScript.Util
return fullTypeName;
}
private static Invocability GetInvocabilityInternal(Tuple<Type, BindingFlags, ScriptAccess, bool> args)
{
if (typeof(Delegate).IsAssignableFrom(args.Item1))
{
return Invocability.Delegate;
}
if (!args.Item4 && typeof(IDynamicMetaObjectProvider).IsAssignableFrom(args.Item1))
{
return Invocability.Dynamic;
}
if (args.Item1.GetScriptableDefaultProperties(args.Item2, args.Item3).Any())
{
return Invocability.DefaultProperty;
}
return Invocability.None;
}
private static bool IsValidLocatorChar(char ch)
{
return char.IsLetterOrDigit(ch) || (ch == '_') || (ch == '.');

Просмотреть файл

@ -31,6 +31,7 @@
</PropertyGroup>
<PropertyGroup Condition="'$(VisualStudioVersion)'=='15.0'">
<PlatformToolset>v141</PlatformToolset>
<WindowsTargetPlatformVersion Condition="'$(WindowsTargetPlatformVersion)'==''">$([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0'))</WindowsTargetPlatformVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(VisualStudioVersion)'=='14.0'">
<PlatformToolset>v140</PlatformToolset>
@ -81,7 +82,7 @@
<Link>
<GenerateDebugInformation Condition="'$(VisualStudioVersion)'=='15.0'">DebugFull</GenerateDebugInformation>
<GenerateDebugInformation Condition="'$(VisualStudioVersion)'=='14.0'">true</GenerateDebugInformation>
<AdditionalDependencies>..\..\V8\lib\v8-ia32.lib</AdditionalDependencies>
<AdditionalDependencies>..\..\V8\lib\v8-ia32.dll.lib</AdditionalDependencies>
</Link>
<ResourceCompile>
<AdditionalIncludeDirectories>..\..\..\Exports</AdditionalIncludeDirectories>
@ -112,7 +113,7 @@
<Link>
<GenerateDebugInformation Condition="'$(VisualStudioVersion)'=='15.0'">DebugFull</GenerateDebugInformation>
<GenerateDebugInformation Condition="'$(VisualStudioVersion)'=='14.0'">true</GenerateDebugInformation>
<AdditionalDependencies>..\..\V8\lib\v8-ia32.lib</AdditionalDependencies>
<AdditionalDependencies>..\..\V8\lib\v8-ia32.dll.lib</AdditionalDependencies>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
@ -207,7 +208,7 @@
</CustomBuild>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\V8\lib\v8-ia32.pdb">
<CustomBuild Include="..\..\V8\lib\v8-ia32.dll.pdb">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)"</Command>
@ -239,6 +240,7 @@
<ClInclude Include="..\V8ContextImpl.h" />
<ClInclude Include="..\V8ContextProxyImpl.h" />
<ClInclude Include="..\V8DebugListenerImpl.h" />
<ClInclude Include="..\V8DocumentInfo.h" />
<ClInclude Include="..\V8Exception.h" />
<ClInclude Include="..\V8Isolate.h" />
<ClInclude Include="..\V8IsolateConstraints.h" />
@ -268,7 +270,7 @@
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)%(Filename)%(Extension)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)%(Filename)%(Extension)</Outputs>
</CustomBuild>
<CustomBuild Include="..\..\V8\lib\v8-base-ia32.pdb">
<CustomBuild Include="..\..\V8\lib\v8-base-ia32.dll.pdb">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)"</Command>
@ -278,6 +280,9 @@
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)%(Filename)%(Extension)</Outputs>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>

Просмотреть файл

@ -85,9 +85,9 @@
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\V8\lib\v8-ia32.dll" />
<CustomBuild Include="..\..\V8\lib\v8-ia32.pdb" />
<CustomBuild Include="..\..\V8\lib\v8-ia32.dll.pdb" />
<CustomBuild Include="..\..\V8\lib\v8-base-ia32.dll" />
<CustomBuild Include="..\..\V8\lib\v8-base-ia32.pdb" />
<CustomBuild Include="..\..\V8\lib\v8-base-ia32.dll.pdb" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\ClearScriptV8Managed.h">
@ -207,5 +207,8 @@
<ClInclude Include="..\V8CacheType.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\V8DocumentInfo.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

Просмотреть файл

@ -31,6 +31,7 @@
</PropertyGroup>
<PropertyGroup Condition="'$(VisualStudioVersion)'=='15.0'">
<PlatformToolset>v141</PlatformToolset>
<WindowsTargetPlatformVersion Condition="'$(WindowsTargetPlatformVersion)'==''">$([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0'))</WindowsTargetPlatformVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(VisualStudioVersion)'=='14.0'">
<PlatformToolset>v140</PlatformToolset>
@ -82,7 +83,7 @@
<Link>
<GenerateDebugInformation Condition="'$(VisualStudioVersion)'=='15.0'">DebugFull</GenerateDebugInformation>
<GenerateDebugInformation Condition="'$(VisualStudioVersion)'=='14.0'">true</GenerateDebugInformation>
<AdditionalDependencies>..\..\V8\lib\v8-x64.lib</AdditionalDependencies>
<AdditionalDependencies>..\..\V8\lib\v8-x64.dll.lib</AdditionalDependencies>
</Link>
<ResourceCompile>
<AdditionalIncludeDirectories>..\..\..\Exports</AdditionalIncludeDirectories>
@ -113,7 +114,7 @@
<Link>
<GenerateDebugInformation Condition="'$(VisualStudioVersion)'=='15.0'">DebugFull</GenerateDebugInformation>
<GenerateDebugInformation Condition="'$(VisualStudioVersion)'=='14.0'">true</GenerateDebugInformation>
<AdditionalDependencies>..\..\V8\lib\v8-x64.lib</AdditionalDependencies>
<AdditionalDependencies>..\..\V8\lib\v8-x64.dll.lib</AdditionalDependencies>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
@ -208,7 +209,7 @@
</CustomBuild>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\V8\lib\v8-x64.pdb">
<CustomBuild Include="..\..\V8\lib\v8-x64.dll.pdb">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)"</Command>
@ -240,6 +241,7 @@
<ClInclude Include="..\V8ContextImpl.h" />
<ClInclude Include="..\V8ContextProxyImpl.h" />
<ClInclude Include="..\V8DebugListenerImpl.h" />
<ClInclude Include="..\V8DocumentInfo.h" />
<ClInclude Include="..\V8Exception.h" />
<ClInclude Include="..\V8Isolate.h" />
<ClInclude Include="..\V8IsolateConstraints.h" />
@ -269,7 +271,7 @@
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)"</Command>
</CustomBuild>
<CustomBuild Include="..\..\V8\lib\v8-base-x64.pdb">
<CustomBuild Include="..\..\V8\lib\v8-base-x64.dll.pdb">
<FileType>Document</FileType>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)%(Filename)%(Extension)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)%(Filename)%(Extension)</Outputs>
@ -279,6 +281,9 @@
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)"</Command>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>

Просмотреть файл

@ -85,9 +85,9 @@
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\V8\lib\v8-x64.dll" />
<CustomBuild Include="..\..\V8\lib\v8-x64.pdb" />
<CustomBuild Include="..\..\V8\lib\v8-x64.dll.pdb" />
<CustomBuild Include="..\..\V8\lib\v8-base-x64.dll" />
<CustomBuild Include="..\..\V8\lib\v8-base-x64.pdb" />
<CustomBuild Include="..\..\V8\lib\v8-base-x64.dll.pdb" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\ClearScriptV8Managed.h">
@ -207,5 +207,8 @@
<ClInclude Include="..\V8CacheType.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\V8DocumentInfo.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

Просмотреть файл

@ -17,6 +17,7 @@
#include "V8Exception.h"
#include "V8IsolateConstraints.h"
#include "V8IsolateHeapInfo.h"
#include "V8DocumentInfo.h"
#include "V8CacheType.h"
#include "V8Isolate.h"
#include "V8Context.h"

Просмотреть файл

@ -19,6 +19,7 @@
#include "V8Exception.h"
#include "V8IsolateConstraints.h"
#include "V8IsolateHeapInfo.h"
#include "V8DocumentInfo.h"
#include "V8CacheType.h"
#include "V8Isolate.h"
#include "V8Context.h"

Просмотреть файл

@ -3,8 +3,6 @@
#include "ClearScriptV8Managed.h"
using namespace Microsoft::ClearScript::V8;
//-----------------------------------------------------------------------------
// local helper functions
//-----------------------------------------------------------------------------
@ -216,11 +214,21 @@ V8Value HostObjectHelpers::InvokeMethod(void* pvObject, const StdString& name, c
//-----------------------------------------------------------------------------
bool HostObjectHelpers::IsDelegate(void* pvObject)
HostObjectHelpers::V8Invocability HostObjectHelpers::GetInvocability(void* pvObject)
{
try
{
return V8ProxyHelpers::HostObjectIsDelegate(pvObject);
switch (V8ProxyHelpers::GetHostObjectInvocability(pvObject))
{
case Invocability::None:
return V8Invocability::None;
case Invocability::Delegate:
return V8Invocability::Delegate;
default:
return V8Invocability::Other;
}
}
catch (Exception^ gcException)
{

Просмотреть файл

@ -29,7 +29,9 @@ public:
static V8Value Invoke(void* pvObject, const std::vector<V8Value>& args, bool asConstructor);
static V8Value InvokeMethod(void* pvObject, const StdString& name, const std::vector<V8Value>& args);
static bool IsDelegate(void* pvObject);
enum class V8Invocability { None, Delegate, Other };
static V8Invocability GetInvocability(void* pvObject);
static V8Value GetEnumerator(void* pvObject);
static bool AdvanceEnumerator(void* pvEnumerator, V8Value& value);

Просмотреть файл

@ -29,8 +29,10 @@ using namespace System;
using namespace System::Globalization;
using namespace System::Runtime::InteropServices;
using namespace System::Threading;
using namespace Microsoft::ClearScript;
using namespace Microsoft::ClearScript::JavaScript;
using namespace Microsoft::ClearScript::Util;
using namespace Microsoft::ClearScript::V8;
//-----------------------------------------------------------------------------
// global macros

Просмотреть файл

@ -14,7 +14,7 @@ class StringToUniPtr
public:
explicit StringToUniPtr(String^ gcValue):
m_pValue(Microsoft::ClearScript::V8::V8ProxyHelpers::AllocString(gcValue))
m_pValue(V8ProxyHelpers::AllocString(gcValue))
{
}
@ -25,7 +25,7 @@ public:
~StringToUniPtr()
{
Microsoft::ClearScript::V8::V8ProxyHelpers::FreeString(m_pValue);
V8ProxyHelpers::FreeString(m_pValue);
}
private:

Просмотреть файл

@ -14,8 +14,8 @@ public:
struct Options
{
bool EnableDebugging = false;
bool EnableRemoteDebugging = false;
bool DisableGlobalMembers = true;
bool EnableRemoteDebugging = false;
bool DisableGlobalMembers = true;
bool EnableDateTimeConversion = false;
int DebugPort = 0;
};
@ -38,11 +38,11 @@ public:
virtual void SetGlobalProperty(const StdString& name, const V8Value& value, bool globalMembers) = 0;
virtual void AwaitDebuggerAndPause() = 0;
virtual V8Value Execute(const StdString& documentName, const StdString& code, bool evaluate, bool discard) = 0;
virtual V8Value Execute(const V8DocumentInfo& documentInfo, const StdString& code, bool evaluate) = 0;
virtual V8ScriptHolder* Compile(const StdString& documentName, const StdString& code) = 0;
virtual V8ScriptHolder* Compile(const StdString& documentName, const StdString& code, V8CacheType cacheType, std::vector<std::uint8_t>& cacheBytes) = 0;
virtual V8ScriptHolder* Compile(const StdString& documentName, const StdString& code, V8CacheType cacheType, const std::vector<std::uint8_t>& cacheBytes, bool& cacheAccepted) = 0;
virtual V8ScriptHolder* Compile(const V8DocumentInfo& documentInfo, const StdString& code) = 0;
virtual V8ScriptHolder* Compile(const V8DocumentInfo& documentInfo, const StdString& code, V8CacheType cacheType, std::vector<std::uint8_t>& cacheBytes) = 0;
virtual V8ScriptHolder* Compile(const V8DocumentInfo& documentInfo, const StdString& code, V8CacheType cacheType, const std::vector<std::uint8_t>& cacheBytes, bool& cacheAccepted) = 0;
virtual bool CanExecute(V8ScriptHolder* pHolder) = 0;
virtual V8Value Execute(V8ScriptHolder* pHolder, bool evaluate) = 0;

Просмотреть файл

@ -275,16 +275,24 @@ V8ContextImpl::V8ContextImpl(V8IsolateImpl* pIsolateImpl, const StdString& name,
m_hHostObjectTemplate->SetCallHandler(HostObjectConstructorCallHandler, hContextImpl);
m_hHostObjectTemplate->InstanceTemplate()->SetHandler(v8::NamedPropertyHandlerConfiguration(GetHostObjectProperty, SetHostObjectProperty, QueryHostObjectProperty, DeleteHostObjectProperty, GetHostObjectPropertyNames, hContextImpl, v8::PropertyHandlerFlags::kNone));
m_hHostObjectTemplate->InstanceTemplate()->SetHandler(v8::IndexedPropertyHandlerConfiguration(GetHostObjectProperty, SetHostObjectProperty, QueryHostObjectProperty, DeleteHostObjectProperty, GetHostObjectPropertyIndices, hContextImpl));
m_hHostObjectTemplate->InstanceTemplate()->SetCallAsFunctionHandler(InvokeHostObject, hContextImpl);
m_hHostObjectTemplate->PrototypeTemplate()->Set(GetIteratorSymbol(), hGetIteratorFunction);
m_hHostInvocableTemplate = CreatePersistent(CreateFunctionTemplate());
m_hHostInvocableTemplate->SetClassName(FROM_MAYBE(CreateString(StdString(L"HostInvocable"))));
m_hHostInvocableTemplate->SetCallHandler(HostObjectConstructorCallHandler, hContextImpl);
m_hHostInvocableTemplate->InstanceTemplate()->SetHandler(v8::NamedPropertyHandlerConfiguration(GetHostObjectProperty, SetHostObjectProperty, QueryHostObjectProperty, DeleteHostObjectProperty, GetHostObjectPropertyNames, hContextImpl, v8::PropertyHandlerFlags::kNone));
m_hHostInvocableTemplate->InstanceTemplate()->SetHandler(v8::IndexedPropertyHandlerConfiguration(GetHostObjectProperty, SetHostObjectProperty, QueryHostObjectProperty, DeleteHostObjectProperty, GetHostObjectPropertyIndices, hContextImpl));
m_hHostInvocableTemplate->PrototypeTemplate()->Set(GetIteratorSymbol(), hGetIteratorFunction);
m_hHostInvocableTemplate->InstanceTemplate()->SetCallAsFunctionHandler(InvokeHostObject, hContextImpl);
m_hHostDelegateTemplate = CreatePersistent(CreateFunctionTemplate());
m_hHostDelegateTemplate->SetClassName(FROM_MAYBE(CreateString(StdString(L"HostDelegate"))));
m_hHostDelegateTemplate->SetCallHandler(HostObjectConstructorCallHandler, hContextImpl);
m_hHostDelegateTemplate->InstanceTemplate()->SetHandler(v8::NamedPropertyHandlerConfiguration(GetHostObjectProperty, SetHostObjectProperty, QueryHostObjectProperty, DeleteHostObjectProperty, GetHostObjectPropertyNames, hContextImpl, v8::PropertyHandlerFlags::kNone));
m_hHostDelegateTemplate->InstanceTemplate()->SetHandler(v8::IndexedPropertyHandlerConfiguration(GetHostObjectProperty, SetHostObjectProperty, QueryHostObjectProperty, DeleteHostObjectProperty, GetHostObjectPropertyIndices, hContextImpl));
m_hHostDelegateTemplate->InstanceTemplate()->SetCallAsFunctionHandler(InvokeHostObject, hContextImpl);
m_hHostDelegateTemplate->PrototypeTemplate()->Set(GetIteratorSymbol(), hGetIteratorFunction);
m_hHostDelegateTemplate->InstanceTemplate()->SetCallAsFunctionHandler(InvokeHostObject, hContextImpl);
m_hHostDelegateTemplate->InstanceTemplate()->SetImmutableProto(); // instructs our patched V8 typeof implementation to return "function"
m_hHostDelegateTemplate->PrototypeTemplate()->Set(FROM_MAYBE(CreateString(StdString(L"toFunction"))), hToFunctionFunction);
m_hHostIteratorTemplate = CreatePersistent(CreateFunctionTemplate());
@ -431,13 +439,13 @@ void V8ContextImpl::AwaitDebuggerAndPause()
//-----------------------------------------------------------------------------
V8Value V8ContextImpl::Execute(const StdString& documentName, const StdString& code, bool evaluate, bool /*discard*/)
V8Value V8ContextImpl::Execute(const V8DocumentInfo& documentInfo, const StdString& code, bool evaluate)
{
BEGIN_CONTEXT_SCOPE
BEGIN_EXECUTION_SCOPE
FROM_MAYBE_TRY
v8::ScriptCompiler::Source source(FROM_MAYBE(CreateString(code)), v8::ScriptOrigin(FROM_MAYBE(CreateString(documentName))));
v8::ScriptCompiler::Source source(FROM_MAYBE(CreateString(code)), CreateScriptOrigin(documentInfo));
auto hScript = VERIFY_MAYBE(v8::ScriptCompiler::Compile(m_hContext, &source));
if (hScript.IsEmpty())
{
@ -463,13 +471,13 @@ V8Value V8ContextImpl::Execute(const StdString& documentName, const StdString& c
//-----------------------------------------------------------------------------
V8ScriptHolder* V8ContextImpl::Compile(const StdString& documentName, const StdString& code)
V8ScriptHolder* V8ContextImpl::Compile(const V8DocumentInfo& documentInfo, const StdString& code)
{
BEGIN_CONTEXT_SCOPE
BEGIN_EXECUTION_SCOPE
FROM_MAYBE_TRY
v8::ScriptCompiler::Source source(FROM_MAYBE(CreateString(code)), v8::ScriptOrigin(FROM_MAYBE(CreateString(documentName))));
v8::ScriptCompiler::Source source(FROM_MAYBE(CreateString(code)), CreateScriptOrigin(documentInfo));
auto hScript = VERIFY_MAYBE(CreateUnboundScript(&source));
if (hScript.IsEmpty())
{
@ -489,40 +497,44 @@ V8ScriptHolder* V8ContextImpl::Compile(const StdString& documentName, const StdS
//-----------------------------------------------------------------------------
V8ScriptHolder* V8ContextImpl::Compile(const StdString& documentName, const StdString& code, V8CacheType cacheType, std::vector<std::uint8_t>& cacheBytes)
V8ScriptHolder* V8ContextImpl::Compile(const V8DocumentInfo& documentInfo, const StdString& code, V8CacheType cacheType, std::vector<std::uint8_t>& cacheBytes)
{
if (cacheType == V8CacheType::None)
{
cacheBytes.clear();
return Compile(documentName, code);
return Compile(documentInfo, code);
}
BEGIN_CONTEXT_SCOPE
BEGIN_EXECUTION_SCOPE
FROM_MAYBE_TRY
v8::ScriptCompiler::Source source(FROM_MAYBE(CreateString(code)), v8::ScriptOrigin(FROM_MAYBE(CreateString(documentName))));
auto hScript = VERIFY_MAYBE(CreateUnboundScript(&source, (cacheType == V8CacheType::Parser) ? v8::ScriptCompiler::kProduceParserCache : v8::ScriptCompiler::kProduceCodeCache));
auto hCode = FROM_MAYBE(CreateString(code));
v8::ScriptCompiler::Source source(hCode, CreateScriptOrigin(documentInfo));
auto hScript = VERIFY_MAYBE(CreateUnboundScript(&source));
if (hScript.IsEmpty())
{
throw V8Exception(V8Exception::Type::General, m_Name, StdString(L"Script compilation failed; no additional information was provided by the V8 runtime"), false /*executionStarted*/);
}
cacheBytes.clear();
auto pCachedData = source.GetCachedData();
if (pCachedData != nullptr)
if (cacheType != V8CacheType::None)
{
if ((pCachedData->length > 0) && (pCachedData->data != nullptr))
auto pCachedData = v8::ScriptCompiler::CreateCodeCache(hScript);
if (pCachedData != nullptr)
{
cacheBytes.resize(pCachedData->length);
memcpy_s(&cacheBytes[0], cacheBytes.size(), pCachedData->data, pCachedData->length);
if ((pCachedData->length > 0) && (pCachedData->data != nullptr))
{
cacheBytes.resize(pCachedData->length);
memcpy_s(&cacheBytes[0], cacheBytes.size(), pCachedData->data, pCachedData->length);
}
// Delete cached data explicitly via a custom exported method. Doing so avoids Debug-
// Release heap mismatches.
pCachedData->Delete();
}
// Delete cached data explicitly via a custom exported method. Doing so avoids Debug-
// Release heap mismatches caused by V8's inlining of v8::ScriptCompiler::~Source.
source.DeleteCachedData();
}
return new V8ScriptHolderImpl(GetWeakBinding(), ::PtrFromHandle(CreatePersistent(hScript)));
@ -538,12 +550,12 @@ V8ScriptHolder* V8ContextImpl::Compile(const StdString& documentName, const StdS
//-----------------------------------------------------------------------------
V8ScriptHolder* V8ContextImpl::Compile(const StdString& documentName, const StdString& code, V8CacheType cacheType, const std::vector<std::uint8_t>& cacheBytes, bool& cacheAccepted)
V8ScriptHolder* V8ContextImpl::Compile(const V8DocumentInfo& documentInfo, const StdString& code, V8CacheType cacheType, const std::vector<std::uint8_t>& cacheBytes, bool& cacheAccepted)
{
if ((cacheType == V8CacheType::None) || (cacheBytes.size() < 1))
{
cacheAccepted = false;
return Compile(documentName, code);
return Compile(documentInfo, code);
}
BEGIN_CONTEXT_SCOPE
@ -551,8 +563,9 @@ V8ScriptHolder* V8ContextImpl::Compile(const StdString& documentName, const StdS
FROM_MAYBE_TRY
auto pCachedData = new v8::ScriptCompiler::CachedData(&cacheBytes[0], static_cast<int>(cacheBytes.size()), v8::ScriptCompiler::CachedData::BufferNotOwned);
v8::ScriptCompiler::Source source(FROM_MAYBE(CreateString(code)), v8::ScriptOrigin(FROM_MAYBE(CreateString(documentName))), pCachedData);
auto hScript = VERIFY_MAYBE(CreateUnboundScript(&source, (cacheType == V8CacheType::Parser) ? v8::ScriptCompiler::kConsumeParserCache : v8::ScriptCompiler::kConsumeCodeCache));
v8::ScriptCompiler::Source source(FROM_MAYBE(CreateString(code)), CreateScriptOrigin(documentInfo), pCachedData);
auto hScript = VERIFY_MAYBE(CreateUnboundScript(&source, v8::ScriptCompiler::kConsumeCodeCache));
if (hScript.IsEmpty())
{
throw V8Exception(V8Exception::Type::General, m_Name, StdString(L"Script compilation failed; no additional information was provided by the V8 runtime"), false /*executionStarted*/);
@ -703,7 +716,7 @@ void V8ContextImpl::GetV8ObjectPropertyNames(void* pvObject, std::vector<StdStri
{
BEGIN_CONTEXT_SCOPE
GetV8ObjectPropertyNames(::HandleFromPtr<v8::Object>(pvObject), names, v8::ALL_PROPERTIES);
GetV8ObjectPropertyNames(::HandleFromPtr<v8::Object>(pvObject), names, v8::ONLY_ENUMERABLE);
END_CONTEXT_SCOPE
}
@ -769,7 +782,7 @@ void V8ContextImpl::GetV8ObjectPropertyIndices(void* pvObject, std::vector<int>&
{
BEGIN_CONTEXT_SCOPE
GetV8ObjectPropertyIndices(::HandleFromPtr<v8::Object>(pvObject), indices, v8::ALL_PROPERTIES);
GetV8ObjectPropertyIndices(::HandleFromPtr<v8::Object>(pvObject), indices, v8::ONLY_ENUMERABLE);
END_CONTEXT_SCOPE
}
@ -989,6 +1002,7 @@ void V8ContextImpl::Teardown()
Dispose(m_hHostIteratorTemplate);
Dispose(m_hHostDelegateTemplate);
Dispose(m_hHostInvocableTemplate);
Dispose(m_hHostObjectTemplate);
Dispose(m_hTerminationException);
Dispose(m_hInternalUseOnly);
@ -2151,7 +2165,15 @@ v8::Local<v8::Value> V8ContextImpl::ImportValue(const V8Value& value)
}
v8::Local<v8::Object> hObject;
if (HostObjectHelpers::IsDelegate(pHolder->GetObject()))
auto invocability = HostObjectHelpers::GetInvocability(pHolder->GetObject());
if (invocability == HostObjectHelpers::V8Invocability::None)
{
BEGIN_PULSE_VALUE_SCOPE(&m_AllowHostObjectConstructorCall, true)
hObject = FROM_MAYBE(m_hHostObjectTemplate->InstanceTemplate()->NewInstance(m_hContext));
END_PULSE_VALUE_SCOPE
}
else if (invocability == HostObjectHelpers::V8Invocability::Delegate)
{
BEGIN_PULSE_VALUE_SCOPE(&m_AllowHostObjectConstructorCall, true)
hObject = FROM_MAYBE(m_hHostDelegateTemplate->InstanceTemplate()->NewInstance(m_hContext));
@ -2160,7 +2182,7 @@ v8::Local<v8::Value> V8ContextImpl::ImportValue(const V8Value& value)
else
{
BEGIN_PULSE_VALUE_SCOPE(&m_AllowHostObjectConstructorCall, true)
hObject = FROM_MAYBE(m_hHostObjectTemplate->InstanceTemplate()->NewInstance(m_hContext));
hObject = FROM_MAYBE(m_hHostInvocableTemplate->InstanceTemplate()->NewInstance(m_hContext));
END_PULSE_VALUE_SCOPE
}
@ -2306,6 +2328,28 @@ void V8ContextImpl::ImportValues(const std::vector<V8Value>& values, std::vector
//-----------------------------------------------------------------------------
v8::ScriptOrigin V8ContextImpl::CreateScriptOrigin(const V8DocumentInfo& documentInfo)
{
FROM_MAYBE_TRY
return v8::ScriptOrigin(
FROM_MAYBE(CreateString(documentInfo.ResourceName)),
v8::Local<v8::Integer>(),
v8::Local<v8::Integer>(),
v8::Local<v8::Boolean>(),
v8::Local<v8::Integer>(),
(documentInfo.SourceMapUrl.GetLength() > 0) ? FROM_MAYBE(CreateString(documentInfo.SourceMapUrl)) : v8::Local<v8::String>()
);
FROM_MAYBE_CATCH
throw;
FROM_MAYBE_END
}
//-----------------------------------------------------------------------------
void V8ContextImpl::Verify(const V8IsolateImpl::ExecutionScope& isolateExecutionScope, const v8::TryCatch& tryCatch)
{
if (tryCatch.HasCaught())

Просмотреть файл

@ -40,11 +40,11 @@ public:
virtual void SetGlobalProperty(const StdString& name, const V8Value& value, bool globalMembers) override;
virtual void AwaitDebuggerAndPause() override;
virtual V8Value Execute(const StdString& documentName, const StdString& code, bool evaluate, bool discard) override;
virtual V8Value Execute(const V8DocumentInfo& documentInfo, const StdString& code, bool evaluate) override;
virtual V8ScriptHolder* Compile(const StdString& documentName, const StdString& code) override;
virtual V8ScriptHolder* Compile(const StdString& documentName, const StdString& code, V8CacheType cacheType, std::vector<std::uint8_t>& cacheBytes) override;
virtual V8ScriptHolder* Compile(const StdString& documentName, const StdString& code, V8CacheType cacheType, const std::vector<std::uint8_t>& cacheBytes, bool& cacheAccepted) override;
virtual V8ScriptHolder* Compile(const V8DocumentInfo& documentInfo, const StdString& code) override;
virtual V8ScriptHolder* Compile(const V8DocumentInfo& documentInfo, const StdString& code, V8CacheType cacheType, std::vector<std::uint8_t>& cacheBytes) override;
virtual V8ScriptHolder* Compile(const V8DocumentInfo& documentInfo, const StdString& code, V8CacheType cacheType, const std::vector<std::uint8_t>& cacheBytes, bool& cacheAccepted) override;
virtual bool CanExecute(V8ScriptHolder* pHolder) override;
virtual V8Value Execute(V8ScriptHolder* pHolder, bool evaluate) override;
@ -269,6 +269,11 @@ private:
m_spIsolateImpl->LowMemoryNotification();
}
v8::Local<v8::String> GetTypeOf(v8::Local<v8::Value> hValue)
{
return m_spIsolateImpl->GetTypeOf(hValue);
}
template <typename T>
T Verify(const V8IsolateImpl::ExecutionScope& isolateExecutionScope, const v8::TryCatch& tryCatch, T result)
{
@ -328,6 +333,7 @@ private:
V8Value ExportValue(v8::Local<v8::Value> hValue);
void ImportValues(const std::vector<V8Value>& values, std::vector<v8::Local<v8::Value>>& importedValues);
v8::ScriptOrigin CreateScriptOrigin(const V8DocumentInfo& documentInfo);
void Verify(const V8IsolateImpl::ExecutionScope& isolateExecutionScope, const v8::TryCatch& tryCatch);
void VerifyNotOutOfMemory();
void ThrowScriptException(const HostException& exception);
@ -348,6 +354,7 @@ private:
Persistent<v8::Object> m_hAccessToken;
Persistent<v8::String> m_hInternalUseOnly;
Persistent<v8::FunctionTemplate> m_hHostObjectTemplate;
Persistent<v8::FunctionTemplate> m_hHostInvocableTemplate;
Persistent<v8::FunctionTemplate> m_hHostDelegateTemplate;
Persistent<v8::FunctionTemplate> m_hHostIteratorTemplate;
Persistent<v8::Value> m_hTerminationException;

Просмотреть файл

@ -141,11 +141,11 @@ namespace V8 {
//-------------------------------------------------------------------------
Object^ V8ContextProxyImpl::Execute(String^ gcDocumentName, String^ gcCode, Boolean evaluate, Boolean discard)
Object^ V8ContextProxyImpl::Execute(DocumentInfo documentInfo, String^ gcCode, Boolean evaluate)
{
try
{
return ExportValue(GetContext()->Execute(StdString(gcDocumentName), StdString(gcCode), evaluate, discard));
return ExportValue(GetContext()->Execute(V8DocumentInfo(documentInfo), StdString(gcCode), evaluate));
}
catch (const V8Exception& exception)
{
@ -155,11 +155,11 @@ namespace V8 {
//-------------------------------------------------------------------------
V8Script^ V8ContextProxyImpl::Compile(String^ gcDocumentName, String^ gcCode)
V8Script^ V8ContextProxyImpl::Compile(DocumentInfo documentInfo, String^ gcCode)
{
try
{
return gcnew V8ScriptImpl(gcDocumentName, GetContext()->Compile(StdString(gcDocumentName), StdString(gcCode)));
return gcnew V8ScriptImpl(documentInfo, GetContext()->Compile(V8DocumentInfo(documentInfo), StdString(gcCode)));
}
catch (const V8Exception& exception)
{
@ -169,19 +169,22 @@ namespace V8 {
//-------------------------------------------------------------------------
V8Script^ V8ContextProxyImpl::Compile(String^ gcDocumentName, String^ gcCode, V8CacheKind cacheKind, [Out] array<Byte>^% gcCacheBytes)
V8Script^ V8ContextProxyImpl::Compile(DocumentInfo documentInfo, String^ gcCode, V8CacheKind cacheKind, [Out] array<Byte>^% gcCacheBytes)
{
#pragma warning(push)
#pragma warning(disable:4947) /* 'Microsoft::ClearScript::V8::V8CacheKind::Parser': marked as obsolete */
if (cacheKind == V8CacheKind::None)
{
gcCacheBytes = nullptr;
return Compile(gcDocumentName, gcCode);
return Compile(documentInfo, gcCode);
}
try
{
std::vector<std::uint8_t> cacheBytes;
auto cacheType = (cacheKind == V8CacheKind::Parser) ? V8CacheType::Parser : V8CacheType::Code;
auto gcScript = gcnew V8ScriptImpl(gcDocumentName, GetContext()->Compile(StdString(gcDocumentName), StdString(gcCode), cacheType, cacheBytes));
auto gcScript = gcnew V8ScriptImpl(documentInfo, GetContext()->Compile(V8DocumentInfo(documentInfo), StdString(gcCode), cacheType, cacheBytes));
auto length = static_cast<int>(cacheBytes.size());
if (length < 1)
@ -200,16 +203,21 @@ namespace V8 {
{
exception.ThrowScriptEngineException();
}
#pragma warning(pop)
}
//-------------------------------------------------------------------------
V8Script^ V8ContextProxyImpl::Compile(String^ gcDocumentName, String^ gcCode, V8CacheKind cacheKind, array<Byte>^ gcCacheBytes, [Out] Boolean% cacheAccepted)
V8Script^ V8ContextProxyImpl::Compile(DocumentInfo documentInfo, String^ gcCode, V8CacheKind cacheKind, array<Byte>^ gcCacheBytes, [Out] Boolean% cacheAccepted)
{
#pragma warning(push)
#pragma warning(disable:4947) /* 'Microsoft::ClearScript::V8::V8CacheKind::Parser': marked as obsolete */
if ((cacheKind == V8CacheKind::None) || (gcCacheBytes == nullptr) || (gcCacheBytes->Length < 1))
{
cacheAccepted = false;
return Compile(gcDocumentName, gcCode);
return Compile(documentInfo, gcCode);
}
try
@ -220,7 +228,7 @@ namespace V8 {
bool tempCacheAccepted;
auto cacheType = (cacheKind == V8CacheKind::Parser) ? V8CacheType::Parser : V8CacheType::Code;
auto gcScript = gcnew V8ScriptImpl(gcDocumentName, GetContext()->Compile(StdString(gcDocumentName), StdString(gcCode), cacheType, cacheBytes, tempCacheAccepted));
auto gcScript = gcnew V8ScriptImpl(documentInfo, GetContext()->Compile(V8DocumentInfo(documentInfo), StdString(gcCode), cacheType, cacheBytes, tempCacheAccepted));
cacheAccepted = tempCacheAccepted;
return gcScript;
@ -229,6 +237,8 @@ namespace V8 {
{
exception.ThrowScriptEngineException();
}
#pragma warning(pop)
}
//-------------------------------------------------------------------------

Просмотреть файл

@ -39,10 +39,10 @@ namespace V8 {
virtual Object^ GetRootItem() override;
virtual void AddGlobalItem(String^ gcName, Object^ gcItem, Boolean globalMembers) override;
virtual void AwaitDebuggerAndPause() override;
virtual Object^ Execute(String^ gcDocumentName, String^ gcCode, Boolean evaluate, Boolean discard) override;
virtual V8Script^ Compile(String^ gcDocumentName, String^ gcCode) override;
virtual V8Script^ Compile(String^ gcDocumentName, String^ gcCode, V8CacheKind cacheKind, [Out] array<Byte>^% gcCacheBytes) override;
virtual V8Script^ Compile(String^ gcDocumentName, String^ gcCode, V8CacheKind cacheKind, array<Byte>^ gcCacheBytes, [Out] Boolean% cacheAccepted) override;
virtual Object^ Execute(DocumentInfo documentInfo, String^ gcCode, Boolean evaluate) override;
virtual V8Script^ Compile(DocumentInfo documentInfo, String^ gcCode) override;
virtual V8Script^ Compile(DocumentInfo documentInfo, String^ gcCode, V8CacheKind cacheKind, [Out] array<Byte>^% gcCacheBytes) override;
virtual V8Script^ Compile(DocumentInfo documentInfo, String^ gcCode, V8CacheKind cacheKind, array<Byte>^ gcCacheBytes, [Out] Boolean% cacheAccepted) override;
virtual Object^ Execute(V8Script^ gcScript, Boolean evaluate) override;
virtual void Interrupt() override;
virtual V8RuntimeHeapInfo^ GetRuntimeHeapInfo() override;

Просмотреть файл

@ -0,0 +1,21 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#pragma once
struct V8DocumentInfo
{
StdString ResourceName;
StdString SourceMapUrl;
#ifdef _M_CEE
explicit V8DocumentInfo(DocumentInfo documentInfo):
ResourceName(MiscHelpers::GetUrlOrPath(documentInfo.Uri, documentInfo.UniqueName)),
SourceMapUrl(MiscHelpers::GetUrlOrPath(documentInfo.SourceMapUri, String::Empty))
{
}
#endif // _M_CEE
};

Просмотреть файл

@ -3,9 +3,6 @@
#include "ClearScriptV8Managed.h"
using namespace Microsoft::ClearScript;
using namespace Microsoft::ClearScript::V8;
//-----------------------------------------------------------------------------
// V8Exception implementation
//-----------------------------------------------------------------------------

Просмотреть файл

@ -30,9 +30,9 @@ public:
virtual void SetMaxStackUsage(size_t value) = 0;
virtual void AwaitDebuggerAndPause() = 0;
virtual V8ScriptHolder* Compile(const StdString& documentName, const StdString& code) = 0;
virtual V8ScriptHolder* Compile(const StdString& documentName, const StdString& code, V8CacheType cacheType, std::vector<std::uint8_t>& cacheBytes) = 0;
virtual V8ScriptHolder* Compile(const StdString& documentName, const StdString& code, V8CacheType cacheType, const std::vector<std::uint8_t>& cacheBytes, bool& cacheAccepted) = 0;
virtual V8ScriptHolder* Compile(const V8DocumentInfo& documentInfo, const StdString& code) = 0;
virtual V8ScriptHolder* Compile(const V8DocumentInfo& documentInfo, const StdString& code, V8CacheType cacheType, std::vector<std::uint8_t>& cacheBytes) = 0;
virtual V8ScriptHolder* Compile(const V8DocumentInfo& documentInfo, const StdString& code, V8CacheType cacheType, const std::vector<std::uint8_t>& cacheBytes, bool& cacheAccepted) = 0;
virtual void GetHeapInfo(V8IsolateHeapInfo& heapInfo) = 0;
virtual void CollectGarbage(bool exhaustive) = 0;

Просмотреть файл

@ -3,23 +3,6 @@
#include "ClearScriptV8Native.h"
//-----------------------------------------------------------------------------
// SharedPtrTraits<v8::Task>
//-----------------------------------------------------------------------------
template<>
class SharedPtrTraits<v8::Task>
{
PROHIBIT_CONSTRUCT(SharedPtrTraits)
public:
static void Destroy(v8::Task* pTarget)
{
pTarget->Delete();
}
};
//-----------------------------------------------------------------------------
// V8Platform
//-----------------------------------------------------------------------------
@ -31,12 +14,12 @@ public:
static V8Platform& GetInstance();
static void EnsureInstalled();
virtual size_t NumberOfAvailableBackgroundThreads() override;
virtual void CallOnBackgroundThread(v8::Task* pTask, ExpectedRuntime runtime) override;
virtual int NumberOfWorkerThreads() override;
virtual std::shared_ptr<v8::TaskRunner> GetForegroundTaskRunner(v8::Isolate* pIsolate) override;
virtual void CallOnWorkerThread(std::unique_ptr<v8::Task> spTask) override;
virtual void CallDelayedOnWorkerThread(std::unique_ptr<v8::Task> spTask, double delayInSeconds) override;
virtual void CallOnForegroundThread(v8::Isolate* pIsolate, v8::Task* pTask) override;
virtual void CallDelayedOnForegroundThread(v8::Isolate* pIsolate, v8::Task* pTask, double delayInSeconds) override;
virtual void CallIdleOnForegroundThread(v8::Isolate* pIsolate, v8::IdleTask* pTask) override;
virtual bool IdleTasksEnabled(v8::Isolate* pIsolate) override;
virtual double MonotonicallyIncreasingTime() override;
virtual double CurrentClockTimeMillis() override;
virtual v8::TracingController* GetTracingController() override;
@ -70,24 +53,41 @@ void V8Platform::EnsureInstalled()
//-----------------------------------------------------------------------------
size_t V8Platform::NumberOfAvailableBackgroundThreads()
int V8Platform::NumberOfWorkerThreads()
{
return HighResolutionClock::GetHardwareConcurrency();
return static_cast<int>(HighResolutionClock::GetHardwareConcurrency());
}
//-----------------------------------------------------------------------------
void V8Platform::CallOnBackgroundThread(v8::Task* pTask, ExpectedRuntime /*runtime*/)
std::shared_ptr<v8::TaskRunner> V8Platform::GetForegroundTaskRunner(v8::Isolate* pIsolate)
{
return static_cast<V8IsolateImpl*>(pIsolate->GetData(0))->GetForegroundTaskRunner();
}
//-----------------------------------------------------------------------------
void V8Platform::CallOnWorkerThread(std::unique_ptr<v8::Task> spTask)
{
auto pIsolate = v8::Isolate::GetCurrent();
if (pIsolate == nullptr)
{
pTask->Run();
pTask->Delete();
spTask->Run();
}
else
{
static_cast<V8IsolateImpl*>(pIsolate->GetData(0))->RunTaskAsync(pTask);
static_cast<V8IsolateImpl*>(pIsolate->GetData(0))->RunTaskAsync(spTask.release());
}
}
//-----------------------------------------------------------------------------
void V8Platform::CallDelayedOnWorkerThread(std::unique_ptr<v8::Task> spTask, double delayInSeconds)
{
auto pIsolate = v8::Isolate::GetCurrent();
if (pIsolate != nullptr)
{
static_cast<V8IsolateImpl*>(pIsolate->GetData(0))->RunTaskDelayed(spTask.release(), delayInSeconds);
}
}
@ -107,21 +107,6 @@ void V8Platform::CallDelayedOnForegroundThread(v8::Isolate* pIsolate, v8::Task*
//-----------------------------------------------------------------------------
void V8Platform::CallIdleOnForegroundThread(v8::Isolate* /*pIsolate*/, v8::IdleTask* /*pTask*/)
{
// unexpected call to unsupported method
std::terminate();
}
//-----------------------------------------------------------------------------
bool V8Platform::IdleTasksEnabled(v8::Isolate* /*pIsolate*/)
{
return false;
}
//-----------------------------------------------------------------------------
double V8Platform::MonotonicallyIncreasingTime()
{
return HighResolutionClock::GetRelativeSeconds();
@ -152,6 +137,78 @@ V8Platform::V8Platform()
V8Platform V8Platform::ms_Instance;
OnceFlag V8Platform::ms_InstallationFlag;
//-----------------------------------------------------------------------------
// V8ForegroundTaskRunner
//-----------------------------------------------------------------------------
class V8ForegroundTaskRunner: public v8::TaskRunner
{
PROHIBIT_COPY(V8ForegroundTaskRunner)
public:
V8ForegroundTaskRunner(V8IsolateImpl* pIsolateImpl);
virtual void PostTask(std::unique_ptr<v8::Task> spTask) override;
virtual void PostDelayedTask(std::unique_ptr<v8::Task> spTask, double delayInSeconds) override;
virtual void PostIdleTask(std::unique_ptr<v8::IdleTask> spTask) override;
virtual bool IdleTasksEnabled() override;
private:
V8IsolateImpl* m_pIsolateImpl;
WeakRef<V8Isolate> m_wrIsolate;
};
//-----------------------------------------------------------------------------
V8ForegroundTaskRunner::V8ForegroundTaskRunner(V8IsolateImpl* pIsolateImpl):
m_pIsolateImpl(pIsolateImpl),
m_wrIsolate(pIsolateImpl->CreateWeakRef())
{
}
//-----------------------------------------------------------------------------
void V8ForegroundTaskRunner::PostTask(std::unique_ptr<v8::Task> spTask)
{
auto spIsolate = m_wrIsolate.GetTarget();
if (spIsolate.IsEmpty())
{
spTask->Run();
}
else
{
m_pIsolateImpl->RunTaskWithLockAsync(spTask.release());
}
}
//-----------------------------------------------------------------------------
void V8ForegroundTaskRunner::PostDelayedTask(std::unique_ptr<v8::Task> spTask, double delayInSeconds)
{
auto spIsolate = m_wrIsolate.GetTarget();
if (!spIsolate.IsEmpty())
{
m_pIsolateImpl->RunTaskWithLockDelayed(spTask.release(), delayInSeconds);
}
}
//-----------------------------------------------------------------------------
void V8ForegroundTaskRunner::PostIdleTask(std::unique_ptr<v8::IdleTask> spTask)
{
// unexpected call to unsupported method
std::terminate();
}
//-----------------------------------------------------------------------------
bool V8ForegroundTaskRunner::IdleTasksEnabled()
{
return false;
}
//-----------------------------------------------------------------------------
// V8ArrayBufferAllocator
//-----------------------------------------------------------------------------
@ -465,36 +522,36 @@ void V8IsolateImpl::AwaitDebuggerAndPause()
//-----------------------------------------------------------------------------
V8ScriptHolder* V8IsolateImpl::Compile(const StdString& documentName, const StdString& code)
V8ScriptHolder* V8IsolateImpl::Compile(const V8DocumentInfo& documentInfo, const StdString& code)
{
BEGIN_ISOLATE_SCOPE
SharedPtr<V8ContextImpl> spContextImpl((m_ContextPtrs.size() > 0) ? m_ContextPtrs.front() : new V8ContextImpl(this));
return spContextImpl->Compile(documentName, code);
return spContextImpl->Compile(documentInfo, code);
END_ISOLATE_SCOPE
}
//-----------------------------------------------------------------------------
V8ScriptHolder* V8IsolateImpl::Compile(const StdString& documentName, const StdString& code, V8CacheType cacheType, std::vector<std::uint8_t>& cacheBytes)
V8ScriptHolder* V8IsolateImpl::Compile(const V8DocumentInfo& documentInfo, const StdString& code, V8CacheType cacheType, std::vector<std::uint8_t>& cacheBytes)
{
BEGIN_ISOLATE_SCOPE
SharedPtr<V8ContextImpl> spContextImpl((m_ContextPtrs.size() > 0) ? m_ContextPtrs.front() : new V8ContextImpl(this));
return spContextImpl->Compile(documentName, code, cacheType, cacheBytes);
return spContextImpl->Compile(documentInfo, code, cacheType, cacheBytes);
END_ISOLATE_SCOPE
}
//-----------------------------------------------------------------------------
V8ScriptHolder* V8IsolateImpl::Compile(const StdString& documentName, const StdString& code, V8CacheType cacheType, const std::vector<std::uint8_t>& cacheBytes, bool& cacheAccepted)
V8ScriptHolder* V8IsolateImpl::Compile(const V8DocumentInfo& documentInfo, const StdString& code, V8CacheType cacheType, const std::vector<std::uint8_t>& cacheBytes, bool& cacheAccepted)
{
BEGIN_ISOLATE_SCOPE
SharedPtr<V8ContextImpl> spContextImpl((m_ContextPtrs.size() > 0) ? m_ContextPtrs.front() : new V8ContextImpl(this));
return spContextImpl->Compile(documentName, code, cacheType, cacheBytes, cacheAccepted);
return spContextImpl->Compile(documentInfo, code, cacheType, cacheBytes, cacheAccepted);
END_ISOLATE_SCOPE
}
@ -657,11 +714,11 @@ void V8IsolateImpl::RunTaskAsync(v8::Task* pTask)
if (m_Released)
{
pTask->Run();
pTask->Delete();
delete pTask;
}
else
{
std::shared_ptr<v8::Task> spTask(pTask, [] (v8::Task* pTask) { pTask->Delete(); });
std::shared_ptr<v8::Task> spTask(pTask);
std::weak_ptr<v8::Task> wpTask(spTask);
BEGIN_MUTEX_SCOPE(m_DataMutex)
@ -680,7 +737,8 @@ void V8IsolateImpl::RunTaskAsync(v8::Task* pTask)
spTask->Run();
BEGIN_MUTEX_SCOPE(m_DataMutex)
m_AsyncTasks.erase(std::remove(m_AsyncTasks.begin(), m_AsyncTasks.end(), spTask), m_AsyncTasks.end());
auto it = std::remove(m_AsyncTasks.begin(), m_AsyncTasks.end(), spTask);
m_AsyncTasks.erase(it, m_AsyncTasks.end());
END_MUTEX_SCOPE
}
}
@ -690,34 +748,15 @@ void V8IsolateImpl::RunTaskAsync(v8::Task* pTask)
//-----------------------------------------------------------------------------
void V8IsolateImpl::RunTaskWithLockAsync(v8::Task* pTask)
void V8IsolateImpl::RunTaskDelayed(v8::Task* pTask, double delayInSeconds)
{
if (m_Released)
{
pTask->Run();
pTask->Delete();
delete pTask;
}
else
{
std::shared_ptr<v8::Task> spTask(pTask, [] (v8::Task* pTask) { pTask->Delete(); });
CallWithLockAsync([spTask] (V8IsolateImpl* /*pIsolateImpl*/)
{
spTask->Run();
});
}
}
//-----------------------------------------------------------------------------
void V8IsolateImpl::RunTaskWithLockDelayed(v8::Task* pTask, double delayInSeconds)
{
if (m_Released)
{
pTask->Delete();
}
else
{
std::shared_ptr<v8::Task> spTask(pTask, [] (v8::Task* pTask) { pTask->Delete(); });
std::shared_ptr<v8::Task> spTask(pTask);
auto wrIsolate = CreateWeakRef();
SharedPtr<Timer> spTimer(new Timer(static_cast<int>(delayInSeconds * 1000), -1, [this, wrIsolate, spTask] (Timer* pTimer) mutable
@ -727,10 +766,7 @@ void V8IsolateImpl::RunTaskWithLockDelayed(v8::Task* pTask, double delayInSecond
auto spIsolate = wrIsolate.GetTarget();
if (!spIsolate.IsEmpty())
{
CallWithLockNoWait([spTask] (V8IsolateImpl* /*pIsolateImpl*/)
{
spTask->Run();
});
spTask->Run();
// Release the timer's strong task reference. Doing so avoids a deadlock when
// spIsolate's implicit destruction below triggers immediate isolate teardown.
@ -740,7 +776,8 @@ void V8IsolateImpl::RunTaskWithLockDelayed(v8::Task* pTask, double delayInSecond
// the timer has fired; discard it
BEGIN_MUTEX_SCOPE(m_DataMutex)
m_TaskTimers.erase(std::remove(m_TaskTimers.begin(), m_TaskTimers.end(), pTimer), m_TaskTimers.end());
auto it = std::remove(m_TaskTimers.begin(), m_TaskTimers.end(), pTimer);
m_TaskTimers.erase(it, m_TaskTimers.end());
END_MUTEX_SCOPE
}
else
@ -772,6 +809,105 @@ void V8IsolateImpl::RunTaskWithLockDelayed(v8::Task* pTask, double delayInSecond
//-----------------------------------------------------------------------------
void V8IsolateImpl::RunTaskWithLockAsync(v8::Task* pTask)
{
if (m_Released)
{
pTask->Run();
delete pTask;
}
else
{
std::shared_ptr<v8::Task> spTask(pTask);
CallWithLockAsync([spTask] (V8IsolateImpl* /*pIsolateImpl*/)
{
spTask->Run();
});
}
}
//-----------------------------------------------------------------------------
void V8IsolateImpl::RunTaskWithLockDelayed(v8::Task* pTask, double delayInSeconds)
{
if (m_Released)
{
delete pTask;
}
else
{
std::shared_ptr<v8::Task> spTask(pTask);
auto wrIsolate = CreateWeakRef();
SharedPtr<Timer> spTimer(new Timer(static_cast<int>(delayInSeconds * 1000), -1, [this, wrIsolate, spTask] (Timer* pTimer) mutable
{
if (spTask)
{
auto spIsolate = wrIsolate.GetTarget();
if (!spIsolate.IsEmpty())
{
CallWithLockNoWait([spTask] (V8IsolateImpl* /*pIsolateImpl*/)
{
spTask->Run();
});
// Release the timer's strong task reference. Doing so avoids a deadlock when
// spIsolate's implicit destruction below triggers immediate isolate teardown.
spTask.reset();
// the timer has fired; discard it
BEGIN_MUTEX_SCOPE(m_DataMutex)
auto it = std::remove(m_TaskTimers.begin(), m_TaskTimers.end(), pTimer);
m_TaskTimers.erase(it, m_TaskTimers.end());
END_MUTEX_SCOPE
}
else
{
// Release the timer's strong task reference. Doing so avoids a deadlock if the
// isolate is awaiting task completion on the managed finalization thread.
spTask.reset();
}
}
}));
// hold on to the timer to ensure callback execution
BEGIN_MUTEX_SCOPE(m_DataMutex)
m_TaskTimers.push_back(spTimer);
END_MUTEX_SCOPE
// Release the local task reference explicitly. Doing so avoids a deadlock if the callback is
// executed synchronously. That shouldn't happen given the current timer implementation.
spTask.reset();
// now it's safe to start the timer
spTimer->Start();
}
}
//-----------------------------------------------------------------------------
std::shared_ptr<v8::TaskRunner> V8IsolateImpl::GetForegroundTaskRunner()
{
BEGIN_MUTEX_SCOPE(m_DataMutex)
if (!m_spForegroundTaskRunner)
{
m_spForegroundTaskRunner = std::make_shared<V8ForegroundTaskRunner>(this);
}
return m_spForegroundTaskRunner;
END_MUTEX_SCOPE
}
//-----------------------------------------------------------------------------
void V8IsolateImpl::CallWithLockNoWait(std::function<void(V8IsolateImpl*)>&& callback)
{
if (m_Mutex.TryLock())

Просмотреть файл

@ -327,6 +327,11 @@ public:
return v8::Locker::IsLocked(m_pIsolate);
}
v8::Local<v8::String> GetTypeOf(v8::Local<v8::Value> hValue)
{
return !hValue.IsEmpty() ? hValue->TypeOf(m_pIsolate) : GetUndefined()->TypeOf(m_pIsolate);
}
bool IsOutOfMemory() const
{
return m_IsOutOfMemory;
@ -347,9 +352,9 @@ public:
virtual void SetMaxStackUsage(size_t value) override;
virtual void AwaitDebuggerAndPause() override;
virtual V8ScriptHolder* Compile(const StdString& documentName, const StdString& code) override;
virtual V8ScriptHolder* Compile(const StdString& documentName, const StdString& code, V8CacheType cacheType, std::vector<std::uint8_t>& cacheBytes) override;
virtual V8ScriptHolder* Compile(const StdString& documentName, const StdString& code, V8CacheType cacheType, const std::vector<std::uint8_t>& cacheBytes, bool& cacheAccepted) override;
virtual V8ScriptHolder* Compile(const V8DocumentInfo& documentInfo, const StdString& code) override;
virtual V8ScriptHolder* Compile(const V8DocumentInfo& documentInfo, const StdString& code, V8CacheType cacheType, std::vector<std::uint8_t>& cacheBytes) override;
virtual V8ScriptHolder* Compile(const V8DocumentInfo& documentInfo, const StdString& code, V8CacheType cacheType, const std::vector<std::uint8_t>& cacheBytes, bool& cacheAccepted) override;
virtual void GetHeapInfo(V8IsolateHeapInfo& heapInfo) override;
virtual void CollectGarbage(bool exhaustive) override;
@ -370,8 +375,10 @@ public:
void ReleaseV8Script(void* pvScript);
void RunTaskAsync(v8::Task* pTask);
void RunTaskDelayed(v8::Task* pTask, double delayInSeconds);
void RunTaskWithLockAsync(v8::Task* pTask);
void RunTaskWithLockDelayed(v8::Task* pTask, double delayInSeconds);
std::shared_ptr<v8::TaskRunner> GetForegroundTaskRunner();
void CallWithLockNoWait(std::function<void(V8IsolateImpl*)>&& callback);
void DECLSPEC_NORETURN ThrowOutOfMemoryException();
@ -407,6 +414,7 @@ private:
RecursiveMutex m_Mutex;
std::list<V8ContextImpl*> m_ContextPtrs;
SimpleMutex m_DataMutex;
std::shared_ptr<v8::TaskRunner> m_spForegroundTaskRunner;
std::vector<std::shared_ptr<v8::Task>> m_AsyncTasks;
std::queue<std::function<void(V8IsolateImpl*)>> m_CallWithLockQueue;
std::condition_variable m_CallWithLockQueueChanged;

Просмотреть файл

@ -96,11 +96,11 @@ namespace V8 {
//-------------------------------------------------------------------------
V8Script^ V8IsolateProxyImpl::Compile(String^ gcDocumentName, String^ gcCode)
V8Script^ V8IsolateProxyImpl::Compile(DocumentInfo documentInfo, String^ gcCode)
{
try
{
return gcnew V8ScriptImpl(gcDocumentName, GetIsolate()->Compile(StdString(gcDocumentName), StdString(gcCode)));
return gcnew V8ScriptImpl(documentInfo, GetIsolate()->Compile(V8DocumentInfo(documentInfo), StdString(gcCode)));
}
catch (const V8Exception& exception)
{
@ -110,19 +110,22 @@ namespace V8 {
//-------------------------------------------------------------------------
V8Script^ V8IsolateProxyImpl::Compile(String^ gcDocumentName, String^ gcCode, V8CacheKind cacheKind, [Out] array<Byte>^% gcCacheBytes)
V8Script^ V8IsolateProxyImpl::Compile(DocumentInfo documentInfo, String^ gcCode, V8CacheKind cacheKind, [Out] array<Byte>^% gcCacheBytes)
{
#pragma warning(push)
#pragma warning(disable:4947) /* 'Microsoft::ClearScript::V8::V8CacheKind::Parser': marked as obsolete */
if (cacheKind == V8CacheKind::None)
{
gcCacheBytes = nullptr;
return Compile(gcDocumentName, gcCode);
return Compile(documentInfo, gcCode);
}
try
{
std::vector<std::uint8_t> cacheBytes;
auto cacheType = (cacheKind == V8CacheKind::Parser) ? V8CacheType::Parser : V8CacheType::Code;
auto gcScript = gcnew V8ScriptImpl(gcDocumentName, GetIsolate()->Compile(StdString(gcDocumentName), StdString(gcCode), cacheType, cacheBytes));
auto gcScript = gcnew V8ScriptImpl(documentInfo, GetIsolate()->Compile(V8DocumentInfo(documentInfo), StdString(gcCode), cacheType, cacheBytes));
auto length = static_cast<int>(cacheBytes.size());
if (length < 1)
@ -141,16 +144,21 @@ namespace V8 {
{
exception.ThrowScriptEngineException();
}
#pragma warning(pop)
}
//-------------------------------------------------------------------------
V8Script^ V8IsolateProxyImpl::Compile(String^ gcDocumentName, String^ gcCode, V8CacheKind cacheKind, array<Byte>^ gcCacheBytes, [Out] Boolean% cacheAccepted)
V8Script^ V8IsolateProxyImpl::Compile(DocumentInfo documentInfo, String^ gcCode, V8CacheKind cacheKind, array<Byte>^ gcCacheBytes, [Out] Boolean% cacheAccepted)
{
#pragma warning(push)
#pragma warning(disable:4947) /* 'Microsoft::ClearScript::V8::V8CacheKind::Parser': marked as obsolete */
if ((cacheKind == V8CacheKind::None) || (gcCacheBytes == nullptr) || (gcCacheBytes->Length < 1))
{
cacheAccepted = false;
return Compile(gcDocumentName, gcCode);
return Compile(documentInfo, gcCode);
}
try
@ -161,7 +169,7 @@ namespace V8 {
bool tempCacheAccepted;
auto cacheType = (cacheKind == V8CacheKind::Parser) ? V8CacheType::Parser : V8CacheType::Code;
auto gcScript = gcnew V8ScriptImpl(gcDocumentName, GetIsolate()->Compile(StdString(gcDocumentName), StdString(gcCode), cacheType, cacheBytes, tempCacheAccepted));
auto gcScript = gcnew V8ScriptImpl(documentInfo, GetIsolate()->Compile(V8DocumentInfo(documentInfo), StdString(gcCode), cacheType, cacheBytes, tempCacheAccepted));
cacheAccepted = tempCacheAccepted;
return gcScript;
@ -170,6 +178,8 @@ namespace V8 {
{
exception.ThrowScriptEngineException();
}
#pragma warning(pop)
}
//-------------------------------------------------------------------------

Просмотреть файл

@ -36,9 +36,9 @@ namespace V8 {
}
virtual void AwaitDebuggerAndPause() override;
virtual V8Script^ Compile(String^ gcDocumentName, String^ gcCode) override;
virtual V8Script^ Compile(String^ gcDocumentName, String^ gcCode, V8CacheKind cacheKind, [Out] array<Byte>^% gcCacheBytes) override;
virtual V8Script^ Compile(String^ gcDocumentName, String^ gcCode, V8CacheKind cacheKind, array<Byte>^ gcCacheBytes, [Out] Boolean% cacheAccepted) override;
virtual V8Script^ Compile(DocumentInfo documentInfo, String^ gcCode) override;
virtual V8Script^ Compile(DocumentInfo documentInfo, String^ gcCode, V8CacheKind cacheKind, [Out] array<Byte>^% gcCacheBytes) override;
virtual V8Script^ Compile(DocumentInfo documentInfo, String^ gcCode, V8CacheKind cacheKind, array<Byte>^ gcCacheBytes, [Out] Boolean% cacheAccepted) override;
virtual V8RuntimeHeapInfo^ GetHeapInfo() override;
virtual void CollectGarbage(bool exhaustive) override;

Просмотреть файл

@ -11,8 +11,8 @@ namespace V8 {
// V8ScriptImpl implementation
//-------------------------------------------------------------------------
V8ScriptImpl::V8ScriptImpl(String^ gcDocumentName, V8ScriptHolder* pHolder):
V8Script(gcDocumentName),
V8ScriptImpl::V8ScriptImpl(ClearScript::DocumentInfo documentInfo, V8ScriptHolder* pHolder):
V8Script(documentInfo),
m_gcLock(gcnew Object),
m_pspHolder(new SharedPtr<V8ScriptHolder>(pHolder))
{

Просмотреть файл

@ -15,7 +15,7 @@ namespace V8 {
{
public:
V8ScriptImpl(String^ gcDocumentName, V8ScriptHolder* pHolder);
V8ScriptImpl(ClearScript::DocumentInfo documentInfo, V8ScriptHolder* pHolder);
SharedPtr<V8ScriptHolder> GetHolder();

Просмотреть файл

@ -1,81 +1,122 @@
diff --git a/gypfiles/standalone.gypi b/gypfiles/standalone.gypi
index ec47f1c0ab..90bebbc901 100644
--- a/gypfiles/standalone.gypi
+++ b/gypfiles/standalone.gypi
@@ -949,9 +949,10 @@
'EnableFunctionLevelLinking': 'true',
'RuntimeTypeInfo': 'false',
'WarningLevel': '3',
- 'WarnAsError': 'true',
+ 'WarnAsError': 'false',
'DebugInformationFormat': '3',
'Detect64BitPortabilityProblems': 'false',
+ 'AdditionalOptions': ['/bigobj'],
'conditions': [
[ 'msvs_multi_core_compile', {
'AdditionalOptions': ['/MP'],
diff --git a/include/v8-platform.h b/include/v8-platform.h
index 2bb14df93e..e30effff7a 100644
--- a/include/v8-platform.h
+++ b/include/v8-platform.h
@@ -22,6 +22,7 @@ class Task {
virtual ~Task() = default;
diff --git a/BUILD.gn b/BUILD.gn
index 456a318c1c..2e8918cfc6 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -152,6 +152,12 @@ declare_args() {
v8_enable_minor_mc = true
}
virtual void Run() = 0;
+ virtual void Delete();
};
+if (v8_current_cpu == "x86") {
+ clearscript_v8_platform = "ia32"
+} else {
+ clearscript_v8_platform = v8_current_cpu
+}
+
# Derived defaults.
if (v8_enable_verify_heap == "") {
v8_enable_verify_heap = v8_enable_debugging_features
@@ -2782,6 +2788,7 @@ v8_source_set("v8_base") {
}
/**
v8_component("v8_libbase") {
+ output_name = "v8-base-${clearscript_v8_platform}"
sources = [
"src/base/adapters.h",
"src/base/atomic-utils.h",
@@ -2957,6 +2964,7 @@ v8_component("v8_libbase") {
}
v8_component("v8_libplatform") {
+ output_name = "v8-platform-${clearscript_v8_platform}"
sources = [
"//base/trace_event/common/trace_event_common.h",
"include/libplatform/libplatform-export.h",
@@ -3220,6 +3228,7 @@ group("v8_fuzzers") {
if (is_component_build) {
v8_component("v8") {
+ output_name = "v8-${clearscript_v8_platform}"
sources = [
"src/v8dll-main.cc",
]
diff --git a/include/v8.h b/include/v8.h
index acb3efbc71..00817b1774 100644
index b68d9fbbfc..eee58ddada 100644
--- a/include/v8.h
+++ b/include/v8.h
@@ -1305,6 +1305,7 @@ class V8_EXPORT ScriptCompiler {
// caller. The CachedData object is alive as long as the Source object is
// alive.
V8_INLINE const CachedData* GetCachedData() const;
+ V8_EXPORT void DeleteCachedData();
V8_INLINE const ScriptOriginOptions& GetResourceOptions() const;
@@ -1393,6 +1393,7 @@ class V8_EXPORT ScriptCompiler {
// (with delete[]) when the CachedData object is destroyed.
CachedData(const uint8_t* data, int length,
BufferPolicy buffer_policy = BufferNotOwned);
+ void Delete();
~CachedData();
// TODO(marja): Async compilation; add constructors which take a callback
// which will be called when V8 no longer needs the data.
diff --git a/src/api-natives.cc b/src/api-natives.cc
index 1b6df15d7a..def0bceebf 100644
--- a/src/api-natives.cc
+++ b/src/api-natives.cc
@@ -729,6 +729,7 @@ Handle<JSFunction> ApiNatives::CreateApiFunction(
// Mark instance as callable in the map.
if (!obj->instance_call_handler()->IsUndefined(isolate)) {
map->set_is_callable(true);
+ map->set_is_constructor(true);
}
if (immutable_proto) map->set_is_immutable_proto(true);
diff --git a/src/api.cc b/src/api.cc
index 147cc397f2..370c67337d 100644
index 89bcb2e4fa..a294727cb8 100644
--- a/src/api.cc
+++ b/src/api.cc
@@ -2047,6 +2047,13 @@ void ObjectTemplate::SetImmutableProto() {
// --- S c r i p t s ---
@@ -2057,6 +2057,11 @@ ScriptCompiler::CachedData::CachedData(const uint8_t* data_, int length_,
buffer_policy(buffer_policy_) {}
+void ScriptCompiler::Source::DeleteCachedData()
+{
+ delete cached_data;
+ cached_data = nullptr;
+void ScriptCompiler::CachedData::Delete() {
+ delete this;
+}
+
+
// Internally, UnboundScript is a SharedFunctionInfo, and Script is a
// JSFunction.
ScriptCompiler::CachedData::~CachedData() {
if (buffer_policy == BufferOwned) {
delete[] data;
diff --git a/src/code-stub-assembler.cc b/src/code-stub-assembler.cc
index 9a51017899..d3a17b306d 100644
--- a/src/code-stub-assembler.cc
+++ b/src/code-stub-assembler.cc
@@ -10853,6 +10853,11 @@ Node* CodeStubAssembler::Typeof(Node* value) {
diff --git a/src/cancelable-task.cc b/src/cancelable-task.cc
index 7c9cc9cb93..8dfc2542a4 100644
--- a/src/cancelable-task.cc
+++ b/src/cancelable-task.cc
@@ -7,6 +7,10 @@
#include "src/base/platform/platform.h"
#include "src/isolate.h"
GotoIf(InstanceTypeEqual(instance_type, ODDBALL_TYPE), &if_oddball);
+ Label resume_default(this);
+ GotoIfNot(Word32And(LoadMapBitField(map), Int32Constant(Map::HasNamedInterceptorBit::kMask)), &resume_default);
+ Branch(Word32And(LoadMapBitField3(map), Int32Constant(Map::IsImmutablePrototypeBit::kMask)), &return_function, &return_object);
+ BIND(&resume_default);
+
+void v8::Task::Delete() { delete this; }
+
+
namespace v8 {
namespace internal {
Node* callable_or_undetectable_mask = Word32And(
LoadMapBitField(map),
Int32Constant(Map::IsCallableBit::kMask | Map::IsUndetectableBit::kMask));
diff --git a/src/objects.cc b/src/objects.cc
index 80442d5bd8..5167977de2 100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -709,6 +709,12 @@ Handle<String> Object::TypeOf(Isolate* isolate, Handle<Object> object) {
if (object->IsString()) return isolate->factory()->string_string();
if (object->IsSymbol()) return isolate->factory()->symbol_string();
if (object->IsBigInt()) return isolate->factory()->bigint_string();
+ if (object->IsJSObject()) {
+ Handle<JSObject> obj = Handle<JSObject>::cast(object);
+ if (obj->HasNamedInterceptor()) {
+ return obj->map()->is_immutable_proto() ? isolate->factory()->function_string() : isolate->factory()->object_string();
+ }
+ }
if (object->IsCallable()) return isolate->factory()->function_string();
return isolate->factory()->object_string();
}
diff --git a/src/v8.cc b/src/v8.cc
index a6d97e8ff1..1b715d3402 100644
index 8d34dba912..937c925ce9 100644
--- a/src/v8.cc
+++ b/src/v8.cc
@@ -93,7 +93,6 @@ void V8::InitializeOncePerProcess() {
@@ -90,7 +90,6 @@ void V8::InitializeOncePerProcess() {
void V8::InitializePlatform(v8::Platform* platform) {
@ -83,28 +124,8 @@ index a6d97e8ff1..1b715d3402 100644
CHECK(platform);
platform_ = platform;
v8::base::SetPrintStackTrace(platform_->GetStackTracePrinter());
diff --git a/src/v8.gyp b/src/v8.gyp
index 218b173af2..c6c58319c5 100644
--- a/src/v8.gyp
+++ b/src/v8.gyp
@@ -41,6 +41,7 @@
'targets': [
{
'target_name': 'v8',
+ 'product_name': 'v8-' + '<(v8_target_arch)',
'dependencies_traverse': 1,
'dependencies': ['v8_maybe_snapshot', 'v8_dump_build_config#target'],
'conditions': [
@@ -1870,6 +1871,7 @@
},
{
'target_name': 'v8_libbase',
+ 'product_name': 'v8-base-' + '<(v8_target_arch)',
'type': '<(component)',
'variables': {
'optimize': 'max',
diff --git a/src/v8dll-main.cc b/src/v8dll-main.cc
index 6250b3e341..268bcc76eb 100644
index 6250b3e341..be3854a352 100644
--- a/src/v8dll-main.cc
+++ b/src/v8dll-main.cc
@@ -10,6 +10,11 @@
@ -113,7 +134,7 @@ index 6250b3e341..268bcc76eb 100644
+#include "include/v8-inspector.h"
+PVOID forceExports[] = {
+ v8_inspector::V8Inspector::create
+ reinterpret_cast<PVOID>(v8_inspector::V8Inspector::create)
+};
+
extern "C" {

Просмотреть файл

@ -1,6 +1,8 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
using System;
namespace Microsoft.ClearScript.V8
{
/// <summary>
@ -19,6 +21,7 @@ namespace Microsoft.ClearScript.V8
/// Selects parser caching. Parser cache data is smaller and less expensive to generate
/// than code cache data, but it is less effective at accelerating recompilation.
/// </summary>
[Obsolete("V8 no longer supports parser caching. This option is now equivalent to Code.")]
Parser,
/// <summary>

Просмотреть файл

@ -26,13 +26,13 @@ namespace Microsoft.ClearScript.V8
public abstract void AwaitDebuggerAndPause();
public abstract object Execute(string documentName, string code, bool evaluate, bool discard);
public abstract object Execute(DocumentInfo documentInfo, string code, bool evaluate);
public abstract V8Script Compile(string documentName, string code);
public abstract V8Script Compile(DocumentInfo documentInfo, string code);
public abstract V8Script Compile(string documentName, string code, V8CacheKind cacheKind, out byte[] cacheBytes);
public abstract V8Script Compile(DocumentInfo documentInfo, string code, V8CacheKind cacheKind, out byte[] cacheBytes);
public abstract V8Script Compile(string documentName, string code, V8CacheKind cacheKind, byte[] cacheBytes, out bool cacheAccepted);
public abstract V8Script Compile(DocumentInfo documentInfo, string code, V8CacheKind cacheKind, byte[] cacheBytes, out bool cacheAccepted);
public abstract object Execute(V8Script script, bool evaluate);

Просмотреть файл

@ -20,11 +20,11 @@ namespace Microsoft.ClearScript.V8
public abstract void AwaitDebuggerAndPause();
public abstract V8Script Compile(string documentName, string code);
public abstract V8Script Compile(DocumentInfo documentInfo, string code);
public abstract V8Script Compile(string documentName, string code, V8CacheKind cacheKind, out byte[] cacheBytes);
public abstract V8Script Compile(DocumentInfo documentInfo, string code, V8CacheKind cacheKind, out byte[] cacheBytes);
public abstract V8Script Compile(string documentName, string code, V8CacheKind cacheKind, byte[] cacheBytes, out bool cacheAccepted);
public abstract V8Script Compile(DocumentInfo documentInfo, string code, V8CacheKind cacheKind, byte[] cacheBytes, out bool cacheAccepted);
public abstract V8RuntimeHeapInfo GetHeapInfo();

Просмотреть файл

@ -129,7 +129,7 @@ namespace Microsoft.ClearScript.V8
private static IEnumerable<string> GetDirPaths()
{
// The assembly location may be empty if the the host preloaded the assembly
// The assembly location may be empty if the host preloaded the assembly
// from custom storage. Support for this scenario was requested on CodePlex.
var location = typeof(V8Proxy).Assembly.Location;

Просмотреть файл

@ -162,26 +162,20 @@ namespace Microsoft.ClearScript.V8
return ((IDynamic)obj).InvokeMethod(name, args);
}
public static unsafe bool HostObjectIsDelegate(void* pObject)
public static unsafe Invocability GetHostObjectInvocability(void* pObject)
{
return HostObjectIsDelegate(GetHostObject(pObject));
return GetHostObjectInvocability(GetHostObject(pObject));
}
public static bool HostObjectIsDelegate(object obj)
public static Invocability GetHostObjectInvocability(object obj)
{
var hostItem = obj as HostItem;
if (hostItem == null)
{
return false;
return Invocability.None;
}
var hostTarget = hostItem.Target;
if ((hostTarget is HostType) || (hostTarget is HostMethod))
{
return true;
}
return hostTarget.Flags.HasFlag(HostTargetFlags.AllowInstanceMembers) && typeof(Delegate).IsAssignableFrom(hostTarget.Type);
return hostItem.Invocability;
}
public static unsafe object GetEnumeratorForHostObject(void* pObject)

Просмотреть файл

@ -391,10 +391,21 @@ namespace Microsoft.ClearScript.V8
/// <param name="code">The script code to compile.</param>
/// <returns>A compiled script that can be executed by multiple V8 script engine instances.</returns>
public V8Script Compile(string documentName, string code)
{
return Compile(new DocumentInfo(documentName), code);
}
/// <summary>
/// Creates a compiled script with the specified document information.
/// </summary>
/// <param name="documentInfo">A structure containing information about the script document.</param>
/// <param name="code">The script code to compile.</param>
/// <returns>A compiled script that can be executed by multiple V8 script engine instances.</returns>
public V8Script Compile(DocumentInfo documentInfo, string code)
{
VerifyNotDisposed();
var uniqueName = name + ":" + documentNameManager.GetUniqueName(documentName, "Script Document");
return proxy.Compile(uniqueName, FormatCode ? MiscHelpers.FormatCode(code) : code);
documentInfo.UniqueName = name + ":" + documentNameManager.GetUniqueName(documentInfo.Name, DocumentInfo.DefaultName);
return proxy.Compile(documentInfo, FormatCode ? MiscHelpers.FormatCode(code) : code);
}
/// <summary>
@ -430,10 +441,29 @@ namespace Microsoft.ClearScript.V8
/// </remarks>
/// <seealso cref="Compile(string, string, V8CacheKind, byte[], out bool)"/>
public V8Script Compile(string documentName, string code, V8CacheKind cacheKind, out byte[] cacheBytes)
{
return Compile(new DocumentInfo(documentName), code, cacheKind, out cacheBytes);
}
/// <summary>
/// Creates a compiled script with the specified document information, generating cache data for accelerated recompilation.
/// </summary>
/// <param name="documentInfo">A structure containing information about the script document.</param>
/// <param name="code">The script code to compile.</param>
/// <param name="cacheKind">The kind of cache data to be generated.</param>
/// <param name="cacheBytes">Cache data for accelerated recompilation.</param>
/// <returns>A compiled script that can be executed by multiple V8 script engine instances.</returns>
/// <remarks>
/// The generated cache data can be stored externally and is usable in other V8 runtimes
/// and application processes. V8 runtimes with debugging enabled cannot generate cache
/// data.
/// </remarks>
/// <seealso cref="Compile(DocumentInfo, string, V8CacheKind, byte[], out bool)"/>
public V8Script Compile(DocumentInfo documentInfo, string code, V8CacheKind cacheKind, out byte[] cacheBytes)
{
VerifyNotDisposed();
var uniqueName = name + ":" + documentNameManager.GetUniqueName(documentName, "Script Document");
return proxy.Compile(uniqueName, FormatCode ? MiscHelpers.FormatCode(code) : code, cacheKind, out cacheBytes);
documentInfo.UniqueName = name + ":" + documentNameManager.GetUniqueName(documentInfo.Name, DocumentInfo.DefaultName);
return proxy.Compile(documentInfo, FormatCode ? MiscHelpers.FormatCode(code) : code, cacheKind, out cacheBytes);
}
/// <summary>
@ -469,10 +499,29 @@ namespace Microsoft.ClearScript.V8
/// </remarks>
/// <seealso cref="Compile(string, string, V8CacheKind, out byte[])"/>
public V8Script Compile(string documentName, string code, V8CacheKind cacheKind, byte[] cacheBytes, out bool cacheAccepted)
{
return Compile(new DocumentInfo(documentName), code, cacheKind, cacheBytes, out cacheAccepted);
}
/// <summary>
/// Creates a compiled script with the specified document information, consuming previously generated cache data.
/// </summary>
/// <param name="documentInfo">A structure containing information about the script document.</param>
/// <param name="code">The script code to compile.</param>
/// <param name="cacheKind">The kind of cache data to be consumed.</param>
/// <param name="cacheBytes">Cache data for accelerated compilation.</param>
/// <param name="cacheAccepted"><c>True</c> if <paramref name="cacheBytes"/> was accepted, <c>false</c> otherwise.</param>
/// <returns>A compiled script that can be executed by multiple V8 script engine instances.</returns>
/// <remarks>
/// To be accepted, the cache data must have been generated for identical script code by
/// the same V8 build. V8 runtimes with debugging enabled cannot consume cache data.
/// </remarks>
/// <seealso cref="Compile(DocumentInfo, string, V8CacheKind, out byte[])"/>
public V8Script Compile(DocumentInfo documentInfo, string code, V8CacheKind cacheKind, byte[] cacheBytes, out bool cacheAccepted)
{
VerifyNotDisposed();
var uniqueName = name + ":" + documentNameManager.GetUniqueName(documentName, "Script Document");
return proxy.Compile(uniqueName, FormatCode ? MiscHelpers.FormatCode(code) : code, cacheKind, cacheBytes, out cacheAccepted);
documentInfo.UniqueName = name + ":" + documentNameManager.GetUniqueName(documentInfo.Name, DocumentInfo.DefaultName);
return proxy.Compile(documentInfo, FormatCode ? MiscHelpers.FormatCode(code) : code, cacheKind, cacheBytes, out cacheAccepted);
}
/// <summary>

Просмотреть файл

@ -11,19 +11,28 @@ namespace Microsoft.ClearScript.V8
/// </summary>
public abstract class V8Script : IDisposable
{
private readonly string name;
private readonly DocumentInfo documentInfo;
internal V8Script(string name)
internal V8Script(DocumentInfo documentInfo)
{
this.name = name;
this.documentInfo = documentInfo;
}
/// <summary>
/// Gets the document name associated with the compiled script.
/// </summary>
[Obsolete("Use DocumentInfo instead.")]
public string Name
{
get { return name; }
get { return documentInfo.UniqueName; }
}
/// <summary>
/// Gets the document information associated with the compiled script.
/// </summary>
public DocumentInfo DocumentInfo
{
get { return documentInfo; }
}
#region IDisposable implementation (abstract)

Просмотреть файл

@ -444,13 +444,24 @@ namespace Microsoft.ClearScript.V8
/// <param name="code">The script code to compile.</param>
/// <returns>A compiled script that can be executed multiple times without recompilation.</returns>
public V8Script Compile(string documentName, string code)
{
return Compile(new DocumentInfo(documentName), code);
}
/// <summary>
/// Creates a compiled script with the specified document information.
/// </summary>
/// <param name="documentInfo">A structure containing information about the script document.</param>
/// <param name="code">The script code to compile.</param>
/// <returns>A compiled script that can be executed multiple times without recompilation.</returns>
public V8Script Compile(DocumentInfo documentInfo, string code)
{
VerifyNotDisposed();
return ScriptInvoke(() =>
{
var uniqueName = documentNameManager.GetUniqueName(documentName, "Script Document");
return proxy.Compile(uniqueName, FormatCode ? MiscHelpers.FormatCode(code) : code);
documentInfo.UniqueName = documentNameManager.GetUniqueName(documentInfo.Name, DocumentInfo.DefaultName);
return proxy.Compile(documentInfo, FormatCode ? MiscHelpers.FormatCode(code) : code);
});
}
@ -487,6 +498,25 @@ namespace Microsoft.ClearScript.V8
/// </remarks>
/// <seealso cref="Compile(string, string, V8CacheKind, byte[], out bool)"/>
public V8Script Compile(string documentName, string code, V8CacheKind cacheKind, out byte[] cacheBytes)
{
return Compile(new DocumentInfo(documentName), code, cacheKind, out cacheBytes);
}
/// <summary>
/// Creates a compiled script with the specified document information, generating cache data for accelerated recompilation.
/// </summary>
/// <param name="documentInfo">A structure containing information about the script document.</param>
/// <param name="code">The script code to compile.</param>
/// <param name="cacheKind">The kind of cache data to be generated.</param>
/// <param name="cacheBytes">Cache data for accelerated recompilation.</param>
/// <returns>A compiled script that can be executed multiple times without recompilation.</returns>
/// <remarks>
/// The generated cache data can be stored externally and is usable in other V8 script
/// engines and application processes. V8 script engines with debugging enabled cannot
/// generate cache data.
/// </remarks>
/// <seealso cref="Compile(DocumentInfo, string, V8CacheKind, byte[], out bool)"/>
public V8Script Compile(DocumentInfo documentInfo, string code, V8CacheKind cacheKind, out byte[] cacheBytes)
{
VerifyNotDisposed();
@ -494,8 +524,8 @@ namespace Microsoft.ClearScript.V8
cacheBytes = ScriptInvoke(() =>
{
byte[] tempCacheBytes;
var uniqueName = documentNameManager.GetUniqueName(documentName, "Script Document");
tempScript = proxy.Compile(uniqueName, FormatCode ? MiscHelpers.FormatCode(code) : code, cacheKind, out tempCacheBytes);
documentInfo.UniqueName = documentNameManager.GetUniqueName(documentInfo.Name, DocumentInfo.DefaultName);
tempScript = proxy.Compile(documentInfo, FormatCode ? MiscHelpers.FormatCode(code) : code, cacheKind, out tempCacheBytes);
return tempCacheBytes;
});
@ -535,6 +565,25 @@ namespace Microsoft.ClearScript.V8
/// </remarks>
/// <seealso cref="Compile(string, string, V8CacheKind, out byte[])"/>
public V8Script Compile(string documentName, string code, V8CacheKind cacheKind, byte[] cacheBytes, out bool cacheAccepted)
{
return Compile(new DocumentInfo(documentName), code, cacheKind, cacheBytes, out cacheAccepted);
}
/// <summary>
/// Creates a compiled script with an associated document name, consuming previously generated cache data.
/// </summary>
/// <param name="documentInfo">A structure containing information about the script document.</param>
/// <param name="code">The script code to compile.</param>
/// <param name="cacheKind">The kind of cache data to be consumed.</param>
/// <param name="cacheBytes">Cache data for accelerated compilation.</param>
/// <param name="cacheAccepted"><c>True</c> if <paramref name="cacheBytes"/> was accepted, <c>false</c> otherwise.</param>
/// <returns>A compiled script that can be executed multiple times without recompilation.</returns>
/// <remarks>
/// To be accepted, the cache data must have been generated for identical script code by
/// the same V8 build. V8 script engines with debugging enabled cannot consume cache data.
/// </remarks>
/// <seealso cref="Compile(DocumentInfo, string, V8CacheKind, out byte[])"/>
public V8Script Compile(DocumentInfo documentInfo, string code, V8CacheKind cacheKind, byte[] cacheBytes, out bool cacheAccepted)
{
VerifyNotDisposed();
@ -542,8 +591,8 @@ namespace Microsoft.ClearScript.V8
cacheAccepted = ScriptInvoke(() =>
{
bool tempCacheAccepted;
var uniqueName = documentNameManager.GetUniqueName(documentName, "Script Document");
tempScript = proxy.Compile(uniqueName, FormatCode ? MiscHelpers.FormatCode(code) : code, cacheKind, cacheBytes, out tempCacheAccepted);
documentInfo.UniqueName = documentNameManager.GetUniqueName(documentInfo.Name, DocumentInfo.DefaultName);
tempScript = proxy.Compile(documentInfo, FormatCode ? MiscHelpers.FormatCode(code) : code, cacheKind, cacheBytes, out tempCacheAccepted);
return tempCacheAccepted;
});
@ -896,20 +945,20 @@ namespace Microsoft.ClearScript.V8
return V8ScriptItem.Wrap(this, obj);
}
internal override object Execute(string documentName, string code, bool evaluate, bool discard)
internal override object Execute(DocumentInfo documentInfo, string code, bool evaluate)
{
VerifyNotDisposed();
return ScriptInvoke(() =>
{
var uniqueName = documentNameManager.GetUniqueName(documentName, "Script Document");
if (discard)
documentInfo.UniqueName = documentNameManager.GetUniqueName(documentInfo.Name, DocumentInfo.DefaultName);
if (documentInfo.Flags.GetValueOrDefault().HasFlag(DocumentFlags.IsTransient))
{
uniqueName += " [temp]";
documentInfo.UniqueName += " [temp]";
}
else if (documentNames != null)
{
documentNames.Add(uniqueName);
documentNames.Add(documentInfo.UniqueName);
}
if (inContinuationTimerScope || (ContinuationCallback == null))
@ -919,7 +968,7 @@ namespace Microsoft.ClearScript.V8
proxy.AwaitDebuggerAndPause();
}
return proxy.Execute(uniqueName, FormatCode ? MiscHelpers.FormatCode(code) : code, evaluate, discard);
return proxy.Execute(documentInfo, FormatCode ? MiscHelpers.FormatCode(code) : code, evaluate);
}
var state = new Timer[] { null };
@ -935,7 +984,7 @@ namespace Microsoft.ClearScript.V8
proxy.AwaitDebuggerAndPause();
}
return proxy.Execute(uniqueName, FormatCode ? MiscHelpers.FormatCode(code) : code, evaluate, discard);
return proxy.Execute(documentInfo, FormatCode ? MiscHelpers.FormatCode(code) : code, evaluate);
}
finally
{

Просмотреть файл

@ -78,7 +78,9 @@ namespace Microsoft.ClearScript.Windows
AppNode,
Title,
FileTail,
URL
URL,
UniqueTitle,
SourceMapURL
}
internal enum BreakpointState
@ -644,7 +646,8 @@ namespace Microsoft.ClearScript.Windows
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IDebugDocumentInfo
{
void GetName(
[PreserveSig]
uint GetName(
[In] DocumentNameType type,
[Out] [MarshalAs(UnmanagedType.BStr)] out string name
);
@ -661,7 +664,8 @@ namespace Microsoft.ClearScript.Windows
{
#region IDebugDocumentInfo methods
void GetName(
[PreserveSig]
uint GetName(
[In] DocumentNameType type,
[Out] [MarshalAs(UnmanagedType.BStr)] out string name
);
@ -682,7 +686,8 @@ namespace Microsoft.ClearScript.Windows
{
#region IDebugDocumentInfo methods
void GetName(
[PreserveSig]
uint GetName(
[In] DocumentNameType type,
[Out] [MarshalAs(UnmanagedType.BStr)] out string name
);
@ -701,7 +706,8 @@ namespace Microsoft.ClearScript.Windows
{
#region IDebugDocumentInfo methods
void GetName(
[PreserveSig]
uint GetName(
[In] DocumentNameType type,
[Out] [MarshalAs(UnmanagedType.BStr)] out string name
);
@ -764,7 +770,8 @@ namespace Microsoft.ClearScript.Windows
{
#region IDebugDocumentInfo methods
void GetName(
[PreserveSig]
uint GetName(
[In] DocumentNameType type,
[Out] [MarshalAs(UnmanagedType.BStr)] out string name
);

Просмотреть файл

@ -339,7 +339,7 @@ namespace Microsoft.ClearScript.Windows
if (trimmedCommand.StartsWith("eval ", StringComparison.OrdinalIgnoreCase))
{
var expression = MiscHelpers.FormatInvariant("EngineInternal.getCommandResult({0})", trimmedCommand.Substring(5));
return GetCommandResultString(Evaluate("Expression", true, expression, false));
return GetCommandResultString(Evaluate(new DocumentInfo("Expression") { Flags = DocumentFlags.IsTransient }, expression, false));
}
Execute("Command", true, trimmedCommand);

Просмотреть файл

@ -18,17 +18,17 @@ namespace Microsoft.ClearScript.Windows
{
private readonly WindowsScriptEngine engine;
private readonly UIntPtr sourceContext;
private readonly string name;
private readonly DocumentInfo documentInfo;
private readonly string code;
private string[] codeLines;
private IDebugApplicationNode node;
public DebugDocument(WindowsScriptEngine engine, UIntPtr sourceContext, string name, string code, bool transient)
public DebugDocument(WindowsScriptEngine engine, UIntPtr sourceContext, DocumentInfo documentInfo, string code)
{
this.engine = engine;
this.sourceContext = sourceContext;
this.name = name + (transient ? " [temp]" : "");
this.documentInfo = documentInfo;
this.code = code;
Initialize();
}
@ -57,21 +57,62 @@ namespace Microsoft.ClearScript.Windows
node = null;
}
private string GetFileName()
{
return Path.HasExtension(documentInfo.Name) ? documentInfo.Name : Path.ChangeExtension(documentInfo.Name, engine.FileNameExtension);
}
private string GetUrl()
{
if (documentInfo.Uri != null)
{
return documentInfo.Uri.IsAbsoluteUri ? documentInfo.Uri.AbsoluteUri : documentInfo.Uri.ToString();
}
return MiscHelpers.FormatInvariant("{0}/{1}", engine.Name, GetFileName());
}
private bool TryGetSourceMapUrl(out string sourceMapUrl)
{
if (documentInfo.SourceMapUri != null)
{
sourceMapUrl = documentInfo.SourceMapUri.IsAbsoluteUri ? documentInfo.SourceMapUri.AbsoluteUri : documentInfo.SourceMapUri.ToString();
return true;
}
sourceMapUrl = null;
return false;
}
#region IDebugDocumentInfo implementation
public void GetName(DocumentNameType type, out string documentName)
public uint GetName(DocumentNameType type, out string documentName)
{
switch (type)
{
case DocumentNameType.URL:
var fullName = Path.HasExtension(name) ? name : Path.ChangeExtension(name, engine.FileNameExtension);
documentName = MiscHelpers.FormatInvariant("{0}/{1}", engine.Name, fullName);
break;
case DocumentNameType.AppNode:
case DocumentNameType.Title:
documentName = documentInfo.Name;
return RawCOMHelpers.HResult.S_OK;
default:
documentName = name;
break;
case DocumentNameType.FileTail:
documentName = GetFileName();
return RawCOMHelpers.HResult.S_OK;
case DocumentNameType.URL:
documentName = GetUrl();
return RawCOMHelpers.HResult.S_OK;
case DocumentNameType.UniqueTitle:
documentName = documentInfo.UniqueName;
return RawCOMHelpers.HResult.S_OK;
case DocumentNameType.SourceMapURL:
return TryGetSourceMapUrl(out documentName) ? RawCOMHelpers.HResult.S_OK : RawCOMHelpers.HResult.E_FAIL.ToUnsigned();
}
documentName = null;
return RawCOMHelpers.HResult.E_FAIL.ToUnsigned();
}
public void GetDocumentClassId(out Guid clsid)

Просмотреть файл

@ -99,7 +99,7 @@ namespace Microsoft.ClearScript.Windows
if (engine.debugDocumentMap.TryGetValue(new UIntPtr(sourceContext), out document))
{
string documentName;
document.GetName(DocumentNameType.Title, out documentName);
document.GetName(DocumentNameType.UniqueTitle, out documentName);
int position;
if (lineNumber > 0)

Просмотреть файл

@ -149,12 +149,12 @@ namespace Microsoft.ClearScript.Windows
return scriptDispatch;
}
private void Parse(string documentName, string code, ScriptTextFlags flags, IntPtr pVarResult, out EXCEPINFO excepInfo, bool discard)
private void Parse(DocumentInfo documentInfo, string code, ScriptTextFlags flags, IntPtr pVarResult, out EXCEPINFO excepInfo)
{
var formattedCode = FormatCode ? MiscHelpers.FormatCode(code) : code;
DebugDocument debugDocument;
var sourceContext = CreateDebugDocument(documentName, formattedCode, discard, out debugDocument);
var sourceContext = CreateDebugDocument(documentInfo, formattedCode, out debugDocument);
if (sourceContext != UIntPtr.Zero)
{
flags |= ScriptTextFlags.HostManagesSource;
@ -166,7 +166,7 @@ namespace Microsoft.ClearScript.Windows
}
finally
{
if (discard && (sourceContext != UIntPtr.Zero))
if (documentInfo.Flags.GetValueOrDefault().HasFlag(DocumentFlags.IsTransient) && (sourceContext != UIntPtr.Zero))
{
debugDocumentMap.Remove(sourceContext);
debugDocument.Close();
@ -174,7 +174,7 @@ namespace Microsoft.ClearScript.Windows
}
}
private UIntPtr CreateDebugDocument(string name, string code, bool transient, out DebugDocument document)
private UIntPtr CreateDebugDocument(DocumentInfo documentInfo, string code, out DebugDocument document)
{
UIntPtr sourceContext;
if (!sourceManagement)
@ -185,8 +185,9 @@ namespace Microsoft.ClearScript.Windows
else
{
sourceContext = new UIntPtr(nextSourceContext++);
var uniqueName = debugDocumentNameManager.GetUniqueName(name, "Script Document");
document = new DebugDocument(this, sourceContext, uniqueName, code, transient);
documentInfo.UniqueName = debugDocumentNameManager.GetUniqueName(documentInfo.Name, DocumentInfo.DefaultName);
documentInfo.UniqueName += documentInfo.Flags.GetValueOrDefault().HasFlag(DocumentFlags.IsTransient) ? " [temp]" : "";
document = new DebugDocument(this, sourceContext, documentInfo, code);
debugDocumentMap[sourceContext] = document;
}
@ -232,7 +233,7 @@ namespace Microsoft.ClearScript.Windows
var documentText = (IDebugDocumentText)document;
string documentName;
document.GetName(DocumentNameType.Title, out documentName);
document.GetName(DocumentNameType.UniqueTitle, out documentName);
uint position;
uint length;
@ -593,7 +594,7 @@ namespace Microsoft.ClearScript.Windows
return WindowsScriptItem.Wrap(this, obj);
}
internal override object Execute(string documentName, string code, bool evaluate, bool discard)
internal override object Execute(DocumentInfo documentInfo, string code, bool evaluate)
{
VerifyNotDisposed();
@ -603,14 +604,14 @@ namespace Microsoft.ClearScript.Windows
if (!evaluate)
{
const ScriptTextFlags flags = ScriptTextFlags.IsVisible;
Parse(documentName, code, flags, IntPtr.Zero, out excepInfo, discard);
Parse(documentInfo, code, flags, IntPtr.Zero, out excepInfo);
return null;
}
using (var resultVariantBlock = new CoTaskMemVariantBlock())
{
const ScriptTextFlags flags = ScriptTextFlags.IsExpression;
Parse(documentName, code, flags, resultVariantBlock.Addr, out excepInfo, discard);
Parse(documentInfo, code, flags, resultVariantBlock.Addr, out excepInfo);
return Marshal.GetObjectForNativeVariant(resultVariantBlock.Addr);
}
});
@ -790,7 +791,7 @@ namespace Microsoft.ClearScript.Windows
return debugDocumentMap.Values.Select(debugDocument =>
{
string name;
debugDocument.GetName(DocumentNameType.Title, out name);
debugDocument.GetName(DocumentNameType.UniqueTitle, out name);
return name;
});
}

Просмотреть файл

@ -58,7 +58,7 @@ namespace Microsoft.ClearScript.Windows
/// converted to script arrays and marshaled as variants of type <c>VT_ARRAY</c>. In
/// VBScript these objects are the native array type. JScript code can use the
/// <see href="http://msdn.microsoft.com/en-us/library/y39d47w8(v=vs.84).aspx">VBArray</see>
/// object to to access them.
/// object to access them.
/// </summary>
MarshalArraysByValue = 0x00000040,

Просмотреть файл

@ -202,7 +202,7 @@ namespace Microsoft.ClearScript.Windows
return new ScriptMethod(this, name);
}
return Nonexistent.Value;
return Undefined.Value;
}
}), false);

Двоичные данные
ClearScript/doc/Build.docx

Двоичный файл не отображается.

Двоичные данные
ClearScript/doc/Reference.chm

Двоичный файл не отображается.

Просмотреть файл

@ -29,7 +29,7 @@
<ErrorReport>prompt</ErrorReport>
<DebugType>full</DebugType>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<Prefer32Bit>true</Prefer32Bit>
<Prefer32Bit>false</Prefer32Bit>
<LangVersion>5</LangVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
@ -42,7 +42,7 @@
<DebugType>pdbonly</DebugType>
<DebugSymbols>true</DebugSymbols>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<Prefer32Bit>true</Prefer32Bit>
<Prefer32Bit>false</Prefer32Bit>
<LangVersion>5</LangVersion>
</PropertyGroup>
<ItemGroup>

Просмотреть файл

@ -11,5 +11,5 @@ using System.Runtime.InteropServices;
[assembly: AssemblyCopyright("(c) Microsoft Corporation")]
[assembly: ComVisible(false)]
[assembly: AssemblyVersion("5.5.2.0")]
[assembly: AssemblyFileVersion("5.5.2.0")]
[assembly: AssemblyVersion("5.5.3.0")]
[assembly: AssemblyFileVersion("5.5.3.0")]

Просмотреть файл

@ -34,7 +34,7 @@ namespace Microsoft.ClearScript.Test
var filePath = Path.Combine(Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName), fileName);
if (File.Exists(filePath))
{
engine.Execute(fileName, File.ReadAllText(filePath));
engine.Execute(new DocumentInfo(new Uri(filePath)), File.ReadAllText(filePath));
}
// ReSharper restore AssignNullToNotNullAttribute

Просмотреть файл

@ -11,5 +11,5 @@ using System.Runtime.InteropServices;
[assembly: AssemblyCopyright("(c) Microsoft Corporation")]
[assembly: ComVisible(false)]
[assembly: AssemblyVersion("5.5.2.0")]
[assembly: AssemblyFileVersion("5.5.2.0")]
[assembly: AssemblyVersion("5.5.3.0")]
[assembly: AssemblyFileVersion("5.5.3.0")]

Просмотреть файл

@ -17,6 +17,7 @@ using Microsoft.ClearScript.Util;
using Microsoft.ClearScript.Windows;
using Microsoft.CSharp.RuntimeBinder;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Newtonsoft.Json;
using UIAutomationClient;
namespace Microsoft.ClearScript.Test
@ -294,11 +295,16 @@ namespace Microsoft.ClearScript.Test
{
// ReSharper disable RedundantAssignment
var x = new object();
var wr = new WeakReference(x);
WeakReference wr = null;
VariantClearTestHelper(x);
x = null;
new Action(() =>
{
var x = new object();
wr = new WeakReference(x);
VariantClearTestHelper(x);
x = null;
})();
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
GC.WaitForPendingFinalizers();
@ -658,23 +664,29 @@ namespace Microsoft.ClearScript.Test
[TestMethod, TestCategory("BugFix")]
public void BugFix_V8CachedObjectLeak()
{
object x = null;
WeakReference wr = null;
new Action(() =>
{
// ReSharper disable RedundantAssignment
object x = null;
using (var tempEngine = new V8ScriptEngine())
{
tempEngine.AddHostType("Action", typeof(Action));
x = tempEngine.Evaluate("action = new Action(function () {})");
wr = new WeakReference(tempEngine);
}
Assert.IsInstanceOfType(x, typeof(Action));
TestUtil.AssertException<ObjectDisposedException>((Action)x);
x = null;
// ReSharper restore RedundantAssignment
})();
Assert.IsInstanceOfType(x, typeof(Action));
TestUtil.AssertException<ObjectDisposedException>((Action)x);
x = null;
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
GC.WaitForPendingFinalizers();
Assert.IsFalse(wr.IsAlive);
@ -1120,6 +1132,7 @@ namespace Microsoft.ClearScript.Test
{
const int maxNewSpaceSize = 16;
const int maxOldSpaceSize = 512;
const double tolerance = .05;
var constraints = new V8RuntimeConstraints
{
@ -1130,7 +1143,10 @@ namespace Microsoft.ClearScript.Test
using (var tempEngine = new V8ScriptEngine(constraints))
{
Assert.AreEqual(Math.PI, tempEngine.Evaluate("Math.PI"));
Assert.AreEqual(Convert.ToUInt64(maxNewSpaceSize * 2 + maxOldSpaceSize), tempEngine.GetRuntimeHeapInfo().HeapSizeLimit / (1024 * 1024));
var expected = Convert.ToDouble(maxNewSpaceSize * 2 + maxOldSpaceSize);
var actual = Convert.ToDouble(tempEngine.GetRuntimeHeapInfo().HeapSizeLimit / (1024 * 1024));
var ratio = actual / expected;
Assert.IsTrue((ratio >= 1 - tolerance) && (ratio <= 1 + tolerance));
}
constraints = new V8RuntimeConstraints
@ -1142,9 +1158,12 @@ namespace Microsoft.ClearScript.Test
using (var tempEngine = new V8ScriptEngine(constraints))
{
Assert.AreEqual(Math.E, tempEngine.Evaluate("Math.E"));
Assert.AreEqual(Convert.ToUInt64(maxNewSpaceSize * 2 + maxOldSpaceSize), tempEngine.GetRuntimeHeapInfo().HeapSizeLimit / (1024 * 1024));
}
}
var expected = Convert.ToDouble(maxNewSpaceSize * 2 + maxOldSpaceSize);
var actual = Convert.ToDouble(tempEngine.GetRuntimeHeapInfo().HeapSizeLimit / (1024 * 1024));
var ratio = actual / expected;
Assert.IsTrue((ratio >= 1 - tolerance) && (ratio <= 1 + tolerance));
}
}
[TestMethod, TestCategory("BugFix")]
public void BugFix_TooManyDebugApplications()
@ -1735,7 +1754,7 @@ namespace Microsoft.ClearScript.Test
public void BugFix_ScriptObjectInHostVariable()
{
engine.Script.host = new HostFunctions();
Assert.IsTrue(engine.Evaluate(null, true, "host.newVar({})", false).ToString().StartsWith("[HostVariable:", StringComparison.Ordinal));
Assert.IsTrue(engine.Evaluate(new DocumentInfo("Expresion") { Flags = DocumentFlags.IsTransient }, "host.newVar({})", false).ToString().StartsWith("[HostVariable:", StringComparison.Ordinal));
}
[TestMethod, TestCategory("BugFix")]
@ -2219,7 +2238,7 @@ namespace Microsoft.ClearScript.Test
{
var value = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
var scriptValue = Convert.ToDouble(engine.Evaluate("Date.now()"));
Assert.IsTrue(Math.Abs(scriptValue - value) < 5.0);
Assert.IsTrue(Math.Abs(scriptValue - value) < 25.0);
}
[TestMethod, TestCategory("BugFix")]
@ -2293,6 +2312,51 @@ namespace Microsoft.ClearScript.Test
");
}
[TestMethod, TestCategory("BugFix")]
public void BugFix_NonexistentPropertyAccess_VB()
{
TestUtil.InvokeVBTestSub(@"
Using engine As New V8ScriptEngine
engine.Script.dump = Sub(obj As Object, message As Object, stack As Object)
Assert.AreEqual(message, obj.message)
Assert.AreEqual(stack, obj.stack)
End Sub
engine.Execute(
""message = 'hello';"" & _
""stack = 'world';"" & _
""dump({ message: message, stack: stack }, message, stack);"" & _
""dump({ message: message }, message, undefined);""
)
End Using
");
}
[TestMethod, TestCategory("BugFix")]
public void BugFix_NonexistentPropertyAccess_JScript_VB()
{
TestUtil.InvokeVBTestSub(@"
Using engine As New JScriptEngine
engine.Script.dump = Sub(obj As Object, message As Object, stack As Object)
Assert.AreEqual(message, obj.message)
Assert.AreEqual(stack, obj.stack)
End Sub
engine.Execute(
""message = 'hello';"" & _
""stack = 'world';"" & _
""dump({ message: message, stack: stack }, message, stack);"" & _
""dump({ message: message }, message, undefined);""
)
End Using
");
}
[TestMethod, TestCategory("BugFix")]
public void BugFix_JsonDotNetSerialization()
{
var obj = engine.Evaluate("({foo:123,bar:'baz'})");
Assert.AreEqual("{\"foo\":123,\"bar\":\"baz\"}", JsonConvert.SerializeObject(obj));
}
// ReSharper restore InconsistentNaming
#endregion

Просмотреть файл

@ -45,6 +45,9 @@
<ItemGroup>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
@ -82,6 +85,7 @@
<Compile Include="JScriptEngineTest.cs" />
<Compile Include="ScriptAccessTest.cs" />
<Compile Include="Misc.cs" />
<None Include="packages.config" />
<None Include="Properties\AssemblyInfo.tt">
<Generator>TextTemplatingFileGenerator</Generator>
<LastGenOutput>AssemblyInfo.cs</LastGenOutput>

Просмотреть файл

@ -47,7 +47,7 @@ namespace Microsoft.ClearScript.Test
public override bool TryInvoke(InvokeBinder binder, object[] args, out object result)
{
if (!DisableInvocation && args.Length > 0)
if (!DisableInvocation && (args.Length > 0))
{
result = string.Join(",", args);
return true;

Просмотреть файл

@ -245,6 +245,48 @@ namespace Microsoft.ClearScript.Test
Assert.IsTrue(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("JScriptEngine")]
public void JScriptEngine_Evaluate_DocumentInfo_WithDocumentName()
{
const string documentName = "DoTheMath";
Assert.AreEqual(Math.E * Math.PI, engine.Evaluate(new DocumentInfo(documentName), "Math.E * Math.PI"));
Assert.IsFalse(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("JScriptEngine")]
public void JScriptEngine_Evaluate_DocumentInfo_WithDocumentUri()
{
const string documentName = "DoTheMath";
var documentUri = new Uri(@"c:\foo\bar\baz\" + documentName);
Assert.AreEqual(Math.E * Math.PI, engine.Evaluate(new DocumentInfo(documentUri) { Flags = DocumentFlags.None }, "Math.E * Math.PI"));
Assert.IsTrue(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("JScriptEngine")]
public void JScriptEngine_Evaluate_DocumentInfo_WithDocumentUri_Relative()
{
const string documentName = "DoTheMath";
var documentUri = new Uri(documentName, UriKind.Relative);
Assert.AreEqual(Math.E * Math.PI, engine.Evaluate(new DocumentInfo(documentUri) { Flags = DocumentFlags.None }, "Math.E * Math.PI"));
Assert.IsTrue(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("JScriptEngine")]
public void JScriptEngine_Evaluate_DocumentInfo_DiscardDocument()
{
const string documentName = "DoTheMath";
Assert.AreEqual(Math.E * Math.PI, engine.Evaluate(new DocumentInfo(documentName) { Flags = DocumentFlags.IsTransient }, "Math.E * Math.PI"));
Assert.IsFalse(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("JScriptEngine")]
public void JScriptEngine_Evaluate_DocumentInfo_RetainDocument()
{
const string documentName = "DoTheMath";
Assert.AreEqual(Math.E * Math.PI, engine.Evaluate(new DocumentInfo(documentName) { Flags = DocumentFlags.None }, "Math.E * Math.PI"));
Assert.IsTrue(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("JScriptEngine")]
public void JScriptEngine_Execute()
{
@ -279,6 +321,53 @@ namespace Microsoft.ClearScript.Test
Assert.IsTrue(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("JScriptEngine")]
public void JScriptEngine_Execute_DocumentInfo_WithDocumentName()
{
const string documentName = "DoTheMath";
engine.Execute(new DocumentInfo(documentName), "epi = Math.E * Math.PI");
Assert.AreEqual(Math.E * Math.PI, engine.Script.epi);
Assert.IsTrue(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("JScriptEngine")]
public void JScriptEngine_Execute_DocumentInfo_WithDocumentUri()
{
const string documentName = "DoTheMath";
var documentUri = new Uri(@"c:\foo\bar\baz\" + documentName);
engine.Execute(new DocumentInfo(documentUri), "epi = Math.E * Math.PI");
Assert.AreEqual(Math.E * Math.PI, engine.Script.epi);
Assert.IsTrue(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("JScriptEngine")]
public void JScriptEngine_Execute_DocumentInfo_WithDocumentUri_Relative()
{
const string documentName = "DoTheMath";
var documentUri = new Uri(documentName, UriKind.Relative);
engine.Execute(new DocumentInfo(documentUri), "epi = Math.E * Math.PI");
Assert.AreEqual(Math.E * Math.PI, engine.Script.epi);
Assert.IsTrue(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("JScriptEngine")]
public void JScriptEngine_Execute_DocumentInfo_DiscardDocument()
{
const string documentName = "DoTheMath";
engine.Execute(new DocumentInfo(documentName) { Flags = DocumentFlags.IsTransient }, "epi = Math.E * Math.PI");
Assert.AreEqual(Math.E * Math.PI, engine.Script.epi);
Assert.IsFalse(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("JScriptEngine")]
public void JScriptEngine_Execute_DocumentInfo_RetainDocument()
{
const string documentName = "DoTheMath";
engine.Execute(new DocumentInfo(documentName) { Flags = DocumentFlags.None }, "epi = Math.E * Math.PI");
Assert.AreEqual(Math.E * Math.PI, engine.Script.epi);
Assert.IsTrue(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("JScriptEngine")]
public void JScriptEngine_ExecuteCommand_EngineConvert()
{
@ -934,6 +1023,14 @@ namespace Microsoft.ClearScript.Test
Assert.AreEqual("bar+baz+qux", engine.Evaluate("host.toStaticType(testObject).SomeMethod('foo', 'bar', 'baz', 'qux')"));
}
[TestMethod, TestCategory("JScriptEngine")]
public void JScriptEngine_DynamicHostObject_StaticType_Invoke()
{
engine.Script.testObject = new DynamicTestObject();
engine.Script.host = new HostFunctions();
TestUtil.AssertException<NotSupportedException>(() => engine.Evaluate("host.toStaticType(testObject)('foo', 'bar', 'baz', 'qux')"));
}
[TestMethod, TestCategory("JScriptEngine")]
public void JScriptEngine_DynamicHostObject_Property()
{
@ -2121,6 +2218,41 @@ namespace Microsoft.ClearScript.Test
Assert.AreSame(engine, obj.Engine);
}
[TestMethod, TestCategory("JScriptEngine")]
public void JScriptEngine_ArrayInvocability()
{
engine.Script.foo = Enumerable.Range(123, 5).ToArray();
Assert.AreEqual(124, engine.Evaluate("foo(1)"));
Assert.AreEqual(456, engine.Evaluate("foo(1) = 456"));
engine.Script.foo = new IConvertible[] { "bar" };
Assert.AreEqual("bar", engine.Evaluate("foo(0)"));
Assert.AreEqual("baz", engine.Evaluate("foo(0) = 'baz'"));
engine.Script.bar = new List<string>();
TestUtil.AssertException<RuntimeBinderException>(() => engine.Execute("bar.Add(foo(0))"));
}
[TestMethod, TestCategory("JScriptEngine")]
public void JScriptEngine_PropertyBagInvocability()
{
engine.Script.lib = new HostTypeCollection("mscorlib", "System", "System.Core");
Assert.IsInstanceOfType(engine.Evaluate("lib('System')"), typeof(PropertyBag));
Assert.IsInstanceOfType(engine.Evaluate("lib.System('Collections')"), typeof(PropertyBag));
Assert.IsInstanceOfType(engine.Evaluate("lib('Bogus')"), typeof(Undefined));
Assert.IsInstanceOfType(engine.Evaluate("lib.System('Heinous')"), typeof(Undefined));
TestUtil.AssertException<UnauthorizedAccessException>(() => engine.Execute("lib('Bogus') = 123"));
TestUtil.AssertException<UnauthorizedAccessException>(() => engine.Execute("lib.System('Heinous') = 456"));
engine.Script.foo = new PropertyBag { { "Null", null } };
Assert.IsNull(engine.Evaluate("foo.Null"));
TestUtil.AssertException<InvalidOperationException>(() => engine.Evaluate("foo.Null(123)"));
engine.Execute("foo(null) = 123");
Assert.AreEqual(123, Convert.ToInt32(engine.Evaluate("foo(null)")));
engine.Execute("foo(undefined) = 456");
Assert.AreEqual(456, Convert.ToInt32(engine.Evaluate("foo(undefined)")));
}
// ReSharper restore InconsistentNaming
#endregion

Просмотреть файл

@ -11,5 +11,5 @@ using System.Runtime.InteropServices;
[assembly: AssemblyCopyright("(c) Microsoft Corporation")]
[assembly: ComVisible(false)]
[assembly: AssemblyVersion("5.5.2.0")]
[assembly: AssemblyFileVersion("5.5.2.0")]
[assembly: AssemblyVersion("5.5.3.0")]
[assembly: AssemblyFileVersion("5.5.3.0")]

Просмотреть файл

@ -267,6 +267,53 @@ namespace Microsoft.ClearScript.Test
Assert.IsTrue(engine.GetDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_Evaluate_DocumentInfo_WithDocumentName()
{
const string documentName = "DoTheMath";
engine.EnableDocumentNameTracking();
Assert.AreEqual(Math.E * Math.PI, engine.Evaluate(new DocumentInfo(documentName), "Math.E * Math.PI"));
Assert.IsFalse(engine.GetDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_Evaluate_DocumentInfo_WithDocumentUri()
{
const string documentName = "DoTheMath";
var documentUri = new Uri(@"c:\foo\bar\baz\" + documentName);
engine.EnableDocumentNameTracking();
Assert.AreEqual(Math.E * Math.PI, engine.Evaluate(new DocumentInfo(documentUri) { Flags = DocumentFlags.None }, "Math.E * Math.PI"));
Assert.IsTrue(engine.GetDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_Evaluate_DocumentInfo_WithDocumentUri_Relative()
{
const string documentName = "DoTheMath";
var documentUri = new Uri(documentName, UriKind.Relative);
engine.EnableDocumentNameTracking();
Assert.AreEqual(Math.E * Math.PI, engine.Evaluate(new DocumentInfo(documentUri) { Flags = DocumentFlags.None }, "Math.E * Math.PI"));
Assert.IsTrue(engine.GetDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_Evaluate_DocumentInfo_DiscardDocument()
{
const string documentName = "DoTheMath";
engine.EnableDocumentNameTracking();
Assert.AreEqual(Math.E * Math.PI, engine.Evaluate(new DocumentInfo(documentName) { Flags = DocumentFlags.IsTransient }, "Math.E * Math.PI"));
Assert.IsFalse(engine.GetDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_Evaluate_DocumentInfo_RetainDocument()
{
const string documentName = "DoTheMath";
engine.EnableDocumentNameTracking();
Assert.AreEqual(Math.E * Math.PI, engine.Evaluate(new DocumentInfo(documentName) { Flags = DocumentFlags.None }, "Math.E * Math.PI"));
Assert.IsTrue(engine.GetDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_Execute()
{
@ -304,6 +351,58 @@ namespace Microsoft.ClearScript.Test
Assert.IsTrue(engine.GetDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_Execute_DocumentInfo_WithDocumentName()
{
const string documentName = "DoTheMath";
engine.EnableDocumentNameTracking();
engine.Execute(new DocumentInfo(documentName), "epi = Math.E * Math.PI");
Assert.AreEqual(Math.E * Math.PI, engine.Script.epi);
Assert.IsTrue(engine.GetDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_Execute_DocumentInfo_WithDocumentUri()
{
const string documentName = "DoTheMath";
var documentUri = new Uri(@"c:\foo\bar\baz\" + documentName);
engine.EnableDocumentNameTracking();
engine.Execute(new DocumentInfo(documentUri), "epi = Math.E * Math.PI");
Assert.AreEqual(Math.E * Math.PI, engine.Script.epi);
Assert.IsTrue(engine.GetDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_Execute_DocumentInfo_WithDocumentUri_Relative()
{
const string documentName = "DoTheMath";
var documentUri = new Uri(documentName, UriKind.Relative);
engine.EnableDocumentNameTracking();
engine.Execute(new DocumentInfo(documentUri), "epi = Math.E * Math.PI");
Assert.AreEqual(Math.E * Math.PI, engine.Script.epi);
Assert.IsTrue(engine.GetDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_Execute_DocumentInfo_DiscardDocument()
{
const string documentName = "DoTheMath";
engine.EnableDocumentNameTracking();
engine.Execute(new DocumentInfo(documentName) { Flags = DocumentFlags.IsTransient }, "epi = Math.E * Math.PI");
Assert.AreEqual(Math.E * Math.PI, engine.Script.epi);
Assert.IsFalse(engine.GetDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_Execute_DocumentInfo_RetainDocument()
{
const string documentName = "DoTheMath";
engine.EnableDocumentNameTracking();
engine.Execute(new DocumentInfo(documentName) { Flags = DocumentFlags.None }, "epi = Math.E * Math.PI");
Assert.AreEqual(Math.E * Math.PI, engine.Script.epi);
Assert.IsTrue(engine.GetDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_Execute_CompiledScript()
{
@ -661,12 +760,17 @@ namespace Microsoft.ClearScript.Test
{
// ReSharper disable RedundantAssignment
var x = new object();
var wr = new WeakReference(x);
engine.Script.x = x;
WeakReference wr = null;
x = null;
engine.Script.x = null;
new Action(() =>
{
var x = new object();
wr = new WeakReference(x);
engine.Script.x = x;
x = null;
engine.Script.x = null;
})();
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
GC.WaitForPendingFinalizers();
@ -892,6 +996,8 @@ namespace Microsoft.ClearScript.Test
[TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_General_ParserCache()
{
#pragma warning disable CS0618 // Type or member is obsolete (V8CacheKind.Parser)
engine.Dispose();
engine = new V8ScriptEngine(); // default engine enables debugging, which disables caching
@ -904,7 +1010,7 @@ namespace Microsoft.ClearScript.Test
}
Assert.IsNotNull(cacheBytes);
Assert.IsTrue((cacheBytes.Length > 50) && (cacheBytes.Length < 2000)); // typical size is ~100
Assert.IsTrue(cacheBytes.Length > 2000); // typical size is ~4K
bool cacheAccepted;
using (var script = engine.Compile(generalScript, V8CacheKind.Parser, cacheBytes, out cacheAccepted))
@ -928,11 +1034,15 @@ namespace Microsoft.ClearScript.Test
Assert.AreEqual(MiscHelpers.FormatCode(generalScriptOutput), console.ToString().Replace("\r\n", "\n"));
}
}
#pragma warning restore CS0618 // Type or member is obsolete (V8CacheKind.Parser)
}
[TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_General_ParserCache_BadData()
{
#pragma warning disable CS0618 // Type or member is obsolete (V8CacheKind.Parser)
engine.Dispose();
engine = new V8ScriptEngine(); // default engine enables debugging, which disables caching
@ -945,7 +1055,7 @@ namespace Microsoft.ClearScript.Test
}
Assert.IsNotNull(cacheBytes);
Assert.IsTrue((cacheBytes.Length > 50) && (cacheBytes.Length < 2000)); // typical size is ~100
Assert.IsTrue(cacheBytes.Length > 2000); // typical size is ~4K
cacheBytes = cacheBytes.Take(cacheBytes.Length - 1).ToArray();
@ -971,11 +1081,15 @@ namespace Microsoft.ClearScript.Test
Assert.AreEqual(MiscHelpers.FormatCode(generalScriptOutput), console.ToString().Replace("\r\n", "\n"));
}
}
#pragma warning restore CS0618 // Type or member is obsolete (V8CacheKind.Parser)
}
[TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_General_ParserCache_DebuggingEnabled()
{
#pragma warning disable CS0618 // Type or member is obsolete (V8CacheKind.Parser)
byte[] cacheBytes;
using (var tempEngine = new V8ScriptEngine())
{
@ -985,7 +1099,7 @@ namespace Microsoft.ClearScript.Test
}
Assert.IsNotNull(cacheBytes);
Assert.IsTrue((cacheBytes.Length > 50) && (cacheBytes.Length < 2000)); // typical size is ~100
Assert.IsTrue(cacheBytes.Length > 2000); // typical size is ~4K
bool cacheAccepted;
using (var script = engine.Compile(generalScript, V8CacheKind.Parser, cacheBytes, out cacheAccepted))
@ -1009,6 +1123,8 @@ namespace Microsoft.ClearScript.Test
Assert.AreEqual(MiscHelpers.FormatCode(generalScriptOutput), console.ToString().Replace("\r\n", "\n"));
}
}
#pragma warning restore CS0618 // Type or member is obsolete (V8CacheKind.Parser)
}
[TestMethod, TestCategory("V8ScriptEngine")]
@ -1608,6 +1724,14 @@ namespace Microsoft.ClearScript.Test
Assert.AreEqual("bar+baz+qux", engine.Evaluate("host.toStaticType(testObject).SomeMethod('foo', 'bar', 'baz', 'qux')"));
}
[TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_DynamicHostObject_StaticType_Invoke()
{
engine.Script.testObject = new DynamicTestObject();
engine.Script.host = new HostFunctions();
TestUtil.AssertException<ScriptEngineException>(() => engine.Evaluate("host.toStaticType(testObject)('foo', 'bar', 'baz', 'qux')"));
}
[TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_DynamicHostObject_Property()
{
@ -1691,6 +1815,15 @@ namespace Microsoft.ClearScript.Test
Assert.IsTrue((bool)engine.Evaluate("delete testObject['foo']"));
Assert.IsInstanceOfType(engine.Evaluate("testObject['foo']"), typeof(Undefined));
Assert.IsInstanceOfType(engine.Evaluate("host.getElement(testObject, 'foo')"), typeof(Undefined));
Assert.IsInstanceOfType(engine.Evaluate("testObject('foo', 'bar', 'baz')"), typeof(Undefined));
Assert.IsInstanceOfType(engine.Evaluate("host.getElement(testObject, 'foo', 'bar', 'baz')"), typeof(Undefined));
Assert.AreEqual("qux", engine.Evaluate("host.setElement(testObject, 'qux', 'foo', 'bar', 'baz')"));
Assert.AreEqual("qux", engine.Evaluate("testObject('foo', 'bar', 'baz')"));
Assert.AreEqual("qux", engine.Evaluate("host.getElement(testObject, 'foo', 'bar', 'baz')"));
Assert.IsInstanceOfType(engine.Evaluate("host.setElement(testObject, undefined, 'foo', 'bar', 'baz')"), typeof(Undefined));
Assert.IsInstanceOfType(engine.Evaluate("testObject('foo', 'bar', 'baz')"), typeof(Undefined));
Assert.IsInstanceOfType(engine.Evaluate("host.getElement(testObject, 'foo', 'bar', 'baz')"), typeof(Undefined));
}
[TestMethod, TestCategory("V8ScriptEngine")]
@ -2708,6 +2841,71 @@ namespace Microsoft.ClearScript.Test
Assert.IsTrue(Math.Abs(((DateTime)utcNowObj - utcEpoch).TotalMilliseconds - Convert.ToDouble(engine.Evaluate("now.valueOf()"))) <= 1.0);
}
[TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_typeof()
{
engine.Script.foo = new Random();
Assert.AreEqual("object", engine.Evaluate("typeof foo"));
Assert.AreEqual("function", engine.Evaluate("typeof foo.ToString"));
engine.Script.foo = Enumerable.Range(0, 5).ToArray();
Assert.AreEqual("object", engine.Evaluate("typeof foo"));
engine.Script.foo = new ArrayList();
Assert.AreEqual("object", engine.Evaluate("typeof foo"));
engine.Script.foo = new BitArray(100);
Assert.AreEqual("object", engine.Evaluate("typeof foo"));
engine.Script.foo = new Hashtable();
Assert.AreEqual("object", engine.Evaluate("typeof foo"));
engine.Script.foo = new Queue();
Assert.AreEqual("object", engine.Evaluate("typeof foo"));
engine.Script.foo = new SortedList();
Assert.AreEqual("object", engine.Evaluate("typeof foo"));
engine.Script.foo = new Stack();
Assert.AreEqual("object", engine.Evaluate("typeof foo"));
engine.Script.foo = new List<string>();
Assert.AreEqual("object", engine.Evaluate("typeof foo"));
Assert.AreEqual("function", engine.Evaluate("typeof foo.Item"));
engine.Script.foo = new ExpandoObject();
engine.Script.host = new HostFunctions();
Assert.AreEqual("object", engine.Evaluate("typeof foo"));
Assert.AreEqual("object", engine.Evaluate("typeof host.toStaticType(foo)"));
}
[TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_ArrayInvocability()
{
engine.Script.foo = Enumerable.Range(123, 5).ToArray();
Assert.AreEqual(124, engine.Evaluate("foo(1)"));
engine.Script.foo = new IConvertible[] { "bar" };
Assert.AreEqual("bar", engine.Evaluate("foo(0)"));
engine.Script.bar = new List<string>();
TestUtil.AssertException<RuntimeBinderException>(() => engine.Execute("bar.Add(foo(0))"));
}
[TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_PropertyBagInvocability()
{
engine.Script.lib = new HostTypeCollection("mscorlib", "System", "System.Core");
Assert.IsInstanceOfType(engine.Evaluate("lib('System')"), typeof(PropertyBag));
Assert.IsInstanceOfType(engine.Evaluate("lib.System('Collections')"), typeof(PropertyBag));
Assert.IsInstanceOfType(engine.Evaluate("lib('Bogus')"), typeof(Undefined));
Assert.IsInstanceOfType(engine.Evaluate("lib.System('Heinous')"), typeof(Undefined));
engine.Script.foo = new PropertyBag { { "Null", null } };
Assert.IsNull(engine.Evaluate("foo.Null"));
TestUtil.AssertException<InvalidOperationException>(() => engine.Evaluate("foo.Null(123)"));
}
// ReSharper restore InconsistentNaming
#endregion

Просмотреть файл

@ -273,6 +273,48 @@ namespace Microsoft.ClearScript.Test
Assert.IsTrue(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("VBScriptEngine")]
public void VBScriptEngine_Evaluate_DocumentInfo_WithDocumentName()
{
const string documentName = "DoTheMath";
Assert.AreEqual(Math.E * Math.PI, engine.Evaluate(new DocumentInfo(documentName), "e * pi"));
Assert.IsFalse(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("VBScriptEngine")]
public void VBScriptEngine_Evaluate_DocumentInfo_WithDocumentUri()
{
const string documentName = "DoTheMath";
var documentUri = new Uri(@"c:\foo\bar\baz\" + documentName);
Assert.AreEqual(Math.E * Math.PI, engine.Evaluate(new DocumentInfo(documentUri) { Flags = DocumentFlags.None }, "e * pi"));
Assert.IsTrue(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("VBScriptEngine")]
public void VBScriptEngine_Evaluate_DocumentInfo_WithDocumentUri_Relative()
{
const string documentName = "DoTheMath";
var documentUri = new Uri(documentName, UriKind.Relative);
Assert.AreEqual(Math.E * Math.PI, engine.Evaluate(new DocumentInfo(documentUri) { Flags = DocumentFlags.None }, "e * pi"));
Assert.IsTrue(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("VBScriptEngine")]
public void VBScriptEngine_Evaluate_DocumentInfo_DiscardDocument()
{
const string documentName = "DoTheMath";
Assert.AreEqual(Math.E * Math.PI, engine.Evaluate(new DocumentInfo(documentName) { Flags = DocumentFlags.IsTransient }, "e * pi"));
Assert.IsFalse(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("VBScriptEngine")]
public void VBScriptEngine_Evaluate_DocumentInfo_RetainDocument()
{
const string documentName = "DoTheMath";
Assert.AreEqual(Math.E * Math.PI, engine.Evaluate(new DocumentInfo(documentName) { Flags = DocumentFlags.None }, "e * pi"));
Assert.IsTrue(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("VBScriptEngine")]
public void VBScriptEngine_Execute()
{
@ -307,6 +349,53 @@ namespace Microsoft.ClearScript.Test
Assert.IsTrue(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("VBScriptEngine")]
public void VBScriptEngine_Execute_DocumentInfo_WithDocumentName()
{
const string documentName = "DoTheMath";
engine.Execute(new DocumentInfo(documentName), "epi = e * pi");
Assert.AreEqual(Math.E * Math.PI, engine.Script.epi);
Assert.IsTrue(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("VBScriptEngine")]
public void VBScriptEngine_Execute_DocumentInfo_WithDocumentUri()
{
const string documentName = "DoTheMath";
var documentUri = new Uri(@"c:\foo\bar\baz\" + documentName);
engine.Execute(new DocumentInfo(documentUri), "epi = e * pi");
Assert.AreEqual(Math.E * Math.PI, engine.Script.epi);
Assert.IsTrue(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("VBScriptEngine")]
public void VBScriptEngine_Execute_DocumentInfo_WithDocumentUri_Relative()
{
const string documentName = "DoTheMath";
var documentUri = new Uri(documentName, UriKind.Relative);
engine.Execute(new DocumentInfo(documentUri), "epi = e * pi");
Assert.AreEqual(Math.E * Math.PI, engine.Script.epi);
Assert.IsTrue(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("VBScriptEngine")]
public void VBScriptEngine_Execute_DocumentInfo_DiscardDocument()
{
const string documentName = "DoTheMath";
engine.Execute(new DocumentInfo(documentName) { Flags = DocumentFlags.IsTransient }, "epi = e * pi");
Assert.AreEqual(Math.E * Math.PI, engine.Script.epi);
Assert.IsFalse(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("VBScriptEngine")]
public void VBScriptEngine_Execute_DocumentInfo_RetainDocument()
{
const string documentName = "DoTheMath";
engine.Execute(new DocumentInfo(documentName) { Flags = DocumentFlags.None }, "epi = e * pi");
Assert.AreEqual(Math.E * Math.PI, engine.Script.epi);
Assert.IsTrue(engine.GetDebugDocumentNames().Any(name => name.StartsWith(documentName, StringComparison.Ordinal)));
}
[TestMethod, TestCategory("VBScriptEngine")]
public void VBScriptEngine_ExecuteCommand_EngineConvert()
{
@ -848,6 +937,14 @@ namespace Microsoft.ClearScript.Test
Assert.AreEqual("bar+baz+qux", engine.Evaluate("host.toStaticType(testObject).SomeMethod(\"foo\", \"bar\", \"baz\", \"qux\")"));
}
[TestMethod, TestCategory("VBScriptEngine")]
public void VBScriptEngine_DynamicHostObject_StaticType_Invoke()
{
engine.Script.testObject = new DynamicTestObject();
engine.Script.host = new HostFunctions();
TestUtil.AssertException<NotSupportedException>(() => engine.Evaluate("host.toStaticType(testObject)(\"foo\", \"bar\", \"baz\", \"qux\")"));
}
[TestMethod, TestCategory("VBScriptEngine")]
public void VBScriptEngine_DynamicHostObject_Property()
{
@ -2288,6 +2385,43 @@ namespace Microsoft.ClearScript.Test
Assert.IsNotNull(obj);
Assert.AreSame(engine, obj.Engine);
}
[TestMethod, TestCategory("VBScriptEngine")]
public void VBScriptEngine_ArrayInvocability()
{
engine.Script.foo = Enumerable.Range(123, 5).ToArray();
Assert.AreEqual(124, engine.Evaluate("foo(1)"));
engine.Execute("foo(1) = 456");
Assert.AreEqual(456, engine.Evaluate("foo(1)"));
engine.Script.foo = new IConvertible[] { "bar" };
Assert.AreEqual("bar", engine.Evaluate("foo(0)"));
engine.Execute("foo(0) = \"baz\"");
Assert.AreEqual("baz", engine.Evaluate("foo(0)"));
engine.Script.bar = new List<string>();
TestUtil.AssertException<RuntimeBinderException>(() => engine.Execute("bar.Add(foo(0))"));
}
[TestMethod, TestCategory("VBScriptEngine")]
public void VBScriptEngine_PropertyBagInvocability()
{
engine.Script.lib = new HostTypeCollection("mscorlib", "System", "System.Core");
Assert.IsInstanceOfType(engine.Evaluate("lib(\"System\")"), typeof(PropertyBag));
Assert.IsInstanceOfType(engine.Evaluate("lib.System(\"Collections\")"), typeof(PropertyBag));
Assert.IsInstanceOfType(engine.Evaluate("lib(\"Bogus\")"), typeof(Undefined));
Assert.IsInstanceOfType(engine.Evaluate("lib.System(\"Heinous\")"), typeof(Undefined));
TestUtil.AssertException<UnauthorizedAccessException>(() => engine.Execute("lib(\"Bogus\") = 123"));
TestUtil.AssertException<UnauthorizedAccessException>(() => engine.Execute("lib.System(\"Heinous\") = 456"));
engine.Script.foo = new PropertyBag { { "Null", null } };
Assert.IsNull(engine.Evaluate("foo.Null"));
TestUtil.AssertException<InvalidOperationException>(() => engine.Evaluate("foo.Null(123)"));
engine.Execute("foo(null) = 123");
Assert.AreEqual(123, Convert.ToInt32(engine.Evaluate("foo(null)")));
engine.Execute("foo(empty) = 456");
Assert.AreEqual(456, Convert.ToInt32(engine.Evaluate("foo(empty)")));
}
// ReSharper restore InconsistentNaming

Просмотреть файл

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="net45" />
</packages>

Просмотреть файл

@ -3,7 +3,7 @@ ClearScript is a library that makes it easy to add scripting to your .NET applic
# Features
* Simple usage; create a script engine, add your objects and/or types, run scripts
* Support for several script engines: [Google's V8](https://developers.google.com/v8/), [Microsoft's JScript](http://msdn.microsoft.com/en-us/library/hbxc2t98(v=vs.84).aspx) and [VBScript](http://msdn.microsoft.com/en-us/library/t0aew7h6(v=vs.84).aspx)
* Support for several script engines: [Google's V8](https://developers.google.com/v8/), [Microsoft's JScript](https://msdn.microsoft.com/en-us/library/hbxc2t98.aspx) and [VBScript](http://msdn.microsoft.com/en-us/library/t0aew7h6.aspx)
* Exposed resources require no modification, decoration, or special coding of any kind
* Scripts get simple access to most of the features of exposed objects and types:
* Methods, properties, fields, events

Просмотреть файл

@ -5,21 +5,14 @@ setlocal
:: process arguments
::-----------------------------------------------------------------------------
set v8testedrev=6.5.254.41
set gyprev=d61a9397e668fa9843c4aa7da9e79460fe590bfb
set clangrev=27088876ff821e8a1518383576a43662a3255d56
set traceeventcommonrev=0e9a47d74970bee1bbfc063c47215406f8918699
set gtestrev=6f8a66431cb592dad629028a50b3dd418a408c87
set gmockrev=0421b6f358139f02e102c9c332ce19a33faf75be
set jinja2rev=d34383206fa42d52faa10bb9931d6d538f3a57e0
set markupsaferev=8f45f5cfa0009d2a70589bcda0349b8cb2b72783
set v8testedrev=6.8.275.28
:ProcessArgs
set download=true
set mode=Release
set isdebug=false
set isofficial=true
:ProcessArg
if "%1"=="" goto ProcessArgsDone
@ -50,10 +43,12 @@ goto NextArg
:SetDebugMode
set mode=Debug
set isdebug=true
set isofficial=false
goto NextArg
:SetReleaseMode
set mode=Release
set isdebug=false
set isofficial=true
goto NextArg
:SetV8Rev
@ -83,7 +78,6 @@ echo Error: This script requires a Visual Studio 2017 Developer Command Prompt.
echo Browse to http://www.visualstudio.com for more information.
goto Exit
:UseMSVS2017
set GYP_MSVS_VERSION=2017
:CheckMSVSDone
::-----------------------------------------------------------------------------
@ -96,6 +90,8 @@ echo Build mode: %mode%
cd ClearScript\v8\v8
if errorlevel 1 goto Exit
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
if /i "%download%"=="true" goto Download
if exist build\ goto SkipDownload
@ -106,6 +102,7 @@ goto Download
:SkipDownload
cd build
path %cd%\DepotTools;%path%
goto Build
::-----------------------------------------------------------------------------
@ -148,98 +145,40 @@ if errorlevel 1 goto Error
cd build
:DownloadV8
echo Downloading V8 ...
git clone -n -q https://chromium.googlesource.com/v8/v8.git
:DownloadDepotTools
echo Downloading Depot Tools ...
powershell -Command "(New-Object Net.WebClient).DownloadFile('https://storage.googleapis.com/chrome-infra/depot_tools.zip', 'DepotTools.zip')"
if errorlevel 1 goto Error
cd v8
git checkout -q "%v8rev%"
:DownloadDepotToolsDone
:ExpandDepotTools
echo Expanding Depot Tools ...
powershell -Command "Add-Type -AssemblyName System.IO.Compression.FileSystem; [IO.Compression.ZipFile]::ExtractToDirectory('DepotTools.zip', 'DepotTools')"
if errorlevel 1 goto Error
cd ..
:DownloadV8Done
:ExpandDepotToolsDone
path %cd%\DepotTools;%path%
:SyncClient
echo Downloading V8 and dependencies ...
call gclient config https://chromium.googlesource.com/v8/v8 >config.log
if errorlevel 1 goto Error
call gclient sync -r %v8rev% >sync.log
if errorlevel 1 goto Error
:SyncClientDone
cd v8
:PatchV8
echo Patching V8 ...
git config user.name ClearScript
call git config user.name ClearScript
if errorlevel 1 goto Error
git config user.email "ClearScript@microsoft.com"
call git config user.email "ClearScript@microsoft.com"
if errorlevel 1 goto Error
git apply --ignore-whitespace ..\..\V8Patch.txt 2>applyPatch.log
call git apply --ignore-whitespace ..\..\V8Patch.txt 2>applyPatch.log
if errorlevel 1 goto Error
:PatchV8Done
:DownloadGYP
echo Downloading GYP ...
git clone -n -q https://chromium.googlesource.com/external/gyp.git tools/gyp
if errorlevel 1 goto Error
cd tools\gyp
git checkout -q "%gyprev%"
if errorlevel 1 goto Error
cd ..\..
:DownloadGYPDone
:DownloadClang
echo Downloading Clang ...
git clone -n -q https://chromium.googlesource.com/chromium/src/tools/clang.git tools/clang
if errorlevel 1 goto Error
cd tools\clang
git checkout -q "%clangrev%"
if errorlevel 1 goto Error
cd ..\..
:DownloadClangDone
:DownloadTraceEventCommon
echo Downloading TraceEventCommon ...
git clone -n -q https://chromium.googlesource.com/chromium/src/base/trace_event/common.git base/trace_event/common
if errorlevel 1 goto Error
cd base\trace_event\common
git checkout -q "%traceeventcommonrev%"
if errorlevel 1 goto Error
cd ..\..\..
:DownloadTraceEventCommonDone
:DownloadGTest
echo Downloading GTest ...
git clone -n -q https://chromium.googlesource.com/external/github.com/google/googletest.git testing/gtest
if errorlevel 1 goto Error
cd testing\gtest
git checkout -q "%gtestrev%"
if errorlevel 1 goto Error
cd ..\..
:DownloadGTestDone
:DownloadGMock
echo Downloading GMock ...
git clone -n -q https://chromium.googlesource.com/external/googlemock.git testing/gmock
if errorlevel 1 goto Error
cd testing\gmock
git checkout -q "%gmockrev%"
if errorlevel 1 goto Error
cd ..\..
:DownloadGMockDone
:DownloadJinja2
echo Downloading Jinja2 ...
git clone -n -q https://chromium.googlesource.com/chromium/src/third_party/markupsafe.git third_party/markupsafe
if errorlevel 1 goto Error
cd third_party\markupsafe
git checkout -q "%markupsaferev%"
if errorlevel 1 goto Error
cd ..\..
:DownloadJinja2Done
:DownloadMarkupSafe
echo Downloading MarkupSafe ...
git clone -n -q https://chromium.googlesource.com/chromium/src/third_party/jinja2.git third_party/jinja2
if errorlevel 1 goto Error
cd third_party\jinja2
git checkout -q "%jinja2rev%"
if errorlevel 1 goto Error
cd ..\..
:DownloadMarkupSafeDone
cd ..
:DownloadDone
@ -250,46 +189,34 @@ cd ..
:Build
set GYP_CHROMIUM_NO_ACTION=0
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
set GYP_GENERATORS=msvs
:CreatePatchFile
echo Creating patch file ...
cd v8
git diff --ignore-space-change --ignore-space-at-eol >V8Patch.txt 2>createPatch.log
call git diff --ignore-space-change --ignore-space-at-eol >V8Patch.txt 2>createPatch.log
if errorlevel 1 goto Error
cd ..
:CreatePatchFileDone
:Copy32Bit
echo Building 32-bit V8 ...
if exist v8-ia32\ goto Copy32BitDone
robocopy v8 v8-ia32 /mir /xd .git >nul
if errorlevel 8 goto Error
:Copy32BitDone
:Build32Bit
cd v8-ia32
python gypfiles\gyp_v8 -Dtarget_arch=ia32 -Dcomponent=shared_library -Dis_debug=%isdebug% -Dv8_use_snapshot=true -Dv8_use_external_startup_data=0 -Dv8_enable_i18n_support=0 >gyp.log
echo Building 32-bit V8 ...
cd v8
call "%VSINSTALLDIR%\VC\Auxiliary\Build\vcvarsall" x86 >nul
if errorlevel 1 goto Error
msbuild /p:Configuration=%mode% /p:Platform=Win32 /t:v8 src\v8.sln >build.log
call gn gen out\ia32\%mode% --args="fatal_linker_warnings=false is_component_build=true is_debug=%isdebug% is_official_build=%isofficial% target_cpu=\"x86\" v8_enable_i18n_support=false v8_target_cpu=\"x86\" v8_use_external_startup_data=false v8_use_snapshot=true enable_precompiled_headers=false" >gn.log
if errorlevel 1 goto Error
ninja -C out\ia32\%mode% v8-ia32.dll >build-ia32.log
if errorlevel 1 goto Error
cd ..
:Build32BitDone
:Copy64Bit
echo Building 64-bit V8 ...
if exist v8-x64\ goto Copy64BitDone
robocopy v8 v8-x64 /mir /xd .git >nul
if errorlevel 8 goto Error
:Copy64BitDone
:Build64Bit
cd v8-x64
python gypfiles\gyp_v8 -Dtarget_arch=x64 -Dcomponent=shared_library -Dis_debug=%isdebug% -Dv8_use_snapshot=true -Dv8_use_external_startup_data=0 -Dv8_enable_i18n_support=0 >gyp.log
echo Building 64-bit V8 ...
cd v8
call "%VSINSTALLDIR%\VC\Auxiliary\Build\vcvarsall" x64 >nul
if errorlevel 1 goto Error
msbuild /p:Configuration=%mode% /p:Platform=x64 /t:v8 src\v8.sln >build.log
call gn gen out\x64\%mode% --args="fatal_linker_warnings=false is_component_build=true is_debug=%isdebug% is_official_build=%isofficial% target_cpu=\"x64\" v8_enable_i18n_support=false v8_target_cpu=\"x64\" v8_use_external_startup_data=false v8_use_snapshot=true enable_precompiled_headers=false" >gn.log
if errorlevel 1 goto Error
ninja -C out\x64\%mode% v8-x64.dll >build-x64.log
if errorlevel 1 goto Error
cd ..
:Build64BitDone
@ -316,25 +243,25 @@ if errorlevel 1 goto Error
:ImportLibs
echo Importing V8 libraries ...
copy build\v8-ia32\src\%mode%\v8-base-ia32.dll lib\ >nul
copy build\v8\out\ia32\%mode%\v8-base-ia32.dll lib\ >nul
if errorlevel 1 goto Error
copy build\v8-ia32\src\%mode%\v8-base-ia32.pdb lib\ >nul
copy build\v8\out\ia32\%mode%\v8-base-ia32.dll.pdb lib\ >nul
if errorlevel 1 goto Error
copy build\v8-ia32\src\%mode%\v8-ia32.dll lib\ >nul
copy build\v8\out\ia32\%mode%\v8-ia32.dll lib\ >nul
if errorlevel 1 goto Error
copy build\v8-ia32\src\%mode%\v8-ia32.pdb lib\ >nul
copy build\v8\out\ia32\%mode%\v8-ia32.dll.pdb lib\ >nul
if errorlevel 1 goto Error
copy build\v8-ia32\src\%mode%\lib\v8-ia32.lib lib\ >nul
copy build\v8\out\ia32\%mode%\v8-ia32.dll.lib lib\ >nul
if errorlevel 1 goto Error
copy build\v8-x64\src\%mode%\v8-base-x64.dll lib\ >nul
copy build\v8\out\x64\%mode%\v8-base-x64.dll lib\ >nul
if errorlevel 1 goto Error
copy build\v8-x64\src\%mode%\v8-base-x64.pdb lib\ >nul
copy build\v8\out\x64\%mode%\v8-base-x64.dll.pdb lib\ >nul
if errorlevel 1 goto Error
copy build\v8-x64\src\%mode%\v8-x64.dll lib\ >nul
copy build\v8\out\x64\%mode%\v8-x64.dll lib\ >nul
if errorlevel 1 goto Error
copy build\v8-x64\src\%mode%\v8-x64.pdb lib\ >nul
copy build\v8\out\x64\%mode%\v8-x64.dll.pdb lib\ >nul
if errorlevel 1 goto Error
copy build\v8-x64\src\%mode%\lib\v8-x64.lib lib\ >nul
copy build\v8\out\x64\%mode%\v8-x64.dll.lib lib\ >nul
if errorlevel 1 goto Error
:ImportLibsDone

Просмотреть файл

@ -1 +1 @@
<# var version = new Version(5, 5, 2, 0); #>
<# var version = new Version(5, 5, 3, 0); #>

Просмотреть файл

@ -1,4 +1,4 @@
<html>
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=UTF-8">
@ -187,8 +187,8 @@ ul
<div style='border:none;border-bottom:solid #4F81BD 1.0pt;padding:0in 0in 4.0pt 0in'>
<p class=MsoTitle style='margin-top:0in'>Building, Integrating, and Deploying
ClearScript</p>
<p class=MsoTitle style='margin-top:0in'><a name="OLE_LINK9">Building,
Integrating, and Deploying ClearScript</a></p>
</div>
@ -198,30 +198,51 @@ ClearScript</p>
<p class=MsoNormal style='margin-left:.25in'>Welcome to ClearScript!</p>
<p class=MsoNormal style='margin-left:.25in'>ClearScript is a library that
allows you to add scripting to your .NET applications. It supports <a
href="https://msdn.microsoft.com/en-us/library/hbxc2t98(v=vs.84).aspx">JScript</a>
and <a href="https://msdn.microsoft.com/en-us/library/t0aew7h6(v=vs.84).aspx">VBScript</a>
out of the box and in theory can work with other <a
href="http://msdn.microsoft.com/en-us/library/bb871518.aspx">Windows Script</a>
allows you to add scripting to your .NET applications. It supports <span
class=MsoHyperlink><a
href="https://msdn.microsoft.com/en-us/library/hbxc2t98(v=vs.84).aspx">JScript</a></span>
and <span class=MsoHyperlink><a
href="https://msdn.microsoft.com/en-us/library/t0aew7h6(v=vs.84).aspx">VBScript</a></span>
out of the box and in theory can work with other <span class=MsoHyperlink><a
href="http://msdn.microsoft.com/en-us/library/bb871518.aspx">Windows Script</a></span>
engines.</p>
<p class=MsoNormal style='margin-left:.25in'>ClearScript 5 adds support for the
<a href="https://developers.google.com/v8/">V8</a> high-performance open-source
JavaScript engine. It allows you to use V8 with the same managed API and host
integration features as JScript and VBScript. V8 provides better performance,
however, and is more suitable for multi-threaded applications and asynchronous
server-side scripting.</p>
<span class=MsoHyperlink><a href="https://developers.google.com/v8/">V8</a></span>
high-performance open-source JavaScript engine. It allows you to use V8 with
the same managed API and host integration features as JScript and VBScript. V8
provides better performance, however, and is more suitable for multi-threaded
applications and asynchronous server-side scripting.</p>
<h1 style='margin-top:14.0pt;margin-right:0in;margin-bottom:0in;margin-left:
.5in;margin-bottom:.0001pt;text-indent:-.5in'><span style='font:7.0pt "Times New Roman"'> </span>II.
Building ClearScript</h1>
<p class=MsoNormal style='margin-left:.25in'><a name="OLE_LINK13"></a><a
name="OLE_LINK20"></a><a name="OLE_LINK15"></a><a name="OLE_LINK19">The ClearScript
source code </a><a name="OLE_LINK25">is hosted </a>in a <a
href="http://www.git-scm.com/download/win">Git</a> repository. If youre installing
Git for the first time, select the options <b>Use Git from the Windows Command
Prompt</b> and <b>Checkout Windows-style, commit Unix-style line endings</b>.
If you already have Git installed, use <a
href="https://git-scm.com/docs/git-config"><span style='font-size:10.0pt;
line-height:115%;font-family:Consolas'>git-config</span></a> to ensure that the
<b><span style='font-size:10.0pt;line-height:115%;font-family:Consolas'>core.autocrlf</span>
</b>variable is set to <b><span style='font-size:10.0pt;line-height:115%;
font-family:Consolas'>true</span></b>.</p>
<p class=MsoNormal style='margin-left:.25in'>Use <a
href="https://git-scm.com/docs/git-clone"><span style='font-size:10.0pt;
line-height:115%;font-family:Consolas'>git-clone</span></a> to download the <a
href="https://github.com/Microsoft/ClearScript">ClearScript source code</a>
into a convenient directory.</p>
<p class=MsoNormal style='margin-left:.25in'>The provided project and solution
files support Visual Studio <a
href="https://www.visualstudio.com/vs/older-downloads/">2015</a> and <a
href="https://www.visualstudio.com/downloads/">2017</a>. They produce
architecture-neutral managed libraries that target .NET Framework 4.5.
ClearScript does not support older environments. The output directory is <b><span
files support Visual Studio <span class=MsoHyperlink><a
href="https://www.visualstudio.com/vs/older-downloads/">2015</a></span> and <span
class=MsoHyperlink><a href="https://www.visualstudio.com/downloads/">2017</a></span>.
They produce architecture-neutral managed libraries that target .NET Framework
4.5. ClearScript does not support older environments. The output directory is <b><span
style='font-size:10.0pt;line-height:115%;font-family:Consolas'>bin\[Debug|Release]</span></b>.</p>
<p class=MsoNormal style='margin-left:.25in'>There are two ways to build
@ -238,59 +259,85 @@ style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span
style='color:#00B050'>Note:</span></b> This procedure and the V8Update script
are provided for your convenience. ClearScript does not include V8 source code,
nor does it come with any third-party software required to download and build
V8. Rights to V8 and its prerequisites are provided by their rights holders.</p>
V8. Rights to V8 and its dependencies are provided by their respective rights
holders.</p>
<p class=MsoListParagraph style='margin-left:.75in;text-indent:-.25in'>2.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span
style='color:red'>Important:</span></b> Because of changes in V8 5.4, this procedure
and the V8Update script now require a 64-bit operating system. Once built,
ClearScript can still be deployed in a 32-bit environment.</p>
style='color:red'>Important:</span></b> Ensure that the path to your
ClearScript root directory does not contain spaces or non-ASCII characters.</p>
<p class=MsoListParagraph style='margin-left:.75in;text-indent:-.25in'>3.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span
style='color:red'>Important:</span></b> Although ClearScript still supports Visual
Studio 2015, V8 and the V8Update script now require Visual Studio 2017.</p>
style='color:red'>Important:</span></b> The V8 build now requires Visual Studio
2017 and a 64-bit operating system. Your Visual Studio installation must
include the <b>.NET desktop development</b> and <b>Desktop development with C++</b>
workloads. Once built, ClearScript can still be deployed in a 32-bit
environment.</p>
<p class=MsoListParagraph style='margin-left:.75in;text-indent:-.25in'>4.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Install
<a href="http://www.git-scm.com/download/win">Git</a>. Ensure that Git is added
to your executable path by selecting the option <b>Use Git from the Windows
Command Prompt</b>.</p>
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span
style='color:#00B050'>Recommended:</span></b> To avoid V8 build issues, we
recommend that you install the latest version of the <span class=MsoHyperlink><a
href="https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk">Windows
10 SDK</a></span> and uninstall all earlier versions.</p>
<p class=MsoListParagraph style='margin-left:.75in;text-indent:-.25in'>5.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Install
the latest Python 2.x from <a href="http://www.python.org/downloads/">here</a>
and add it to your executable path. V8's build process requires at least Python
2.7 and does not support Python 3.x.</p>
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span
style='color:red'>Important:</span></b> Your Windows SDK installation must
include the <b>Debugging Tools for Windows</b> feature. Heres how to add it to
your installation:</p>
<p class=MsoListParagraph style='margin-left:1.25in;text-indent:-.25in'>a.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Launch
Control Panel and click <b>Programs</b><b>Programs and Features</b>.</p>
<p class=MsoListParagraph style='margin-left:1.25in;text-indent:-.25in'>b.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Right-click
your Windows SDK version and select <b>Change</b>.</p>
<p class=MsoListParagraph style='margin-left:1.25in;text-indent:-.25in'>c.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Click
<b>Next</b>, check <b>Debugging</b> <b>Tools</b> <b>for</b> <b>Windows</b>, and
click <b>Change</b>.</p>
<p class=MsoListParagraph style='margin-left:.75in;text-indent:-.25in'>6.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Unzip
or clone the <a href="https://github.com/Microsoft/ClearScript">ClearScript
source code</a> into a convenient directory. <b><span style='color:red'>Important:</span></b>
Ensure that the path to your ClearScript root directory does not contain any
non-ASCII characters.</p>
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span
style='color:red'>Important:</span></b> The V8Update script downloads
executables that Windows Defender may incorrectly identify as containers of
malware. To prevent this from interfering with your build, ensure that
real-time malware protection is turned off while the script is running:</p>
<p class=MsoListParagraph style='margin-left:1.25in;text-indent:-.25in'>a.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Launch
Windows Defender Security Center.</p>
<p class=MsoListParagraph style='margin-left:1.25in;text-indent:-.25in'>b.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Navigate
to <b>Virus &amp; threat protection</b><b>Virus &amp; threat protection
settings</b>.</p>
<p class=MsoListParagraph style='margin-left:1.25in;text-indent:-.25in'>c.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Switch
<b>Real-time protection</b> off.</p>
<p class=MsoListParagraph style='margin-left:.75in;text-indent:-.25in'>7.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Ensure
that your Visual Studio installation includes C++ support.</p>
<p class=MsoListParagraph style='margin-left:.75in;text-indent:-.25in'>8.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Open
a <a href="https://www.visualstudio.com/downloads/">Visual Studio 2017</a>
developer command prompt and run the <b><span style='font-size:10.0pt;
line-height:115%;font-family:Consolas'>V8Update</span></b> script from your
ClearScript root directory:</p>
a <span class=MsoHyperlink><a href="https://www.visualstudio.com/downloads/">Visual
Studio 2017</a></span> developer command prompt and run the <b><span
style='font-size:10.0pt;line-height:115%;font-family:Consolas'>V8Update</span></b>
script from your ClearScript root directory:</p>
<p class=MsoNormal style='margin-top:10.0pt;margin-right:36.7pt;margin-bottom:
14.0pt;margin-left:1.0in;background:#F2F2F2'><b><span style='font-size:10.0pt;
line-height:115%;font-family:Consolas'>C:\ClearScript&gt; V8Update [/N]
[Debug|Release] [Latest|Tested|&lt;Revision&gt;]</span></b></p>
line-height:115%;font-family:Consolas'>C:\ClearScript&gt; V8Update [/N] [Debug|<a
name="OLE_LINK16">Release</a>] [Latest|Tested|&lt;Revision&gt;]</span></b></p>
<p class=MsoNormal style='margin-left:.75in'>This script downloads the V8
source code and its prerequisites, builds 32-bit and 64-bit V8 shared
libraries, and imports the results into ClearScript. It requires approximately
3GB of additional disk space and does not perform any permanent software
installation on your machine.</p>
source code and its dependencies, builds 32-bit and 64-bit V8 shared libraries,
and imports the results into ClearScript. It requires approximately 6GB of
additional disk space and does not perform any permanent software installation
on your machine.</p>
<p class=MsoNormal style='margin-left:.75in'>The optional <b><span
style='font-size:10.0pt;line-height:115%;font-family:Consolas'>/N</span></b>
@ -311,8 +358,8 @@ builds a V8 revision that has been tested with the current version of
ClearScript. If you'd like to use a specific revision instead, place the
desired branch name, commit ID, or tag on the <b><span style='font-size:10.0pt;
line-height:115%;font-family:Consolas'>V8Update</span></b> command line. Browse
<a href="https://chromium.googlesource.com/v8/v8.git">here</a> to view V8's
revision history.</p>
<span class=MsoHyperlink><a href="https://chromium.googlesource.com/v8/v8.git">here</a></span>
to view V8's revision history.</p>
<p class=MsoNormal style='margin-left:.25in'>You are now ready to build the full
<b><span style='font-size:10.0pt;line-height:115%;font-family:Consolas'>ClearScript</span></b>
@ -321,15 +368,21 @@ solution using Visual Studio 2015 or 2017.</p>
<p class=MsoNormal style='margin-left:.25in'><b><span style='color:#00B050'>Note:</span></b>
The first time you open the solution, Visual Studio may prompt you to upgrade
one or more projects to the latest platform toolset or .NET Framework. We
recommend that you select <b>Cancel</b> or <b>Don't Upgrade</b>.</p>
recommend that you select <b>Cancel</b> or <b>Don't Upgrade</b>. If you
encounter issues building ClearScripts unmanaged projects (<b><span
style='font-size:10.0pt;line-height:115%;font-family:Consolas'>ClearScriptV8-32</span></b>
and <b><span style='font-size:10.0pt;line-height:115%;font-family:Consolas'>ClearScriptV8-64</span></b>),
ensure that their <b>Windows SDK Version</b> properties are set to an installed
version of the Windows SDK.</p>
<p class=MsoNormal style='margin-left:.25in'><b><span style='color:#00B050'>Optional:</span></b>
The ClearScript repository includes the <a
The ClearScript repository includes the <span class=MsoHyperlink><a
href="https://microsoft.github.io/ClearScript/Reference/html/R_Project_Reference.htm">ClearScript
Library Reference</a> in HTML and Compiled HTML (.CHM) formats. If you'd like
to rebuild these files, use <a href="https://github.com/EWSoftware/SHFB">Sandcastle
Help File Builder</a> with the provided project files (<b><span
style='font-size:10.0pt;line-height:115%;font-family:Consolas'>ClearScript\doc\[Web]Reference.shfbproj</span></b>).</p>
Library Reference</a></span> in HTML and Compiled HTML (.CHM) formats. If you'd
like to rebuild these files, use <span class=MsoHyperlink><a
href="https://github.com/EWSoftware/SHFB">Sandcastle Help File Builder</a></span>
with the provided project files (<b><span style='font-size:10.0pt;line-height:
115%;font-family:Consolas'>ClearScript\doc\[Web]Reference.shfbproj</span></b>).</p>
<h1 style='margin-top:14.0pt;margin-right:0in;margin-bottom:0in;margin-left:
.5in;margin-bottom:.0001pt;text-indent:-.5in'>III. Building strong-named
@ -358,7 +411,7 @@ the ClearScript solution in Visual Studio.</p>
<p class=MsoListParagraph style='margin-left:.75in;text-indent:-.25in'>4.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Click
<b>Build</b> &#8594; <b>Transform All T4 Templates</b>.</p>
<a name="OLE_LINK12"><b>Build</b> </a> <b>Transform All T4 Templates</b>.</p>
<p class=MsoListParagraph style='margin-left:.75in;text-indent:-.25in'>5.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Rebuild
@ -425,13 +478,14 @@ name="OLE_LINK4"></a><a name="OLE_LINK3">4.<span style='font:7.0pt "Times New Ro
not installed on your deployment machine, you must install 32-bit and 64-bit
Visual C++ Redistributable packages:</p>
<p class=MsoListParagraph style='margin-left:1.0in'><a
<p class=MsoListParagraph style='margin-left:1.0in'><span class=MsoHyperlink><a
href="https://www.microsoft.com/en-us/download/details.aspx?id=48145">Visual
C++ Redistributable for Visual Studio 2015</a></p>
C++ Redistributable for Visual Studio 2015</a></span></p>
<p class=MsoListParagraph style='margin-left:1.0in'>Visual C++ Redistributable
for Visual Studio 2017 <a href="https://go.microsoft.com/fwlink/?LinkId=746572">[x64]</a>
<a href="https://go.microsoft.com/fwlink/?LinkId=746571">[x86]</a></p>
for Visual Studio 2017 <span class=MsoHyperlink><a
href="https://go.microsoft.com/fwlink/?LinkId=746572">[x64]</a></span> <span
class=MsoHyperlink><a href="https://go.microsoft.com/fwlink/?LinkId=746571">[x86]</a></span></p>
<h1 style='margin-top:14.0pt;margin-right:0in;margin-bottom:0in;margin-left:
.5in;margin-bottom:.0001pt;text-indent:-.5in'><span style='font:7.0pt "Times New Roman"'>&nbsp;
@ -444,16 +498,17 @@ to use the Visual Studio Code IDE:</p>
<p class=MsoListParagraph style='margin-left:.75in;text-indent:-.25in'>1.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Install
and launch <a href="https://code.visualstudio.com/">Visual Studio Code</a>.</p>
and launch <span class=MsoHyperlink><a href="https://code.visualstudio.com/">Visual
Studio Code</a></span>.</p>
<p class=MsoListParagraph style='margin-left:.75in;text-indent:-.25in'>2.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Set
up one or more ClearScript V8 debug configurations:</p>
<p class=MsoListParagraph style='margin-left:1.25in;text-indent:-.25in'>a.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Launch
Visual Studio Code and click <b>File</b> &#8594; <b>Preferences </b>&#8594;<b> Settings
</b>to open your User Settings file.</p>
<p class=MsoListParagraph style='margin-left:1.25in;text-indent:-.25in'><a
name="OLE_LINK18">a.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>Click <b>File</b> </a><b>Preferences </b><b> Settings </b>to open
your User Settings file.</p>
<p class=MsoListParagraph style='margin-left:1.25in;text-indent:-.25in'>b.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Add
@ -557,19 +612,19 @@ line-height:115%;font-family:Consolas;color:#D4D4D4'>}</span></b></p>
<p class=MsoListParagraph style='margin-left:1.25in;text-indent:-.25in'>c.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>You
can specify additional configurations for different hosts, port numbers, and
other options. See <a
href="https://code.visualstudio.com/docs/nodejs/nodejs-debugging">here</a> for
more information.</p>
other options. See <span class=MsoHyperlink><a
href="https://code.visualstudio.com/docs/nodejs/nodejs-debugging">here</a></span>
for more information.</p>
<p class=MsoListParagraph style='margin-left:1.25in;text-indent:-.25in'>d.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Click
<b>File</b> &#8594; <b>Save</b>.</p>
<b>File</b> <b>Save</b>.</p>
<p class=MsoListParagraph style='margin-left:.75in;text-indent:-.25in'>3.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Enable
script debugging in your application by invoking the <a
href="https://microsoft.github.io/ClearScript/Reference/html/T_Microsoft_ClearScript_V8_V8ScriptEngine.htm"><b><span
style='font-size:10.0pt;line-height:115%;font-family:Consolas'>V8ScriptEngine</span></b></a>
script debugging in your application by invoking the <span class=MsoHyperlink><b><span
style='font-size:10.0pt;line-height:115%;font-family:Consolas'><a
href="https://microsoft.github.io/ClearScript/Reference/html/T_Microsoft_ClearScript_V8_V8ScriptEngine.htm">V8ScriptEngine</a></span></b></span>
constructor with <a name="OLE_LINK2"></a><a
href="https://microsoft.github.io/ClearScript/Reference/html/T_Microsoft_ClearScript_V8_V8ScriptEngineFlags.htm"><b><span
style='font-size:10.0pt;line-height:115%;font-family:Consolas'>V8ScriptEngineFlags.EnableDebugging</span></b></a>
@ -582,9 +637,9 @@ youd like to debug your application remotely, you must also do the following:
<p class=MsoListParagraph style='margin-left:1.25in;text-indent:-.25in'>a.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Construct
your script engine with the additional flag <a
href="https://microsoft.github.io/ClearScript/Reference/html/T_Microsoft_ClearScript_V8_V8ScriptEngineFlags.htm"><b><span
style='font-size:10.0pt;line-height:115%;font-family:Consolas'>V8ScriptEngineFlags.EnableRemoteDebugging</span></b></a>.</p>
your script engine with the additional flag <span class=MsoHyperlink><b><span
style='font-size:10.0pt;line-height:115%;font-family:Consolas'><a
href="https://microsoft.github.io/ClearScript/Reference/html/T_Microsoft_ClearScript_V8_V8ScriptEngineFlags.htm">V8ScriptEngineFlags.EnableRemoteDebugging</a></span></b></span>.</p>
<p class=MsoListParagraph style='margin-left:1.25in;text-indent:-.25in'>b.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span
@ -597,7 +652,7 @@ the Visual Studio Code debugger to your application:</p>
<p class=MsoListParagraph style='margin-left:1.25in;text-indent:-.25in'><a
name="OLE_LINK1">a.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>Click <b>View</b> </a>&#8594; <b>Debug</b> to bring up the Debug view.</p>
</span>Click <b>View</b> </a> <b>Debug</b> to bring up the Debug view.</p>
<p class=MsoListParagraph style='margin-left:1.25in;text-indent:-.25in'>b.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Select
@ -605,7 +660,7 @@ the appropriate debug configuration at the top of the Debug Side Bar.</p>
<p class=MsoListParagraph style='margin-left:1.25in;text-indent:-.25in'>c.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Click
<b>Debug</b> &#8594; <b>Start Debugging</b>.</p>
<b>Debug</b> <b>Start Debugging</b>.</p>
<p class=MsoNormal style='margin-left:.5in'><b><span style='color:#00B050'>Note:</span></b>
You can also attach Visual Studio to your application for simultaneous
@ -617,14 +672,16 @@ debugging of script, managed, and native code.</p>
<p class=MsoNormal style='margin-left:.25in'>Wed like to thank:</p>
<p class=MsoListParagraph style='margin-left:.75in;text-indent:-.25in'>1.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><a
href="https://code.google.com/p/v8/people/list">The V8 team</a>.</p>
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=MsoHyperlink><a href="https://code.google.com/p/v8/people/list">The V8
team</a></span>.</p>
<p class=MsoListParagraph style='margin-left:.75in;text-indent:-.25in'>2.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><a
href="http://kennethreitz.org">Kenneth Reitz</a> for generously providing the <a
href="http://httpbin.org"><b><span style='font-size:10.0pt;line-height:115%;
font-family:Consolas'>Httpbin</span></b></a> service.</p>
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=MsoHyperlink><a href="http://kennethreitz.org">Kenneth Reitz</a></span>
for generously providing the <span class=MsoHyperlink><b><span
style='font-size:10.0pt;line-height:115%;font-family:Consolas'><a
href="http://httpbin.org">Httpbin</a></span></b></span> service.</p>
</div>

Просмотреть файл

@ -67,6 +67,19 @@
<HelpKINode Title="V8ScriptEngine.Dispose Method " Url="html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine_Dispose.htm" />
<HelpKINode Title="WindowsScriptEngine.Dispose Method " Url="html/Overload_Microsoft_ClearScript_Windows_WindowsScriptEngine_Dispose.htm" />
</HelpKINode>
<HelpKINode Title="DocumentFlags enumeration" Url="html/T_Microsoft_ClearScript_DocumentFlags.htm" />
<HelpKINode Title="DocumentInfo property" Url="html/P_Microsoft_ClearScript_V8_V8Script_DocumentInfo.htm" />
<HelpKINode Title="DocumentInfo structure">
<HelpKINode Title="DocumentInfo Structure" Url="html/T_Microsoft_ClearScript_DocumentInfo.htm" />
<HelpKINode Title="constructor" Url="html/Overload_Microsoft_ClearScript_DocumentInfo__ctor.htm" />
<HelpKINode Title="methods" Url="html/Methods_T_Microsoft_ClearScript_DocumentInfo.htm" />
<HelpKINode Title="properties" Url="html/Properties_T_Microsoft_ClearScript_DocumentInfo.htm" />
</HelpKINode>
<HelpKINode Title="DocumentInfo.DocumentInfo constructor" Url="html/Overload_Microsoft_ClearScript_DocumentInfo__ctor.htm" />
<HelpKINode Title="DocumentInfo.Flags property" Url="html/P_Microsoft_ClearScript_DocumentInfo_Flags.htm" />
<HelpKINode Title="DocumentInfo.Name property" Url="html/P_Microsoft_ClearScript_DocumentInfo_Name.htm" />
<HelpKINode Title="DocumentInfo.SourceMapUri property" Url="html/P_Microsoft_ClearScript_DocumentInfo_SourceMapUri.htm" />
<HelpKINode Title="DocumentInfo.Uri property" Url="html/P_Microsoft_ClearScript_DocumentInfo_Uri.htm" />
<HelpKINode Title="DoNotEnableVTablePatching enumeration member" Url="html/T_Microsoft_ClearScript_Windows_WindowsScriptEngineFlags.htm" />
<HelpKINode Title="EnableAutoHostVariables property" Url="html/P_Microsoft_ClearScript_ScriptEngine_EnableAutoHostVariables.htm" />
<HelpKINode Title="EnableDateTimeConversion enumeration member" Url="html/T_Microsoft_ClearScript_V8_V8ScriptEngineFlags.htm" />
@ -153,7 +166,10 @@
<HelpKINode Title="VBScriptEngine.FileNameExtension Property " Url="html/P_Microsoft_ClearScript_Windows_VBScriptEngine_FileNameExtension.htm" />
</HelpKINode>
<HelpKINode Title="Finalize method" Url="html/M_Microsoft_ClearScript_ScriptEngine_Finalize.htm" />
<HelpKINode Title="Flags property" Url="html/P_Microsoft_ClearScript_ScriptMemberAttribute_Flags.htm" />
<HelpKINode Title="Flags property">
<HelpKINode Title="DocumentInfo.Flags Property " Url="html/P_Microsoft_ClearScript_DocumentInfo_Flags.htm" />
<HelpKINode Title="ScriptMemberAttribute.Flags Property " Url="html/P_Microsoft_ClearScript_ScriptMemberAttribute_Flags.htm" />
</HelpKINode>
<HelpKINode Title="flags(Of T) method" Url="html/M_Microsoft_ClearScript_HostFunctions_flags__1.htm" />
<HelpKINode Title="flags&lt;T&gt; method" Url="html/M_Microsoft_ClearScript_HostFunctions_flags__1.htm" />
<HelpKINode Title="FormatCode property">
@ -317,6 +333,7 @@
<HelpKINode Title="ScriptInterruptedException.IsFatal Property " Url="html/P_Microsoft_ClearScript_ScriptInterruptedException_IsFatal.htm" />
</HelpKINode>
<HelpKINode Title="isNull method" Url="html/M_Microsoft_ClearScript_HostFunctions_isNull.htm" />
<HelpKINode Title="IsTransient enumeration member" Url="html/T_Microsoft_ClearScript_DocumentFlags.htm" />
<HelpKINode Title="isType(Of T) method" Url="html/M_Microsoft_ClearScript_HostFunctions_isType__1.htm" />
<HelpKINode Title="isType&lt;T&gt; method" Url="html/M_Microsoft_ClearScript_HostFunctions_isType__1.htm" />
<HelpKINode Title="isTypeObj method" Url="html/Overload_Microsoft_ClearScript_HostFunctions_isTypeObj.htm" />
@ -370,6 +387,8 @@
<HelpKINode Title="Microsoft.ClearScript namespace" Url="html/N_Microsoft_ClearScript.htm" />
<HelpKINode Title="Microsoft.ClearScript.ContinuationCallback delegate" Url="html/T_Microsoft_ClearScript_ContinuationCallback.htm" />
<HelpKINode Title="Microsoft.ClearScript.DefaultScriptUsageAttribute class" Url="html/T_Microsoft_ClearScript_DefaultScriptUsageAttribute.htm" />
<HelpKINode Title="Microsoft.ClearScript.DocumentFlags enumeration" Url="html/T_Microsoft_ClearScript_DocumentFlags.htm" />
<HelpKINode Title="Microsoft.ClearScript.DocumentInfo structure" Url="html/T_Microsoft_ClearScript_DocumentInfo.htm" />
<HelpKINode Title="Microsoft.ClearScript.EventConnection(Of T) class" Url="html/T_Microsoft_ClearScript_EventConnection_1.htm" />
<HelpKINode Title="Microsoft.ClearScript.EventConnection&lt;T&gt; class" Url="html/T_Microsoft_ClearScript_EventConnection_1.htm" />
<HelpKINode Title="Microsoft.ClearScript.EventSource(Of T) class" Url="html/T_Microsoft_ClearScript_EventSource_1.htm" />
@ -418,6 +437,7 @@
<HelpKINode Title="Microsoft.ClearScript.Windows.WindowsScriptEngine class" Url="html/T_Microsoft_ClearScript_Windows_WindowsScriptEngine.htm" />
<HelpKINode Title="Microsoft.ClearScript.Windows.WindowsScriptEngineFlags enumeration" Url="html/T_Microsoft_ClearScript_Windows_WindowsScriptEngineFlags.htm" />
<HelpKINode Title="Name property">
<HelpKINode Title="DocumentInfo.Name Property " Url="html/P_Microsoft_ClearScript_DocumentInfo_Name.htm" />
<HelpKINode Title="ScriptEngine.Name Property " Url="html/P_Microsoft_ClearScript_ScriptEngine_Name.htm" />
<HelpKINode Title="ScriptMemberAttribute.Name Property " Url="html/P_Microsoft_ClearScript_ScriptMemberAttribute_Name.htm" />
<HelpKINode Title="V8Runtime.Name Property " Url="html/P_Microsoft_ClearScript_V8_V8Runtime_Name.htm" />
@ -436,6 +456,7 @@
</HelpKINode>
<HelpKINode Title="NoDefaultScriptAccessAttribute.NoDefaultScriptAccessAttribute constructor" Url="html/M_Microsoft_ClearScript_NoDefaultScriptAccessAttribute__ctor.htm" />
<HelpKINode Title="None enumeration member">
<HelpKINode Title="DocumentFlags Enumeration" Url="html/T_Microsoft_ClearScript_DocumentFlags.htm" />
<HelpKINode Title="HostItemFlags Enumeration" Url="html/T_Microsoft_ClearScript_HostItemFlags.htm" />
<HelpKINode Title="ScriptAccess Enumeration" Url="html/T_Microsoft_ClearScript_ScriptAccess.htm" />
<HelpKINode Title="ScriptMemberFlags Enumeration" Url="html/T_Microsoft_ClearScript_ScriptMemberFlags.htm" />
@ -595,6 +616,7 @@
<HelpKINode Title="IArrayBuffer.Size Property " Url="html/P_Microsoft_ClearScript_JavaScript_IArrayBuffer_Size.htm" />
<HelpKINode Title="IArrayBufferView.Size Property " Url="html/P_Microsoft_ClearScript_JavaScript_IArrayBufferView_Size.htm" />
</HelpKINode>
<HelpKINode Title="SourceMapUri property" Url="html/P_Microsoft_ClearScript_DocumentInfo_SourceMapUri.htm" />
<HelpKINode Title="SuppressExtensionMethodEnumeration property" Url="html/P_Microsoft_ClearScript_V8_V8ScriptEngine_SuppressExtensionMethodEnumeration.htm" />
<HelpKINode Title="SuppressInstanceMethodEnumeration property" Url="html/P_Microsoft_ClearScript_V8_V8ScriptEngine_SuppressInstanceMethodEnumeration.htm" />
<HelpKINode Title="ToArray method" Url="html/M_Microsoft_ClearScript_JavaScript_ITypedArray_1_ToArray.htm" />
@ -628,6 +650,7 @@
<HelpKINode Title="methods" Url="html/Methods_T_Microsoft_ClearScript_Undefined.htm" />
</HelpKINode>
<HelpKINode Title="Undefined.ToString method" Url="html/M_Microsoft_ClearScript_Undefined_ToString.htm" />
<HelpKINode Title="Uri property" Url="html/P_Microsoft_ClearScript_DocumentInfo_Uri.htm" />
<HelpKINode Title="UsedHeapSize property" Url="html/P_Microsoft_ClearScript_V8_V8RuntimeHeapInfo_UsedHeapSize.htm" />
<HelpKINode Title="UseReflectionBindFallback property" Url="html/P_Microsoft_ClearScript_ScriptEngine_UseReflectionBindFallback.htm" />
<HelpKINode Title="V8CacheKind enumeration" Url="html/T_Microsoft_ClearScript_V8_V8CacheKind.htm" />
@ -676,6 +699,7 @@
<HelpKINode Title="properties" Url="html/Properties_T_Microsoft_ClearScript_V8_V8Script.htm" />
</HelpKINode>
<HelpKINode Title="V8Script.Dispose method" Url="html/M_Microsoft_ClearScript_V8_V8Script_Dispose.htm" />
<HelpKINode Title="V8Script.DocumentInfo property" Url="html/P_Microsoft_ClearScript_V8_V8Script_DocumentInfo.htm" />
<HelpKINode Title="V8Script.Name property" Url="html/P_Microsoft_ClearScript_V8_V8Script_Name.htm" />
<HelpKINode Title="V8ScriptEngine class">
<HelpKINode Title="V8ScriptEngine Class" Url="html/T_Microsoft_ClearScript_V8_V8ScriptEngine.htm" />

Просмотреть файл

@ -1,73 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<HelpTOC>
<HelpTOCNode Id="b6db7371-5c11-4264-b3c8-1d9717316e64" Title="ClearScript Library Reference" Url="html/R_Project_Reference.htm">
<HelpTOCNode Id="d36a0225-648b-4e77-b08d-c0ec5f304057" Title="Microsoft.ClearScript" Url="html/N_Microsoft_ClearScript.htm">
<HelpTOCNode Id="ab43e6ba-0c86-43a1-a6b5-6c78fdf19fd2" Title="ClearScript Library Reference" Url="html/R_Project_Reference.htm">
<HelpTOCNode Id="fcb6d5a0-89e2-4494-bdae-e9df70cdd043" Title="Microsoft.ClearScript" Url="html/N_Microsoft_ClearScript.htm">
<HelpTOCNode Title="ContinuationCallback Delegate" Url="html/T_Microsoft_ClearScript_ContinuationCallback.htm" />
<HelpTOCNode Id="130f0e67-7765-4d0f-bbb7-6231ff7de6c5" Title="DefaultScriptUsageAttribute Class" Url="html/T_Microsoft_ClearScript_DefaultScriptUsageAttribute.htm">
<HelpTOCNode Id="f2897f06-bea2-41a0-9402-5ed57ee8760e" Title="DefaultScriptUsageAttribute Constructor " Url="html/Overload_Microsoft_ClearScript_DefaultScriptUsageAttribute__ctor.htm">
<HelpTOCNode Id="7be28db9-b479-4d35-aeaf-2546af7ed20b" Title="DefaultScriptUsageAttribute Class" Url="html/T_Microsoft_ClearScript_DefaultScriptUsageAttribute.htm">
<HelpTOCNode Id="b0d6b02c-b83b-48fa-8dbd-541765c7de84" Title="DefaultScriptUsageAttribute Constructor " Url="html/Overload_Microsoft_ClearScript_DefaultScriptUsageAttribute__ctor.htm">
<HelpTOCNode Title="DefaultScriptUsageAttribute Constructor " Url="html/M_Microsoft_ClearScript_DefaultScriptUsageAttribute__ctor.htm" />
<HelpTOCNode Title="DefaultScriptUsageAttribute Constructor (ScriptAccess)" Url="html/M_Microsoft_ClearScript_DefaultScriptUsageAttribute__ctor_1.htm" />
</HelpTOCNode>
<HelpTOCNode Id="4dae24e6-ff5c-4239-bd4a-41fd45089a9e" Title="DefaultScriptUsageAttribute Properties" Url="html/Properties_T_Microsoft_ClearScript_DefaultScriptUsageAttribute.htm">
<HelpTOCNode Id="499aefa7-2340-4ae9-b75a-ecfb09366a5a" Title="DefaultScriptUsageAttribute Properties" Url="html/Properties_T_Microsoft_ClearScript_DefaultScriptUsageAttribute.htm">
<HelpTOCNode Title="Access Property " Url="html/P_Microsoft_ClearScript_DefaultScriptUsageAttribute_Access.htm" />
</HelpTOCNode>
<HelpTOCNode Title="DefaultScriptUsageAttribute Methods" Url="html/Methods_T_Microsoft_ClearScript_DefaultScriptUsageAttribute.htm" />
</HelpTOCNode>
<HelpTOCNode Id="2b5188e5-d434-433a-9fad-eae2845fd07f" Title="EventConnection(T) Class" Url="html/T_Microsoft_ClearScript_EventConnection_1.htm">
<HelpTOCNode Id="d61fb4a5-f715-4787-b59f-690d116375b7" Title="EventConnection(T) Methods" Url="html/Methods_T_Microsoft_ClearScript_EventConnection_1.htm">
<HelpTOCNode Title="DocumentFlags Enumeration" Url="html/T_Microsoft_ClearScript_DocumentFlags.htm" />
<HelpTOCNode Id="c8960b7c-ea87-46f7-8a50-f664267ca9df" Title="DocumentInfo Structure" Url="html/T_Microsoft_ClearScript_DocumentInfo.htm">
<HelpTOCNode Id="39c07405-6f79-45bc-b3f1-eb87fd8b8fbe" Title="DocumentInfo Constructor " Url="html/Overload_Microsoft_ClearScript_DocumentInfo__ctor.htm">
<HelpTOCNode Title="DocumentInfo Constructor (String)" Url="html/M_Microsoft_ClearScript_DocumentInfo__ctor.htm" />
<HelpTOCNode Title="DocumentInfo Constructor (Uri)" Url="html/M_Microsoft_ClearScript_DocumentInfo__ctor_1.htm" />
</HelpTOCNode>
<HelpTOCNode Id="35476320-4fba-4350-baac-eecc8097d8b5" Title="DocumentInfo Properties" Url="html/Properties_T_Microsoft_ClearScript_DocumentInfo.htm">
<HelpTOCNode Title="Flags Property " Url="html/P_Microsoft_ClearScript_DocumentInfo_Flags.htm" />
<HelpTOCNode Title="Name Property " Url="html/P_Microsoft_ClearScript_DocumentInfo_Name.htm" />
<HelpTOCNode Title="SourceMapUri Property " Url="html/P_Microsoft_ClearScript_DocumentInfo_SourceMapUri.htm" />
<HelpTOCNode Title="Uri Property " Url="html/P_Microsoft_ClearScript_DocumentInfo_Uri.htm" />
</HelpTOCNode>
<HelpTOCNode Title="DocumentInfo Methods" Url="html/Methods_T_Microsoft_ClearScript_DocumentInfo.htm" />
</HelpTOCNode>
<HelpTOCNode Id="503098e1-2367-4626-a4f0-aa38ae5068ea" Title="EventConnection(T) Class" Url="html/T_Microsoft_ClearScript_EventConnection_1.htm">
<HelpTOCNode Id="913c906f-16c3-4837-ab6e-b4ad7b10e07d" Title="EventConnection(T) Methods" Url="html/Methods_T_Microsoft_ClearScript_EventConnection_1.htm">
<HelpTOCNode Title="disconnect Method " Url="html/M_Microsoft_ClearScript_EventConnection_1_disconnect.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="d78d5160-5bb6-4cf5-b73e-95985b8a8900" Title="EventSource(T) Class" Url="html/T_Microsoft_ClearScript_EventSource_1.htm">
<HelpTOCNode Id="a50f03ef-6271-474c-b056-3d2bfed61103" Title="EventSource(T) Methods" Url="html/Methods_T_Microsoft_ClearScript_EventSource_1.htm">
<HelpTOCNode Id="dc5d2345-3f6c-47b6-bb89-b70ffcfc819a" Title="EventSource(T) Class" Url="html/T_Microsoft_ClearScript_EventSource_1.htm">
<HelpTOCNode Id="499b8fc1-8942-4758-9334-9aae32205d44" Title="EventSource(T) Methods" Url="html/Methods_T_Microsoft_ClearScript_EventSource_1.htm">
<HelpTOCNode Title="connect Method " Url="html/M_Microsoft_ClearScript_EventSource_1_connect.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="4f4d589a-9459-479f-8e5d-0bb4398b77b8" Title="ExtendedHostFunctions Class" Url="html/T_Microsoft_ClearScript_ExtendedHostFunctions.htm">
<HelpTOCNode Id="596a91e6-b40c-400e-88f0-f4bfe7608ab2" Title="ExtendedHostFunctions Class" Url="html/T_Microsoft_ClearScript_ExtendedHostFunctions.htm">
<HelpTOCNode Title="ExtendedHostFunctions Constructor " Url="html/M_Microsoft_ClearScript_ExtendedHostFunctions__ctor.htm" />
<HelpTOCNode Id="40391fe0-1236-4c7a-8506-b6f1f5bf09ae" Title="ExtendedHostFunctions Methods" Url="html/Methods_T_Microsoft_ClearScript_ExtendedHostFunctions.htm">
<HelpTOCNode Id="685d9c6f-1803-44e9-a2bd-ed8b4c1533a9" Title="ExtendedHostFunctions Methods" Url="html/Methods_T_Microsoft_ClearScript_ExtendedHostFunctions.htm">
<HelpTOCNode Title="arrType(T) Method " Url="html/M_Microsoft_ClearScript_ExtendedHostFunctions_arrType__1.htm" />
<HelpTOCNode Title="comType Method " Url="html/M_Microsoft_ClearScript_ExtendedHostFunctions_comType.htm" />
<HelpTOCNode Id="6db5726b-a99e-4210-9655-2e120c54359f" Title="lib Method " Url="html/Overload_Microsoft_ClearScript_ExtendedHostFunctions_lib.htm">
<HelpTOCNode Id="00ee9fe3-4c4e-483b-8ba3-351785f27f23" Title="lib Method " Url="html/Overload_Microsoft_ClearScript_ExtendedHostFunctions_lib.htm">
<HelpTOCNode Title="lib Method (String[])" Url="html/M_Microsoft_ClearScript_ExtendedHostFunctions_lib_1.htm" />
<HelpTOCNode Title="lib Method (HostTypeCollection, String[])" Url="html/M_Microsoft_ClearScript_ExtendedHostFunctions_lib.htm" />
</HelpTOCNode>
<HelpTOCNode Title="newComObj Method " Url="html/M_Microsoft_ClearScript_ExtendedHostFunctions_newComObj.htm" />
<HelpTOCNode Id="e3225d27-d32e-40c3-bd32-f7930333e5da" Title="type Method " Url="html/Overload_Microsoft_ClearScript_ExtendedHostFunctions_type.htm">
<HelpTOCNode Id="12614d4f-f103-46a5-bf92-d2c98e20680f" Title="type Method " Url="html/Overload_Microsoft_ClearScript_ExtendedHostFunctions_type.htm">
<HelpTOCNode Title="type Method (Type)" Url="html/M_Microsoft_ClearScript_ExtendedHostFunctions_type_2.htm" />
<HelpTOCNode Title="type Method (String, Object[])" Url="html/M_Microsoft_ClearScript_ExtendedHostFunctions_type.htm" />
<HelpTOCNode Title="type Method (String, String, Object[])" Url="html/M_Microsoft_ClearScript_ExtendedHostFunctions_type_1.htm" />
</HelpTOCNode>
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="e1563c4d-7aa0-4978-bb0d-51dbc301025e" Title="HostFunctions Class" Url="html/T_Microsoft_ClearScript_HostFunctions.htm">
<HelpTOCNode Id="2e5ff465-71dd-4cb0-8c1e-08aadf26e9ec" Title="HostFunctions Class" Url="html/T_Microsoft_ClearScript_HostFunctions.htm">
<HelpTOCNode Title="HostFunctions Constructor " Url="html/M_Microsoft_ClearScript_HostFunctions__ctor.htm" />
<HelpTOCNode Id="f02d4015-2f64-4f0c-992f-6c2d0f50119e" Title="HostFunctions Methods" Url="html/Methods_T_Microsoft_ClearScript_HostFunctions.htm">
<HelpTOCNode Id="07407439-f056-4bc1-9d7a-647df7cda1f1" Title="HostFunctions Methods" Url="html/Methods_T_Microsoft_ClearScript_HostFunctions.htm">
<HelpTOCNode Title="asType(T) Method " Url="html/M_Microsoft_ClearScript_HostFunctions_asType__1.htm" />
<HelpTOCNode Title="cast(T) Method " Url="html/M_Microsoft_ClearScript_HostFunctions_cast__1.htm" />
<HelpTOCNode Title="del(T) Method " Url="html/M_Microsoft_ClearScript_HostFunctions_del__1.htm" />
<HelpTOCNode Title="flags(T) Method " Url="html/M_Microsoft_ClearScript_HostFunctions_flags__1.htm" />
<HelpTOCNode Id="36c7c7b1-4576-4679-8454-d9961d0c5ad8" Title="func Method " Url="html/Overload_Microsoft_ClearScript_HostFunctions_func.htm">
<HelpTOCNode Id="3834b006-4fa9-4344-a2cf-32d9744cd2a0" Title="func Method " Url="html/Overload_Microsoft_ClearScript_HostFunctions_func.htm">
<HelpTOCNode Title="func(T) Method (Int32, Object)" Url="html/M_Microsoft_ClearScript_HostFunctions_func__1.htm" />
<HelpTOCNode Title="func Method (Int32, Object)" Url="html/M_Microsoft_ClearScript_HostFunctions_func.htm" />
</HelpTOCNode>
<HelpTOCNode Title="getElement Method " Url="html/M_Microsoft_ClearScript_HostFunctions_getElement.htm" />
<HelpTOCNode Id="9a5a2910-bcfb-4a47-b13d-efbed2230330" Title="getProperty Method " Url="html/Overload_Microsoft_ClearScript_HostFunctions_getProperty.htm">
<HelpTOCNode Id="893d7a7b-fc69-452b-be57-993990075b2c" Title="getProperty Method " Url="html/Overload_Microsoft_ClearScript_HostFunctions_getProperty.htm">
<HelpTOCNode Title="getProperty Method (IDynamicMetaObjectProvider, String)" Url="html/M_Microsoft_ClearScript_HostFunctions_getProperty_1.htm" />
<HelpTOCNode Title="getProperty Method (IPropertyBag, String)" Url="html/M_Microsoft_ClearScript_HostFunctions_getProperty.htm" />
</HelpTOCNode>
<HelpTOCNode Title="isNull Method " Url="html/M_Microsoft_ClearScript_HostFunctions_isNull.htm" />
<HelpTOCNode Title="isType(T) Method " Url="html/M_Microsoft_ClearScript_HostFunctions_isType__1.htm" />
<HelpTOCNode Id="696d79ac-41d9-4025-840e-4613fa29e764" Title="isTypeObj Method " Url="html/Overload_Microsoft_ClearScript_HostFunctions_isTypeObj.htm">
<HelpTOCNode Id="6fe24284-328d-4ece-a696-ba78bb86d2c6" Title="isTypeObj Method " Url="html/Overload_Microsoft_ClearScript_HostFunctions_isTypeObj.htm">
<HelpTOCNode Title="isTypeObj(T) Method " Url="html/M_Microsoft_ClearScript_HostFunctions_isTypeObj__1.htm" />
<HelpTOCNode Title="isTypeObj Method (Object)" Url="html/M_Microsoft_ClearScript_HostFunctions_isTypeObj.htm" />
</HelpTOCNode>
<HelpTOCNode Id="1ac1ad6b-3f5e-45f5-8d2d-7243b65c4b68" Title="newArr Method " Url="html/Overload_Microsoft_ClearScript_HostFunctions_newArr.htm">
<HelpTOCNode Id="38361e8f-7586-465b-a7c0-a86583a814cc" Title="newArr Method " Url="html/Overload_Microsoft_ClearScript_HostFunctions_newArr.htm">
<HelpTOCNode Title="newArr(T) Method (Int32[])" Url="html/M_Microsoft_ClearScript_HostFunctions_newArr__1.htm" />
<HelpTOCNode Title="newArr Method (Int32[])" Url="html/M_Microsoft_ClearScript_HostFunctions_newArr.htm" />
</HelpTOCNode>
<HelpTOCNode Id="f71c7bfe-a82a-41d4-b032-35f16661d96e" Title="newObj Method " Url="html/Overload_Microsoft_ClearScript_HostFunctions_newObj.htm">
<HelpTOCNode Id="2eca7873-1508-4da5-8fb0-c715fe1e447f" Title="newObj Method " Url="html/Overload_Microsoft_ClearScript_HostFunctions_newObj.htm">
<HelpTOCNode Title="newObj Method " Url="html/M_Microsoft_ClearScript_HostFunctions_newObj.htm" />
<HelpTOCNode Title="newObj(T) Method (Object[])" Url="html/M_Microsoft_ClearScript_HostFunctions_newObj__1.htm" />
<HelpTOCNode Title="newObj Method (IDynamicMetaObjectProvider, Object[])" Url="html/M_Microsoft_ClearScript_HostFunctions_newObj_1.htm" />
@ -76,12 +90,12 @@
<HelpTOCNode Title="newVar(T) Method " Url="html/M_Microsoft_ClearScript_HostFunctions_newVar__1.htm" />
<HelpTOCNode Title="proc Method " Url="html/M_Microsoft_ClearScript_HostFunctions_proc.htm" />
<HelpTOCNode Title="removeElement Method " Url="html/M_Microsoft_ClearScript_HostFunctions_removeElement.htm" />
<HelpTOCNode Id="f2882e56-b06f-4f5f-b195-a2a3bcf7ecbf" Title="removeProperty Method " Url="html/Overload_Microsoft_ClearScript_HostFunctions_removeProperty.htm">
<HelpTOCNode Id="8bcae6b5-7ee2-455c-8e19-9d33ebb1db82" Title="removeProperty Method " Url="html/Overload_Microsoft_ClearScript_HostFunctions_removeProperty.htm">
<HelpTOCNode Title="removeProperty Method (IDynamicMetaObjectProvider, String)" Url="html/M_Microsoft_ClearScript_HostFunctions_removeProperty_1.htm" />
<HelpTOCNode Title="removeProperty Method (IPropertyBag, String)" Url="html/M_Microsoft_ClearScript_HostFunctions_removeProperty.htm" />
</HelpTOCNode>
<HelpTOCNode Title="setElement Method " Url="html/M_Microsoft_ClearScript_HostFunctions_setElement.htm" />
<HelpTOCNode Id="ec6681f5-30ca-4280-a247-9ac591a97629" Title="setProperty Method " Url="html/Overload_Microsoft_ClearScript_HostFunctions_setProperty.htm">
<HelpTOCNode Id="6a674015-2c20-4bc0-9d12-19cd3ec64266" Title="setProperty Method " Url="html/Overload_Microsoft_ClearScript_HostFunctions_setProperty.htm">
<HelpTOCNode Title="setProperty Method (IDynamicMetaObjectProvider, String, Object)" Url="html/M_Microsoft_ClearScript_HostFunctions_setProperty_1.htm" />
<HelpTOCNode Title="setProperty Method (IPropertyBag, String, Object)" Url="html/M_Microsoft_ClearScript_HostFunctions_setProperty.htm" />
</HelpTOCNode>
@ -99,15 +113,15 @@
<HelpTOCNode Title="toUInt32 Method " Url="html/M_Microsoft_ClearScript_HostFunctions_toUInt32.htm" />
<HelpTOCNode Title="toUInt64 Method " Url="html/M_Microsoft_ClearScript_HostFunctions_toUInt64.htm" />
<HelpTOCNode Title="tryCatch Method " Url="html/M_Microsoft_ClearScript_HostFunctions_tryCatch.htm" />
<HelpTOCNode Id="7d9a42e8-b6d1-401c-a35d-19d13b72f808" Title="typeOf Method " Url="html/Overload_Microsoft_ClearScript_HostFunctions_typeOf.htm">
<HelpTOCNode Id="2106c43c-ee0a-4bc7-85c4-7656a4297fe0" Title="typeOf Method " Url="html/Overload_Microsoft_ClearScript_HostFunctions_typeOf.htm">
<HelpTOCNode Title="typeOf(T) Method " Url="html/M_Microsoft_ClearScript_HostFunctions_typeOf__1.htm" />
<HelpTOCNode Title="typeOf Method (Object)" Url="html/M_Microsoft_ClearScript_HostFunctions_typeOf.htm" />
</HelpTOCNode>
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Title="HostItemFlags Enumeration" Url="html/T_Microsoft_ClearScript_HostItemFlags.htm" />
<HelpTOCNode Id="a23c3f0c-e1fa-4867-b54d-a17256c27ad9" Title="HostTypeCollection Class" Url="html/T_Microsoft_ClearScript_HostTypeCollection.htm">
<HelpTOCNode Id="7efff1d3-2a3e-4d6c-948a-bcc1b25c9638" Title="HostTypeCollection Constructor " Url="html/Overload_Microsoft_ClearScript_HostTypeCollection__ctor.htm">
<HelpTOCNode Id="df089b98-c95e-4ca2-915f-edd61c15825d" Title="HostTypeCollection Class" Url="html/T_Microsoft_ClearScript_HostTypeCollection.htm">
<HelpTOCNode Id="e706139b-1328-447b-a53c-b67a13086505" Title="HostTypeCollection Constructor " Url="html/Overload_Microsoft_ClearScript_HostTypeCollection__ctor.htm">
<HelpTOCNode Title="HostTypeCollection Constructor " Url="html/M_Microsoft_ClearScript_HostTypeCollection__ctor.htm" />
<HelpTOCNode Title="HostTypeCollection Constructor (Assembly[])" Url="html/M_Microsoft_ClearScript_HostTypeCollection__ctor_3.htm" />
<HelpTOCNode Title="HostTypeCollection Constructor (String[])" Url="html/M_Microsoft_ClearScript_HostTypeCollection__ctor_4.htm" />
@ -115,14 +129,14 @@
<HelpTOCNode Title="HostTypeCollection Constructor (Predicate(Type), String[])" Url="html/M_Microsoft_ClearScript_HostTypeCollection__ctor_2.htm" />
</HelpTOCNode>
<HelpTOCNode Title="HostTypeCollection Properties" Url="html/Properties_T_Microsoft_ClearScript_HostTypeCollection.htm" />
<HelpTOCNode Id="2eca89a5-774a-430e-9c37-dc7eb87e9d32" Title="HostTypeCollection Methods" Url="html/Methods_T_Microsoft_ClearScript_HostTypeCollection.htm">
<HelpTOCNode Id="e2a6034a-da10-4ca8-996f-4fcc8608c356" Title="AddAssembly Method " Url="html/Overload_Microsoft_ClearScript_HostTypeCollection_AddAssembly.htm">
<HelpTOCNode Id="34c0b74e-39cf-4b2f-aa73-8c55e930ebff" Title="HostTypeCollection Methods" Url="html/Methods_T_Microsoft_ClearScript_HostTypeCollection.htm">
<HelpTOCNode Id="61614218-011c-4062-a0d4-afb33abd9319" Title="AddAssembly Method " Url="html/Overload_Microsoft_ClearScript_HostTypeCollection_AddAssembly.htm">
<HelpTOCNode Title="AddAssembly Method (Assembly)" Url="html/M_Microsoft_ClearScript_HostTypeCollection_AddAssembly.htm" />
<HelpTOCNode Title="AddAssembly Method (String)" Url="html/M_Microsoft_ClearScript_HostTypeCollection_AddAssembly_2.htm" />
<HelpTOCNode Title="AddAssembly Method (Assembly, Predicate(Type))" Url="html/M_Microsoft_ClearScript_HostTypeCollection_AddAssembly_1.htm" />
<HelpTOCNode Title="AddAssembly Method (String, Predicate(Type))" Url="html/M_Microsoft_ClearScript_HostTypeCollection_AddAssembly_3.htm" />
</HelpTOCNode>
<HelpTOCNode Id="f0ca7b64-ad1f-4af0-bbeb-6d1975143b9e" Title="AddType Method " Url="html/Overload_Microsoft_ClearScript_HostTypeCollection_AddType.htm">
<HelpTOCNode Id="3784b2d2-c739-49e8-a127-e5fc8cd90ada" Title="AddType Method " Url="html/Overload_Microsoft_ClearScript_HostTypeCollection_AddType.htm">
<HelpTOCNode Title="AddType Method (Type)" Url="html/M_Microsoft_ClearScript_HostTypeCollection_AddType_2.htm" />
<HelpTOCNode Title="AddType Method (String, Type[])" Url="html/M_Microsoft_ClearScript_HostTypeCollection_AddType_1.htm" />
<HelpTOCNode Title="AddType Method (String, String, Type[])" Url="html/M_Microsoft_ClearScript_HostTypeCollection_AddType.htm" />
@ -131,22 +145,22 @@
</HelpTOCNode>
<HelpTOCNode Title="HostTypeCollection Events" Url="html/Events_T_Microsoft_ClearScript_HostTypeCollection.htm" />
</HelpTOCNode>
<HelpTOCNode Id="0ac192a3-cbd0-4618-833c-c4031deb685b" Title="ImmutableValueAttribute Class" Url="html/T_Microsoft_ClearScript_ImmutableValueAttribute.htm">
<HelpTOCNode Id="11fb39bd-f479-424b-848c-f3f0ba7b9c40" Title="ImmutableValueAttribute Class" Url="html/T_Microsoft_ClearScript_ImmutableValueAttribute.htm">
<HelpTOCNode Title="ImmutableValueAttribute Constructor " Url="html/M_Microsoft_ClearScript_ImmutableValueAttribute__ctor.htm" />
<HelpTOCNode Title="ImmutableValueAttribute Properties" Url="html/Properties_T_Microsoft_ClearScript_ImmutableValueAttribute.htm" />
<HelpTOCNode Title="ImmutableValueAttribute Methods" Url="html/Methods_T_Microsoft_ClearScript_ImmutableValueAttribute.htm" />
</HelpTOCNode>
<HelpTOCNode Id="167686da-f7ea-4984-8ebf-dbeadea84919" Title="IPropertyBag Interface" Url="html/T_Microsoft_ClearScript_IPropertyBag.htm">
<HelpTOCNode Id="11f28233-8e8d-4ad1-b5ad-acdbe7114c92" Title="IPropertyBag Interface" Url="html/T_Microsoft_ClearScript_IPropertyBag.htm">
<HelpTOCNode Title="IPropertyBag Properties" Url="html/Properties_T_Microsoft_ClearScript_IPropertyBag.htm" />
<HelpTOCNode Title="IPropertyBag Methods" Url="html/Methods_T_Microsoft_ClearScript_IPropertyBag.htm" />
</HelpTOCNode>
<HelpTOCNode Id="d0d38835-190c-417c-83bf-4faef5fbba33" Title="IScriptableObject Interface" Url="html/T_Microsoft_ClearScript_IScriptableObject.htm">
<HelpTOCNode Id="f9a239f8-477f-4c9c-a177-b7681b3509e1" Title="IScriptableObject Methods" Url="html/Methods_T_Microsoft_ClearScript_IScriptableObject.htm">
<HelpTOCNode Id="ae25c0cc-5ba3-49e8-b1f4-df529fd14a84" Title="IScriptableObject Interface" Url="html/T_Microsoft_ClearScript_IScriptableObject.htm">
<HelpTOCNode Id="52dad636-0888-469c-9be3-b918b39efd10" Title="IScriptableObject Methods" Url="html/Methods_T_Microsoft_ClearScript_IScriptableObject.htm">
<HelpTOCNode Title="OnExposedToScriptCode Method " Url="html/M_Microsoft_ClearScript_IScriptableObject_OnExposedToScriptCode.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="91a5f052-d387-439d-8387-425f7f521bd2" Title="IScriptEngineException Interface" Url="html/T_Microsoft_ClearScript_IScriptEngineException.htm">
<HelpTOCNode Id="f23c4ee1-ed7e-4727-995e-a5149b696a83" Title="IScriptEngineException Properties" Url="html/Properties_T_Microsoft_ClearScript_IScriptEngineException.htm">
<HelpTOCNode Id="08d61c27-4032-4d5b-b079-c0c0848c6e61" Title="IScriptEngineException Interface" Url="html/T_Microsoft_ClearScript_IScriptEngineException.htm">
<HelpTOCNode Id="5a7d8e3c-286e-423b-a389-b204fb1948a5" Title="IScriptEngineException Properties" Url="html/Properties_T_Microsoft_ClearScript_IScriptEngineException.htm">
<HelpTOCNode Title="EngineName Property " Url="html/P_Microsoft_ClearScript_IScriptEngineException_EngineName.htm" />
<HelpTOCNode Title="ErrorDetails Property " Url="html/P_Microsoft_ClearScript_IScriptEngineException_ErrorDetails.htm" />
<HelpTOCNode Title="ExecutionStarted Property " Url="html/P_Microsoft_ClearScript_IScriptEngineException_ExecutionStarted.htm" />
@ -157,27 +171,27 @@
<HelpTOCNode Title="ScriptException Property " Url="html/P_Microsoft_ClearScript_IScriptEngineException_ScriptException.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="aadec378-69ff-455e-baf7-faeaa7e74385" Title="NoDefaultScriptAccessAttribute Class" Url="html/T_Microsoft_ClearScript_NoDefaultScriptAccessAttribute.htm">
<HelpTOCNode Id="625a6af5-9075-4c37-a44b-98c977b17bd0" Title="NoDefaultScriptAccessAttribute Class" Url="html/T_Microsoft_ClearScript_NoDefaultScriptAccessAttribute.htm">
<HelpTOCNode Title="NoDefaultScriptAccessAttribute Constructor " Url="html/M_Microsoft_ClearScript_NoDefaultScriptAccessAttribute__ctor.htm" />
<HelpTOCNode Title="NoDefaultScriptAccessAttribute Properties" Url="html/Properties_T_Microsoft_ClearScript_NoDefaultScriptAccessAttribute.htm" />
<HelpTOCNode Title="NoDefaultScriptAccessAttribute Methods" Url="html/Methods_T_Microsoft_ClearScript_NoDefaultScriptAccessAttribute.htm" />
</HelpTOCNode>
<HelpTOCNode Id="db9b43d0-6774-4f2f-b98b-a6763eb69603" Title="NoScriptAccessAttribute Class" Url="html/T_Microsoft_ClearScript_NoScriptAccessAttribute.htm">
<HelpTOCNode Id="60f8927b-9405-4caa-b64d-71460d73f3a6" Title="NoScriptAccessAttribute Class" Url="html/T_Microsoft_ClearScript_NoScriptAccessAttribute.htm">
<HelpTOCNode Title="NoScriptAccessAttribute Constructor " Url="html/M_Microsoft_ClearScript_NoScriptAccessAttribute__ctor.htm" />
<HelpTOCNode Title="NoScriptAccessAttribute Properties" Url="html/Properties_T_Microsoft_ClearScript_NoScriptAccessAttribute.htm" />
<HelpTOCNode Title="NoScriptAccessAttribute Methods" Url="html/Methods_T_Microsoft_ClearScript_NoScriptAccessAttribute.htm" />
</HelpTOCNode>
<HelpTOCNode Id="63bf58a6-70fe-49c3-8db4-0b978f62291a" Title="PropertyBag Class" Url="html/T_Microsoft_ClearScript_PropertyBag.htm">
<HelpTOCNode Id="945a224b-acfc-4be4-a1eb-c698b87ce4e1" Title="PropertyBag Constructor " Url="html/Overload_Microsoft_ClearScript_PropertyBag__ctor.htm">
<HelpTOCNode Id="049cd974-2640-429f-b539-ae2384058471" Title="PropertyBag Class" Url="html/T_Microsoft_ClearScript_PropertyBag.htm">
<HelpTOCNode Id="625666d3-d58e-49e4-9cac-1773c3fe9989" Title="PropertyBag Constructor " Url="html/Overload_Microsoft_ClearScript_PropertyBag__ctor.htm">
<HelpTOCNode Title="PropertyBag Constructor " Url="html/M_Microsoft_ClearScript_PropertyBag__ctor.htm" />
<HelpTOCNode Title="PropertyBag Constructor (Boolean)" Url="html/M_Microsoft_ClearScript_PropertyBag__ctor_1.htm" />
</HelpTOCNode>
<HelpTOCNode Id="4982c84d-2ae5-4c06-b61c-6ce8831d7e64" Title="PropertyBag Properties" Url="html/Properties_T_Microsoft_ClearScript_PropertyBag.htm">
<HelpTOCNode Id="9f246d1f-3d39-47f5-b32f-810c3056c8c3" Title="PropertyBag Properties" Url="html/Properties_T_Microsoft_ClearScript_PropertyBag.htm">
<HelpTOCNode Title="Item Property " Url="html/P_Microsoft_ClearScript_PropertyBag_Item.htm" />
<HelpTOCNode Title="Keys Property " Url="html/P_Microsoft_ClearScript_PropertyBag_Keys.htm" />
<HelpTOCNode Title="Values Property " Url="html/P_Microsoft_ClearScript_PropertyBag_Values.htm" />
</HelpTOCNode>
<HelpTOCNode Id="b78394fb-ec78-4bc8-97de-49dc0713c7bf" Title="PropertyBag Methods" Url="html/Methods_T_Microsoft_ClearScript_PropertyBag.htm">
<HelpTOCNode Id="6202c070-16fc-400a-9f66-2a8a40cf305b" Title="PropertyBag Methods" Url="html/Methods_T_Microsoft_ClearScript_PropertyBag.htm">
<HelpTOCNode Title="Add Method " Url="html/M_Microsoft_ClearScript_PropertyBag_Add.htm" />
<HelpTOCNode Title="ClearNoCheck Method " Url="html/M_Microsoft_ClearScript_PropertyBag_ClearNoCheck.htm" />
<HelpTOCNode Title="ContainsKey Method " Url="html/M_Microsoft_ClearScript_PropertyBag_ContainsKey.htm" />
@ -186,14 +200,14 @@
<HelpTOCNode Title="SetPropertyNoCheck Method " Url="html/M_Microsoft_ClearScript_PropertyBag_SetPropertyNoCheck.htm" />
<HelpTOCNode Title="TryGetValue Method " Url="html/M_Microsoft_ClearScript_PropertyBag_TryGetValue.htm" />
</HelpTOCNode>
<HelpTOCNode Id="587ff661-66cf-4be8-b82a-55f4690fb886" Title="PropertyBag Events" Url="html/Events_T_Microsoft_ClearScript_PropertyBag.htm">
<HelpTOCNode Id="a7f8a34f-cb4d-4c72-a439-c2f56a6dec4c" Title="PropertyBag Events" Url="html/Events_T_Microsoft_ClearScript_PropertyBag.htm">
<HelpTOCNode Title="PropertyChanged Event" Url="html/E_Microsoft_ClearScript_PropertyBag_PropertyChanged.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Title="ScriptAccess Enumeration" Url="html/T_Microsoft_ClearScript_ScriptAccess.htm" />
<HelpTOCNode Id="f23106d1-2347-412c-80dc-1372f871cd07" Title="ScriptEngine Class" Url="html/T_Microsoft_ClearScript_ScriptEngine.htm">
<HelpTOCNode Id="86260697-5510-4634-b188-06e0970ef1cb" Title="ScriptEngine Class" Url="html/T_Microsoft_ClearScript_ScriptEngine.htm">
<HelpTOCNode Title="ScriptEngine Constructor " Url="html/M_Microsoft_ClearScript_ScriptEngine__ctor.htm" />
<HelpTOCNode Id="05cec438-a251-4c14-8ace-81f2da545dec" Title="ScriptEngine Properties" Url="html/Properties_T_Microsoft_ClearScript_ScriptEngine.htm">
<HelpTOCNode Id="efd38a2a-85de-4063-ae17-87126fdb7619" Title="ScriptEngine Properties" Url="html/Properties_T_Microsoft_ClearScript_ScriptEngine.htm">
<HelpTOCNode Title="AccessContext Property " Url="html/P_Microsoft_ClearScript_ScriptEngine_AccessContext.htm" />
<HelpTOCNode Title="AllowReflection Property " Url="html/P_Microsoft_ClearScript_ScriptEngine_AllowReflection.htm" />
<HelpTOCNode Title="ContinuationCallback Property " Url="html/P_Microsoft_ClearScript_ScriptEngine_ContinuationCallback.htm" />
@ -209,8 +223,8 @@
<HelpTOCNode Title="Script Property " Url="html/P_Microsoft_ClearScript_ScriptEngine_Script.htm" />
<HelpTOCNode Title="UseReflectionBindFallback Property " Url="html/P_Microsoft_ClearScript_ScriptEngine_UseReflectionBindFallback.htm" />
</HelpTOCNode>
<HelpTOCNode Id="c287378c-be9a-4761-9702-bf52d8f8affd" Title="ScriptEngine Methods" Url="html/Methods_T_Microsoft_ClearScript_ScriptEngine.htm">
<HelpTOCNode Id="8de23d22-9c7f-4ab5-92c5-cbe34b90fa62" Title="AddCOMObject Method " Url="html/Overload_Microsoft_ClearScript_ScriptEngine_AddCOMObject.htm">
<HelpTOCNode Id="861e3380-466e-4398-bd77-e06522baed51" Title="ScriptEngine Methods" Url="html/Methods_T_Microsoft_ClearScript_ScriptEngine.htm">
<HelpTOCNode Id="780e135f-3277-46d7-8860-4c018da4579c" Title="AddCOMObject Method " Url="html/Overload_Microsoft_ClearScript_ScriptEngine_AddCOMObject.htm">
<HelpTOCNode Title="AddCOMObject Method (String, Guid)" Url="html/M_Microsoft_ClearScript_ScriptEngine_AddCOMObject_4.htm" />
<HelpTOCNode Title="AddCOMObject Method (String, String)" Url="html/M_Microsoft_ClearScript_ScriptEngine_AddCOMObject_6.htm" />
<HelpTOCNode Title="AddCOMObject Method (String, HostItemFlags, Guid)" Url="html/M_Microsoft_ClearScript_ScriptEngine_AddCOMObject.htm" />
@ -220,7 +234,7 @@
<HelpTOCNode Title="AddCOMObject Method (String, HostItemFlags, Guid, String)" Url="html/M_Microsoft_ClearScript_ScriptEngine_AddCOMObject_1.htm" />
<HelpTOCNode Title="AddCOMObject Method (String, HostItemFlags, String, String)" Url="html/M_Microsoft_ClearScript_ScriptEngine_AddCOMObject_3.htm" />
</HelpTOCNode>
<HelpTOCNode Id="0b36c06f-6025-4e07-ab79-a669159b3ca7" Title="AddCOMType Method " Url="html/Overload_Microsoft_ClearScript_ScriptEngine_AddCOMType.htm">
<HelpTOCNode Id="130fb3fd-70dd-4170-bf57-b9bf213676be" Title="AddCOMType Method " Url="html/Overload_Microsoft_ClearScript_ScriptEngine_AddCOMType.htm">
<HelpTOCNode Title="AddCOMType Method (String, Guid)" Url="html/M_Microsoft_ClearScript_ScriptEngine_AddCOMType_4.htm" />
<HelpTOCNode Title="AddCOMType Method (String, String)" Url="html/M_Microsoft_ClearScript_ScriptEngine_AddCOMType_6.htm" />
<HelpTOCNode Title="AddCOMType Method (String, HostItemFlags, Guid)" Url="html/M_Microsoft_ClearScript_ScriptEngine_AddCOMType.htm" />
@ -230,11 +244,11 @@
<HelpTOCNode Title="AddCOMType Method (String, HostItemFlags, Guid, String)" Url="html/M_Microsoft_ClearScript_ScriptEngine_AddCOMType_1.htm" />
<HelpTOCNode Title="AddCOMType Method (String, HostItemFlags, String, String)" Url="html/M_Microsoft_ClearScript_ScriptEngine_AddCOMType_3.htm" />
</HelpTOCNode>
<HelpTOCNode Id="b3f32fb0-c37e-43d0-9a24-e79713987a9c" Title="AddHostObject Method " Url="html/Overload_Microsoft_ClearScript_ScriptEngine_AddHostObject.htm">
<HelpTOCNode Id="aab5d077-98ad-4ded-8897-4bd8b40ff100" Title="AddHostObject Method " Url="html/Overload_Microsoft_ClearScript_ScriptEngine_AddHostObject.htm">
<HelpTOCNode Title="AddHostObject Method (String, Object)" Url="html/M_Microsoft_ClearScript_ScriptEngine_AddHostObject_1.htm" />
<HelpTOCNode Title="AddHostObject Method (String, HostItemFlags, Object)" Url="html/M_Microsoft_ClearScript_ScriptEngine_AddHostObject.htm" />
</HelpTOCNode>
<HelpTOCNode Id="b77d464b-41e6-4618-a611-1328e0d7840a" Title="AddHostType Method " Url="html/Overload_Microsoft_ClearScript_ScriptEngine_AddHostType.htm">
<HelpTOCNode Id="792eebb1-1d79-47e5-befd-6184bfcf3fee" Title="AddHostType Method " Url="html/Overload_Microsoft_ClearScript_ScriptEngine_AddHostType.htm">
<HelpTOCNode Title="AddHostType Method (Type)" Url="html/M_Microsoft_ClearScript_ScriptEngine_AddHostType_7.htm" />
<HelpTOCNode Title="AddHostType Method (String, Type)" Url="html/M_Microsoft_ClearScript_ScriptEngine_AddHostType_6.htm" />
<HelpTOCNode Title="AddHostType Method (HostItemFlags, Type)" Url="html/M_Microsoft_ClearScript_ScriptEngine_AddHostType.htm" />
@ -244,24 +258,26 @@
<HelpTOCNode Title="AddHostType Method (String, String, String, Type[])" Url="html/M_Microsoft_ClearScript_ScriptEngine_AddHostType_4.htm" />
<HelpTOCNode Title="AddHostType Method (String, HostItemFlags, String, String, Type[])" Url="html/M_Microsoft_ClearScript_ScriptEngine_AddHostType_1.htm" />
</HelpTOCNode>
<HelpTOCNode Id="102233a2-25a6-4170-9da4-da86b132db35" Title="AddRestrictedHostObject Method " Url="html/Overload_Microsoft_ClearScript_ScriptEngine_AddRestrictedHostObject.htm">
<HelpTOCNode Id="511cd9a5-3dae-49d3-aa1e-eca3f8a765bb" Title="AddRestrictedHostObject Method " Url="html/Overload_Microsoft_ClearScript_ScriptEngine_AddRestrictedHostObject.htm">
<HelpTOCNode Title="AddRestrictedHostObject(T) Method (String, T)" Url="html/M_Microsoft_ClearScript_ScriptEngine_AddRestrictedHostObject__1_1.htm" />
<HelpTOCNode Title="AddRestrictedHostObject(T) Method (String, HostItemFlags, T)" Url="html/M_Microsoft_ClearScript_ScriptEngine_AddRestrictedHostObject__1.htm" />
</HelpTOCNode>
<HelpTOCNode Title="CollectGarbage Method " Url="html/M_Microsoft_ClearScript_ScriptEngine_CollectGarbage.htm" />
<HelpTOCNode Id="7c8feddc-6ee6-4516-9512-7debd9bac707" Title="Dispose Method " Url="html/Overload_Microsoft_ClearScript_ScriptEngine_Dispose.htm">
<HelpTOCNode Id="fdfabbee-758a-40fe-8483-ff2159086be5" Title="Dispose Method " Url="html/Overload_Microsoft_ClearScript_ScriptEngine_Dispose.htm">
<HelpTOCNode Title="Dispose Method " Url="html/M_Microsoft_ClearScript_ScriptEngine_Dispose.htm" />
<HelpTOCNode Title="Dispose Method (Boolean)" Url="html/M_Microsoft_ClearScript_ScriptEngine_Dispose_1.htm" />
</HelpTOCNode>
<HelpTOCNode Id="baa564df-d7c9-450f-804c-0aa090e86e3f" Title="Evaluate Method " Url="html/Overload_Microsoft_ClearScript_ScriptEngine_Evaluate.htm">
<HelpTOCNode Title="Evaluate Method (String)" Url="html/M_Microsoft_ClearScript_ScriptEngine_Evaluate.htm" />
<HelpTOCNode Title="Evaluate Method (String, String)" Url="html/M_Microsoft_ClearScript_ScriptEngine_Evaluate_2.htm" />
<HelpTOCNode Title="Evaluate Method (String, Boolean, String)" Url="html/M_Microsoft_ClearScript_ScriptEngine_Evaluate_1.htm" />
<HelpTOCNode Id="9c3cd995-db2a-4d21-9630-90f9ad807451" Title="Evaluate Method " Url="html/Overload_Microsoft_ClearScript_ScriptEngine_Evaluate.htm">
<HelpTOCNode Title="Evaluate Method (String)" Url="html/M_Microsoft_ClearScript_ScriptEngine_Evaluate_1.htm" />
<HelpTOCNode Title="Evaluate Method (String, String)" Url="html/M_Microsoft_ClearScript_ScriptEngine_Evaluate_3.htm" />
<HelpTOCNode Title="Evaluate Method (DocumentInfo, String)" Url="html/M_Microsoft_ClearScript_ScriptEngine_Evaluate.htm" />
<HelpTOCNode Title="Evaluate Method (String, Boolean, String)" Url="html/M_Microsoft_ClearScript_ScriptEngine_Evaluate_2.htm" />
</HelpTOCNode>
<HelpTOCNode Id="624fc958-5bf5-415d-bbc8-e003ecfeb73e" Title="Execute Method " Url="html/Overload_Microsoft_ClearScript_ScriptEngine_Execute.htm">
<HelpTOCNode Title="Execute Method (String)" Url="html/M_Microsoft_ClearScript_ScriptEngine_Execute.htm" />
<HelpTOCNode Title="Execute Method (String, String)" Url="html/M_Microsoft_ClearScript_ScriptEngine_Execute_2.htm" />
<HelpTOCNode Title="Execute Method (String, Boolean, String)" Url="html/M_Microsoft_ClearScript_ScriptEngine_Execute_1.htm" />
<HelpTOCNode Id="ac146bfe-823a-4c1d-8fa0-1c1d0a4ad033" Title="Execute Method " Url="html/Overload_Microsoft_ClearScript_ScriptEngine_Execute.htm">
<HelpTOCNode Title="Execute Method (String)" Url="html/M_Microsoft_ClearScript_ScriptEngine_Execute_1.htm" />
<HelpTOCNode Title="Execute Method (String, String)" Url="html/M_Microsoft_ClearScript_ScriptEngine_Execute_3.htm" />
<HelpTOCNode Title="Execute Method (DocumentInfo, String)" Url="html/M_Microsoft_ClearScript_ScriptEngine_Execute.htm" />
<HelpTOCNode Title="Execute Method (String, Boolean, String)" Url="html/M_Microsoft_ClearScript_ScriptEngine_Execute_2.htm" />
</HelpTOCNode>
<HelpTOCNode Title="ExecuteCommand Method " Url="html/M_Microsoft_ClearScript_ScriptEngine_ExecuteCommand.htm" />
<HelpTOCNode Title="Finalize Method " Url="html/M_Microsoft_ClearScript_ScriptEngine_Finalize.htm" />
@ -270,48 +286,48 @@
<HelpTOCNode Title="Invoke Method " Url="html/M_Microsoft_ClearScript_ScriptEngine_Invoke.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="3daed80f-cf1d-4d23-bea4-8dd9fd3a179f" Title="ScriptEngineException Class" Url="html/T_Microsoft_ClearScript_ScriptEngineException.htm">
<HelpTOCNode Id="87dd1e26-206f-489b-aec9-f7f4afa427e4" Title="ScriptEngineException Constructor " Url="html/Overload_Microsoft_ClearScript_ScriptEngineException__ctor.htm">
<HelpTOCNode Id="c42da4b5-786e-423e-abad-69446802ecdf" Title="ScriptEngineException Class" Url="html/T_Microsoft_ClearScript_ScriptEngineException.htm">
<HelpTOCNode Id="f631a4b4-b0c8-47cf-9821-31f40f788a38" Title="ScriptEngineException Constructor " Url="html/Overload_Microsoft_ClearScript_ScriptEngineException__ctor.htm">
<HelpTOCNode Title="ScriptEngineException Constructor " Url="html/M_Microsoft_ClearScript_ScriptEngineException__ctor.htm" />
<HelpTOCNode Title="ScriptEngineException Constructor (String)" Url="html/M_Microsoft_ClearScript_ScriptEngineException__ctor_2.htm" />
<HelpTOCNode Title="ScriptEngineException Constructor (SerializationInfo, StreamingContext)" Url="html/M_Microsoft_ClearScript_ScriptEngineException__ctor_1.htm" />
<HelpTOCNode Title="ScriptEngineException Constructor (String, Exception)" Url="html/M_Microsoft_ClearScript_ScriptEngineException__ctor_3.htm" />
</HelpTOCNode>
<HelpTOCNode Id="78a0809e-45e4-4dad-81da-1cfdc5b30d59" Title="ScriptEngineException Properties" Url="html/Properties_T_Microsoft_ClearScript_ScriptEngineException.htm">
<HelpTOCNode Id="6da0721e-4eaf-402c-bb30-f1aa4e7647fa" Title="ScriptEngineException Properties" Url="html/Properties_T_Microsoft_ClearScript_ScriptEngineException.htm">
<HelpTOCNode Title="EngineName Property " Url="html/P_Microsoft_ClearScript_ScriptEngineException_EngineName.htm" />
<HelpTOCNode Title="ErrorDetails Property " Url="html/P_Microsoft_ClearScript_ScriptEngineException_ErrorDetails.htm" />
<HelpTOCNode Title="ExecutionStarted Property " Url="html/P_Microsoft_ClearScript_ScriptEngineException_ExecutionStarted.htm" />
<HelpTOCNode Title="IsFatal Property " Url="html/P_Microsoft_ClearScript_ScriptEngineException_IsFatal.htm" />
<HelpTOCNode Title="ScriptException Property " Url="html/P_Microsoft_ClearScript_ScriptEngineException_ScriptException.htm" />
</HelpTOCNode>
<HelpTOCNode Id="ed5e791e-9a4e-44e8-b611-79883137d9dc" Title="ScriptEngineException Methods" Url="html/Methods_T_Microsoft_ClearScript_ScriptEngineException.htm">
<HelpTOCNode Id="a5ae8583-3671-4d6f-8666-eecb32a053cb" Title="ScriptEngineException Methods" Url="html/Methods_T_Microsoft_ClearScript_ScriptEngineException.htm">
<HelpTOCNode Title="GetObjectData Method " Url="html/M_Microsoft_ClearScript_ScriptEngineException_GetObjectData.htm" />
<HelpTOCNode Title="ToString Method " Url="html/M_Microsoft_ClearScript_ScriptEngineException_ToString.htm" />
</HelpTOCNode>
<HelpTOCNode Title="ScriptEngineException Events" Url="html/Events_T_Microsoft_ClearScript_ScriptEngineException.htm" />
</HelpTOCNode>
<HelpTOCNode Id="a2d06be2-544d-4a32-b0ba-6500a71c958e" Title="ScriptInterruptedException Class" Url="html/T_Microsoft_ClearScript_ScriptInterruptedException.htm">
<HelpTOCNode Id="49045506-5810-4823-bc25-75e7c5ac8e9e" Title="ScriptInterruptedException Constructor " Url="html/Overload_Microsoft_ClearScript_ScriptInterruptedException__ctor.htm">
<HelpTOCNode Id="dc4c3b43-62a1-45f4-981e-3386d0ec53d9" Title="ScriptInterruptedException Class" Url="html/T_Microsoft_ClearScript_ScriptInterruptedException.htm">
<HelpTOCNode Id="d534e372-e7d0-4501-99c6-98c5796a31e5" Title="ScriptInterruptedException Constructor " Url="html/Overload_Microsoft_ClearScript_ScriptInterruptedException__ctor.htm">
<HelpTOCNode Title="ScriptInterruptedException Constructor " Url="html/M_Microsoft_ClearScript_ScriptInterruptedException__ctor.htm" />
<HelpTOCNode Title="ScriptInterruptedException Constructor (String)" Url="html/M_Microsoft_ClearScript_ScriptInterruptedException__ctor_2.htm" />
<HelpTOCNode Title="ScriptInterruptedException Constructor (SerializationInfo, StreamingContext)" Url="html/M_Microsoft_ClearScript_ScriptInterruptedException__ctor_1.htm" />
<HelpTOCNode Title="ScriptInterruptedException Constructor (String, Exception)" Url="html/M_Microsoft_ClearScript_ScriptInterruptedException__ctor_3.htm" />
</HelpTOCNode>
<HelpTOCNode Id="5be6d364-ff66-463d-b59a-596aaf2b279a" Title="ScriptInterruptedException Properties" Url="html/Properties_T_Microsoft_ClearScript_ScriptInterruptedException.htm">
<HelpTOCNode Id="a820d104-4a11-4b6f-97ce-a5c522c76df3" Title="ScriptInterruptedException Properties" Url="html/Properties_T_Microsoft_ClearScript_ScriptInterruptedException.htm">
<HelpTOCNode Title="EngineName Property " Url="html/P_Microsoft_ClearScript_ScriptInterruptedException_EngineName.htm" />
<HelpTOCNode Title="ErrorDetails Property " Url="html/P_Microsoft_ClearScript_ScriptInterruptedException_ErrorDetails.htm" />
<HelpTOCNode Title="ExecutionStarted Property " Url="html/P_Microsoft_ClearScript_ScriptInterruptedException_ExecutionStarted.htm" />
<HelpTOCNode Title="IsFatal Property " Url="html/P_Microsoft_ClearScript_ScriptInterruptedException_IsFatal.htm" />
<HelpTOCNode Title="ScriptException Property " Url="html/P_Microsoft_ClearScript_ScriptInterruptedException_ScriptException.htm" />
</HelpTOCNode>
<HelpTOCNode Id="e28a73f8-db2b-4843-967f-459d83922beb" Title="ScriptInterruptedException Methods" Url="html/Methods_T_Microsoft_ClearScript_ScriptInterruptedException.htm">
<HelpTOCNode Id="34ea984c-2d7f-44d7-858c-dbaa43d23ce1" Title="ScriptInterruptedException Methods" Url="html/Methods_T_Microsoft_ClearScript_ScriptInterruptedException.htm">
<HelpTOCNode Title="GetObjectData Method " Url="html/M_Microsoft_ClearScript_ScriptInterruptedException_GetObjectData.htm" />
<HelpTOCNode Title="ToString Method " Url="html/M_Microsoft_ClearScript_ScriptInterruptedException_ToString.htm" />
</HelpTOCNode>
<HelpTOCNode Title="ScriptInterruptedException Events" Url="html/Events_T_Microsoft_ClearScript_ScriptInterruptedException.htm" />
</HelpTOCNode>
<HelpTOCNode Id="ca85b853-b5de-4612-aeb6-4559a4be0758" Title="ScriptMemberAttribute Class" Url="html/T_Microsoft_ClearScript_ScriptMemberAttribute.htm">
<HelpTOCNode Id="48e78293-7e59-430e-82a0-81415a65d6f5" Title="ScriptMemberAttribute Constructor " Url="html/Overload_Microsoft_ClearScript_ScriptMemberAttribute__ctor.htm">
<HelpTOCNode Id="0a57a585-e301-480a-8042-094fcab34570" Title="ScriptMemberAttribute Class" Url="html/T_Microsoft_ClearScript_ScriptMemberAttribute.htm">
<HelpTOCNode Id="fe8b9b2d-38aa-4d4f-ac55-f46b4144aeee" Title="ScriptMemberAttribute Constructor " Url="html/Overload_Microsoft_ClearScript_ScriptMemberAttribute__ctor.htm">
<HelpTOCNode Title="ScriptMemberAttribute Constructor " Url="html/M_Microsoft_ClearScript_ScriptMemberAttribute__ctor.htm" />
<HelpTOCNode Title="ScriptMemberAttribute Constructor (String)" Url="html/M_Microsoft_ClearScript_ScriptMemberAttribute__ctor_4.htm" />
<HelpTOCNode Title="ScriptMemberAttribute Constructor (ScriptAccess)" Url="html/M_Microsoft_ClearScript_ScriptMemberAttribute__ctor_1.htm" />
@ -321,84 +337,84 @@
<HelpTOCNode Title="ScriptMemberAttribute Constructor (ScriptAccess, ScriptMemberFlags)" Url="html/M_Microsoft_ClearScript_ScriptMemberAttribute__ctor_2.htm" />
<HelpTOCNode Title="ScriptMemberAttribute Constructor (String, ScriptAccess, ScriptMemberFlags)" Url="html/M_Microsoft_ClearScript_ScriptMemberAttribute__ctor_6.htm" />
</HelpTOCNode>
<HelpTOCNode Id="8c3c567a-57b1-4d7b-a5d2-1f2466da4477" Title="ScriptMemberAttribute Properties" Url="html/Properties_T_Microsoft_ClearScript_ScriptMemberAttribute.htm">
<HelpTOCNode Id="cb79d352-17df-44ad-ab8c-e46dee49a7fc" Title="ScriptMemberAttribute Properties" Url="html/Properties_T_Microsoft_ClearScript_ScriptMemberAttribute.htm">
<HelpTOCNode Title="Flags Property " Url="html/P_Microsoft_ClearScript_ScriptMemberAttribute_Flags.htm" />
<HelpTOCNode Title="Name Property " Url="html/P_Microsoft_ClearScript_ScriptMemberAttribute_Name.htm" />
</HelpTOCNode>
<HelpTOCNode Title="ScriptMemberAttribute Methods" Url="html/Methods_T_Microsoft_ClearScript_ScriptMemberAttribute.htm" />
</HelpTOCNode>
<HelpTOCNode Title="ScriptMemberFlags Enumeration" Url="html/T_Microsoft_ClearScript_ScriptMemberFlags.htm" />
<HelpTOCNode Id="4f954b9b-1807-4980-ab25-2fe09aacd50e" Title="ScriptObject Class" Url="html/T_Microsoft_ClearScript_ScriptObject.htm">
<HelpTOCNode Id="b43186f2-8a40-4e63-82e7-318ed3c28e8f" Title="ScriptObject Properties" Url="html/Properties_T_Microsoft_ClearScript_ScriptObject.htm">
<HelpTOCNode Id="e95ec09c-aeca-48fc-bb9f-15912d60096c" Title="ScriptObject Class" Url="html/T_Microsoft_ClearScript_ScriptObject.htm">
<HelpTOCNode Id="25e86a30-050c-4390-8b1b-cb33d421f710" Title="ScriptObject Properties" Url="html/Properties_T_Microsoft_ClearScript_ScriptObject.htm">
<HelpTOCNode Title="Engine Property " Url="html/P_Microsoft_ClearScript_ScriptObject_Engine.htm" />
</HelpTOCNode>
<HelpTOCNode Title="ScriptObject Methods" Url="html/Methods_T_Microsoft_ClearScript_ScriptObject.htm" />
</HelpTOCNode>
<HelpTOCNode Id="9aaa39c4-7a13-4a78-b909-585166792501" Title="ScriptUsageAttribute Class" Url="html/T_Microsoft_ClearScript_ScriptUsageAttribute.htm">
<HelpTOCNode Id="4cde01d1-5c5f-4d0c-9023-f2498775dca2" Title="ScriptUsageAttribute Constructor " Url="html/Overload_Microsoft_ClearScript_ScriptUsageAttribute__ctor.htm">
<HelpTOCNode Id="5b2e6bab-8731-4d7d-a26e-dd373b301d58" Title="ScriptUsageAttribute Class" Url="html/T_Microsoft_ClearScript_ScriptUsageAttribute.htm">
<HelpTOCNode Id="4cd4f419-64de-4aad-b423-cf3c83433eab" Title="ScriptUsageAttribute Constructor " Url="html/Overload_Microsoft_ClearScript_ScriptUsageAttribute__ctor.htm">
<HelpTOCNode Title="ScriptUsageAttribute Constructor " Url="html/M_Microsoft_ClearScript_ScriptUsageAttribute__ctor.htm" />
<HelpTOCNode Title="ScriptUsageAttribute Constructor (ScriptAccess)" Url="html/M_Microsoft_ClearScript_ScriptUsageAttribute__ctor_1.htm" />
</HelpTOCNode>
<HelpTOCNode Id="efa88324-7c1d-4e11-a15d-f28b53b71d96" Title="ScriptUsageAttribute Properties" Url="html/Properties_T_Microsoft_ClearScript_ScriptUsageAttribute.htm">
<HelpTOCNode Id="1ebf0111-2a65-4ac9-9dc7-2fc8009b3d7e" Title="ScriptUsageAttribute Properties" Url="html/Properties_T_Microsoft_ClearScript_ScriptUsageAttribute.htm">
<HelpTOCNode Title="Access Property " Url="html/P_Microsoft_ClearScript_ScriptUsageAttribute_Access.htm" />
</HelpTOCNode>
<HelpTOCNode Title="ScriptUsageAttribute Methods" Url="html/Methods_T_Microsoft_ClearScript_ScriptUsageAttribute.htm" />
</HelpTOCNode>
<HelpTOCNode Id="923ba7b7-63fe-40fc-a96f-fb1c88dde877" Title="Undefined Class" Url="html/T_Microsoft_ClearScript_Undefined.htm">
<HelpTOCNode Id="1b2c9ba3-78b2-4aea-8678-84973bd2a662" Title="Undefined Methods" Url="html/Methods_T_Microsoft_ClearScript_Undefined.htm">
<HelpTOCNode Id="b90c1e06-ec73-4d3d-9753-62d58e09613f" Title="Undefined Class" Url="html/T_Microsoft_ClearScript_Undefined.htm">
<HelpTOCNode Id="4bbc3207-e3c4-455f-9b77-8d94c04a1aef" Title="Undefined Methods" Url="html/Methods_T_Microsoft_ClearScript_Undefined.htm">
<HelpTOCNode Title="ToString Method " Url="html/M_Microsoft_ClearScript_Undefined_ToString.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="d637be8c-675f-462c-85a0-c2124b8bea74" Title="VoidResult Class" Url="html/T_Microsoft_ClearScript_VoidResult.htm">
<HelpTOCNode Id="c0b04562-f1c8-419d-80b1-86118f6ff60d" Title="VoidResult Class" Url="html/T_Microsoft_ClearScript_VoidResult.htm">
<HelpTOCNode Title="VoidResult Methods" Url="html/Methods_T_Microsoft_ClearScript_VoidResult.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="fada8a58-e185-46de-a6e6-5ef65078d39c" Title="Microsoft.ClearScript.JavaScript" Url="html/N_Microsoft_ClearScript_JavaScript.htm">
<HelpTOCNode Id="215b0302-a8bd-46ad-b665-a579775e7a9c" Title="IArrayBuffer Interface" Url="html/T_Microsoft_ClearScript_JavaScript_IArrayBuffer.htm">
<HelpTOCNode Id="f658cc7e-9f59-45c8-a03f-2d577c9610b9" Title="IArrayBuffer Properties" Url="html/Properties_T_Microsoft_ClearScript_JavaScript_IArrayBuffer.htm">
<HelpTOCNode Id="decf65a4-ff22-45ff-9bb6-c16eafb73687" Title="Microsoft.ClearScript.JavaScript" Url="html/N_Microsoft_ClearScript_JavaScript.htm">
<HelpTOCNode Id="64b7bff0-60c9-4784-a615-d6e7551686b6" Title="IArrayBuffer Interface" Url="html/T_Microsoft_ClearScript_JavaScript_IArrayBuffer.htm">
<HelpTOCNode Id="00548894-db89-4039-a5f2-3f32d1d7044e" Title="IArrayBuffer Properties" Url="html/Properties_T_Microsoft_ClearScript_JavaScript_IArrayBuffer.htm">
<HelpTOCNode Title="Size Property " Url="html/P_Microsoft_ClearScript_JavaScript_IArrayBuffer_Size.htm" />
</HelpTOCNode>
<HelpTOCNode Id="5e8e5f2d-f5a8-46b8-a4d9-a70f927eafd2" Title="IArrayBuffer Methods" Url="html/Methods_T_Microsoft_ClearScript_JavaScript_IArrayBuffer.htm">
<HelpTOCNode Id="cc14de66-c8a1-4dbf-bf32-a701ff9d9265" Title="IArrayBuffer Methods" Url="html/Methods_T_Microsoft_ClearScript_JavaScript_IArrayBuffer.htm">
<HelpTOCNode Title="GetBytes Method " Url="html/M_Microsoft_ClearScript_JavaScript_IArrayBuffer_GetBytes.htm" />
<HelpTOCNode Title="ReadBytes Method " Url="html/M_Microsoft_ClearScript_JavaScript_IArrayBuffer_ReadBytes.htm" />
<HelpTOCNode Title="WriteBytes Method " Url="html/M_Microsoft_ClearScript_JavaScript_IArrayBuffer_WriteBytes.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="2e44f1c8-a37e-49bc-8b73-25e2d6bcd657" Title="IArrayBufferView Interface" Url="html/T_Microsoft_ClearScript_JavaScript_IArrayBufferView.htm">
<HelpTOCNode Id="2ef7b96a-3c9e-44d8-b91b-aebfb4f32a2c" Title="IArrayBufferView Properties" Url="html/Properties_T_Microsoft_ClearScript_JavaScript_IArrayBufferView.htm">
<HelpTOCNode Id="3415d7e0-3a76-4c05-8f82-afac5e53c1d9" Title="IArrayBufferView Interface" Url="html/T_Microsoft_ClearScript_JavaScript_IArrayBufferView.htm">
<HelpTOCNode Id="9095530b-3b90-46cd-8247-71b4e9b772fb" Title="IArrayBufferView Properties" Url="html/Properties_T_Microsoft_ClearScript_JavaScript_IArrayBufferView.htm">
<HelpTOCNode Title="ArrayBuffer Property " Url="html/P_Microsoft_ClearScript_JavaScript_IArrayBufferView_ArrayBuffer.htm" />
<HelpTOCNode Title="Offset Property " Url="html/P_Microsoft_ClearScript_JavaScript_IArrayBufferView_Offset.htm" />
<HelpTOCNode Title="Size Property " Url="html/P_Microsoft_ClearScript_JavaScript_IArrayBufferView_Size.htm" />
</HelpTOCNode>
<HelpTOCNode Id="ed1415bb-bcbb-4b47-9c3a-0aeb817a4ae3" Title="IArrayBufferView Methods" Url="html/Methods_T_Microsoft_ClearScript_JavaScript_IArrayBufferView.htm">
<HelpTOCNode Id="f5a1711f-7463-4b80-95aa-ff6c74816f72" Title="IArrayBufferView Methods" Url="html/Methods_T_Microsoft_ClearScript_JavaScript_IArrayBufferView.htm">
<HelpTOCNode Title="GetBytes Method " Url="html/M_Microsoft_ClearScript_JavaScript_IArrayBufferView_GetBytes.htm" />
<HelpTOCNode Title="ReadBytes Method " Url="html/M_Microsoft_ClearScript_JavaScript_IArrayBufferView_ReadBytes.htm" />
<HelpTOCNode Title="WriteBytes Method " Url="html/M_Microsoft_ClearScript_JavaScript_IArrayBufferView_WriteBytes.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="2ceeb632-99eb-4317-a54a-eedc81193c4d" Title="IDataView Interface" Url="html/T_Microsoft_ClearScript_JavaScript_IDataView.htm">
<HelpTOCNode Id="a930f52a-939b-4ba0-a1be-e0db7ea3109a" Title="IDataView Interface" Url="html/T_Microsoft_ClearScript_JavaScript_IDataView.htm">
<HelpTOCNode Title="IDataView Properties" Url="html/Properties_T_Microsoft_ClearScript_JavaScript_IDataView.htm" />
<HelpTOCNode Title="IDataView Methods" Url="html/Methods_T_Microsoft_ClearScript_JavaScript_IDataView.htm" />
</HelpTOCNode>
<HelpTOCNode Id="ef4c91ff-ca43-41f5-a2e3-51d5405a2ff9" Title="ITypedArray Interface" Url="html/T_Microsoft_ClearScript_JavaScript_ITypedArray.htm">
<HelpTOCNode Id="14f7d626-41a8-4793-9369-2d3dfc49d5c8" Title="ITypedArray Properties" Url="html/Properties_T_Microsoft_ClearScript_JavaScript_ITypedArray.htm">
<HelpTOCNode Id="26a29322-5d5b-4232-9e01-1b8997ca39f0" Title="ITypedArray Interface" Url="html/T_Microsoft_ClearScript_JavaScript_ITypedArray.htm">
<HelpTOCNode Id="250574b4-e034-40e4-90a5-4c96a489424c" Title="ITypedArray Properties" Url="html/Properties_T_Microsoft_ClearScript_JavaScript_ITypedArray.htm">
<HelpTOCNode Title="Length Property " Url="html/P_Microsoft_ClearScript_JavaScript_ITypedArray_Length.htm" />
</HelpTOCNode>
<HelpTOCNode Title="ITypedArray Methods" Url="html/Methods_T_Microsoft_ClearScript_JavaScript_ITypedArray.htm" />
</HelpTOCNode>
<HelpTOCNode Id="05cb66d1-4206-4809-9f56-96737d6fa1c5" Title="ITypedArray(T) Interface" Url="html/T_Microsoft_ClearScript_JavaScript_ITypedArray_1.htm">
<HelpTOCNode Id="a6153009-fcd6-45cd-b828-4bb4531149a5" Title="ITypedArray(T) Interface" Url="html/T_Microsoft_ClearScript_JavaScript_ITypedArray_1.htm">
<HelpTOCNode Title="ITypedArray(T) Properties" Url="html/Properties_T_Microsoft_ClearScript_JavaScript_ITypedArray_1.htm" />
<HelpTOCNode Id="a7a2ec0a-1906-4766-bdaa-7542a7dd55e2" Title="ITypedArray(T) Methods" Url="html/Methods_T_Microsoft_ClearScript_JavaScript_ITypedArray_1.htm">
<HelpTOCNode Id="8df6afb4-a885-4a72-b786-f64caf178af6" Title="ITypedArray(T) Methods" Url="html/Methods_T_Microsoft_ClearScript_JavaScript_ITypedArray_1.htm">
<HelpTOCNode Title="Read Method " Url="html/M_Microsoft_ClearScript_JavaScript_ITypedArray_1_Read.htm" />
<HelpTOCNode Title="ToArray Method " Url="html/M_Microsoft_ClearScript_JavaScript_ITypedArray_1_ToArray.htm" />
<HelpTOCNode Title="Write Method " Url="html/M_Microsoft_ClearScript_JavaScript_ITypedArray_1_Write.htm" />
</HelpTOCNode>
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="cade12da-d654-4898-98a0-d27786b32076" Title="Microsoft.ClearScript.V8" Url="html/N_Microsoft_ClearScript_V8.htm">
<HelpTOCNode Id="92e3f2ec-2599-4255-8322-d5a40b8cc6d4" Title="Microsoft.ClearScript.V8" Url="html/N_Microsoft_ClearScript_V8.htm">
<HelpTOCNode Title="V8CacheKind Enumeration" Url="html/T_Microsoft_ClearScript_V8_V8CacheKind.htm" />
<HelpTOCNode Id="466d68dd-228a-41d2-b9dc-45995479acde" Title="V8Runtime Class" Url="html/T_Microsoft_ClearScript_V8_V8Runtime.htm">
<HelpTOCNode Id="677b0482-0a56-4fd2-9a00-a4fe33a54a50" Title="V8Runtime Constructor " Url="html/Overload_Microsoft_ClearScript_V8_V8Runtime__ctor.htm">
<HelpTOCNode Id="86e40fe9-c4cc-4bf8-8852-c780cb03fe55" Title="V8Runtime Class" Url="html/T_Microsoft_ClearScript_V8_V8Runtime.htm">
<HelpTOCNode Id="8710d2e6-a2cb-4458-b0b7-c69756ac9dac" Title="V8Runtime Constructor " Url="html/Overload_Microsoft_ClearScript_V8_V8Runtime__ctor.htm">
<HelpTOCNode Title="V8Runtime Constructor " Url="html/M_Microsoft_ClearScript_V8_V8Runtime__ctor.htm" />
<HelpTOCNode Title="V8Runtime Constructor (String)" Url="html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_6.htm" />
<HelpTOCNode Title="V8Runtime Constructor (V8RuntimeConstraints)" Url="html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_1.htm" />
@ -412,24 +428,27 @@
<HelpTOCNode Title="V8Runtime Constructor (V8RuntimeConstraints, V8RuntimeFlags, Int32)" Url="html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_3.htm" />
<HelpTOCNode Title="V8Runtime Constructor (String, V8RuntimeConstraints, V8RuntimeFlags, Int32)" Url="html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_9.htm" />
</HelpTOCNode>
<HelpTOCNode Id="7ccff467-a49d-4bc6-a302-591cae83bf1c" Title="V8Runtime Properties" Url="html/Properties_T_Microsoft_ClearScript_V8_V8Runtime.htm">
<HelpTOCNode Id="5d53ea49-a646-4f0f-baca-c8969d50db85" Title="V8Runtime Properties" Url="html/Properties_T_Microsoft_ClearScript_V8_V8Runtime.htm">
<HelpTOCNode Title="FormatCode Property " Url="html/P_Microsoft_ClearScript_V8_V8Runtime_FormatCode.htm" />
<HelpTOCNode Title="HeapSizeSampleInterval Property " Url="html/P_Microsoft_ClearScript_V8_V8Runtime_HeapSizeSampleInterval.htm" />
<HelpTOCNode Title="MaxHeapSize Property " Url="html/P_Microsoft_ClearScript_V8_V8Runtime_MaxHeapSize.htm" />
<HelpTOCNode Title="MaxStackUsage Property " Url="html/P_Microsoft_ClearScript_V8_V8Runtime_MaxStackUsage.htm" />
<HelpTOCNode Title="Name Property " Url="html/P_Microsoft_ClearScript_V8_V8Runtime_Name.htm" />
</HelpTOCNode>
<HelpTOCNode Id="d933ad3e-714c-4f1e-9128-e62cea788752" Title="V8Runtime Methods" Url="html/Methods_T_Microsoft_ClearScript_V8_V8Runtime.htm">
<HelpTOCNode Id="df8e6030-b4f3-4458-8e37-ff0e2d3edc7a" Title="V8Runtime Methods" Url="html/Methods_T_Microsoft_ClearScript_V8_V8Runtime.htm">
<HelpTOCNode Title="CollectGarbage Method " Url="html/M_Microsoft_ClearScript_V8_V8Runtime_CollectGarbage.htm" />
<HelpTOCNode Id="0a7a5546-26db-43da-96f5-4ba4505917ac" Title="Compile Method " Url="html/Overload_Microsoft_ClearScript_V8_V8Runtime_Compile.htm">
<HelpTOCNode Title="Compile Method (String)" Url="html/M_Microsoft_ClearScript_V8_V8Runtime_Compile.htm" />
<HelpTOCNode Title="Compile Method (String, String)" Url="html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_3.htm" />
<HelpTOCNode Title="Compile Method (String, V8CacheKind, Byte[])" Url="html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_2.htm" />
<HelpTOCNode Title="Compile Method (String, V8CacheKind, Byte[], Boolean)" Url="html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_1.htm" />
<HelpTOCNode Title="Compile Method (String, String, V8CacheKind, Byte[])" Url="html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_5.htm" />
<HelpTOCNode Title="Compile Method (String, String, V8CacheKind, Byte[], Boolean)" Url="html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_4.htm" />
<HelpTOCNode Id="3516125e-1c2b-4c74-b1ff-55c21a1120cd" Title="Compile Method " Url="html/Overload_Microsoft_ClearScript_V8_V8Runtime_Compile.htm">
<HelpTOCNode Title="Compile Method (String)" Url="html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_3.htm" />
<HelpTOCNode Title="Compile Method (String, String)" Url="html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_6.htm" />
<HelpTOCNode Title="Compile Method (DocumentInfo, String)" Url="html/M_Microsoft_ClearScript_V8_V8Runtime_Compile.htm" />
<HelpTOCNode Title="Compile Method (String, V8CacheKind, Byte[])" Url="html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_5.htm" />
<HelpTOCNode Title="Compile Method (String, V8CacheKind, Byte[], Boolean)" Url="html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_4.htm" />
<HelpTOCNode Title="Compile Method (String, String, V8CacheKind, Byte[])" Url="html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_8.htm" />
<HelpTOCNode Title="Compile Method (DocumentInfo, String, V8CacheKind, Byte[])" Url="html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_2.htm" />
<HelpTOCNode Title="Compile Method (String, String, V8CacheKind, Byte[], Boolean)" Url="html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_7.htm" />
<HelpTOCNode Title="Compile Method (DocumentInfo, String, V8CacheKind, Byte[], Boolean)" Url="html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_1.htm" />
</HelpTOCNode>
<HelpTOCNode Id="e69d152a-72e6-46e4-85f8-50bc7ae02e7b" Title="CreateScriptEngine Method " Url="html/Overload_Microsoft_ClearScript_V8_V8Runtime_CreateScriptEngine.htm">
<HelpTOCNode Id="4a5a602f-13cb-43a4-aa38-a2c13c6bd793" Title="CreateScriptEngine Method " Url="html/Overload_Microsoft_ClearScript_V8_V8Runtime_CreateScriptEngine.htm">
<HelpTOCNode Title="CreateScriptEngine Method " Url="html/M_Microsoft_ClearScript_V8_V8Runtime_CreateScriptEngine.htm" />
<HelpTOCNode Title="CreateScriptEngine Method (String)" Url="html/M_Microsoft_ClearScript_V8_V8Runtime_CreateScriptEngine_3.htm" />
<HelpTOCNode Title="CreateScriptEngine Method (V8ScriptEngineFlags)" Url="html/M_Microsoft_ClearScript_V8_V8Runtime_CreateScriptEngine_1.htm" />
@ -441,9 +460,9 @@
<HelpTOCNode Title="GetHeapInfo Method " Url="html/M_Microsoft_ClearScript_V8_V8Runtime_GetHeapInfo.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="2d91caec-abb3-46f8-8902-49cc944e308a" Title="V8RuntimeConstraints Class" Url="html/T_Microsoft_ClearScript_V8_V8RuntimeConstraints.htm">
<HelpTOCNode Id="3784d279-ffa0-43bc-9e32-b13f0ab4297e" Title="V8RuntimeConstraints Class" Url="html/T_Microsoft_ClearScript_V8_V8RuntimeConstraints.htm">
<HelpTOCNode Title="V8RuntimeConstraints Constructor " Url="html/M_Microsoft_ClearScript_V8_V8RuntimeConstraints__ctor.htm" />
<HelpTOCNode Id="4d9f2b78-9a23-4616-a063-e02c979acbcd" Title="V8RuntimeConstraints Properties" Url="html/Properties_T_Microsoft_ClearScript_V8_V8RuntimeConstraints.htm">
<HelpTOCNode Id="399de3ab-05a6-4b9e-95df-84e53f8a8260" Title="V8RuntimeConstraints Properties" Url="html/Properties_T_Microsoft_ClearScript_V8_V8RuntimeConstraints.htm">
<HelpTOCNode Title="MaxExecutableSize Property " Url="html/P_Microsoft_ClearScript_V8_V8RuntimeConstraints_MaxExecutableSize.htm" />
<HelpTOCNode Title="MaxNewSpaceSize Property " Url="html/P_Microsoft_ClearScript_V8_V8RuntimeConstraints_MaxNewSpaceSize.htm" />
<HelpTOCNode Title="MaxOldSpaceSize Property " Url="html/P_Microsoft_ClearScript_V8_V8RuntimeConstraints_MaxOldSpaceSize.htm" />
@ -452,8 +471,8 @@
<HelpTOCNode Title="V8RuntimeConstraints Methods" Url="html/Methods_T_Microsoft_ClearScript_V8_V8RuntimeConstraints.htm" />
</HelpTOCNode>
<HelpTOCNode Title="V8RuntimeFlags Enumeration" Url="html/T_Microsoft_ClearScript_V8_V8RuntimeFlags.htm" />
<HelpTOCNode Id="273de3b7-8138-4312-ab66-c4a078c09593" Title="V8RuntimeHeapInfo Class" Url="html/T_Microsoft_ClearScript_V8_V8RuntimeHeapInfo.htm">
<HelpTOCNode Id="1840394c-c36f-4f20-99c9-6bdf6c01164c" Title="V8RuntimeHeapInfo Properties" Url="html/Properties_T_Microsoft_ClearScript_V8_V8RuntimeHeapInfo.htm">
<HelpTOCNode Id="991718bd-737a-401a-b845-8d24f641c43b" Title="V8RuntimeHeapInfo Class" Url="html/T_Microsoft_ClearScript_V8_V8RuntimeHeapInfo.htm">
<HelpTOCNode Id="50bca5c8-3fd3-4954-b54f-3271f3a61fb7" Title="V8RuntimeHeapInfo Properties" Url="html/Properties_T_Microsoft_ClearScript_V8_V8RuntimeHeapInfo.htm">
<HelpTOCNode Title="HeapSizeLimit Property " Url="html/P_Microsoft_ClearScript_V8_V8RuntimeHeapInfo_HeapSizeLimit.htm" />
<HelpTOCNode Title="TotalHeapSize Property " Url="html/P_Microsoft_ClearScript_V8_V8RuntimeHeapInfo_TotalHeapSize.htm" />
<HelpTOCNode Title="TotalHeapSizeExecutable Property " Url="html/P_Microsoft_ClearScript_V8_V8RuntimeHeapInfo_TotalHeapSizeExecutable.htm" />
@ -462,16 +481,17 @@
</HelpTOCNode>
<HelpTOCNode Title="V8RuntimeHeapInfo Methods" Url="html/Methods_T_Microsoft_ClearScript_V8_V8RuntimeHeapInfo.htm" />
</HelpTOCNode>
<HelpTOCNode Id="85237230-6012-461b-a844-9dcd23f73d42" Title="V8Script Class" Url="html/T_Microsoft_ClearScript_V8_V8Script.htm">
<HelpTOCNode Id="19f4efd5-1d20-4ff0-9ad8-8b2b23d607e0" Title="V8Script Properties" Url="html/Properties_T_Microsoft_ClearScript_V8_V8Script.htm">
<HelpTOCNode Id="9cb4a7e2-ebd0-4abb-9c23-0689f6f6e19c" Title="V8Script Class" Url="html/T_Microsoft_ClearScript_V8_V8Script.htm">
<HelpTOCNode Id="f1b8f444-4155-4497-ac4a-0f656a32cbae" Title="V8Script Properties" Url="html/Properties_T_Microsoft_ClearScript_V8_V8Script.htm">
<HelpTOCNode Title="DocumentInfo Property " Url="html/P_Microsoft_ClearScript_V8_V8Script_DocumentInfo.htm" />
<HelpTOCNode Title="Name Property " Url="html/P_Microsoft_ClearScript_V8_V8Script_Name.htm" />
</HelpTOCNode>
<HelpTOCNode Id="285e46a3-be7b-4bd1-a715-278b4e478c6e" Title="V8Script Methods" Url="html/Methods_T_Microsoft_ClearScript_V8_V8Script.htm">
<HelpTOCNode Id="453e9eae-8946-49a9-8635-0a484230508d" Title="V8Script Methods" Url="html/Methods_T_Microsoft_ClearScript_V8_V8Script.htm">
<HelpTOCNode Title="Dispose Method " Url="html/M_Microsoft_ClearScript_V8_V8Script_Dispose.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="5ff1132f-5c74-46e1-bfbf-e827d593153f" Title="V8ScriptEngine Class" Url="html/T_Microsoft_ClearScript_V8_V8ScriptEngine.htm">
<HelpTOCNode Id="ab22b69d-4a3b-4543-97ec-f4aab3234a48" Title="V8ScriptEngine Constructor " Url="html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine__ctor.htm">
<HelpTOCNode Id="cb96bc67-2c73-4492-b4ef-f26134babd95" Title="V8ScriptEngine Class" Url="html/T_Microsoft_ClearScript_V8_V8ScriptEngine.htm">
<HelpTOCNode Id="2bfbb174-beb2-4a6a-914f-78dd0c3c6db0" Title="V8ScriptEngine Constructor " Url="html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine__ctor.htm">
<HelpTOCNode Title="V8ScriptEngine Constructor " Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor.htm" />
<HelpTOCNode Title="V8ScriptEngine Constructor (String)" Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_6.htm" />
<HelpTOCNode Title="V8ScriptEngine Constructor (V8RuntimeConstraints)" Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_1.htm" />
@ -485,7 +505,7 @@
<HelpTOCNode Title="V8ScriptEngine Constructor (V8RuntimeConstraints, V8ScriptEngineFlags, Int32)" Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_3.htm" />
<HelpTOCNode Title="V8ScriptEngine Constructor (String, V8RuntimeConstraints, V8ScriptEngineFlags, Int32)" Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_9.htm" />
</HelpTOCNode>
<HelpTOCNode Id="e645dafe-c36d-4622-aa06-68792101f8b5" Title="V8ScriptEngine Properties" Url="html/Properties_T_Microsoft_ClearScript_V8_V8ScriptEngine.htm">
<HelpTOCNode Id="95633448-59ec-4510-9e39-6bfb835a3adf" Title="V8ScriptEngine Properties" Url="html/Properties_T_Microsoft_ClearScript_V8_V8ScriptEngine.htm">
<HelpTOCNode Title="FileNameExtension Property " Url="html/P_Microsoft_ClearScript_V8_V8ScriptEngine_FileNameExtension.htm" />
<HelpTOCNode Title="MaxRuntimeHeapSize Property " Url="html/P_Microsoft_ClearScript_V8_V8ScriptEngine_MaxRuntimeHeapSize.htm" />
<HelpTOCNode Title="MaxRuntimeStackUsage Property " Url="html/P_Microsoft_ClearScript_V8_V8ScriptEngine_MaxRuntimeStackUsage.htm" />
@ -494,23 +514,26 @@
<HelpTOCNode Title="SuppressExtensionMethodEnumeration Property " Url="html/P_Microsoft_ClearScript_V8_V8ScriptEngine_SuppressExtensionMethodEnumeration.htm" />
<HelpTOCNode Title="SuppressInstanceMethodEnumeration Property " Url="html/P_Microsoft_ClearScript_V8_V8ScriptEngine_SuppressInstanceMethodEnumeration.htm" />
</HelpTOCNode>
<HelpTOCNode Id="d7127f7d-18fb-4971-bf33-91f6c6751e10" Title="V8ScriptEngine Methods" Url="html/Methods_T_Microsoft_ClearScript_V8_V8ScriptEngine.htm">
<HelpTOCNode Id="ed66afed-a000-44b8-a9a7-8dc2affd190f" Title="V8ScriptEngine Methods" Url="html/Methods_T_Microsoft_ClearScript_V8_V8ScriptEngine.htm">
<HelpTOCNode Title="CollectGarbage Method " Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CollectGarbage.htm" />
<HelpTOCNode Id="4ac7b0e4-98eb-477d-acdb-49d0d82949e0" Title="Compile Method " Url="html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine_Compile.htm">
<HelpTOCNode Title="Compile Method (String)" Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile.htm" />
<HelpTOCNode Title="Compile Method (String, String)" Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_3.htm" />
<HelpTOCNode Title="Compile Method (String, V8CacheKind, Byte[])" Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_2.htm" />
<HelpTOCNode Title="Compile Method (String, V8CacheKind, Byte[], Boolean)" Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_1.htm" />
<HelpTOCNode Title="Compile Method (String, String, V8CacheKind, Byte[])" Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_5.htm" />
<HelpTOCNode Title="Compile Method (String, String, V8CacheKind, Byte[], Boolean)" Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_4.htm" />
<HelpTOCNode Id="181c52f4-eed4-4b68-9784-63885036509a" Title="Compile Method " Url="html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine_Compile.htm">
<HelpTOCNode Title="Compile Method (String)" Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_3.htm" />
<HelpTOCNode Title="Compile Method (String, String)" Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_6.htm" />
<HelpTOCNode Title="Compile Method (DocumentInfo, String)" Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile.htm" />
<HelpTOCNode Title="Compile Method (String, V8CacheKind, Byte[])" Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_5.htm" />
<HelpTOCNode Title="Compile Method (String, V8CacheKind, Byte[], Boolean)" Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_4.htm" />
<HelpTOCNode Title="Compile Method (String, String, V8CacheKind, Byte[])" Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_8.htm" />
<HelpTOCNode Title="Compile Method (DocumentInfo, String, V8CacheKind, Byte[])" Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_2.htm" />
<HelpTOCNode Title="Compile Method (String, String, V8CacheKind, Byte[], Boolean)" Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_7.htm" />
<HelpTOCNode Title="Compile Method (DocumentInfo, String, V8CacheKind, Byte[], Boolean)" Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_1.htm" />
</HelpTOCNode>
<HelpTOCNode Id="3601ded8-4167-42ac-877b-ec15e3dfcdf3" Title="Dispose Method " Url="html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine_Dispose.htm">
<HelpTOCNode Id="1edfc25b-10a3-417d-9bca-ae1c85c40a76" Title="Dispose Method " Url="html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine_Dispose.htm">
<HelpTOCNode Title="Dispose Method (Boolean)" Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Dispose.htm" />
</HelpTOCNode>
<HelpTOCNode Id="0e40c2fa-c156-42c6-87ab-5391e828ea37" Title="Evaluate Method " Url="html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine_Evaluate.htm">
<HelpTOCNode Id="3fcff262-b3f9-464a-b1f1-1033a421dc45" Title="Evaluate Method " Url="html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine_Evaluate.htm">
<HelpTOCNode Title="Evaluate Method (V8Script)" Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Evaluate.htm" />
</HelpTOCNode>
<HelpTOCNode Id="df3e43bc-fa63-43b6-b112-451cfe127bd9" Title="Execute Method " Url="html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine_Execute.htm">
<HelpTOCNode Id="800d045a-2cf0-4914-8891-40f71c5e4857" Title="Execute Method " Url="html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine_Execute.htm">
<HelpTOCNode Title="Execute Method (V8Script)" Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Execute.htm" />
</HelpTOCNode>
<HelpTOCNode Title="ExecuteCommand Method " Url="html/M_Microsoft_ClearScript_V8_V8ScriptEngine_ExecuteCommand.htm" />
@ -521,56 +544,56 @@
</HelpTOCNode>
<HelpTOCNode Title="V8ScriptEngineFlags Enumeration" Url="html/T_Microsoft_ClearScript_V8_V8ScriptEngineFlags.htm" />
</HelpTOCNode>
<HelpTOCNode Id="011b25fa-4af4-4e05-b021-29a3beacecb8" Title="Microsoft.ClearScript.Windows" Url="html/N_Microsoft_ClearScript_Windows.htm">
<HelpTOCNode Id="4505e6ee-be4b-4b12-8a1f-1d48cf451d05" Title="IHostWindow Interface" Url="html/T_Microsoft_ClearScript_Windows_IHostWindow.htm">
<HelpTOCNode Id="787a12b2-cf35-422f-a6ac-c468caac6783" Title="IHostWindow Properties" Url="html/Properties_T_Microsoft_ClearScript_Windows_IHostWindow.htm">
<HelpTOCNode Id="51b020e5-11ec-4fe9-b1a6-7da80f51c569" Title="Microsoft.ClearScript.Windows" Url="html/N_Microsoft_ClearScript_Windows.htm">
<HelpTOCNode Id="52cc09e7-30d4-448f-b298-50218613b016" Title="IHostWindow Interface" Url="html/T_Microsoft_ClearScript_Windows_IHostWindow.htm">
<HelpTOCNode Id="653da93e-13ce-443d-879b-9ce1f54943ce" Title="IHostWindow Properties" Url="html/Properties_T_Microsoft_ClearScript_Windows_IHostWindow.htm">
<HelpTOCNode Title="OwnerHandle Property " Url="html/P_Microsoft_ClearScript_Windows_IHostWindow_OwnerHandle.htm" />
</HelpTOCNode>
<HelpTOCNode Id="ec106ff7-2157-4570-b871-5123671b7505" Title="IHostWindow Methods" Url="html/Methods_T_Microsoft_ClearScript_Windows_IHostWindow.htm">
<HelpTOCNode Id="1c5f93c8-6868-4afa-bb25-13dc587d128b" Title="IHostWindow Methods" Url="html/Methods_T_Microsoft_ClearScript_Windows_IHostWindow.htm">
<HelpTOCNode Title="EnableModeless Method " Url="html/M_Microsoft_ClearScript_Windows_IHostWindow_EnableModeless.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="ed620b87-87f7-4951-a758-ca851e85c286" Title="JScriptEngine Class" Url="html/T_Microsoft_ClearScript_Windows_JScriptEngine.htm">
<HelpTOCNode Id="4cc85479-6226-43ce-a0ea-3ee431af65f0" Title="JScriptEngine Constructor " Url="html/Overload_Microsoft_ClearScript_Windows_JScriptEngine__ctor.htm">
<HelpTOCNode Id="c859a893-35c8-411d-b90e-1a0d05f2948d" Title="JScriptEngine Class" Url="html/T_Microsoft_ClearScript_Windows_JScriptEngine.htm">
<HelpTOCNode Id="287a6e86-300c-4d83-ab89-473fe00b2aed" Title="JScriptEngine Constructor " Url="html/Overload_Microsoft_ClearScript_Windows_JScriptEngine__ctor.htm">
<HelpTOCNode Title="JScriptEngine Constructor " Url="html/M_Microsoft_ClearScript_Windows_JScriptEngine__ctor.htm" />
<HelpTOCNode Title="JScriptEngine Constructor (String)" Url="html/M_Microsoft_ClearScript_Windows_JScriptEngine__ctor_2.htm" />
<HelpTOCNode Title="JScriptEngine Constructor (WindowsScriptEngineFlags)" Url="html/M_Microsoft_ClearScript_Windows_JScriptEngine__ctor_1.htm" />
<HelpTOCNode Title="JScriptEngine Constructor (String, WindowsScriptEngineFlags)" Url="html/M_Microsoft_ClearScript_Windows_JScriptEngine__ctor_3.htm" />
<HelpTOCNode Title="JScriptEngine Constructor (String, String, WindowsScriptEngineFlags)" Url="html/M_Microsoft_ClearScript_Windows_JScriptEngine__ctor_4.htm" />
</HelpTOCNode>
<HelpTOCNode Id="ac1d7537-a404-49a1-93ea-3550b4d8cc57" Title="JScriptEngine Properties" Url="html/Properties_T_Microsoft_ClearScript_Windows_JScriptEngine.htm">
<HelpTOCNode Id="bfb21e9c-0942-411e-a85a-d241835713e4" Title="JScriptEngine Properties" Url="html/Properties_T_Microsoft_ClearScript_Windows_JScriptEngine.htm">
<HelpTOCNode Title="FileNameExtension Property " Url="html/P_Microsoft_ClearScript_Windows_JScriptEngine_FileNameExtension.htm" />
</HelpTOCNode>
<HelpTOCNode Id="a1ed7746-6943-4e5c-b72c-1cdfee6ded47" Title="JScriptEngine Methods" Url="html/Methods_T_Microsoft_ClearScript_Windows_JScriptEngine.htm">
<HelpTOCNode Id="74352441-a683-4dec-ac6d-4a27358590cd" Title="JScriptEngine Methods" Url="html/Methods_T_Microsoft_ClearScript_Windows_JScriptEngine.htm">
<HelpTOCNode Title="ExecuteCommand Method " Url="html/M_Microsoft_ClearScript_Windows_JScriptEngine_ExecuteCommand.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="838466e6-3129-40af-b479-681eaa2e81e1" Title="VBScriptEngine Class" Url="html/T_Microsoft_ClearScript_Windows_VBScriptEngine.htm">
<HelpTOCNode Id="57ba31d4-376f-4e04-80c8-fa114576fb16" Title="VBScriptEngine Constructor " Url="html/Overload_Microsoft_ClearScript_Windows_VBScriptEngine__ctor.htm">
<HelpTOCNode Id="39727285-9d82-455e-b542-d9839b0710fe" Title="VBScriptEngine Class" Url="html/T_Microsoft_ClearScript_Windows_VBScriptEngine.htm">
<HelpTOCNode Id="6e3236f6-c1e6-4de8-a537-9f15cff73b2a" Title="VBScriptEngine Constructor " Url="html/Overload_Microsoft_ClearScript_Windows_VBScriptEngine__ctor.htm">
<HelpTOCNode Title="VBScriptEngine Constructor " Url="html/M_Microsoft_ClearScript_Windows_VBScriptEngine__ctor.htm" />
<HelpTOCNode Title="VBScriptEngine Constructor (String)" Url="html/M_Microsoft_ClearScript_Windows_VBScriptEngine__ctor_2.htm" />
<HelpTOCNode Title="VBScriptEngine Constructor (WindowsScriptEngineFlags)" Url="html/M_Microsoft_ClearScript_Windows_VBScriptEngine__ctor_1.htm" />
<HelpTOCNode Title="VBScriptEngine Constructor (String, WindowsScriptEngineFlags)" Url="html/M_Microsoft_ClearScript_Windows_VBScriptEngine__ctor_3.htm" />
<HelpTOCNode Title="VBScriptEngine Constructor (String, String, WindowsScriptEngineFlags)" Url="html/M_Microsoft_ClearScript_Windows_VBScriptEngine__ctor_4.htm" />
</HelpTOCNode>
<HelpTOCNode Id="50055337-305a-48dd-acf2-c7700a5b05c3" Title="VBScriptEngine Properties" Url="html/Properties_T_Microsoft_ClearScript_Windows_VBScriptEngine.htm">
<HelpTOCNode Id="a04c2117-a31f-4bde-bcbb-1488e75fdf85" Title="VBScriptEngine Properties" Url="html/Properties_T_Microsoft_ClearScript_Windows_VBScriptEngine.htm">
<HelpTOCNode Title="FileNameExtension Property " Url="html/P_Microsoft_ClearScript_Windows_VBScriptEngine_FileNameExtension.htm" />
</HelpTOCNode>
<HelpTOCNode Id="64b7856b-a905-4127-a85d-583dacbe6e40" Title="VBScriptEngine Methods" Url="html/Methods_T_Microsoft_ClearScript_Windows_VBScriptEngine.htm">
<HelpTOCNode Id="2cb459e7-a03e-45ac-8297-7d9bc6239142" Title="VBScriptEngine Methods" Url="html/Methods_T_Microsoft_ClearScript_Windows_VBScriptEngine.htm">
<HelpTOCNode Title="ExecuteCommand Method " Url="html/M_Microsoft_ClearScript_Windows_VBScriptEngine_ExecuteCommand.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="a5225716-9456-4f62-9264-c21e78ccc695" Title="WindowsScriptEngine Class" Url="html/T_Microsoft_ClearScript_Windows_WindowsScriptEngine.htm">
<HelpTOCNode Id="f62eb3f4-10fb-45e0-9813-79faf3b363aa" Title="WindowsScriptEngine Class" Url="html/T_Microsoft_ClearScript_Windows_WindowsScriptEngine.htm">
<HelpTOCNode Title="WindowsScriptEngine Constructor " Url="html/M_Microsoft_ClearScript_Windows_WindowsScriptEngine__ctor.htm" />
<HelpTOCNode Id="bc13b2db-2ef1-405c-bff7-fbec44e46b25" Title="WindowsScriptEngine Properties" Url="html/Properties_T_Microsoft_ClearScript_Windows_WindowsScriptEngine.htm">
<HelpTOCNode Id="440c27d3-6958-4346-bd7b-1f24f6c2f9b5" Title="WindowsScriptEngine Properties" Url="html/Properties_T_Microsoft_ClearScript_Windows_WindowsScriptEngine.htm">
<HelpTOCNode Title="Dispatcher Property " Url="html/P_Microsoft_ClearScript_Windows_WindowsScriptEngine_Dispatcher.htm" />
<HelpTOCNode Title="HostWindow Property " Url="html/P_Microsoft_ClearScript_Windows_WindowsScriptEngine_HostWindow.htm" />
<HelpTOCNode Title="Script Property " Url="html/P_Microsoft_ClearScript_Windows_WindowsScriptEngine_Script.htm" />
</HelpTOCNode>
<HelpTOCNode Id="ae73fc33-b86b-4bb2-ae11-03d6466a73d7" Title="WindowsScriptEngine Methods" Url="html/Methods_T_Microsoft_ClearScript_Windows_WindowsScriptEngine.htm">
<HelpTOCNode Id="d2127b6a-cf2d-46f9-ae97-b82bc2f9b022" Title="WindowsScriptEngine Methods" Url="html/Methods_T_Microsoft_ClearScript_Windows_WindowsScriptEngine.htm">
<HelpTOCNode Title="CheckAccess Method " Url="html/M_Microsoft_ClearScript_Windows_WindowsScriptEngine_CheckAccess.htm" />
<HelpTOCNode Title="CollectGarbage Method " Url="html/M_Microsoft_ClearScript_Windows_WindowsScriptEngine_CollectGarbage.htm" />
<HelpTOCNode Id="26c103c7-e415-4843-b251-4cda09c19c40" Title="Dispose Method " Url="html/Overload_Microsoft_ClearScript_Windows_WindowsScriptEngine_Dispose.htm">
<HelpTOCNode Id="b67852a4-64ad-48cb-a79a-53bbacb56c34" Title="Dispose Method " Url="html/Overload_Microsoft_ClearScript_Windows_WindowsScriptEngine_Dispose.htm">
<HelpTOCNode Title="Dispose Method (Boolean)" Url="html/M_Microsoft_ClearScript_Windows_WindowsScriptEngine_Dispose.htm" />
</HelpTOCNode>
<HelpTOCNode Title="GetStackTrace Method " Url="html/M_Microsoft_ClearScript_Windows_WindowsScriptEngine_GetStackTrace.htm" />

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -1 +1 @@
{"heapsizesampleinterval":[19398657,26279941,29622273],"hostitemflags":[2031630,2555918,2621454,3538958,3932174,8192007,8519681,8912903,8978439,9240577,9306113,9371649,9502721,9568263,9633799,9699335,9764865,9830407,9895937,9961479,10027009,10092551,10158087,10289153,10354689,10420231,10485767,10551297,10747905,10813441,10944518,11403271,11468801,16973825,18219009,19070980,19791873,22413316,22937604,25886734,26935301,28246030,29163534,29425678,30212110],"http":[4128769,5963777],"hos":[1900545,17629186,18284545,26738690,26935297],"hosttypecollection":[458755,1245187,2686977,2818059,3145733,5570566,5832706,5898242,6160386,6225922,6291462,6422534,6684674,6750210,7012354,7077894,7143430,7733250,16973825,18939906,19202049,19464194,20316163,20905991,27394049,28704780,29556737],"hosts":[23134209,23592961,25427969,25821185],"hostwindow":[20971521,22085633,22609921,26411013,26738689,28246017,29163521,29425665],"hidedynamicmembers":[26935297],"hierarchy":[25886721,26083329,26345473,26476545,26869761,27000833,27394049,27852801,28049409,28246017,28508161,28639233,28704769,28966913,29032449,29097985,29163521,29229057,29294593,29425665,29556737,29622273,29687809,29818881,30015489,30212097],"helplink":[20054017,20381697,27000833,27852801],"hierarchical":[2818049,3145729,28704769],"halt":[19595265,20971521,21168129,22085633,22609921,22872065,25886721,28246017,29163521,29425665,30212097],"hresult":[20054018,20381698,21299202,23396358,27000834,27852802,30081026],"hostfunctions":[2162691,2687017,3276802,3407875,3473410,3670018,3801090,3866626,3997698,4063234,4128770,4194307,4259842,4325378,4390914,4456451,4521986,4587523,4653058,4718595,4784130,4849666,4915203,4980738,5046274,5111810,5177346,5242882,5308418,5373954,5439490,5505026,5636098,5701634,5767170,5963778,6029314,6094850,6356994,6488066,6553602,6619138,6946818,7274498,7405570,7536646,10944513,16908290,16973825,17235970,17760258,18350082,18677762,19529730,20119554,20512770,25362433,25755649,26476554,29556782],"hands":[26935297],"handled":[5963777],"handler":[655361,851969,2293761,2949121,16973825,28639235,29032450],"high":[17891329,27131905],"help":[20054017,20381697,27000833,27852801],"heap":[19398658,19857412,20185092,21168130,23134209,23592961,24117249,24576001,24903681,25427973,25624577,25821185,26279938,26607620,28114948,28770306,29622274,29687812,29818884,30212098],"handle":[2162689,2686977,2949121,5963777,21495809,25100289,26476545,26738689,29556737],"handling":[5963777],"holds":[5242881,7864321,11665409],"htm":[4128769],"hash":[393217,589825,655361,851969,1114113,1179649,1245185,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1966081,2031617,2162689,2359297,2490369,2555905,2686977,2621441,3538945,3735553,3932161,25886721,26083329,26345473,26476545,26869761,27000833,27394049,27852801,28049409,28246017,28508161,28639233,28704769,28966913,29032449,29097985,29163521,29229057,29294593,29425665,29556737,29622273,29687809,29818881,30015489,30212097],"handlers":[29425665,30212097],"host":[655361,720897,851969,1245192,2031628,2162712,2293761,2424836,2555916,2687006,2621452,2752515,2818060,2883587,2949121,3145735,3211277,3276806,3342349,3473416,3538956,3604486,3670018,3801091,3866630,3932172,3997702,4063234,4128775,4194309,4259843,4325378,4390914,4456455,4521990,4587523,4653058,4718598,4784130,4849670,4915206,4980742,5111810,5177346,5242894,5308422,5373954,5439494,5505026,5570561,5636102,5701634,5767174,5832705,5898241,5963784,6029318,6094854,6160385,6225921,6291457,6356996,6422529,6488072,6553606,6619142,6684673,6750209,6815747,6946822,7012353,7077889,7143425,7274503,7405574,7733249,7798785,8192001,8519681,8912897,8978433,9240577,9306115,9371650,9502721,9568257,9633793,9699331,9764865,9830403,9895937,9961473,10027009,10092546,10158081,10289155,10354689,10420225,10485763,10551298,10747905,10813443,10944520,11403267,11468803,12779525,16515075,16646145,16973832,17235970,17760258,18219010,18350082,18677762,18939908,19070984,19202051,19464195,19529731,19595268,19791874,20119554,20512770,20905989,20971523,21168131,21299201,22085635,22609923,23265283,23330817,23855106,23920641,24248322,24772609,25362434,25886736,26345474,26476568,26804225,26935300,27197441,27328513,27852801,28246031,28377089,28573699,28639234,28704786,29032450,29163535,29425679,29491201,29556767,29949954,30081025,30212111],"heapsizelimit":[20185089,24117253,29818881],"hosttypeargs":[3211269,3342341]}
{"helplink":[22478849,22937601,30081025,30212097],"hash":[327681,524289,589825,655361,720897,786433,1179649,1310721,1376257,1441793,1507329,1572865,1703937,1769473,1835009,1900545,2031617,2097153,2162689,2293761,2490369,2621441,2686977,2752513,3145729,3604481,4063233,27328513,27983873,28114945,28311553,28573697,28704769,28835841,29097985,29229057,29425665,29622273,29949953,30081025,30146561,30212097,30277633,30408705,30539777,30670849,30736385,30801921,30932993,30998529,31064065,31129601,31195137,31260673],"handled":[28639233],"handler":[655361,720897,2949121,3014657,18022401,28573699,29229058],"help":[22478849,22937601,30081025,30212097],"heapsizelimit":[25296897,26345477,29425665],"heap":[23855105,24313857,24444933,24576002,24903681,25034756,25296900,25362433,25493505,25886721,26345473,26476546,26673154,26738692,27066372,27525122,28311554,28835844,29425668,30277634],"hosts":[24444929,24903681,25362433,25886721],"host":[655361,720897,786440,851969,2097176,2162700,2621452,2687006,2752524,2883587,2949121,3014657,3080198,3145740,3211270,3276812,3342343,3407885,3538950,3670020,3735554,3801091,3866627,3932167,3997709,4063244,4128770,4194310,4259845,4325384,4390915,4456454,4653070,4718594,4784130,4849666,4915202,4980738,5046278,5111814,5177351,5242882,5308419,5373958,5505030,5570566,5636100,5701633,5767174,5832706,5898248,5963777,6029318,6094849,6160390,6225921,6291458,6356993,6422529,6488065,6553601,6619142,6684678,6750214,6815745,6881287,6946822,7077889,7143426,7340038,7405569,7536641,7864323,7929857,8388609,8716289,9043969,9175041,9371649,9437185,9568257,9633795,9699329,9764866,9830401,9961473,10027009,10158081,10289154,10420227,10485761,10616833,10747907,11075585,11337733,11599873,11665411,11862019,12189699,12320769,12517379,12713987,12845064,13762562,16187393,17367043,17891330,18022408,18219010,18350082,18415620,18677763,18743304,18808834,19333122,19464194,19529733,20447235,20512771,20905986,21037059,21364738,21889027,21954564,22675457,23068673,23330817,24051715,24379394,25690115,26476547,27197441,27262979,27394049,27459585,27787265,27918342,28049410,28377090,28573698,28639240,29229058,29949968,30015489,30146591,30212097,30277647,30539778,30736408,30867460,30998543,31064082,31129615,31260687,31326209,31457282,31522817],"handle":[2097153,2686977,3014657,26804225,28639233,29294593,30146561,30605313,30736385],"high":[18546689,26017793],"htm":[3932161],"heapsizesampleinterval":[24576001,26673157,28311553],"hostitemflags":[2162702,2621454,2752526,3145742,4063246,8388615,9043975,9175041,9371655,9437185,9568257,9633799,9699335,9764871,9830401,9961479,10027015,10158087,10289153,10420225,10485767,10616833,10747911,11075585,11599873,11665409,11862023,12189697,12320769,12517383,12713985,12845062,13762561,18022401,18219009,18743300,19333121,20643844,20971524,29949966,30277646,30867461,30998542,31129614,31260686],"hostfunctions":[2097155,2687017,3211266,3538946,3735554,3866626,3932162,4128770,4194307,4259843,4325378,4390915,4456450,4521987,4587522,4653058,4718594,4784130,4849666,4915202,4980738,5046274,5111810,5177347,5242882,5308418,5373955,5439494,5505026,5570562,5636098,5767170,5832706,5898242,6029314,6160386,6291458,6619138,6684674,6750210,6881282,6946818,7143426,7340034,12845057,17891330,18022401,18153474,18350082,18808834,19464194,20447234,20905986,21364738,24379393,25165825,27918338,28639234,30146606,30736394],"http":[3932161,28639233],"holds":[4653057,9306113,11927553],"hos":[1966081,16515074,19005441,30605314,30867457],"hresult":[22216710,22478850,22937602,23068674,30081026,30212098,31522818],"handling":[28639233],"handlers":[30277633,31260673],"hosttypeargs":[3407877,3997701],"honor":[27656193],"hands":[30867457],"halt":[21037057,21889025,21954561,25231361,26476545,27262977,29949953,30277633,30998529,31129601,31260673],"hierarchy":[27328513,28114945,28311553,28573697,28704769,28835841,29097985,29229057,29425665,29622273,29949953,30081025,30146561,30212097,30277633,30408705,30539777,30670849,30736385,30801921,30932993,30998529,31064065,31129601,31195137,31260673],"hostwindow":[21037057,21889025,27262977,29884421,30605313,30998529,31129601,31260673],"hidedynamicmembers":[30867457],"hosttypecollection":[131075,786435,2686977,3276811,3342341,5701634,5963778,6094850,6225922,6356994,6422530,6488066,6553602,6815750,7077894,7405574,7536646,7929862,18022401,18415618,18677762,19529735,20512769,22413315,29097985,30146561,31064076],"hierarchical":[3276801,3342337,31064065]}

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -1 +1 @@
{"just":[29491201],"jscriptengine":[2555907,15007750,15466502,15859718,16252934,16580614,18087939,18284545,18874375,22085635,25296899,28246028,29425665,29491202],"javascrip":[12779521,25755649,28835841],"jscript":[15007745,15466497,15859713,16252929,16580610,18284546,18874373,27131905,28246022,29491202],"javascript":[786433,917505,983041,1048577,1310721,2752513,2818049,2883585,3145729,3211265,3276801,3342338,3473409,3866625,3997697,4128769,4194305,4456449,4521985,4718593,4849665,4915201,4980737,5242881,5308417,5439489,5636097,5767169,5963777,6029313,6094849,6488065,6553601,6619137,6881282,6946817,7208962,7274497,7405569,7602178,7929858,8323074,8650754,8781826,9437186,10223618,17498119,17891331,21561345,22020097,22151170,22282241,22675458,22740993,23199746,23658498,23724033,24182786,24444930,24707075,25034755,25493508,27131908,30146563,30212097,30277635]}
{"jscript":[14680065,15007745,15400961,16056322,17301505,19005442,19988485,26017793,30998534,31326210],"javascript":[983041,1048577,1114113,1245185,1638401,2883585,3211265,3276801,3342337,3407874,3538945,3801089,3932161,3997697,4194305,4259841,4325377,4456449,4653057,5046273,5111809,5177345,5373953,5505025,5570561,5767169,5898241,6029313,6160385,6619137,6684673,6750209,6881281,6946817,7012354,7208962,7340033,7602178,7667714,7798786,8650754,8912898,8978434,9502722,18284551,18546691,23396353,23789569,24248321,24510466,24641537,24969218,25427970,25624577,25952258,26017796,26279938,26411010,26607619,27000835,27590660,27918337,28639233,30277633,30343171,31588355],"javascrip":[11337729,25165825,30474241],"jscriptengine":[2752515,14680070,15007750,15400966,16056326,17104899,17301510,19005441,19988487,27262979,29491203,30998540,31260673,31326210],"just":[31326209]}

Просмотреть файл

@ -1 +1 @@
{"keys":[19267585,20316161,20840450,25559047,27394049,28704769,29884418],"kind":[13697025,13959169,14942209,15204353,16318465,16842753,17563649,18153473,30277633],"key":[3080196,7667718,8454150,8716294,9109510,20054017,20381697,20840449,24969222,27000833,27852801,29884421],"keyword":[12779521],"keyvaluepair":[3080198,20840450,27394056,29884432]}
{"kind":[13107201,13893633,14614529,15073281,15335425,15663105,16252929,17694721,17760257,18612225,19070977,20250625,30343169],"keys":[21561345,22413313,22544386,27721735,29097985,31064065,31391746],"key":[2818052,7995398,8192006,8781830,9109510,22478849,22544385,22937601,27131910,30081025,30212097,31391749],"keyword":[11337729],"keyvaluepair":[2818054,22544386,29097992,31391760]}

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше