Version 7.4.4: Added ConcurrentPropertyBag (GitHub Issue #531); [V8] added V8ScriptEngineFlags.UseSynchronizationContexts (GitHub Discussion #509); added ScriptEngine.CustomAttributeLoader (GitHub Discussion #540); fixed property accessor recursion bug (GitHub Issue #541); added ScriptEngine.HostData and CustomAttributeLoader.Default; updated API documentation. Tested with V8 11.8.172.15.

This commit is contained in:
ClearScript 2023-10-16 22:06:55 -04:00
Родитель cb50bb0238
Коммит 6df5f19436
835 изменённых файлов: 2256 добавлений и 1457 удалений

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

@ -40,9 +40,9 @@ namespace Microsoft.ClearScript
type == typeof(TimeSpan) || type == typeof(TimeSpan) ||
type == typeof(Guid) || type == typeof(Guid) ||
#if NET471_OR_GREATER || NETCOREAPP2_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER #if NET471_OR_GREATER || NETCOREAPP2_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER
type.GetOrLoadCustomAttributes<System.Runtime.CompilerServices.IsReadOnlyAttribute>(false).Any() || type.GetOrLoadCustomAttributes<System.Runtime.CompilerServices.IsReadOnlyAttribute>(null, false).Any() ||
#endif #endif
type.GetOrLoadCustomAttributes<ImmutableValueAttribute>(false).Any()) type.GetOrLoadCustomAttributes<ImmutableValueAttribute>(null, false).Any())
{ {
map = (ICanonicalRefMap)typeof(CanonicalRefMap<>).MakeGenericType(type).CreateInstance(); map = (ICanonicalRefMap)typeof(CanonicalRefMap<>).MakeGenericType(type).CreateInstance();
} }

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

@ -0,0 +1,136 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Runtime.CompilerServices;
using Microsoft.ClearScript.Util;
namespace Microsoft.ClearScript
{
internal sealed class CustomAttributeCache
{
private readonly ConditionalWeakTable<ICustomAttributeProvider, Entry> table = new ConditionalWeakTable<ICustomAttributeProvider, Entry>();
public T[] GetOrLoad<T>(CustomAttributeLoader loader, ICustomAttributeProvider resource, bool inherit) where T : Attribute
{
lock (table)
{
return GetOrLoad<T>(loader, table.GetOrCreateValue(resource), resource, inherit);
}
}
private T[] GetOrLoad<T>(CustomAttributeLoader loader, Entry entry, ICustomAttributeProvider resource, bool inherit) where T : Attribute
{
if (entry.TryGet<T>(out var attrs))
{
return attrs;
}
attrs = Load<T>(GetIsBypass(entry, resource) ? CustomAttributeLoader.Default : loader, resource, inherit);
entry.Add(attrs);
return attrs;
}
private static T[] Load<T>(CustomAttributeLoader loader, ICustomAttributeProvider resource, bool inherit) where T : Attribute
{
return loader.LoadCustomAttributes<T>(resource, inherit) ?? ArrayHelpers.GetEmptyArray<T>();
}
private bool GetIsBypass(ICustomAttributeProvider resource)
{
// ReSharper disable once InconsistentlySynchronizedField
return GetIsBypass(table.GetOrCreateValue(resource), resource);
}
private bool GetIsBypass(Entry entry, ICustomAttributeProvider resource)
{
if (!entry.IsBypass.HasValue)
{
entry.IsBypass = GetIsBypassInternal(resource);
}
return entry.IsBypass.Value;
}
private bool GetIsBypassInternal(ICustomAttributeProvider resource)
{
if (Load<BypassCustomAttributeLoaderAttribute>(CustomAttributeLoader.Default, resource, false).Length > 0)
{
return true;
}
var parent = GetParent(resource);
if (parent != null)
{
return GetIsBypass(parent);
}
return false;
}
private static ICustomAttributeProvider GetParent(ICustomAttributeProvider resource)
{
if (resource is ParameterInfo parameter)
{
return parameter.Member;
}
if (resource is Type type)
{
return (type.DeclaringType as ICustomAttributeProvider) ?? type.Module;
}
if (resource is MemberInfo member)
{
return member.DeclaringType;
}
if (resource is Module module)
{
return module.Assembly;
}
return null;
}
#region Nested type: Entry
// ReSharper disable ClassNeverInstantiated.Local
private sealed class Entry
{
private readonly Dictionary<Type, object> map = new Dictionary<Type, object>();
public bool? IsBypass { get; set; }
public void Add<T>(T[] attrs)
{
map.Add(typeof(T), attrs);
}
public bool TryGet<T>(out T[] attrs)
{
if (map.TryGetValue(typeof(T), out var attrsObject))
{
attrs = attrsObject as T[];
return true;
}
attrs = null;
return false;
}
}
// ReSharper restore ClassNeverInstantiated.Local
#endregion
}
[AttributeUsage(AttributeTargets.All, Inherited = false)]
internal sealed class BypassCustomAttributeLoaderAttribute : Attribute
{
}
}

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

@ -12,6 +12,8 @@ namespace Microsoft.ClearScript
/// </summary> /// </summary>
public class CustomAttributeLoader public class CustomAttributeLoader
{ {
private readonly CustomAttributeCache cache = new CustomAttributeCache();
// ReSharper disable EmptyConstructor // ReSharper disable EmptyConstructor
/// <summary> /// <summary>
@ -22,6 +24,11 @@ namespace Microsoft.ClearScript
// the help file builder (SHFB) insists on an empty constructor here // the help file builder (SHFB) insists on an empty constructor here
} }
/// <summary>
/// Gets the default custom attribute loader.
/// </summary>
public static CustomAttributeLoader Default { get; } = new CustomAttributeLoader();
// ReSharper restore EmptyConstructor // ReSharper restore EmptyConstructor
/// <summary> /// <summary>
@ -60,5 +67,10 @@ namespace Microsoft.ClearScript
return resource.GetCustomAttributes(typeof(T), inherit).OfType<T>().ToArray(); return resource.GetCustomAttributes(typeof(T), inherit).OfType<T>().ToArray();
} }
internal T[] GetOrLoad<T>(ICustomAttributeProvider resource, bool inherit) where T : Attribute
{
return cache.GetOrLoad<T>(this, resource, inherit);
}
} }
} }

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

@ -1,21 +0,0 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
using System.Reflection;
using System.Runtime.CompilerServices;
namespace Microsoft.ClearScript
{
internal static partial class CustomAttributes
{
private static ConditionalWeakTable<ICustomAttributeProvider, CacheEntry> cache = new ConditionalWeakTable<ICustomAttributeProvider, CacheEntry>();
public static void ClearCache()
{
lock (cacheLock)
{
cache = new ConditionalWeakTable<ICustomAttributeProvider, CacheEntry>();
}
}
}
}

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

@ -1,21 +0,0 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
using System.Reflection;
using System.Runtime.CompilerServices;
namespace Microsoft.ClearScript
{
internal static partial class CustomAttributes
{
private static readonly ConditionalWeakTable<ICustomAttributeProvider, CacheEntry> cache = new ConditionalWeakTable<ICustomAttributeProvider, CacheEntry>();
public static void ClearCache()
{
lock (cacheLock)
{
cache.Clear();
}
}
}
}

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

@ -1,154 +1,23 @@
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license. // Licensed under the MIT license.
using System; using System;
using System.Collections.Generic;
using System.Reflection; using System.Reflection;
using Microsoft.ClearScript.Util; using Microsoft.ClearScript.Util;
namespace Microsoft.ClearScript namespace Microsoft.ClearScript
{ {
internal static partial class CustomAttributes internal static class CustomAttributes
{ {
private static readonly object cacheLock = new object(); public static T[] GetOrLoad<T>(IHostContext context, ICustomAttributeProvider resource, bool inherit) where T : Attribute
public static T[] GetOrLoad<T>(ICustomAttributeProvider resource, bool inherit) where T : Attribute
{ {
lock (cacheLock) var loader = context?.CustomAttributeLoader ?? HostSettings.CustomAttributeLoader;
return loader.GetOrLoad<T>(resource, inherit);
}
public static bool Has<T>(IHostContext context, ICustomAttributeProvider resource, bool inherit) where T : Attribute
{ {
return GetOrLoad<T>(cache.GetOrCreateValue(resource), resource, inherit); return GetOrLoad<T>(context, resource, inherit).Length > 0;
} }
} }
public static bool Has<T>(ICustomAttributeProvider resource, bool inherit) where T : Attribute
{
lock (cacheLock)
{
return Has<T>(cache.GetOrCreateValue(resource), resource, inherit);
}
}
private static T[] GetOrLoad<T>(CacheEntry entry, ICustomAttributeProvider resource, bool inherit) where T : Attribute
{
if (entry.TryGet<T>(out var attrs))
{
return attrs;
}
attrs = GetOrLoad<T>(GetIsBypass(entry, resource), resource, inherit);
entry.Add(attrs);
return attrs;
}
private static bool Has<T>(CacheEntry entry, ICustomAttributeProvider resource, bool inherit) where T : Attribute
{
return GetOrLoad<T>(entry, resource, inherit).Length > 0;
}
private static T[] GetOrLoad<T>(bool isBypass, ICustomAttributeProvider resource, bool inherit) where T : Attribute
{
var loader = isBypass ? HostSettings.DefaultCustomAttributeLoader : HostSettings.CustomAttributeLoader;
return loader.LoadCustomAttributes<T>(resource, inherit) ?? ArrayHelpers.GetEmptyArray<T>();
}
private static bool Has<T>(bool isBypass, ICustomAttributeProvider resource, bool inherit) where T : Attribute
{
return GetOrLoad<T>(isBypass, resource, inherit).Length > 0;
}
private static bool GetIsBypass(ICustomAttributeProvider resource)
{
// ReSharper disable once InconsistentlySynchronizedField
return GetIsBypass(cache.GetOrCreateValue(resource), resource);
}
private static bool GetIsBypass(CacheEntry entry, ICustomAttributeProvider resource)
{
if (!entry.IsBypass.HasValue)
{
entry.IsBypass = GetIsBypassInternal(resource);
}
return entry.IsBypass.Value;
}
private static bool GetIsBypassInternal(ICustomAttributeProvider resource)
{
if (Has<BypassCustomAttributeLoaderAttribute>(true, resource, false))
{
return true;
}
var parent = GetParent(resource);
if (parent != null)
{
return GetIsBypass(parent);
}
return false;
}
private static ICustomAttributeProvider GetParent(ICustomAttributeProvider resource)
{
if (resource is ParameterInfo parameter)
{
return parameter.Member;
}
if (resource is Type type)
{
return (type.DeclaringType as ICustomAttributeProvider) ?? type.Module;
}
if (resource is MemberInfo member)
{
return member.DeclaringType;
}
if (resource is Module module)
{
return module.Assembly;
}
return null;
}
#region Nested type: CacheEntry
// ReSharper disable ClassNeverInstantiated.Local
private sealed class CacheEntry
{
private readonly Dictionary<Type, object> map = new Dictionary<Type, object>();
public bool? IsBypass { get; set; }
public void Add<T>(T[] attrs)
{
map.Add(typeof(T), attrs);
}
public bool TryGet<T>(out T[] attrs)
{
if (map.TryGetValue(typeof(T), out var attrsObject))
{
attrs = attrsObject as T[];
return true;
}
attrs = null;
return false;
}
}
// ReSharper restore ClassNeverInstantiated.Local
#endregion
}
[AttributeUsage(AttributeTargets.All, Inherited = false)]
internal sealed class BypassCustomAttributeLoaderAttribute : Attribute
{
}
} }

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

@ -5,7 +5,7 @@
#pragma once #pragma once
#define CLEARSCRIPT_VERSION_STRING "7.4.3" #define CLEARSCRIPT_VERSION_STRING "7.4.4"
#define CLEARSCRIPT_VERSION_COMMA_SEPARATED 7,4,3 #define CLEARSCRIPT_VERSION_COMMA_SEPARATED 7,4,4
#define CLEARSCRIPT_VERSION_STRING_INFORMATIONAL "7.4.3" #define CLEARSCRIPT_VERSION_STRING_INFORMATIONAL "7.4.4"
#define CLEARSCRIPT_FILE_FLAGS 0L #define CLEARSCRIPT_FILE_FLAGS 0L

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

@ -299,7 +299,7 @@ namespace Microsoft.ClearScript
} }
} }
} }
else if (type.IsImport && (type.Assembly.GetOrLoadCustomAttribute<ImportedFromTypeLibAttribute>(false) != null)) else if (type.IsImport && (type.Assembly.GetOrLoadCustomAttribute<ImportedFromTypeLibAttribute>(ScriptEngine.Current, false) != null))
{ {
type.Assembly.GetReferencedEnums().ForEach(collection.AddType); type.Assembly.GetReferencedEnums().ForEach(collection.AddType);
return collection; return collection;

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

@ -17,28 +17,28 @@ namespace Microsoft.ClearScript
public ExtensionMethodSummary Summary { get; private set; } = new ExtensionMethodSummary(); public ExtensionMethodSummary Summary { get; private set; } = new ExtensionMethodSummary();
public bool ProcessType(Type type, IHostContext context) public bool ProcessType(IHostContext context, Type type)
{ {
Debug.Assert(type.IsSpecific()); Debug.Assert(type.IsSpecific());
if (!table.ContainsKey(type) && type.HasExtensionMethods()) if (!table.ContainsKey(type) && type.HasExtensionMethods(context))
{ {
const BindingFlags bindFlags = BindingFlags.Public | BindingFlags.Static; const BindingFlags bindFlags = BindingFlags.Public | BindingFlags.Static;
table[type] = type.GetMethods(bindFlags).Where(method => IsScriptableExtensionMethod(method, context)).ToArray(); table[type] = type.GetMethods(bindFlags).Where(method => IsScriptableExtensionMethod(context, method)).ToArray();
RebuildSummary(); RebuildSummary(context);
return true; return true;
} }
return false; return false;
} }
public void RebuildSummary() public void RebuildSummary(IHostContext context)
{ {
Summary = new ExtensionMethodSummary(table); Summary = new ExtensionMethodSummary(context, table);
} }
private static bool IsScriptableExtensionMethod(MethodInfo method, IHostContext context) private static bool IsScriptableExtensionMethod(IHostContext context, MethodInfo method)
{ {
return method.IsScriptable(context) && method.HasCustomAttributes<ExtensionAttribute>(false); return method.IsScriptable(context) && method.HasCustomAttributes<ExtensionAttribute>(context, false);
} }
} }
@ -51,11 +51,11 @@ namespace Microsoft.ClearScript
MethodNames = ArrayHelpers.GetEmptyArray<string>(); MethodNames = ArrayHelpers.GetEmptyArray<string>();
} }
public ExtensionMethodSummary(Dictionary<Type, MethodInfo[]> table) public ExtensionMethodSummary(IHostContext context, Dictionary<Type, MethodInfo[]> table)
{ {
Types = table.Keys.ToArray(); Types = table.Keys.ToArray();
Methods = table.SelectMany(pair => pair.Value).ToArray(); Methods = table.SelectMany(pair => pair.Value).ToArray();
MethodNames = Methods.Select(method => method.GetScriptName()).ToArray(); MethodNames = Methods.Select(method => method.GetScriptName(context)).ToArray();
} }
public Type[] Types { get; } public Type[] Types { get; }

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

@ -643,7 +643,7 @@ namespace Microsoft.ClearScript
public T flags<T>(params T[] args) public T flags<T>(params T[] args)
{ {
var type = typeof(T); var type = typeof(T);
if (!type.IsFlagsEnum()) if (!type.IsFlagsEnum(ScriptEngine.Current))
{ {
throw new InvalidOperationException(MiscHelpers.FormatInvariant("{0} is not a flag set type", type.GetFullFriendlyName())); throw new InvalidOperationException(MiscHelpers.FormatInvariant("{0} is not a flag set type", type.GetFullFriendlyName()));
} }

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

@ -346,7 +346,7 @@ namespace Microsoft.ClearScript
{ {
try try
{ {
var rawResult = TypeHelpers.BindToMember(candidates, bindFlags, args, bindArgs); var rawResult = TypeHelpers.BindToMember(this, candidates, bindFlags, args, bindArgs);
if (rawResult != null) if (rawResult != null)
{ {
return MethodBindResult.Create(name, bindFlags, rawResult, hostTarget, args); return MethodBindResult.Create(name, bindFlags, rawResult, hostTarget, args);
@ -494,12 +494,12 @@ namespace Microsoft.ClearScript
public override bool IsPreferredMethod(HostItem hostItem, string name) public override bool IsPreferredMethod(HostItem hostItem, string name)
{ {
return !method.IsBlockedFromScript(hostItem.DefaultAccess) && (method.GetScriptName() == name); return IsUnblockedMethod(hostItem) && (method.GetScriptName(hostItem) == name);
} }
public override bool IsUnblockedMethod(HostItem hostItem) public override bool IsUnblockedMethod(HostItem hostItem)
{ {
return !method.IsBlockedFromScript(hostItem.DefaultAccess); return !method.IsBlockedFromScript(hostItem, hostItem.DefaultAccess);
} }
public override object Invoke(HostItem hostItem) public override object Invoke(HostItem hostItem)
@ -509,7 +509,7 @@ namespace Microsoft.ClearScript
hostItem.Engine.CheckReflection(); hostItem.Engine.CheckReflection();
} }
return InvokeHelpers.InvokeMethod(hostItem, method, hostTarget.InvokeTarget, args, method.GetScriptMemberFlags()); return InvokeHelpers.InvokeMethod(hostItem, method, hostTarget.InvokeTarget, args, method.GetScriptMemberFlags(hostItem));
} }
#endregion #endregion

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

@ -362,12 +362,16 @@ namespace Microsoft.ClearScript
set => targetMemberData.TargetInvocability = value; set => targetMemberData.TargetInvocability = value;
} }
private CustomAttributeLoader CurrentCustomAttributeLoader => Engine.CustomAttributeLoader;
private Type CurrentAccessContext => Flags.HasFlag(HostItemFlags.PrivateAccess) ? Target.Type : Engine.AccessContext; private Type CurrentAccessContext => Flags.HasFlag(HostItemFlags.PrivateAccess) ? Target.Type : Engine.AccessContext;
private ScriptAccess CurrentDefaultAccess => Engine.DefaultAccess; private ScriptAccess CurrentDefaultAccess => Engine.DefaultAccess;
private HostTargetFlags CurrentTargetFlags => Target.GetFlags(this); private HostTargetFlags CurrentTargetFlags => Target.GetFlags(this);
private CustomAttributeLoader CachedCustomAttributeLoader => (targetMemberData is HostTargetMemberDataWithContext targetMemberDataWithContext) ? targetMemberDataWithContext.CustomAttributeLoader : CurrentCustomAttributeLoader;
private Type CachedAccessContext => (targetMemberData is HostTargetMemberDataWithContext targetMemberDataWithContext) ? targetMemberDataWithContext.AccessContext : CurrentAccessContext; private Type CachedAccessContext => (targetMemberData is HostTargetMemberDataWithContext targetMemberDataWithContext) ? targetMemberDataWithContext.AccessContext : CurrentAccessContext;
private ScriptAccess CachedDefaultAccess private ScriptAccess CachedDefaultAccess
@ -562,7 +566,7 @@ namespace Microsoft.ClearScript
private void BindTargetMemberData() private void BindTargetMemberData()
{ {
if ((targetMemberData == null) || (AccessContext != CurrentAccessContext) || (DefaultAccess != CurrentDefaultAccess) || (TargetFlags != CurrentTargetFlags)) if ((targetMemberData == null) || (CustomAttributeLoader != CurrentCustomAttributeLoader) || (AccessContext != CurrentAccessContext) || (DefaultAccess != CurrentDefaultAccess) || (TargetFlags != CurrentTargetFlags))
{ {
if (Target is HostMethod) if (Target is HostMethod)
{ {
@ -590,13 +594,13 @@ namespace Microsoft.ClearScript
if ((TargetDynamic == null) && (TargetPropertyBag == null) && (TargetList == null) && (TargetDynamicMetaObject == null)) if ((TargetDynamic == null) && (TargetPropertyBag == null) && (TargetList == null) && (TargetDynamicMetaObject == null))
{ {
// host objects without dynamic members can share their member data // host objects without dynamic members can share their member data
targetMemberData = Engine.GetSharedHostObjectMemberData(hostObject, CurrentAccessContext, CurrentDefaultAccess, CurrentTargetFlags); targetMemberData = Engine.GetSharedHostObjectMemberData(hostObject, CurrentCustomAttributeLoader, CurrentAccessContext, CurrentDefaultAccess, CurrentTargetFlags);
return; return;
} }
} }
// all other targets use unique member data // all other targets use unique member data
targetMemberData = new HostTargetMemberDataWithContext(CurrentAccessContext, CurrentDefaultAccess, CurrentTargetFlags); targetMemberData = new HostTargetMemberDataWithContext(CurrentCustomAttributeLoader, CurrentAccessContext, CurrentDefaultAccess, CurrentTargetFlags);
} }
} }
@ -614,7 +618,7 @@ namespace Microsoft.ClearScript
if (TypeEventNames == null) if (TypeEventNames == null)
{ {
var localEvents = Target.Type.GetScriptableEvents(this, GetCommonBindFlags()); var localEvents = Target.Type.GetScriptableEvents(this, GetCommonBindFlags());
TypeEventNames = localEvents.Select(eventInfo => eventInfo.GetScriptName()).ToArray(); TypeEventNames = localEvents.Select(eventInfo => eventInfo.GetScriptName(this)).ToArray();
} }
return TypeEventNames; return TypeEventNames;
@ -625,7 +629,7 @@ namespace Microsoft.ClearScript
if (TypeFieldNames == null) if (TypeFieldNames == null)
{ {
var localFields = Target.Type.GetScriptableFields(this, GetCommonBindFlags()); var localFields = Target.Type.GetScriptableFields(this, GetCommonBindFlags());
TypeFieldNames = localFields.Select(field => field.GetScriptName()).ToArray(); TypeFieldNames = localFields.Select(field => field.GetScriptName(this)).ToArray();
} }
return TypeFieldNames; return TypeFieldNames;
@ -636,7 +640,7 @@ namespace Microsoft.ClearScript
if (TypeMethodNames == null) if (TypeMethodNames == null)
{ {
var localMethods = Target.Type.GetScriptableMethods(this, GetMethodBindFlags()); var localMethods = Target.Type.GetScriptableMethods(this, GetMethodBindFlags());
TypeMethodNames = localMethods.Select(method => method.GetScriptName()).ToArray(); TypeMethodNames = localMethods.Select(method => method.GetScriptName(this)).ToArray();
} }
return TypeMethodNames; return TypeMethodNames;
@ -647,7 +651,7 @@ namespace Microsoft.ClearScript
if (TypePropertyNames == null) if (TypePropertyNames == null)
{ {
var localProperties = Target.Type.GetScriptableProperties(this, GetCommonBindFlags()); var localProperties = Target.Type.GetScriptableProperties(this, GetCommonBindFlags());
TypePropertyNames = localProperties.Select(property => property.GetScriptName()).ToArray(); TypePropertyNames = localProperties.Select(property => property.GetScriptName(this)).ToArray();
} }
return TypePropertyNames; return TypePropertyNames;
@ -1600,33 +1604,31 @@ namespace Microsoft.ClearScript
} }
var getMethod = property.GetMethod; var getMethod = property.GetMethod;
if ((getMethod == null) || !getMethod.IsAccessible(this) || getMethod.IsBlockedFromScript(property.GetScriptAccess(DefaultAccess), false)) if ((getMethod == null) || !getMethod.IsAccessible(this) || getMethod.IsBlockedFromScript(this, property.GetScriptAccess(this, DefaultAccess), false))
{ {
throw new UnauthorizedAccessException("The property get method is unavailable or inaccessible"); throw new UnauthorizedAccessException("The property get method is unavailable or inaccessible");
} }
var result = GetHostPropertyWorker(property, getMethod, args);
Engine.CachePropertyGetBindResult(signature, property); Engine.CachePropertyGetBindResult(signature, property);
return result; return GetHostPropertyWorker(property, getMethod, args);
} }
private object GetHostPropertyWorker(PropertyInfo property, MethodInfo getMethod, object[] args) private object GetHostPropertyWorker(PropertyInfo property, MethodInfo getMethod, object[] args)
{ {
return InvokeHelpers.InvokeMethod(this, getMethod, Target.InvokeTarget, args, property.GetScriptMemberFlags()); return InvokeHelpers.InvokeMethod(this, getMethod, Target.InvokeTarget, args, property.GetScriptMemberFlags(this));
} }
private object GetHostField(BindSignature signature, FieldInfo field, out bool isCacheable) private object GetHostField(BindSignature signature, FieldInfo field, out bool isCacheable)
{ {
var result = GetHostFieldWorker(field, out isCacheable);
Engine.CachePropertyGetBindResult(signature, field); Engine.CachePropertyGetBindResult(signature, field);
return result; return GetHostFieldWorker(field, out isCacheable);
} }
private object GetHostFieldWorker(FieldInfo field, out bool isCacheable) private object GetHostFieldWorker(FieldInfo field, out bool isCacheable)
{ {
var result = field.GetValue(Target.InvokeTarget); var result = field.GetValue(Target.InvokeTarget);
isCacheable = (TargetDynamicMetaObject == null) && (field.IsLiteral || field.IsInitOnly); isCacheable = (TargetDynamicMetaObject == null) && (field.IsLiteral || field.IsInitOnly);
return Engine.PrepareResult(result, field.FieldType, field.GetScriptMemberFlags(), false); return Engine.PrepareResult(result, field.FieldType, field.GetScriptMemberFlags(this), false);
} }
private object SetHostProperty(string name, BindingFlags invokeFlags, object[] args, object[] bindArgs) private object SetHostProperty(string name, BindingFlags invokeFlags, object[] args, object[] bindArgs)
@ -1752,21 +1754,20 @@ namespace Microsoft.ClearScript
private object SetHostProperty(BindSignature signature, PropertyInfo property, object[] args, object[] bindArgs) private object SetHostProperty(BindSignature signature, PropertyInfo property, object[] args, object[] bindArgs)
{ {
var scriptAccess = property.GetScriptAccess(DefaultAccess); var scriptAccess = property.GetScriptAccess(this, DefaultAccess);
if (scriptAccess == ScriptAccess.ReadOnly) if (scriptAccess == ScriptAccess.ReadOnly)
{ {
throw new UnauthorizedAccessException("The property is read-only"); throw new UnauthorizedAccessException("The property is read-only");
} }
var setMethod = property.SetMethod; var setMethod = property.SetMethod;
if ((setMethod == null) || !setMethod.IsAccessible(this) || setMethod.IsBlockedFromScript(scriptAccess, false)) if ((setMethod == null) || !setMethod.IsAccessible(this) || setMethod.IsBlockedFromScript(this, scriptAccess, false))
{ {
throw new UnauthorizedAccessException("The property set method is unavailable or inaccessible"); throw new UnauthorizedAccessException("The property set method is unavailable or inaccessible");
} }
var result = SetHostPropertyWorker(property, setMethod, args, bindArgs);
Engine.CachePropertySetBindResult(signature, property); Engine.CachePropertySetBindResult(signature, property);
return result; return SetHostPropertyWorker(property, setMethod, args, bindArgs);
} }
private object SetHostPropertyWorker(PropertyInfo property, MethodInfo setMethod, object[] args, object[] bindArgs) private object SetHostPropertyWorker(PropertyInfo property, MethodInfo setMethod, object[] args, object[] bindArgs)
@ -1810,7 +1811,7 @@ namespace Microsoft.ClearScript
if (property.PropertyType.IsAssignableFromValue(ref value)) if (property.PropertyType.IsAssignableFromValue(ref value))
{ {
args[args.Length - 1] = value; args[args.Length - 1] = value;
InvokeHelpers.InvokeMethod(this, setMethod, Target.InvokeTarget, args, property.GetScriptMemberFlags()); InvokeHelpers.InvokeMethod(this, setMethod, Target.InvokeTarget, args, property.GetScriptMemberFlags(this));
return value; return value;
} }
@ -1821,7 +1822,7 @@ namespace Microsoft.ClearScript
if ((setParams.Length >= args.Length) && (setParams[args.Length - 1].ParameterType.IsAssignableFromValue(ref value))) if ((setParams.Length >= args.Length) && (setParams[args.Length - 1].ParameterType.IsAssignableFromValue(ref value)))
{ {
args[args.Length - 1] = value; args[args.Length - 1] = value;
InvokeHelpers.InvokeMethod(this, setMethod, Target.InvokeTarget, args, property.GetScriptMemberFlags()); InvokeHelpers.InvokeMethod(this, setMethod, Target.InvokeTarget, args, property.GetScriptMemberFlags(this));
return value; return value;
} }
@ -1835,14 +1836,13 @@ namespace Microsoft.ClearScript
throw new InvalidOperationException("Invalid argument count"); throw new InvalidOperationException("Invalid argument count");
} }
if (field.IsLiteral || field.IsInitOnly || field.IsReadOnlyForScript(DefaultAccess)) if (field.IsLiteral || field.IsInitOnly || field.IsReadOnlyForScript(this, DefaultAccess))
{ {
throw new UnauthorizedAccessException("The field is read-only"); throw new UnauthorizedAccessException("The field is read-only");
} }
var result = SetHostFieldWorker(field, args);
Engine.CachePropertySetBindResult(signature, field); Engine.CachePropertySetBindResult(signature, field);
return result; return SetHostFieldWorker(field, args);
} }
private object SetHostFieldWorker(FieldInfo field, object[] args) private object SetHostFieldWorker(FieldInfo field, object[] args)
@ -2259,6 +2259,8 @@ namespace Microsoft.ClearScript
return HostInvoke(() => return HostInvoke(() =>
{ {
var index = 0; var index = 0;
// ReSharper disable once ConditionIsAlwaysTrueOrFalse
if (elements != null) if (elements != null)
{ {
var maxCount = Math.Min(count, elements.Length); var maxCount = Math.Min(count, elements.Length);
@ -2368,6 +2370,8 @@ namespace Microsoft.ClearScript
#region IHostTargetContext implementation #region IHostTargetContext implementation
public CustomAttributeLoader CustomAttributeLoader => CachedCustomAttributeLoader;
public Type AccessContext => CachedAccessContext; public Type AccessContext => CachedAccessContext;
public ScriptAccess DefaultAccess => CachedDefaultAccess; public ScriptAccess DefaultAccess => CachedDefaultAccess;

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

@ -40,17 +40,14 @@ namespace Microsoft.ClearScript
/// <summary> /// <summary>
/// Gets or sets the custom attribute loader for ClearScript. /// Gets or sets the custom attribute loader for ClearScript.
/// </summary> /// </summary>
/// <remarks>
/// When not explicitly assigned to a non-<c>null</c> value, this property returns the
/// <see cref="CustomAttributeLoader.Default">default custom attribute loader.</see>.
/// </remarks>
public static CustomAttributeLoader CustomAttributeLoader public static CustomAttributeLoader CustomAttributeLoader
{ {
get => customAttributeLoader ?? DefaultCustomAttributeLoader; get => customAttributeLoader ?? CustomAttributeLoader.Default;
set => customAttributeLoader = value;
set
{
customAttributeLoader = value;
CustomAttributes.ClearCache();
} }
} }
internal static readonly CustomAttributeLoader DefaultCustomAttributeLoader = new CustomAttributeLoader();
}
} }

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

@ -30,12 +30,14 @@ namespace Microsoft.ClearScript
internal class HostTargetMemberDataWithContext : HostTargetMemberData internal class HostTargetMemberDataWithContext : HostTargetMemberData
{ {
public readonly CustomAttributeLoader CustomAttributeLoader;
public readonly Type AccessContext; public readonly Type AccessContext;
public readonly ScriptAccess DefaultAccess; public readonly ScriptAccess DefaultAccess;
public readonly HostTargetFlags TargetFlags; public readonly HostTargetFlags TargetFlags;
public HostTargetMemberDataWithContext(Type accessContext, ScriptAccess defaultAccess, HostTargetFlags targetFlags) public HostTargetMemberDataWithContext(CustomAttributeLoader customAttributeLoader, Type accessContext, ScriptAccess defaultAccess, HostTargetFlags targetFlags)
{ {
CustomAttributeLoader = customAttributeLoader;
AccessContext = accessContext; AccessContext = accessContext;
DefaultAccess = defaultAccess; DefaultAccess = defaultAccess;
TargetFlags = targetFlags; TargetFlags = targetFlags;

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

@ -91,7 +91,7 @@ namespace Microsoft.ClearScript
public void AddAssembly(Assembly assembly) public void AddAssembly(Assembly assembly)
{ {
MiscHelpers.VerifyNonNullArgument(assembly, nameof(assembly)); MiscHelpers.VerifyNonNullArgument(assembly, nameof(assembly));
assembly.GetAllTypes().Where(type => type.IsImportable()).ForEach(AddType); assembly.GetAllTypes().Where(type => type.IsImportable(null)).ForEach(AddType);
} }
/// <summary> /// <summary>
@ -113,7 +113,7 @@ namespace Microsoft.ClearScript
{ {
MiscHelpers.VerifyNonNullArgument(assembly, nameof(assembly)); MiscHelpers.VerifyNonNullArgument(assembly, nameof(assembly));
var activeFilter = filter ?? defaultFilter; var activeFilter = filter ?? defaultFilter;
assembly.GetAllTypes().Where(type => type.IsImportable() && activeFilter(type)).ForEach(AddType); assembly.GetAllTypes().Where(type => type.IsImportable(null) && activeFilter(type)).ForEach(AddType);
} }
/// <summary> /// <summary>

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

@ -189,7 +189,7 @@ namespace Microsoft.ClearScript
bool EnableAutoHostVariables { get; set; } bool EnableAutoHostVariables { get; set; }
/// <summary> /// <summary>
/// Gets or sets the engine's undefined import value. /// Gets or sets the script engine's undefined import value.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Some script languages support one or more special non-<c>null</c> values that represent /// Some script languages support one or more special non-<c>null</c> values that represent
@ -200,7 +200,7 @@ namespace Microsoft.ClearScript
object UndefinedImportValue { get; set; } object UndefinedImportValue { get; set; }
/// <summary> /// <summary>
/// Gets or sets the engine's null export value. /// Gets or sets the script engine's null export value.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// <para> /// <para>
@ -221,7 +221,7 @@ namespace Microsoft.ClearScript
object NullExportValue { get; set; } object NullExportValue { get; set; }
/// <summary> /// <summary>
/// Gets or sets the engine's void result export value. /// Gets or sets the script engine's void result export value.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Some script languages expect every subroutine call to return a value. When script code /// Some script languages expect every subroutine call to return a value. When script code
@ -259,7 +259,7 @@ namespace Microsoft.ClearScript
/// <remarks> /// <remarks>
/// The value of this property is an object that is bound to the script engine's root /// The value of this property is an object that is bound to the script engine's root
/// namespace. It allows you to access global script resources via the /// namespace. It allows you to access global script resources via the
/// <c><see cref="ScriptObject"/></c> class interface. Doing so is likely to perform better than /// <c><see cref="ScriptObject"/></c> class interface. Doing so is likely to outperform
/// dynamic access via <c><see cref="Script"/></c>. /// dynamic access via <c><see cref="Script"/></c>.
/// </remarks> /// </remarks>
ScriptObject Global { get; } ScriptObject Global { get; }
@ -269,6 +269,20 @@ namespace Microsoft.ClearScript
/// </summary> /// </summary>
DocumentSettings DocumentSettings { get; set; } DocumentSettings DocumentSettings { get; set; }
/// <summary>
/// Gets or sets the script engine's custom attribute loader.
/// </summary>
/// <remarks>
/// By default, all script engines use the
/// <see cref="HostSettings.CustomAttributeLoader">global custom attribute loader</see>.
/// </remarks>
CustomAttributeLoader CustomAttributeLoader { get; set; }
/// <summary>
/// Allows the host to attach arbitrary data to the script engine.
/// </summary>
object HostData { get; set; }
/// <summary> /// <summary>
/// Exposes a host object to script code. /// Exposes a host object to script code.
/// </summary> /// </summary>

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

@ -18,15 +18,15 @@ using System.Runtime.InteropServices;
[assembly: InternalsVisibleTo("ClearScriptTest")] [assembly: InternalsVisibleTo("ClearScriptTest")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]
[assembly: AssemblyVersion("7.4.3")] [assembly: AssemblyVersion("7.4.4")]
[assembly: AssemblyFileVersion("7.4.3")] [assembly: AssemblyFileVersion("7.4.4")]
[assembly: AssemblyInformationalVersion("7.4.3")] [assembly: AssemblyInformationalVersion("7.4.4")]
namespace Microsoft.ClearScript.Properties namespace Microsoft.ClearScript.Properties
{ {
internal static class ClearScriptVersion internal static class ClearScriptVersion
{ {
public const string Triad = "7.4.3"; public const string Triad = "7.4.4";
public const string Informational = "7.4.3"; public const string Informational = "7.4.4";
} }
} }

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

@ -15,6 +15,6 @@ using System.Runtime.InteropServices;
[assembly: InternalsVisibleTo("ClearScript.V8")] [assembly: InternalsVisibleTo("ClearScript.V8")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]
[assembly: AssemblyVersion("7.4.3")] [assembly: AssemblyVersion("7.4.4")]
[assembly: AssemblyFileVersion("7.4.3")] [assembly: AssemblyFileVersion("7.4.4")]
[assembly: AssemblyInformationalVersion("7.4.3")] [assembly: AssemblyInformationalVersion("7.4.4")]

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

@ -15,6 +15,6 @@ using System.Runtime.InteropServices;
[assembly: InternalsVisibleTo("ClearScriptTest")] [assembly: InternalsVisibleTo("ClearScriptTest")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]
[assembly: AssemblyVersion("7.4.3")] [assembly: AssemblyVersion("7.4.4")]
[assembly: AssemblyFileVersion("7.4.3")] [assembly: AssemblyFileVersion("7.4.4")]
[assembly: AssemblyInformationalVersion("7.4.3")] [assembly: AssemblyInformationalVersion("7.4.4")]

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

@ -16,6 +16,6 @@ using System.Runtime.InteropServices;
[assembly: InternalsVisibleTo("ClearScriptTest")] [assembly: InternalsVisibleTo("ClearScriptTest")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]
[assembly: AssemblyVersion("7.4.3")] [assembly: AssemblyVersion("7.4.4")]
[assembly: AssemblyFileVersion("7.4.3")] [assembly: AssemblyFileVersion("7.4.4")]
[assembly: AssemblyInformationalVersion("7.4.3")] [assembly: AssemblyInformationalVersion("7.4.4")]

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

@ -15,6 +15,6 @@ using System.Runtime.InteropServices;
[assembly: InternalsVisibleTo("ClearScriptTest")] [assembly: InternalsVisibleTo("ClearScriptTest")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]
[assembly: AssemblyVersion("7.4.3")] [assembly: AssemblyVersion("7.4.4")]
[assembly: AssemblyFileVersion("7.4.3")] [assembly: AssemblyFileVersion("7.4.4")]
[assembly: AssemblyInformationalVersion("7.4.3")] [assembly: AssemblyInformationalVersion("7.4.4")]

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

@ -3,6 +3,7 @@
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
@ -33,8 +34,7 @@ namespace Microsoft.ClearScript
{ {
#region data #region data
private readonly Dictionary<string, object> dictionary; private readonly IDictionary<string, object> dictionary;
private readonly ICollection<KeyValuePair<string, object>> collection;
private readonly bool isReadOnly; private readonly bool isReadOnly;
private readonly ConcurrentWeakSet<ScriptEngine> engineSet = new ConcurrentWeakSet<ScriptEngine>(); private readonly ConcurrentWeakSet<ScriptEngine> engineSet = new ConcurrentWeakSet<ScriptEngine>();
@ -80,10 +80,15 @@ namespace Microsoft.ClearScript
/// <param name="isReadOnly"><c>True</c> to make the <c><see cref="PropertyBag"/></c> read-only, <c>false</c> to make it writable.</param> /// <param name="isReadOnly"><c>True</c> to make the <c><see cref="PropertyBag"/></c> read-only, <c>false</c> to make it writable.</param>
/// <param name="comparer">The comparer to use for property names, or <c>null</c> to use the default string comparer.</param> /// <param name="comparer">The comparer to use for property names, or <c>null</c> to use the default string comparer.</param>
public PropertyBag(bool isReadOnly, IEqualityComparer<string> comparer) public PropertyBag(bool isReadOnly, IEqualityComparer<string> comparer)
: this(isReadOnly, comparer, new Dictionary<string, object>(comparer ?? EqualityComparer<string>.Default))
{ {
dictionary = new Dictionary<string, object>(comparer); }
collection = dictionary;
internal PropertyBag(bool isReadOnly, IEqualityComparer<string> comparer, IDictionary<string, object> dictionary)
{
this.dictionary = dictionary;
this.isReadOnly = isReadOnly; this.isReadOnly = isReadOnly;
Comparer = comparer;
} }
#endregion #endregion
@ -93,7 +98,7 @@ namespace Microsoft.ClearScript
/// <summary> /// <summary>
/// Gets the property name comparer for the <c><see cref="PropertyBag"/></c>. /// Gets the property name comparer for the <c><see cref="PropertyBag"/></c>.
/// </summary> /// </summary>
public IEqualityComparer<string> Comparer => dictionary.Comparer; public IEqualityComparer<string> Comparer { get; }
/// <summary> /// <summary>
/// Sets a property value without checking whether the <c><see cref="PropertyBag"/></c> is read-only. /// Sets a property value without checking whether the <c><see cref="PropertyBag"/></c> is read-only.
@ -217,20 +222,20 @@ namespace Microsoft.ClearScript
[SuppressMessage("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes", Justification = "This member is not expected to be re-implemented in derived classes.")] [SuppressMessage("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes", Justification = "This member is not expected to be re-implemented in derived classes.")]
bool ICollection<KeyValuePair<string, object>>.Contains(KeyValuePair<string, object> item) bool ICollection<KeyValuePair<string, object>>.Contains(KeyValuePair<string, object> item)
{ {
return collection.Contains(item); return dictionary.Contains(item);
} }
[SuppressMessage("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes", Justification = "This member is not expected to be re-implemented in derived classes.")] [SuppressMessage("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes", Justification = "This member is not expected to be re-implemented in derived classes.")]
void ICollection<KeyValuePair<string, object>>.CopyTo(KeyValuePair<string, object>[] array, int arrayIndex) void ICollection<KeyValuePair<string, object>>.CopyTo(KeyValuePair<string, object>[] array, int arrayIndex)
{ {
collection.CopyTo(array, arrayIndex); dictionary.CopyTo(array, arrayIndex);
} }
[SuppressMessage("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes", Justification = "This member is not expected to be re-implemented in derived classes.")] [SuppressMessage("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes", Justification = "This member is not expected to be re-implemented in derived classes.")]
bool ICollection<KeyValuePair<string, object>>.Remove(KeyValuePair<string, object> item) bool ICollection<KeyValuePair<string, object>>.Remove(KeyValuePair<string, object> item)
{ {
CheckReadOnly(); CheckReadOnly();
if (collection.Remove(item)) if (dictionary.Remove(item))
{ {
NotifyPropertyChanged(item.Key); NotifyPropertyChanged(item.Key);
return true; return true;
@ -240,7 +245,7 @@ namespace Microsoft.ClearScript
} }
[SuppressMessage("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes", Justification = "This member is not expected to be re-implemented in derived classes.")] [SuppressMessage("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes", Justification = "This member is not expected to be re-implemented in derived classes.")]
int ICollection<KeyValuePair<string, object>>.Count => collection.Count; int ICollection<KeyValuePair<string, object>>.Count => dictionary.Count;
[SuppressMessage("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes", Justification = "This member is not expected to be re-implemented in derived classes.")] [SuppressMessage("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes", Justification = "This member is not expected to be re-implemented in derived classes.")]
bool ICollection<KeyValuePair<string, object>>.IsReadOnly => isReadOnly; bool ICollection<KeyValuePair<string, object>>.IsReadOnly => isReadOnly;
@ -345,4 +350,56 @@ namespace Microsoft.ClearScript
#endregion #endregion
} }
/// <summary>
/// Provides a thread-safe <c><see cref="IPropertyBag"/></c> implementation.
/// </summary>
public class ConcurrentPropertyBag : PropertyBag
{
#region constructors
/// <summary>
/// Initializes a new writable <c><see cref="ConcurrentPropertyBag"/></c> with the default property name comparer.
/// </summary>
public ConcurrentPropertyBag()
: this(false)
{
}
/// <summary>
/// Initializes a new <c><see cref="ConcurrentPropertyBag"/></c> with the default property name comparer.
/// </summary>
/// <param name="isReadOnly"><c>True</c> to make the <c><see cref="PropertyBag"/></c> read-only, <c>false</c> to make it writable.</param>
/// <remarks>
/// The host can modify a read-only <c><see cref="ConcurrentPropertyBag"/></c> by calling
/// <c><see cref="PropertyBag.SetPropertyNoCheck">SetPropertyNoCheck</see></c>,
/// <c><see cref="PropertyBag.RemovePropertyNoCheck">RemovePropertyNoCheck</see></c>, or
/// <c><see cref="PropertyBag.ClearNoCheck">ClearNoCheck</see></c>.
/// </remarks>
public ConcurrentPropertyBag(bool isReadOnly)
: this(isReadOnly, null)
{
}
/// <summary>
/// Initializes a new writable <c><see cref="ConcurrentPropertyBag"/></c>.
/// </summary>
/// <param name="comparer">The comparer to use for property names, or <c>null</c> to use the default string comparer.</param>
public ConcurrentPropertyBag(IEqualityComparer<string> comparer)
: this(false, comparer)
{
}
/// <summary>
/// Initializes a new <c><see cref="ConcurrentPropertyBag"/></c>.
/// </summary>
/// <param name="isReadOnly"><c>True</c> to make the <c><see cref="ConcurrentPropertyBag"/></c> read-only, <c>false</c> to make it writable.</param>
/// <param name="comparer">The comparer to use for property names, or <c>null</c> to use the default string comparer.</param>
public ConcurrentPropertyBag(bool isReadOnly, IEqualityComparer<string> comparer)
: base(isReadOnly, comparer, new ConcurrentDictionary<string, object>(comparer ?? EqualityComparer<string>.Default))
{
}
#endregion
}
} }

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

@ -21,6 +21,7 @@ namespace Microsoft.ClearScript
private ScriptAccess defaultAccess; private ScriptAccess defaultAccess;
private bool enforceAnonymousTypeAccess; private bool enforceAnonymousTypeAccess;
private bool exposeHostObjectStaticMembers; private bool exposeHostObjectStaticMembers;
private CustomAttributeLoader customAttributeLoader;
private DocumentSettings documentSettings; private DocumentSettings documentSettings;
private readonly DocumentSettings defaultDocumentSettings = new DocumentSettings(); private readonly DocumentSettings defaultDocumentSettings = new DocumentSettings();
@ -80,7 +81,7 @@ namespace Microsoft.ClearScript
/// <inheritdoc/> /// <inheritdoc/>
public abstract string FileNameExtension { get; } public abstract string FileNameExtension { get; }
/// <inheritdoc cref="ScriptEngine" /> /// <inheritdoc cref="IScriptEngine.AccessContext" />
public Type AccessContext public Type AccessContext
{ {
get => accessContext; get => accessContext;
@ -92,7 +93,7 @@ namespace Microsoft.ClearScript
} }
} }
/// <inheritdoc cref="ScriptEngine" /> /// <inheritdoc cref="IScriptEngine.DefaultAccess" />
public ScriptAccess DefaultAccess public ScriptAccess DefaultAccess
{ {
get => defaultAccess; get => defaultAccess;
@ -203,6 +204,21 @@ namespace Microsoft.ClearScript
set => documentSettings = value; set => documentSettings = value;
} }
/// <inheritdoc cref="IScriptEngine.CustomAttributeLoader" />
public CustomAttributeLoader CustomAttributeLoader
{
get => customAttributeLoader;
set
{
customAttributeLoader = value;
OnAccessSettingsChanged();
}
}
/// <inheritdoc/>
public object HostData { get; set; }
/// <inheritdoc/> /// <inheritdoc/>
public void AddHostObject(string itemName, object target) public void AddHostObject(string itemName, object target)
{ {
@ -760,7 +776,7 @@ namespace Microsoft.ClearScript
{ {
if (extensionMethodTable != emptyExtensionMethodTable) if (extensionMethodTable != emptyExtensionMethodTable)
{ {
if (extensionMethodTable.ProcessType(type, this)) if (extensionMethodTable.ProcessType(this, type))
{ {
ClearMethodBindCache(); ClearMethodBindCache();
} }
@ -773,7 +789,7 @@ namespace Microsoft.ClearScript
{ {
if (extensionMethodTable != emptyExtensionMethodTable) if (extensionMethodTable != emptyExtensionMethodTable)
{ {
extensionMethodTable.RebuildSummary(); extensionMethodTable.RebuildSummary(this);
} }
} }
@ -785,7 +801,7 @@ namespace Microsoft.ClearScript
internal void CacheConstructorBindResult(BindSignature signature, ConstructorInfo result) internal void CacheConstructorBindResult(BindSignature signature, ConstructorInfo result)
{ {
constructorBindCache.Add(signature, result); constructorBindCache[signature] = result;
} }
internal bool TryGetCachedConstructorBindResult(BindSignature signature, out ConstructorInfo result) internal bool TryGetCachedConstructorBindResult(BindSignature signature, out ConstructorInfo result)
@ -806,7 +822,7 @@ namespace Microsoft.ClearScript
internal void CacheMethodBindResult(BindSignature signature, object result) internal void CacheMethodBindResult(BindSignature signature, object result)
{ {
methodBindCache.Add(signature, result); methodBindCache[signature] = result;
} }
internal bool TryGetCachedMethodBindResult(BindSignature signature, out object result) internal bool TryGetCachedMethodBindResult(BindSignature signature, out object result)
@ -828,7 +844,7 @@ namespace Microsoft.ClearScript
internal void CachePropertyGetBindResult(BindSignature signature, MemberInfo property) internal void CachePropertyGetBindResult(BindSignature signature, MemberInfo property)
{ {
propertyGetBindCache.Add(signature, property); propertyGetBindCache[signature] = property;
} }
internal bool TryGetCachedPropertyGetBindResult(BindSignature signature, out MemberInfo property) internal bool TryGetCachedPropertyGetBindResult(BindSignature signature, out MemberInfo property)
@ -838,7 +854,7 @@ namespace Microsoft.ClearScript
internal void CachePropertySetBindResult(BindSignature signature, MemberInfo property) internal void CachePropertySetBindResult(BindSignature signature, MemberInfo property)
{ {
propertySetBindCache.Add(signature, property); propertySetBindCache[signature] = property;
} }
internal bool TryGetCachedPropertySetBindResult(BindSignature signature, out MemberInfo property) internal bool TryGetCachedPropertySetBindResult(BindSignature signature, out MemberInfo property)
@ -1013,7 +1029,7 @@ namespace Microsoft.ClearScript
private readonly ConditionalWeakTable<Type, List<WeakReference>> sharedHostObjectMemberDataCache = new ConditionalWeakTable<Type, List<WeakReference>>(); private readonly ConditionalWeakTable<Type, List<WeakReference>> sharedHostObjectMemberDataCache = new ConditionalWeakTable<Type, List<WeakReference>>();
internal HostTargetMemberData GetSharedHostObjectMemberData(HostObject target, Type targetAccessContext, ScriptAccess targetDefaultAccess, HostTargetFlags targetFlags) internal HostTargetMemberData GetSharedHostObjectMemberData(HostObject target, CustomAttributeLoader targetCustomAttributeLoader, Type targetAccessContext, ScriptAccess targetDefaultAccess, HostTargetFlags targetFlags)
{ {
var cacheEntry = sharedHostObjectMemberDataCache.GetOrCreateValue(target.Type); var cacheEntry = sharedHostObjectMemberDataCache.GetOrCreateValue(target.Type);
@ -1029,7 +1045,7 @@ namespace Microsoft.ClearScript
} }
else else
{ {
if ((memberData.AccessContext == targetAccessContext) && (memberData.DefaultAccess == targetDefaultAccess) && (memberData.TargetFlags == targetFlags)) if ((memberData.CustomAttributeLoader == targetCustomAttributeLoader) && (memberData.AccessContext == targetAccessContext) && (memberData.DefaultAccess == targetDefaultAccess) && (memberData.TargetFlags == targetFlags))
{ {
return memberData; return memberData;
} }
@ -1053,7 +1069,7 @@ namespace Microsoft.ClearScript
} }
} }
var newMemberData = new HostTargetMemberDataWithContext(targetAccessContext, targetDefaultAccess, targetFlags); var newMemberData = new HostTargetMemberDataWithContext(targetCustomAttributeLoader, targetAccessContext, targetDefaultAccess, targetFlags);
cacheEntry.Add(new WeakReference(newMemberData)); cacheEntry.Add(new WeakReference(newMemberData));
return newMemberData; return newMemberData;
} }

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

@ -74,22 +74,22 @@ namespace Microsoft.ClearScript.Util
return null; return null;
} }
public static T GetOrLoadCustomAttribute<T>(this Assembly assembly, bool inherit = true) where T : Attribute public static T GetOrLoadCustomAttribute<T>(this Assembly assembly, IHostContext context, bool inherit = true) where T : Attribute
{ {
return CustomAttributes.GetOrLoad<T>(assembly, inherit).SingleOrDefault(); return CustomAttributes.GetOrLoad<T>(context, assembly, inherit).SingleOrDefault();
} }
public static IEnumerable<T> GetOrLoadCustomAttributes<T>(this Assembly assembly, bool inherit = true) where T : Attribute public static IEnumerable<T> GetOrLoadCustomAttributes<T>(this Assembly assembly, IHostContext context, bool inherit = true) where T : Attribute
{ {
return CustomAttributes.GetOrLoad<T>(assembly, inherit); return CustomAttributes.GetOrLoad<T>(context, assembly, inherit);
} }
public static bool HasCustomAttributes<T>(this Assembly assembly, bool inherit = true) where T : Attribute public static bool HasCustomAttributes<T>(this Assembly assembly, IHostContext context, bool inherit = true) where T : Attribute
{ {
return CustomAttributes.Has<T>(assembly, inherit); return CustomAttributes.Has<T>(context, assembly, inherit);
} }
public static bool IsFriendOf(this Assembly thisAssembly, Assembly thatAssembly) public static bool IsFriendOf(this Assembly thisAssembly, IHostContext context, Assembly thatAssembly)
{ {
if (thatAssembly == thisAssembly) if (thatAssembly == thisAssembly)
{ {
@ -97,7 +97,7 @@ namespace Microsoft.ClearScript.Util
} }
var thisName = thisAssembly.GetName(); var thisName = thisAssembly.GetName();
foreach (var attribute in thatAssembly.GetOrLoadCustomAttributes<InternalsVisibleToAttribute>(false)) foreach (var attribute in thatAssembly.GetOrLoadCustomAttributes<InternalsVisibleToAttribute>(context, false))
{ {
var thatName = new AssemblyName(attribute.AssemblyName); var thatName = new AssemblyName(attribute.AssemblyName);
if (AssemblyName.ReferenceMatchesDefinition(thatName, thisName)) if (AssemblyName.ReferenceMatchesDefinition(thatName, thisName))

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

@ -7,6 +7,7 @@ namespace Microsoft.ClearScript.Util
{ {
internal interface IHostContext internal interface IHostContext
{ {
CustomAttributeLoader CustomAttributeLoader { get; }
ScriptEngine Engine { get; } ScriptEngine Engine { get; }
Type AccessContext { get; } Type AccessContext { get; }
ScriptAccess DefaultAccess { get; } ScriptAccess DefaultAccess { get; }

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

@ -83,7 +83,7 @@ namespace Microsoft.ClearScript.Util
for (var index = 0; index < parameters.Length; index++) for (var index = 0; index < parameters.Length; index++)
{ {
var param = parameters[index]; var param = parameters[index];
if (CustomAttributes.Has<ParamArrayAttribute>(param, false)) if (CustomAttributes.Has<ParamArrayAttribute>(context, param, false))
{ {
if ((index != (args.Length - 1)) || !param.ParameterType.IsInstanceOfType(args[index])) if ((index != (args.Length - 1)) || !param.ParameterType.IsInstanceOfType(args[index]))
{ {

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

@ -13,27 +13,27 @@ namespace Microsoft.ClearScript.Util
{ {
public static bool IsScriptable(this EventInfo eventInfo, IHostContext context) public static bool IsScriptable(this EventInfo eventInfo, IHostContext context)
{ {
return !eventInfo.IsSpecialName && !eventInfo.IsExplicitImplementation() && eventInfo.IsAccessible(context) && !eventInfo.IsBlockedFromScript(context.DefaultAccess); return !eventInfo.IsSpecialName && !eventInfo.IsExplicitImplementation() && eventInfo.IsAccessible(context) && !eventInfo.IsBlockedFromScript(context, context.DefaultAccess);
} }
public static bool IsScriptable(this FieldInfo field, IHostContext context) public static bool IsScriptable(this FieldInfo field, IHostContext context)
{ {
return !field.IsSpecialName && field.IsAccessible(context) && !field.IsBlockedFromScript(context.DefaultAccess); return !field.IsSpecialName && field.IsAccessible(context) && !field.IsBlockedFromScript(context, context.DefaultAccess);
} }
public static bool IsScriptable(this MethodInfo method, IHostContext context) public static bool IsScriptable(this MethodInfo method, IHostContext context)
{ {
return !method.IsSpecialName && !method.IsExplicitImplementation() && method.IsAccessible(context) && !method.IsBlockedFromScript(context.DefaultAccess); return !method.IsSpecialName && !method.IsExplicitImplementation() && method.IsAccessible(context) && !method.IsBlockedFromScript(context, context.DefaultAccess);
} }
public static bool IsScriptable(this PropertyInfo property, IHostContext context) public static bool IsScriptable(this PropertyInfo property, IHostContext context)
{ {
return !property.IsSpecialName && !property.IsExplicitImplementation() && property.IsAccessible(context) && !property.IsBlockedFromScript(context.DefaultAccess); return !property.IsSpecialName && !property.IsExplicitImplementation() && property.IsAccessible(context) && !property.IsBlockedFromScript(context, context.DefaultAccess);
} }
public static bool IsScriptable(this Type type, IHostContext context) public static bool IsScriptable(this Type type, IHostContext context)
{ {
return !type.IsSpecialName && type.IsAccessible(context) && !type.IsBlockedFromScript(context.DefaultAccess); return !type.IsSpecialName && type.IsAccessible(context) && !type.IsBlockedFromScript(context, context.DefaultAccess);
} }
public static bool IsAccessible(this EventInfo eventInfo, IHostContext context) public static bool IsAccessible(this EventInfo eventInfo, IHostContext context)
@ -76,17 +76,17 @@ namespace Microsoft.ClearScript.Util
if (access == FieldAttributes.Assembly) if (access == FieldAttributes.Assembly)
{ {
return accessContext.IsFriendOf(type); return accessContext.IsFriendOf(context, type);
} }
if (access == FieldAttributes.FamORAssem) if (access == FieldAttributes.FamORAssem)
{ {
return accessContext.IsFamilyOf(type) || accessContext.IsFriendOf(type); return accessContext.IsFamilyOf(type) || accessContext.IsFriendOf(context, type);
} }
if (access == FieldAttributes.FamANDAssem) if (access == FieldAttributes.FamANDAssem)
{ {
return accessContext.IsFamilyOf(type) && accessContext.IsFriendOf(type); return accessContext.IsFamilyOf(type) && accessContext.IsFriendOf(context, type);
} }
return false; return false;
@ -127,17 +127,17 @@ namespace Microsoft.ClearScript.Util
if (access == MethodAttributes.Assembly) if (access == MethodAttributes.Assembly)
{ {
return accessContext.IsFriendOf(type); return accessContext.IsFriendOf(context, type);
} }
if (access == MethodAttributes.FamORAssem) if (access == MethodAttributes.FamORAssem)
{ {
return accessContext.IsFamilyOf(type) || accessContext.IsFriendOf(type); return accessContext.IsFamilyOf(type) || accessContext.IsFriendOf(context, type);
} }
if (access == MethodAttributes.FamANDAssem) if (access == MethodAttributes.FamANDAssem)
{ {
return accessContext.IsFamilyOf(type) && accessContext.IsFriendOf(type); return accessContext.IsFamilyOf(type) && accessContext.IsFriendOf(context, type);
} }
return false; return false;
@ -167,7 +167,7 @@ namespace Microsoft.ClearScript.Util
public static bool IsAccessible(this Type type, IHostContext context) public static bool IsAccessible(this Type type, IHostContext context)
{ {
var visibility = (type.IsAnonymous() && !context.Engine.EnforceAnonymousTypeAccess) ? TypeAttributes.Public : type.Attributes & TypeAttributes.VisibilityMask; var visibility = (type.IsAnonymous(context) && !context.Engine.EnforceAnonymousTypeAccess) ? TypeAttributes.Public : type.Attributes & TypeAttributes.VisibilityMask;
if (visibility == TypeAttributes.Public) if (visibility == TypeAttributes.Public)
{ {
@ -183,7 +183,7 @@ namespace Microsoft.ClearScript.Util
if (visibility == TypeAttributes.NotPublic) if (visibility == TypeAttributes.NotPublic)
{ {
return accessContext.IsFriendOf(type); return accessContext.IsFriendOf(context, type);
} }
type = type.DeclaringType; type = type.DeclaringType;
@ -210,41 +210,41 @@ namespace Microsoft.ClearScript.Util
if (visibility == TypeAttributes.NestedAssembly) if (visibility == TypeAttributes.NestedAssembly)
{ {
return accessContext.IsFriendOf(type); return accessContext.IsFriendOf(context, type);
} }
if (visibility == TypeAttributes.NestedFamORAssem) if (visibility == TypeAttributes.NestedFamORAssem)
{ {
return accessContext.IsFamilyOf(type) || accessContext.IsFriendOf(type); return accessContext.IsFamilyOf(type) || accessContext.IsFriendOf(context, type);
} }
if (visibility == TypeAttributes.NestedFamANDAssem) if (visibility == TypeAttributes.NestedFamANDAssem)
{ {
return accessContext.IsFamilyOf(type) && accessContext.IsFriendOf(type); return accessContext.IsFamilyOf(type) && accessContext.IsFriendOf(context, type);
} }
return false; return false;
} }
public static string GetScriptName(this MemberInfo member) public static string GetScriptName(this MemberInfo member, IHostContext context)
{ {
var attribute = member.GetOrLoadCustomAttribute<ScriptMemberAttribute>(); var attribute = member.GetOrLoadCustomAttribute<ScriptMemberAttribute>(context);
return attribute?.Name ?? member.GetShortName(); return attribute?.Name ?? member.GetShortName();
} }
public static bool IsBlockedFromScript(this MemberInfo member, ScriptAccess defaultAccess, bool chain = true) public static bool IsBlockedFromScript(this MemberInfo member, IHostContext context, ScriptAccess defaultAccess, bool chain = true)
{ {
return member.GetScriptAccess(defaultAccess, chain) == ScriptAccess.None; return member.GetScriptAccess(context, defaultAccess, chain) == ScriptAccess.None;
} }
public static bool IsReadOnlyForScript(this MemberInfo member, ScriptAccess defaultAccess) public static bool IsReadOnlyForScript(this MemberInfo member, IHostContext context, ScriptAccess defaultAccess)
{ {
return member.GetScriptAccess(defaultAccess) == ScriptAccess.ReadOnly; return member.GetScriptAccess(context, defaultAccess) == ScriptAccess.ReadOnly;
} }
public static ScriptAccess GetScriptAccess(this MemberInfo member, ScriptAccess defaultValue, bool chain = true) public static ScriptAccess GetScriptAccess(this MemberInfo member, IHostContext context, ScriptAccess defaultValue, bool chain = true)
{ {
var attribute = member.GetOrLoadCustomAttribute<ScriptUsageAttribute>(); var attribute = member.GetOrLoadCustomAttribute<ScriptUsageAttribute>(context);
if (attribute != null) if (attribute != null)
{ {
return attribute.Access; return attribute.Access;
@ -260,14 +260,14 @@ namespace Microsoft.ClearScript.Util
{ {
if (testType.IsNested) if (testType.IsNested)
{ {
var nestedTypeAttribute = testType.GetOrLoadCustomAttribute<ScriptUsageAttribute>(); var nestedTypeAttribute = testType.GetOrLoadCustomAttribute<ScriptUsageAttribute>(context);
if (nestedTypeAttribute != null) if (nestedTypeAttribute != null)
{ {
return nestedTypeAttribute.Access; return nestedTypeAttribute.Access;
} }
} }
var typeAttribute = testType.GetOrLoadCustomAttribute<DefaultScriptUsageAttribute>(); var typeAttribute = testType.GetOrLoadCustomAttribute<DefaultScriptUsageAttribute>(context);
if (typeAttribute != null) if (typeAttribute != null)
{ {
return typeAttribute.Access; return typeAttribute.Access;
@ -277,7 +277,7 @@ namespace Microsoft.ClearScript.Util
} while (testType != null); } while (testType != null);
var assemblyAttribute = declaringType.Assembly.GetOrLoadCustomAttribute<DefaultScriptUsageAttribute>(); var assemblyAttribute = declaringType.Assembly.GetOrLoadCustomAttribute<DefaultScriptUsageAttribute>(context);
if (assemblyAttribute != null) if (assemblyAttribute != null)
{ {
return assemblyAttribute.Access; return assemblyAttribute.Access;
@ -288,20 +288,20 @@ namespace Microsoft.ClearScript.Util
return defaultValue; return defaultValue;
} }
public static bool IsRestrictedForScript(this MemberInfo member) public static bool IsRestrictedForScript(this MemberInfo member, IHostContext context)
{ {
return !member.GetScriptMemberFlags().HasFlag(ScriptMemberFlags.ExposeRuntimeType); return !member.GetScriptMemberFlags(context).HasFlag(ScriptMemberFlags.ExposeRuntimeType);
} }
public static bool IsDispID(this MemberInfo member, int dispid) public static bool IsDispID(this MemberInfo member, IHostContext context, int dispid)
{ {
var attribute = member.GetOrLoadCustomAttribute<DispIdAttribute>(); var attribute = member.GetOrLoadCustomAttribute<DispIdAttribute>(context);
return (attribute != null) && (attribute.Value == dispid); return (attribute != null) && (attribute.Value == dispid);
} }
public static ScriptMemberFlags GetScriptMemberFlags(this MemberInfo member) public static ScriptMemberFlags GetScriptMemberFlags(this MemberInfo member, IHostContext context)
{ {
var attribute = member.GetOrLoadCustomAttribute<ScriptMemberAttribute>(); var attribute = member.GetOrLoadCustomAttribute<ScriptMemberAttribute>(context);
return attribute?.Flags ?? ScriptMemberFlags.None; return attribute?.Flags ?? ScriptMemberFlags.None;
} }
@ -312,11 +312,11 @@ namespace Microsoft.ClearScript.Util
return (index >= 0) ? name.Substring(index + 1) : name; return (index >= 0) ? name.Substring(index + 1) : name;
} }
public static T GetOrLoadCustomAttribute<T>(this MemberInfo member, bool inherit = true) where T : Attribute public static T GetOrLoadCustomAttribute<T>(this MemberInfo member, IHostContext context, bool inherit = true) where T : Attribute
{ {
try try
{ {
return CustomAttributes.GetOrLoad<T>(member, inherit).SingleOrDefault(); return CustomAttributes.GetOrLoad<T>(context, member, inherit).SingleOrDefault();
} }
catch (AmbiguousMatchException) catch (AmbiguousMatchException)
{ {
@ -325,21 +325,21 @@ namespace Microsoft.ClearScript.Util
// this affects SqlDataReader and is indicative of a .NET issue described here: // this affects SqlDataReader and is indicative of a .NET issue described here:
// http://connect.microsoft.com/VisualStudio/feedback/details/646399/attribute-isdefined-throws-ambiguousmatchexception-for-indexer-properties-and-inherited-attributes // http://connect.microsoft.com/VisualStudio/feedback/details/646399/attribute-isdefined-throws-ambiguousmatchexception-for-indexer-properties-and-inherited-attributes
return CustomAttributes.GetOrLoad<T>(member, false).SingleOrDefault(); return CustomAttributes.GetOrLoad<T>(context, member, false).SingleOrDefault();
} }
throw; throw;
} }
} }
public static IEnumerable<T> GetOrLoadCustomAttributes<T>(this MemberInfo member, bool inherit = true) where T : Attribute public static IEnumerable<T> GetOrLoadCustomAttributes<T>(this MemberInfo member, IHostContext context, bool inherit = true) where T : Attribute
{ {
return CustomAttributes.GetOrLoad<T>(member, inherit); return CustomAttributes.GetOrLoad<T>(context, member, inherit);
} }
public static bool HasCustomAttributes<T>(this MemberInfo member, bool inherit = true) where T : Attribute public static bool HasCustomAttributes<T>(this MemberInfo member, IHostContext context, bool inherit = true) where T : Attribute
{ {
return CustomAttributes.Has<T>(member, inherit); return CustomAttributes.Has<T>(context, member, inherit);
} }
private static bool IsExplicitImplementation(this MemberInfo member) private static bool IsExplicitImplementation(this MemberInfo member)

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

@ -67,19 +67,19 @@ namespace Microsoft.ClearScript.Util
return !type.IsGenericParameter && !type.ContainsGenericParameters; return !type.IsGenericParameter && !type.ContainsGenericParameters;
} }
public static bool IsCompilerGenerated(this Type type) public static bool IsCompilerGenerated(this Type type, IHostContext context)
{ {
return type.HasCustomAttributes<CompilerGeneratedAttribute>(false); return type.HasCustomAttributes<CompilerGeneratedAttribute>(context, false);
} }
public static bool IsFlagsEnum(this Type type) public static bool IsFlagsEnum(this Type type, IHostContext context)
{ {
return type.IsEnum && type.HasCustomAttributes<FlagsAttribute>(false); return type.IsEnum && type.HasCustomAttributes<FlagsAttribute>(context, false);
} }
public static bool IsImportable(this Type type) public static bool IsImportable(this Type type, IHostContext context)
{ {
if (!type.IsNested && !type.IsSpecialName && !type.IsCompilerGenerated()) if (!type.IsNested && !type.IsSpecialName && !type.IsCompilerGenerated(context))
{ {
var locator = type.GetLocator(); var locator = type.GetLocator();
return !importDenyList.Contains(locator) && IsValidLocator(locator); return !importDenyList.Contains(locator) && IsValidLocator(locator);
@ -88,7 +88,7 @@ namespace Microsoft.ClearScript.Util
return false; return false;
} }
public static bool IsAnonymous(this Type type) public static bool IsAnonymous(this Type type, IHostContext context)
{ {
if (!type.IsGenericType) if (!type.IsGenericType)
{ {
@ -112,7 +112,7 @@ namespace Microsoft.ClearScript.Util
return false; return false;
} }
if (!type.IsCompilerGenerated()) if (!type.IsCompilerGenerated(context))
{ {
return false; return false;
} }
@ -222,9 +222,9 @@ namespace Microsoft.ClearScript.Util
return numericConversions[(int)valueType.GetNumericType()].HasFlag(GetNumericTypes(type.GetNumericType())); return numericConversions[(int)valueType.GetNumericType()].HasFlag(GetNumericTypes(type.GetNumericType()));
} }
public static bool HasExtensionMethods(this Type type) public static bool HasExtensionMethods(this Type type, IHostContext context)
{ {
return type.HasCustomAttributes<ExtensionAttribute>(false); return type.HasCustomAttributes<ExtensionAttribute>(context, false);
} }
public static bool EqualsOrDeclares(this Type type, Type thatType) public static bool EqualsOrDeclares(this Type type, Type thatType)
@ -253,20 +253,20 @@ namespace Microsoft.ClearScript.Util
return false; return false;
} }
public static bool IsFriendOf(this Type type, Type thatType) public static bool IsFriendOf(this Type type, IHostContext context, Type thatType)
{ {
return type.Assembly.IsFriendOf(thatType.Assembly); return type.Assembly.IsFriendOf(context, thatType.Assembly);
} }
public static bool IsCOMVisible(this Type type) public static bool IsCOMVisible(this Type type, IHostContext context)
{ {
var attribute = type.GetOrLoadCustomAttribute<ComVisibleAttribute>(false); var attribute = type.GetOrLoadCustomAttribute<ComVisibleAttribute>(context, false);
if (attribute != null) if (attribute != null)
{ {
return attribute.Value; return attribute.Value;
} }
attribute = type.Assembly.GetOrLoadCustomAttribute<ComVisibleAttribute>(false); attribute = type.Assembly.GetOrLoadCustomAttribute<ComVisibleAttribute>(context, false);
if (attribute != null) if (attribute != null)
{ {
return attribute.Value; return attribute.Value;
@ -349,7 +349,7 @@ namespace Microsoft.ClearScript.Util
{ {
} }
return type.GetScriptableEvents(context, bindFlags).FirstOrDefault(eventInfo => string.Equals(eventInfo.GetScriptName(), name, bindFlags.GetMemberNameComparison())); return type.GetScriptableEvents(context, bindFlags).FirstOrDefault(eventInfo => string.Equals(eventInfo.GetScriptName(context), name, bindFlags.GetMemberNameComparison()));
} }
public static IEnumerable<FieldInfo> GetScriptableFields(this Type type, IHostContext context, BindingFlags bindFlags) public static IEnumerable<FieldInfo> GetScriptableFields(this Type type, IHostContext context, BindingFlags bindFlags)
@ -360,12 +360,12 @@ namespace Microsoft.ClearScript.Util
public static FieldInfo GetScriptableField(this Type type, IHostContext context, string name, BindingFlags bindFlags) public static FieldInfo GetScriptableField(this Type type, IHostContext context, string name, BindingFlags bindFlags)
{ {
var candidate = type.GetField(name, bindFlags); var candidate = type.GetField(name, bindFlags);
if ((candidate != null) && candidate.IsScriptable(context) && string.Equals(candidate.GetScriptName(), name, bindFlags.GetMemberNameComparison())) if ((candidate != null) && candidate.IsScriptable(context) && string.Equals(candidate.GetScriptName(context), name, bindFlags.GetMemberNameComparison()))
{ {
return candidate; return candidate;
} }
return type.GetScriptableFields(context, bindFlags).FirstOrDefault(field => string.Equals(field.GetScriptName(), name, bindFlags.GetMemberNameComparison())); return type.GetScriptableFields(context, bindFlags).FirstOrDefault(field => string.Equals(field.GetScriptName(context), name, bindFlags.GetMemberNameComparison()));
} }
public static IEnumerable<MethodInfo> GetScriptableMethods(this Type type, IHostContext context, BindingFlags bindFlags) public static IEnumerable<MethodInfo> GetScriptableMethods(this Type type, IHostContext context, BindingFlags bindFlags)
@ -382,7 +382,7 @@ namespace Microsoft.ClearScript.Util
public static IEnumerable<MethodInfo> GetScriptableMethods(this Type type, IHostContext context, string name, BindingFlags bindFlags) public static IEnumerable<MethodInfo> GetScriptableMethods(this Type type, IHostContext context, string name, BindingFlags bindFlags)
{ {
return type.GetScriptableMethods(context, bindFlags).Where(method => string.Equals(method.GetScriptName(), name, bindFlags.GetMemberNameComparison())); return type.GetScriptableMethods(context, bindFlags).Where(method => string.Equals(method.GetScriptName(context), name, bindFlags.GetMemberNameComparison()));
} }
public static IEnumerable<PropertyInfo> GetScriptableProperties(this Type type, IHostContext context, BindingFlags bindFlags) public static IEnumerable<PropertyInfo> GetScriptableProperties(this Type type, IHostContext context, BindingFlags bindFlags)
@ -411,12 +411,12 @@ namespace Microsoft.ClearScript.Util
} }
var defaultMembers = type.GetDefaultMembers(); var defaultMembers = type.GetDefaultMembers();
return properties.Where(property => property.IsScriptable(context) && (defaultMembers.Contains(property) || property.IsDispID(SpecialDispIDs.Default))); return properties.Where(property => property.IsScriptable(context) && (defaultMembers.Contains(property) || property.IsDispID(context, SpecialDispIDs.Default)));
} }
public static IEnumerable<PropertyInfo> GetScriptableProperties(this Type type, IHostContext context, string name, BindingFlags bindFlags) public static IEnumerable<PropertyInfo> GetScriptableProperties(this Type type, IHostContext context, string name, BindingFlags bindFlags)
{ {
return type.GetScriptableProperties(context, bindFlags).Where(property => string.Equals(property.GetScriptName(), name, bindFlags.GetMemberNameComparison())); return type.GetScriptableProperties(context, bindFlags).Where(property => string.Equals(property.GetScriptName(context), name, bindFlags.GetMemberNameComparison()));
} }
public static PropertyInfo GetScriptableProperty(this Type type, IHostContext context, string name, BindingFlags bindFlags) public static PropertyInfo GetScriptableProperty(this Type type, IHostContext context, string name, BindingFlags bindFlags)
@ -430,7 +430,7 @@ namespace Microsoft.ClearScript.Util
try try
{ {
// ReSharper disable once RedundantEnumerableCastCall // ReSharper disable once RedundantEnumerableCastCall
return candidates.OfType<PropertyInfo>().SingleOrDefault(property => (property.GetIndexParameters().Length < 1) && property.IsScriptable(context) && string.Equals(property.GetScriptName(), name, bindFlags.GetMemberNameComparison())); return candidates.OfType<PropertyInfo>().SingleOrDefault(property => (property.GetIndexParameters().Length < 1) && property.IsScriptable(context) && string.Equals(property.GetScriptName(context), name, bindFlags.GetMemberNameComparison()));
} }
catch (InvalidOperationException exception) catch (InvalidOperationException exception)
{ {
@ -456,13 +456,13 @@ namespace Microsoft.ClearScript.Util
} }
var candidates = type.GetScriptableProperties(context, name, bindFlags).Distinct(PropertySignatureComparer.Instance).ToArray(); var candidates = type.GetScriptableProperties(context, name, bindFlags).Distinct(PropertySignatureComparer.Instance).ToArray();
return BindToMember(candidates, bindFlags, args, bindArgs); return BindToMember(context, candidates, bindFlags, args, bindArgs);
} }
public static PropertyInfo GetScriptableDefaultProperty(this Type type, IHostContext context, BindingFlags bindFlags, object[] args, object[] bindArgs) public static PropertyInfo GetScriptableDefaultProperty(this Type type, IHostContext context, BindingFlags bindFlags, object[] args, object[] bindArgs)
{ {
var candidates = type.GetScriptableDefaultProperties(context, bindFlags).Distinct(PropertySignatureComparer.Instance).ToArray(); var candidates = type.GetScriptableDefaultProperties(context, bindFlags).Distinct(PropertySignatureComparer.Instance).ToArray();
return BindToMember(candidates, bindFlags, args, bindArgs); return BindToMember(context, candidates, bindFlags, args, bindArgs);
} }
public static IEnumerable<Type> GetScriptableNestedTypes(this Type type, IHostContext context, BindingFlags bindFlags) public static IEnumerable<Type> GetScriptableNestedTypes(this Type type, IHostContext context, BindingFlags bindFlags)
@ -506,13 +506,13 @@ namespace Microsoft.ClearScript.Util
return type.CreateInstance(); return type.CreateInstance();
} }
var candidates = constructors.Where(testConstructor => testConstructor.IsAccessible(context) && !testConstructor.IsBlockedFromScript(context.DefaultAccess)).ToArray(); var candidates = constructors.Where(testConstructor => testConstructor.IsAccessible(context) && !testConstructor.IsBlockedFromScript(context, context.DefaultAccess)).ToArray();
if (candidates.Length < 1) if (candidates.Length < 1)
{ {
throw new MissingMethodException(MiscHelpers.FormatInvariant("Type '{0}' has no constructor that matches the specified arguments", type.GetFullFriendlyName())); throw new MissingMethodException(MiscHelpers.FormatInvariant("Type '{0}' has no constructor that matches the specified arguments", type.GetFullFriendlyName()));
} }
var constructor = BindToMember(candidates, flags, args, bindArgs); var constructor = BindToMember(context, candidates, flags, args, bindArgs);
if (constructor == null) if (constructor == null)
{ {
throw new MissingMethodException(MiscHelpers.FormatInvariant("Type '{0}' has no constructor that matches the specified arguments", type.GetFullFriendlyName())); throw new MissingMethodException(MiscHelpers.FormatInvariant("Type '{0}' has no constructor that matches the specified arguments", type.GetFullFriendlyName()));
@ -553,26 +553,26 @@ namespace Microsoft.ClearScript.Util
return type; return type;
} }
public static T BindToMember<T>(T[] candidates, BindingFlags bindFlags, object[] args, object[] bindArgs) where T : MethodBase public static T BindToMember<T>(IHostContext context, T[] candidates, BindingFlags bindFlags, object[] args, object[] bindArgs) where T : MethodBase
{ {
T result = null; T result = null;
if (candidates.Length > 0) if (candidates.Length > 0)
{ {
var bindCandidates = GetBindCandidates(candidates, args, bindArgs.Select(GetBindArgType).ToArray()).ToArray(); var bindCandidates = GetBindCandidates(context, candidates, args, bindArgs.Select(GetBindArgType).ToArray()).ToArray();
result = SelectBindCandidate(bindCandidates); result = SelectBindCandidate(bindCandidates);
} }
return result; return result;
} }
public static PropertyInfo BindToMember(PropertyInfo[] candidates, BindingFlags bindFlags, object[] args, object[] bindArgs) public static PropertyInfo BindToMember(IHostContext context, PropertyInfo[] candidates, BindingFlags bindFlags, object[] args, object[] bindArgs)
{ {
PropertyInfo result = null; PropertyInfo result = null;
if (candidates.Length > 0) if (candidates.Length > 0)
{ {
var bindCandidates = GetBindCandidates(candidates, args, bindArgs.Select(GetBindArgType).ToArray()).ToArray(); var bindCandidates = GetBindCandidates(context, candidates, args, bindArgs.Select(GetBindArgType).ToArray()).ToArray();
result = SelectBindCandidate(bindCandidates); result = SelectBindCandidate(bindCandidates);
if (result == null) if (result == null)
@ -718,7 +718,7 @@ namespace Microsoft.ClearScript.Util
try try
{ {
// ReSharper disable once RedundantEnumerableCastCall // ReSharper disable once RedundantEnumerableCastCall
return candidates.OfType<EventInfo>().SingleOrDefault(eventInfo => eventInfo.IsScriptable(context) && string.Equals(eventInfo.GetScriptName(), name, bindFlags.GetMemberNameComparison())); return candidates.OfType<EventInfo>().SingleOrDefault(eventInfo => eventInfo.IsScriptable(context) && string.Equals(eventInfo.GetScriptName(context), name, bindFlags.GetMemberNameComparison()));
} }
catch (InvalidOperationException exception) catch (InvalidOperationException exception)
{ {
@ -1001,21 +1001,21 @@ namespace Microsoft.ClearScript.Util
return null; return null;
} }
private static IEnumerable<BindCandidate<T>> GetBindCandidates<T>(T[] candidates, object[] args, Type[] argTypes) where T : MethodBase private static IEnumerable<BindCandidate<T>> GetBindCandidates<T>(IHostContext context, T[] candidates, object[] args, Type[] argTypes) where T : MethodBase
{ {
return GetBindCandidates(candidates, candidate => candidate.GetParameters(), args, argTypes); return GetBindCandidates(context, candidates, candidate => candidate.GetParameters(), args, argTypes);
} }
private static IEnumerable<BindCandidate<PropertyInfo>> GetBindCandidates(PropertyInfo[] candidates, object[] args, Type[] argTypes) private static IEnumerable<BindCandidate<PropertyInfo>> GetBindCandidates(IHostContext context, PropertyInfo[] candidates, object[] args, Type[] argTypes)
{ {
return GetBindCandidates(candidates, candidate => candidate.GetIndexParameters(), args, argTypes); return GetBindCandidates(context, candidates, candidate => candidate.GetIndexParameters(), args, argTypes);
} }
private static IEnumerable<BindCandidate<T>> GetBindCandidates<T>(T[] candidates, Func<T, ParameterInfo[]> getParameters, object[] args, Type[] argTypes) where T : MemberInfo private static IEnumerable<BindCandidate<T>> GetBindCandidates<T>(IHostContext context, T[] candidates, Func<T, ParameterInfo[]> getParameters, object[] args, Type[] argTypes) where T : MemberInfo
{ {
foreach (var candidate in candidates) foreach (var candidate in candidates)
{ {
if (MiscHelpers.Try(out var bindCandidate, () => BindCandidate<T>.TryCreateInstance(candidate, getParameters(candidate), args, argTypes)) && (bindCandidate != null)) if (MiscHelpers.Try(out var bindCandidate, () => BindCandidate<T>.TryCreateInstance(context, candidate, getParameters(candidate), args, argTypes)) && (bindCandidate != null))
{ {
yield return bindCandidate; yield return bindCandidate;
} }
@ -1326,7 +1326,7 @@ namespace Microsoft.ClearScript.Util
return TypeNode.TryGetUpcastCount(Candidate.DeclaringType, other.Candidate.DeclaringType, out _) ? -1 : 1; return TypeNode.TryGetUpcastCount(Candidate.DeclaringType, other.Candidate.DeclaringType, out _) ? -1 : 1;
} }
public static BindCandidate<T> TryCreateInstance(T candidate, ParameterInfo[] parameters, object[] args, Type[] argTypes) public static BindCandidate<T> TryCreateInstance(IHostContext context, T candidate, ParameterInfo[] parameters, object[] args, Type[] argTypes)
{ {
var defaultArgCount = 0; var defaultArgCount = 0;
var paramArray = false; var paramArray = false;
@ -1343,7 +1343,7 @@ namespace Microsoft.ClearScript.Util
var param = parameters[paramIndex]; var param = parameters[paramIndex];
paramType = param.ParameterType; paramType = param.ParameterType;
if ((paramIndex == (parameters.Length - 1)) && paramType.IsArray && CustomAttributes.Has<ParamArrayAttribute>(param, false)) if ((paramIndex == (parameters.Length - 1)) && paramType.IsArray && CustomAttributes.Has<ParamArrayAttribute>(context, param, false))
{ {
paramArray = true; paramArray = true;
break; break;

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

@ -1792,17 +1792,19 @@ namespace Microsoft.ClearScript.V8
object IJavaScriptEngine.CreatePromiseForTask<T>(Task<T> task) object IJavaScriptEngine.CreatePromiseForTask<T>(Task<T> task)
{ {
var scheduler = (engineFlags.HasFlag(V8ScriptEngineFlags.UseSynchronizationContexts) && MiscHelpers.Try(out var contextScheduler, TaskScheduler.FromCurrentSynchronizationContext)) ? contextScheduler : TaskScheduler.Current;
return CreatePromise((resolve, reject) => return CreatePromise((resolve, reject) =>
{ {
task.ContinueWith(_ => CompletePromise(task, resolve, reject), TaskContinuationOptions.ExecuteSynchronously); task.ContinueWith(_ => CompletePromise(task, resolve, reject), CancellationToken.None, TaskContinuationOptions.ExecuteSynchronously, scheduler);
}); });
} }
object IJavaScriptEngine.CreatePromiseForTask(Task task) object IJavaScriptEngine.CreatePromiseForTask(Task task)
{ {
var scheduler = (engineFlags.HasFlag(V8ScriptEngineFlags.UseSynchronizationContexts) && MiscHelpers.Try(out var contextScheduler, TaskScheduler.FromCurrentSynchronizationContext)) ? contextScheduler : TaskScheduler.Current;
return CreatePromise((resolve, reject) => return CreatePromise((resolve, reject) =>
{ {
task.ContinueWith(_ => CompletePromise(task, resolve, reject), TaskContinuationOptions.ExecuteSynchronously); task.ContinueWith(_ => CompletePromise(task, resolve, reject), CancellationToken.None, TaskContinuationOptions.ExecuteSynchronously, scheduler);
}); });
} }
@ -1814,10 +1816,17 @@ namespace Microsoft.ClearScript.V8
} }
var source = new TaskCompletionSource<object>(); var source = new TaskCompletionSource<object>();
var context = engineFlags.HasFlag(V8ScriptEngineFlags.UseSynchronizationContexts) ? SynchronizationContext.Current : null;
Action<object> setResultWorker = result => source.SetResult(result);
var setResult = (context == null) ? setResultWorker : result => context.Post(_ => setResultWorker(result), null);
Action<Exception> setExceptionWorker = exception => source.SetException(exception);
var setException = (context == null) ? setExceptionWorker : exception => context.Post(_ => setExceptionWorker(exception), null);
Action<object> onResolved = result => Action<object> onResolved = result =>
{ {
source.SetResult(result); setResult(result);
}; };
Action<object> onRejected = error => Action<object> onRejected = error =>
@ -1829,7 +1838,7 @@ namespace Microsoft.ClearScript.V8
} }
catch (Exception exception) catch (Exception exception)
{ {
source.SetException(exception); setException(exception);
} }
}; };

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

@ -122,6 +122,13 @@ namespace Microsoft.ClearScript.V8
/// accessible to script code via the <c>Error</c> object's <c>hostException</c> property. /// accessible to script code via the <c>Error</c> object's <c>hostException</c> property.
/// This option suppresses that behavior. /// This option suppresses that behavior.
/// </summary> /// </summary>
HideHostExceptions = 0x00001000 HideHostExceptions = 0x00001000,
/// <summary>
/// Specifies that support for synchronization contexts is to be enabled for task-promise
/// interoperability. This option is ignored if
/// <c><see cref="EnableTaskPromiseConversion"/></c> is not specified.
/// </summary>
UseSynchronizationContexts = 0x00002000
} }
} }

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

@ -252,7 +252,7 @@ namespace Microsoft.ClearScript.Windows.Core
} }
} }
private static bool GetDirectAccessItem(object item, out object directAccessItem) private bool GetDirectAccessItem(object item, out object directAccessItem)
{ {
while (true) while (true)
{ {
@ -278,7 +278,7 @@ namespace Microsoft.ClearScript.Windows.Core
continue; continue;
} }
if ((item != null) && (item.GetType().IsCOMObject || item.GetType().IsCOMVisible())) if ((item != null) && (item.GetType().IsCOMObject || item.GetType().IsCOMVisible(this)))
{ {
directAccessItem = item; directAccessItem = item;
return true; return true;

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

@ -93,7 +93,7 @@ namespace Microsoft.ClearScript.Windows.Core
else if (HResult.GetFacility(result) == HResult.FACILITY_CONTROL) else if (HResult.GetFacility(result) == HResult.FACILITY_CONTROL)
{ {
// These exceptions often have awful messages that include COM error codes. // These exceptions often have awful messages that include COM error codes.
// The engine itself may be able to provide a better message. // The script engine itself may be able to provide a better message.
if (engine.RuntimeErrorMap.TryGetValue(HResult.GetCode(result), out var runtimeErrorMessage) && (runtimeErrorMessage != exception.Message)) if (engine.RuntimeErrorMap.TryGetValue(HResult.GetCode(result), out var runtimeErrorMessage) && (runtimeErrorMessage != exception.Message))
{ {

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

@ -1,4 +1,4 @@
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license. // Licensed under the MIT license.
using System; using System;
@ -9,12 +9,7 @@ namespace Microsoft.ClearScript.Windows
{ {
internal sealed class DispatcherSyncInvoker : ISyncInvoker internal sealed class DispatcherSyncInvoker : ISyncInvoker
{ {
public DispatcherSyncInvoker() public Dispatcher Dispatcher { get; } = Dispatcher.CurrentDispatcher;
{
Dispatcher = Dispatcher.CurrentDispatcher;
}
public Dispatcher Dispatcher { get; }
public bool CheckAccess() public bool CheckAccess()
{ {

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

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

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

@ -11,6 +11,6 @@ using System.Runtime.InteropServices;
[assembly: AssemblyCopyright("(c) Microsoft Corporation")] [assembly: AssemblyCopyright("(c) Microsoft Corporation")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]
[assembly: AssemblyVersion("7.4.3")] [assembly: AssemblyVersion("7.4.4")]
[assembly: AssemblyFileVersion("7.4.3")] [assembly: AssemblyFileVersion("7.4.4")]
[assembly: AssemblyInformationalVersion("7.4.3")] [assembly: AssemblyInformationalVersion("7.4.4")]

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

@ -11,6 +11,6 @@ using System.Runtime.InteropServices;
[assembly: AssemblyCopyright("(c) Microsoft Corporation")] [assembly: AssemblyCopyright("(c) Microsoft Corporation")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]
[assembly: AssemblyVersion("7.4.3")] [assembly: AssemblyVersion("7.4.4")]
[assembly: AssemblyFileVersion("7.4.3")] [assembly: AssemblyFileVersion("7.4.4")]
[assembly: AssemblyInformationalVersion("7.4.3")] [assembly: AssemblyInformationalVersion("7.4.4")]

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

@ -1837,6 +1837,32 @@ namespace Microsoft.ClearScript.Test
#endif // !NET6_0_OR_GREATER #endif // !NET6_0_OR_GREATER
[TestMethod, TestCategory("BugFix")]
public void BugFix_PropertyAccessorRecursion()
{
engine.Script.test = new PropertyAccessorRecursionTest { Engine = engine };
var result = engine.Evaluate(@"
(function() {
let count = 0;
globalThis.onGetProperty = function () {
if (count++ < 5) {
const value = test.Property;
}
};
globalThis.onSetProperty = function () {
if (test.Property == 123) {
test.Property = 456;
} else {
test.Property = 789;
}
};
})();
test.Property = 123;
test.Property
");
Assert.AreEqual(789, result);
}
// ReSharper restore InconsistentNaming // ReSharper restore InconsistentNaming
#endregion #endregion
@ -2382,6 +2408,30 @@ namespace Microsoft.ClearScript.Test
} }
} }
public class PropertyAccessorRecursionTest
{
public ScriptEngine Engine;
private int property;
public int Property
{
get
{
Engine.Script.onGetProperty();
return property;
}
set
{
if (value != property)
{
property = value;
Engine.Script.onSetProperty();
}
}
}
}
#endregion #endregion
} }
} }

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

@ -86,7 +86,7 @@ namespace Microsoft.ClearScript.Test
{ {
var assemblies = assemblyNames.Select(assemblyName => Assembly.Load(AssemblyTable.GetFullAssemblyName(assemblyName))); var assemblies = assemblyNames.Select(assemblyName => Assembly.Load(AssemblyTable.GetFullAssemblyName(assemblyName)));
var activeFilter = filter ?? defaultFilter; var activeFilter = filter ?? defaultFilter;
return assemblies.SelectMany(assembly => assembly.GetAllTypes().Where(type => type.IsImportable() && activeFilter(type))); return assemblies.SelectMany(assembly => assembly.GetAllTypes().Where(type => type.IsImportable(null) && activeFilter(type)));
} }
private static IEnumerable<HostType> GetLeafNodes(PropertyBag container) private static IEnumerable<HostType> GetLeafNodes(PropertyBag container)

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

@ -657,7 +657,7 @@ namespace Microsoft.ClearScript.Test
[TestMethod, TestCategory("JScriptCoreEngine")] [TestMethod, TestCategory("JScriptCoreEngine")]
public void JScriptCoreEngine_CollectGarbage() public void JScriptCoreEngine_CollectGarbage()
{ {
engine.Execute(@"x = []; for (i = 0; i < 1024 * 1024; i++) { x.push(x); }"); engine.Execute("x = []; for (i = 0; i < 1024 * 1024; i++) { x.push(x); }");
engine.CollectGarbage(true); engine.CollectGarbage(true);
// can't test JScript GC effectiveness // can't test JScript GC effectiveness
} }
@ -2954,6 +2954,22 @@ namespace Microsoft.ClearScript.Test
} }
} }
[TestMethod, TestCategory("JScriptCoreEngine")]
public void JScriptCoreEngine_CustomAttributeLoader_Private()
{
using (var otherEngine = new JScriptEngine(NullSyncInvoker.Instance))
{
engine.CustomAttributeLoader = new CamelCaseAttributeLoader();
TestCamelCaseMemberBinding();
using (Scope.Create(() => engine, originalEngine => engine = originalEngine))
{
engine = otherEngine;
TestUtil.AssertException<InvalidCastException>(TestCamelCaseMemberBinding);
}
}
}
[TestMethod, TestCategory("JScriptCoreEngine")] [TestMethod, TestCategory("JScriptCoreEngine")]
public void JScriptCoreEngine_ScriptObjectIdentity() public void JScriptCoreEngine_ScriptObjectIdentity()
{ {

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

@ -656,7 +656,7 @@ namespace Microsoft.ClearScript.Test
[TestMethod, TestCategory("JScriptEngine")] [TestMethod, TestCategory("JScriptEngine")]
public void JScriptEngine_CollectGarbage() public void JScriptEngine_CollectGarbage()
{ {
engine.Execute(@"x = []; for (i = 0; i < 1024 * 1024; i++) { x.push(x); }"); engine.Execute("x = []; for (i = 0; i < 1024 * 1024; i++) { x.push(x); }");
engine.CollectGarbage(true); engine.CollectGarbage(true);
// can't test JScript GC effectiveness // can't test JScript GC effectiveness
} }
@ -3014,6 +3014,22 @@ namespace Microsoft.ClearScript.Test
} }
} }
[TestMethod, TestCategory("JScriptEngine")]
public void JScriptEngine_CustomAttributeLoader_Private()
{
using (var otherEngine = new JScriptEngine())
{
engine.CustomAttributeLoader = new CamelCaseAttributeLoader();
TestCamelCaseMemberBinding();
using (Scope.Create(() => engine, originalEngine => engine = originalEngine))
{
engine = otherEngine;
TestUtil.AssertException<InvalidCastException>(TestCamelCaseMemberBinding);
}
}
}
[TestMethod, TestCategory("JScriptEngine")] [TestMethod, TestCategory("JScriptEngine")]
public void JScriptEngine_ScriptObjectIdentity() public void JScriptEngine_ScriptObjectIdentity()
{ {

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

@ -11,6 +11,6 @@ using System.Runtime.InteropServices;
[assembly: AssemblyCopyright("(c) Microsoft Corporation")] [assembly: AssemblyCopyright("(c) Microsoft Corporation")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]
[assembly: AssemblyVersion("7.4.3")] [assembly: AssemblyVersion("7.4.4")]
[assembly: AssemblyFileVersion("7.4.3")] [assembly: AssemblyFileVersion("7.4.4")]
[assembly: AssemblyInformationalVersion("7.4.3")] [assembly: AssemblyInformationalVersion("7.4.4")]

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

@ -21,8 +21,8 @@ namespace Microsoft.ClearScript.Test
Action innerTest = () => Action innerTest = () =>
{ {
// The Visual Studio 2013 debugging stack fails to release the engine properly, // The Visual Studio 2013 debugging stack fails to release the script engine
// resulting in test failure. Visual Studio 2012 does not have this bug. // properly, resulting in test failure. Visual Studio 2012 does not have this bug.
using (var scriptEngine = new V8ScriptEngine()) using (var scriptEngine = new V8ScriptEngine())
{ {
@ -45,8 +45,8 @@ namespace Microsoft.ClearScript.Test
var innerBag = new PropertyBag(); var innerBag = new PropertyBag();
Action innerTest = () => Action innerTest = () =>
{ {
// The Visual Studio 2013 debugging stack fails to release the engine properly, // The Visual Studio 2013 debugging stack fails to release the script engine
// resulting in test failure. Visual Studio 2012 does not have this bug. // properly, resulting in test failure. Visual Studio 2012 does not have this bug.
using (var scriptEngine = new V8ScriptEngine()) using (var scriptEngine = new V8ScriptEngine())
{ {

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

@ -1,4 +1,4 @@
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license. // Licensed under the MIT license.
using System; using System;
@ -25,8 +25,8 @@ namespace Microsoft.ClearScript.Test
Action innerTest = () => Action innerTest = () =>
{ {
// The Visual Studio 2013 debugging stack fails to release the engine properly, // The Visual Studio 2013 debugging stack fails to release the script engine
// resulting in test failure. Visual Studio 2012 does not have this bug. // properly, resulting in test failure. Visual Studio 2012 does not have this bug.
using (var scriptEngine = new VBScriptEngine()) using (var scriptEngine = new VBScriptEngine())
{ {
@ -49,8 +49,8 @@ namespace Microsoft.ClearScript.Test
var innerBag = new PropertyBag(); var innerBag = new PropertyBag();
Action innerTest = () => Action innerTest = () =>
{ {
// The Visual Studio 2013 debugging stack fails to release the engine properly, // The Visual Studio 2013 debugging stack fails to release the script engine
// resulting in test failure. Visual Studio 2012 does not have this bug. // properly, resulting in test failure. Visual Studio 2012 does not have this bug.
using (var scriptEngine = new VBScriptEngine()) using (var scriptEngine = new VBScriptEngine())
{ {
@ -170,6 +170,70 @@ namespace Microsoft.ClearScript.Test
stopEvent.Dispose(); stopEvent.Dispose();
} }
[TestMethod, TestCategory("PropertyBag")]
public void PropertyBag_Concurrent_JScript()
{
var bag = new ConcurrentPropertyBag();
engine.AddHostObject("bag", bag);
var threadCount = Environment.Is64BitProcess ? 512 : 16;
var engineCount = 0;
var startEvent = new ManualResetEventSlim(false);
var checkpointEvent = new ManualResetEventSlim(false);
var continueEvent = new ManualResetEventSlim(false);
var stopEvent = new ManualResetEventSlim(false);
ParameterizedThreadStart body = arg =>
{
// ReSharper disable AccessToDisposedClosure
var index = (int)arg;
startEvent.Wait();
var scriptEngine = new Windows.Core.JScriptEngine(Windows.Core.NullSyncInvoker.Instance);
scriptEngine.AddHostObject("bag", bag);
scriptEngine.Global["index"] = index;
scriptEngine.Execute("bag['foo' + index] = index");
Assert.AreEqual(index, scriptEngine.Evaluate("bag['foo' + index]"));
if (Interlocked.Increment(ref engineCount) == threadCount)
{
checkpointEvent.Set();
}
continueEvent.Wait();
scriptEngine.Dispose();
if (Interlocked.Decrement(ref engineCount) == 0)
{
stopEvent.Set();
}
// ReSharper restore AccessToDisposedClosure
};
var threads = Enumerable.Range(0, threadCount).Select(index => new Thread(body)).ToArray();
threads.ForEach((thread, index) => thread.Start(index));
startEvent.Set();
checkpointEvent.Wait();
Assert.AreEqual(threadCount + 1, bag.EngineCount);
continueEvent.Set();
stopEvent.Wait();
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
Assert.AreEqual(1, bag.EngineCount);
Array.ForEach(threads, thread => thread.Join());
startEvent.Dispose();
checkpointEvent.Dispose();
continueEvent.Dispose();
stopEvent.Dispose();
}
// ReSharper restore InconsistentNaming // ReSharper restore InconsistentNaming
#endregion #endregion

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

@ -3,6 +3,9 @@
using System; using System;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Threading;
using Microsoft.ClearScript.Util;
using Microsoft.ClearScript.V8; using Microsoft.ClearScript.V8;
using Microsoft.VisualStudio.TestTools.UnitTesting; using Microsoft.VisualStudio.TestTools.UnitTesting;
@ -196,6 +199,75 @@ namespace Microsoft.ClearScript.Test
Assert.AreSame(Undefined.Value, engine.Evaluate("bag.bar")); Assert.AreSame(Undefined.Value, engine.Evaluate("bag.bar"));
} }
[TestMethod, TestCategory("PropertyBag")]
public void PropertyBag_Concurrent()
{
var bag = new ConcurrentPropertyBag();
engine.AddHostObject("bag", bag);
// 32-bit V8 starts failing requests to create new contexts rather quickly. This is
// because each V8 isolate requires (among other things) a 32MB address space
// reservation. 64-bit V8 reserves much larger blocks but benefits from the enormous
// available address space.
var threadCount = Environment.Is64BitProcess ? 512 : 16;
var engineCount = 0;
var startEvent = new ManualResetEventSlim(false);
var checkpointEvent = new ManualResetEventSlim(false);
var continueEvent = new ManualResetEventSlim(false);
var stopEvent = new ManualResetEventSlim(false);
ParameterizedThreadStart body = arg =>
{
// ReSharper disable AccessToDisposedClosure
var index = (int)arg;
startEvent.Wait();
var scriptEngine = new V8ScriptEngine();
scriptEngine.AddHostObject("bag", bag);
scriptEngine.Global["index"] = index;
scriptEngine.Execute("bag['foo' + index] = index");
Assert.AreEqual(index, scriptEngine.Evaluate("bag['foo' + index]"));
if (Interlocked.Increment(ref engineCount) == threadCount)
{
checkpointEvent.Set();
}
continueEvent.Wait();
scriptEngine.Dispose();
if (Interlocked.Decrement(ref engineCount) == 0)
{
stopEvent.Set();
}
// ReSharper restore AccessToDisposedClosure
};
var threads = Enumerable.Range(0, threadCount).Select(index => new Thread(body)).ToArray();
threads.ForEach((thread, index) => thread.Start(index));
startEvent.Set();
checkpointEvent.Wait();
Assert.AreEqual(threadCount + 1, bag.EngineCount);
continueEvent.Set();
stopEvent.Wait();
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
Assert.AreEqual(1, bag.EngineCount);
Array.ForEach(threads, thread => thread.Join());
startEvent.Dispose();
checkpointEvent.Dispose();
continueEvent.Dispose();
stopEvent.Dispose();
}
// ReSharper restore InconsistentNaming // ReSharper restore InconsistentNaming
#endregion #endregion

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

@ -3,6 +3,7 @@
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.Specialized; using System.Collections.Specialized;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
@ -4486,6 +4487,22 @@ namespace Microsoft.ClearScript.Test
} }
} }
[TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_CustomAttributeLoader_Private()
{
using (var otherEngine = new V8ScriptEngine())
{
engine.CustomAttributeLoader = new CamelCaseAttributeLoader();
TestCamelCaseMemberBinding();
using (Scope.Create(() => engine, originalEngine => engine = originalEngine))
{
engine = otherEngine;
TestUtil.AssertException<InvalidCastException>(TestCamelCaseMemberBinding);
}
}
}
[TestMethod, TestCategory("V8ScriptEngine")] [TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_StringifyEnhancements() public void V8ScriptEngine_StringifyEnhancements()
{ {
@ -5166,6 +5183,63 @@ namespace Microsoft.ClearScript.Test
} }
} }
[TestMethod, TestCategory("V8ScriptEngine")]
public void V8ScriptEngine_UseSynchronizationContexts()
{
Func<SingleThreadSynchronizationContext, Task<bool>> doWork = context => Task<bool>.Factory.StartNew(() =>
{
Thread.Sleep(100);
return context.OnThread;
});
var managedResults = SingleThreadSynchronizationContext.RunTask(async context =>
{
var results = new List<bool> { context.OnThread };
results.Add(await doWork(context));
results.Add(context.OnThread);
return results;
});
Assert.IsTrue(managedResults.SequenceEqual(new[] { true, false, true }));
// ReSharper disable AccessToDisposedClosure
engine.Dispose();
engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.EnableTaskPromiseConversion);
engine.Script.doWork = doWork;
var scriptResults = (IList<object>)SingleThreadSynchronizationContext.RunTask(async context =>
{
engine.Script.context = context;
return await (Task<object>)engine.Evaluate(@"(async function () {
const results = [context.OnThread];
results.push(await doWork(context));
results.push(context.OnThread);
return results;
})()");
});
Assert.IsTrue(scriptResults.SequenceEqual(new object[] { true, false, false }));
engine.Dispose();
engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.EnableTaskPromiseConversion | V8ScriptEngineFlags.UseSynchronizationContexts);
engine.Script.doWork = doWork;
scriptResults = (IList<object>)SingleThreadSynchronizationContext.RunTask(async context =>
{
engine.Script.context = context;
return await (Task<object>)engine.Evaluate(@"(async function () {
const results = [context.OnThread];
results.push(await doWork(context));
results.push(context.OnThread);
return results;
})()");
});
Assert.IsTrue(scriptResults.SequenceEqual(new object[] { true, false, true }));
// ReSharper restore AccessToDisposedClosure
}
// ReSharper restore InconsistentNaming // ReSharper restore InconsistentNaming
#endregion #endregion
@ -5252,7 +5326,7 @@ namespace Microsoft.ClearScript.Test
builder.AppendLine(); builder.AppendLine();
AppendCpuProfileTestSequence(builder, 4, MiscHelpers.CreateSeededRandom(), new List<int>()); AppendCpuProfileTestSequence(builder, 4, MiscHelpers.CreateSeededRandom(), new List<int>());
builder.Append(@" })()"); builder.Append(" })()");
builder.AppendLine(); builder.AppendLine();
return builder.ToString(); return builder.ToString();
@ -5533,6 +5607,47 @@ namespace Microsoft.ClearScript.Test
} }
} }
public class SingleThreadSynchronizationContext : SynchronizationContext
{
private readonly BlockingCollection<(SendOrPostCallback, object)> queue = new BlockingCollection<(SendOrPostCallback, object)>();
private readonly Thread thread;
private SingleThreadSynchronizationContext()
{
thread = new Thread(RunLoop);
thread.Start();
}
public bool OnThread => Thread.CurrentThread == thread;
public static T RunTask<T>(Func<SingleThreadSynchronizationContext, Task<T>> createTask)
{
var context = new SingleThreadSynchronizationContext();
T result = default;
var doneEvent = new ManualResetEventSlim();
context.Post(_ => createTask(context).ContinueWith(task => { result = task.Result; doneEvent.Set(); }), null);
doneEvent.Wait();
context.queue.CompleteAdding();
context.thread.Join();
return result;
}
public override void Post(SendOrPostCallback callback, object state) => queue.Add((callback, state));
private void RunLoop()
{
SetSynchronizationContext(this);
foreach (var (callback, state) in queue.GetConsumingEnumerable())
{
callback(state);
}
}
}
#endregion #endregion
} }
} }

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

@ -27,7 +27,8 @@ public:
EnableValueTaskPromiseConversion = 0x00000200, EnableValueTaskPromiseConversion = 0x00000200,
UseCaseInsensitiveMemberBinding = 0x00000400, UseCaseInsensitiveMemberBinding = 0x00000400,
EnableStringifyEnhancements = 0x00000800, EnableStringifyEnhancements = 0x00000800,
HideHostExceptions = 0x00001000 HideHostExceptions = 0x00001000,
UseSynchronizationContexts = 0x00002000
}; };
struct Options final struct Options final

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

@ -43,9 +43,9 @@
<Compile Include="..\..\ClearScript\ByRefArg.cs" Link="ByRefArg.cs" /> <Compile Include="..\..\ClearScript\ByRefArg.cs" Link="ByRefArg.cs" />
<Compile Include="..\..\ClearScript\CanonicalRefTable.cs" Link="CanonicalRefTable.cs" /> <Compile Include="..\..\ClearScript\CanonicalRefTable.cs" Link="CanonicalRefTable.cs" />
<Compile Include="..\..\ClearScript\ContinuationCallback.cs" Link="ContinuationCallback.cs" /> <Compile Include="..\..\ClearScript\ContinuationCallback.cs" Link="ContinuationCallback.cs" />
<Compile Include="..\..\ClearScript\CustomAttributeCache.cs" Link="CustomAttributeCache.cs" />
<Compile Include="..\..\ClearScript\CustomAttributeLoader.cs" Link="CustomAttributeLoader.cs" /> <Compile Include="..\..\ClearScript\CustomAttributeLoader.cs" Link="CustomAttributeLoader.cs" />
<Compile Include="..\..\ClearScript\CustomAttributes.cs" Link="CustomAttributes.cs" /> <Compile Include="..\..\ClearScript\CustomAttributes.cs" Link="CustomAttributes.cs" />
<Compile Include="..\..\ClearScript\CustomAttributes.NetStandard.cs" Link="CustomAttributes.NetStandard.cs" />
<Compile Include="..\..\ClearScript\DefaultDocumentLoader.cs" Link="DefaultDocumentLoader.cs" /> <Compile Include="..\..\ClearScript\DefaultDocumentLoader.cs" Link="DefaultDocumentLoader.cs" />
<Compile Include="..\..\ClearScript\DefaultScriptUsageAttribute.cs" Link="DefaultScriptUsageAttribute.cs" /> <Compile Include="..\..\ClearScript\DefaultScriptUsageAttribute.cs" Link="DefaultScriptUsageAttribute.cs" />
<Compile Include="..\..\ClearScript\DelegateFactory.cs" Link="DelegateFactory.cs" /> <Compile Include="..\..\ClearScript\DelegateFactory.cs" Link="DelegateFactory.cs" />

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

@ -40,9 +40,9 @@
<Compile Include="..\..\ClearScript\ByRefArg.cs" Link="ByRefArg.cs" /> <Compile Include="..\..\ClearScript\ByRefArg.cs" Link="ByRefArg.cs" />
<Compile Include="..\..\ClearScript\CanonicalRefTable.cs" Link="CanonicalRefTable.cs" /> <Compile Include="..\..\ClearScript\CanonicalRefTable.cs" Link="CanonicalRefTable.cs" />
<Compile Include="..\..\ClearScript\ContinuationCallback.cs" Link="ContinuationCallback.cs" /> <Compile Include="..\..\ClearScript\ContinuationCallback.cs" Link="ContinuationCallback.cs" />
<Compile Include="..\..\ClearScript\CustomAttributeCache.cs" Link="CustomAttributeCache.cs" />
<Compile Include="..\..\ClearScript\CustomAttributeLoader.cs" Link="CustomAttributeLoader.cs" /> <Compile Include="..\..\ClearScript\CustomAttributeLoader.cs" Link="CustomAttributeLoader.cs" />
<Compile Include="..\..\ClearScript\CustomAttributes.cs" Link="CustomAttributes.cs" /> <Compile Include="..\..\ClearScript\CustomAttributes.cs" Link="CustomAttributes.cs" />
<Compile Include="..\..\ClearScript\CustomAttributes.NetFramework.cs" Link="CustomAttributes.NetFramework.cs" />
<Compile Include="..\..\ClearScript\DefaultDocumentLoader.cs" Link="DefaultDocumentLoader.cs" /> <Compile Include="..\..\ClearScript\DefaultDocumentLoader.cs" Link="DefaultDocumentLoader.cs" />
<Compile Include="..\..\ClearScript\DefaultScriptUsageAttribute.cs" Link="DefaultScriptUsageAttribute.cs" /> <Compile Include="..\..\ClearScript\DefaultScriptUsageAttribute.cs" Link="DefaultScriptUsageAttribute.cs" />
<Compile Include="..\..\ClearScript\DelegateFactory.cs" Link="DelegateFactory.cs" /> <Compile Include="..\..\ClearScript\DelegateFactory.cs" Link="DelegateFactory.cs" />

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

@ -42,9 +42,9 @@
<Compile Include="..\..\ClearScript\ByRefArg.cs" Link="ByRefArg.cs" /> <Compile Include="..\..\ClearScript\ByRefArg.cs" Link="ByRefArg.cs" />
<Compile Include="..\..\ClearScript\CanonicalRefTable.cs" Link="CanonicalRefTable.cs" /> <Compile Include="..\..\ClearScript\CanonicalRefTable.cs" Link="CanonicalRefTable.cs" />
<Compile Include="..\..\ClearScript\ContinuationCallback.cs" Link="ContinuationCallback.cs" /> <Compile Include="..\..\ClearScript\ContinuationCallback.cs" Link="ContinuationCallback.cs" />
<Compile Include="..\..\ClearScript\CustomAttributeCache.cs" Link="CustomAttributeCache.cs" />
<Compile Include="..\..\ClearScript\CustomAttributeLoader.cs" Link="CustomAttributeLoader.cs" /> <Compile Include="..\..\ClearScript\CustomAttributeLoader.cs" Link="CustomAttributeLoader.cs" />
<Compile Include="..\..\ClearScript\CustomAttributes.cs" Link="CustomAttributes.cs" /> <Compile Include="..\..\ClearScript\CustomAttributes.cs" Link="CustomAttributes.cs" />
<Compile Include="..\..\ClearScript\CustomAttributes.NetStandard.cs" Link="CustomAttributes.NetStandard.cs" />
<Compile Include="..\..\ClearScript\DefaultDocumentLoader.cs" Link="DefaultDocumentLoader.cs" /> <Compile Include="..\..\ClearScript\DefaultDocumentLoader.cs" Link="DefaultDocumentLoader.cs" />
<Compile Include="..\..\ClearScript\DefaultScriptUsageAttribute.cs" Link="DefaultScriptUsageAttribute.cs" /> <Compile Include="..\..\ClearScript\DefaultScriptUsageAttribute.cs" Link="DefaultScriptUsageAttribute.cs" />
<Compile Include="..\..\ClearScript\DelegateFactory.cs" Link="DelegateFactory.cs" /> <Compile Include="..\..\ClearScript\DelegateFactory.cs" Link="DelegateFactory.cs" />

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

@ -66,9 +66,9 @@
<Compile Include="..\..\ClearScript\ByRefArg.cs" Link="ByRefArg.cs" /> <Compile Include="..\..\ClearScript\ByRefArg.cs" Link="ByRefArg.cs" />
<Compile Include="..\..\ClearScript\CanonicalRefTable.cs" Link="CanonicalRefTable.cs" /> <Compile Include="..\..\ClearScript\CanonicalRefTable.cs" Link="CanonicalRefTable.cs" />
<Compile Include="..\..\ClearScript\ContinuationCallback.cs" Link="ContinuationCallback.cs" /> <Compile Include="..\..\ClearScript\ContinuationCallback.cs" Link="ContinuationCallback.cs" />
<Compile Include="..\..\ClearScript\CustomAttributeCache.cs" Link="CustomAttributeCache.cs" />
<Compile Include="..\..\ClearScript\CustomAttributeLoader.cs" Link="CustomAttributeLoader.cs" /> <Compile Include="..\..\ClearScript\CustomAttributeLoader.cs" Link="CustomAttributeLoader.cs" />
<Compile Include="..\..\ClearScript\CustomAttributes.cs" Link="CustomAttributes.cs" /> <Compile Include="..\..\ClearScript\CustomAttributes.cs" Link="CustomAttributes.cs" />
<Compile Include="..\..\ClearScript\CustomAttributes.NetStandard.cs" Link="CustomAttributes.NetStandard.cs" />
<Compile Include="..\..\ClearScript\DefaultDocumentLoader.cs" Link="DefaultDocumentLoader.cs" /> <Compile Include="..\..\ClearScript\DefaultDocumentLoader.cs" Link="DefaultDocumentLoader.cs" />
<Compile Include="..\..\ClearScript\DefaultScriptUsageAttribute.cs" Link="DefaultScriptUsageAttribute.cs" /> <Compile Include="..\..\ClearScript\DefaultScriptUsageAttribute.cs" Link="DefaultScriptUsageAttribute.cs" />
<Compile Include="..\..\ClearScript\DelegateFactory.cs" Link="DelegateFactory.cs" /> <Compile Include="..\..\ClearScript\DelegateFactory.cs" Link="DelegateFactory.cs" />

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

@ -1,8 +1,8 @@
#!/bin/bash #!/bin/bash
v8testedrev=11.6.189.18 v8testedrev=11.8.172.15
v8testedcommit= v8testedcommit=
v8cherrypicks= v8cherrypicks=28a7e2d45fd620fa68fb0678a7246fc8e426d1cc
v8linuxbuildcommit=3d9590754d5d23e62d15472c5baf6777ca59df20 v8linuxbuildcommit=3d9590754d5d23e62d15472c5baf6777ca59df20
v8linuxclangcommit=184bc29dd86c3994a02b4f3feca125ffe785319c v8linuxclangcommit=184bc29dd86c3994a02b4f3feca125ffe785319c
@ -174,6 +174,9 @@ if [[ $download == true ]]; then
fi fi
git apply --reject --ignore-whitespace ../../V8Patch.txt 2>apply-patch.log || fail git apply --reject --ignore-whitespace ../../V8Patch.txt 2>apply-patch.log || fail
if [[ $linux == true ]]; then if [[ $linux == true ]]; then
cd third_party/abseil-cpp || abort
git apply --reject --ignore-whitespace ../../../../AbseilCppPatch.txt 2>apply-patch.log || fail
cd ../..
cd build || abort cd build || abort
if [[ $v8linuxbuildcommit != "" ]]; then if [[ $v8linuxbuildcommit != "" ]]; then
git reset --hard $v8linuxbuildcommit >resetBuild.log || fail git reset --hard $v8linuxbuildcommit >resetBuild.log || fail
@ -209,6 +212,12 @@ cd build/v8 || abort
echo "Creating/updating patches ..." echo "Creating/updating patches ..."
git diff --ignore-space-change --ignore-space-at-eol >V8Patch.txt 2>create-patch.log || fail git diff --ignore-space-change --ignore-space-at-eol >V8Patch.txt 2>create-patch.log || fail
if [[ $linux == true ]]; then
cd third_party/abseil-cpp || abort
git diff --ignore-space-change --ignore-space-at-eol >AbseilCppPatch.txt 2>create-patch.log || fail
cd ../..
fi
if [[ $linux == true ]]; then if [[ $linux == true ]]; then
echo "Installing LKG sysroots ..." echo "Installing LKG sysroots ..."
build/linux/sysroot_scripts/install-sysroot.py --arch=x64 >install-x64-sysroot.log || fail build/linux/sysroot_scripts/install-sysroot.py --arch=x64 >install-x64-sysroot.log || fail
@ -225,6 +234,10 @@ cd ../..
echo "Importing patches ..." echo "Importing patches ..."
cp build/v8/V8Patch.txt . || fail cp build/v8/V8Patch.txt . || fail
if [[ $linux == true ]]; then
cp build/v8/third_party/abseil-cpp/AbseilCppPatch.txt . || fail
fi
echo "Importing ICU data ..." echo "Importing ICU data ..."
cp build/v8/out/$cpu/$mode/icudtl.dat . || fail cp build/v8/out/$cpu/$mode/icudtl.dat . || fail

12
V8/AbseilCppPatch.txt Normal file
Просмотреть файл

@ -0,0 +1,12 @@
diff --git a/absl.gni b/absl.gni
index cf8a39e..06c0af0 100644
--- a/absl.gni
+++ b/absl.gni
@@ -25,7 +25,6 @@ template("absl_source_set") {
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [
"//build/config/compiler:no_chromium_code",
- "//build/config/compiler:prevent_unsafe_narrowing",
"//third_party/abseil-cpp:absl_default_cflags_cc",
"//third_party/abseil-cpp:absl_define_config",
]

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

@ -1,5 +1,5 @@
diff --git a/BUILD.gn b/BUILD.gn diff --git a/BUILD.gn b/BUILD.gn
index c13cf053a8..07eca38dd3 100644 index dd97c4f922c..b847c2d4cd4 100644
--- a/BUILD.gn --- a/BUILD.gn
+++ b/BUILD.gn +++ b/BUILD.gn
@@ -8,7 +8,6 @@ import("//build/config/coverage/coverage.gni") @@ -8,7 +8,6 @@ import("//build/config/coverage/coverage.gni")
@ -10,20 +10,20 @@ index c13cf053a8..07eca38dd3 100644
import("//build/config/sanitizers/sanitizers.gni") import("//build/config/sanitizers/sanitizers.gni")
import("//build_overrides/build.gni") import("//build_overrides/build.gni")
@@ -1179,7 +1178,7 @@ config("toolchain") { @@ -1228,7 +1227,7 @@ config("toolchain") {
visibility = [ "./*" ] visibility = [ "./*" ]
defines = [] defines = []
- cflags = [] - cflags = []
+ cflags = [ "-D_SILENCE_CXX20_OLD_SHARED_PTR_ATOMIC_SUPPORT_DEPRECATION_WARNING", "-Wno-invalid-offsetof" ] + cflags = [ "-D_SILENCE_CXX20_OLD_SHARED_PTR_ATOMIC_SUPPORT_DEPRECATION_WARNING" ]
ldflags = [] ldflags = []
if (v8_current_cpu == "arm") { if (v8_current_cpu == "arm") {
diff --git a/gni/v8.gni b/gni/v8.gni diff --git a/gni/v8.gni b/gni/v8.gni
index 6a9f9c6610..efd40329f8 100644 index e2505eea24e..977b8776db2 100644
--- a/gni/v8.gni --- a/gni/v8.gni
+++ b/gni/v8.gni +++ b/gni/v8.gni
@@ -100,7 +100,7 @@ declare_args() { @@ -103,7 +103,7 @@ declare_args() {
cppgc_is_standalone = false cppgc_is_standalone = false
# Enable object names in cppgc for profiling purposes. # Enable object names in cppgc for profiling purposes.
@ -33,12 +33,12 @@ index 6a9f9c6610..efd40329f8 100644
# Enable young generation in cppgc. # Enable young generation in cppgc.
cppgc_enable_young_generation = false cppgc_enable_young_generation = false
diff --git a/include/libplatform/libplatform.h b/include/libplatform/libplatform.h diff --git a/include/libplatform/libplatform.h b/include/libplatform/libplatform.h
index 9ec60c04f9..a5c268db93 100644 index 6a34f432410..88a81ab4c40 100644
--- a/include/libplatform/libplatform.h --- a/include/libplatform/libplatform.h
+++ b/include/libplatform/libplatform.h +++ b/include/libplatform/libplatform.h
@@ -43,6 +43,8 @@ V8_PLATFORM_EXPORT std::unique_ptr<v8::Platform> NewDefaultPlatform( @@ -49,6 +49,8 @@ V8_PLATFORM_EXPORT std::unique_ptr<v8::Platform> NewDefaultPlatform(
InProcessStackDumping::kDisabled, std::unique_ptr<v8::TracingController> tracing_controller = {},
std::unique_ptr<v8::TracingController> tracing_controller = {}); PriorityMode priority_mode = PriorityMode::kDontApply);
+V8_PLATFORM_EXPORT std::unique_ptr<v8::PageAllocator> NewDefaultPageAllocator(); +V8_PLATFORM_EXPORT std::unique_ptr<v8::PageAllocator> NewDefaultPageAllocator();
+ +
@ -46,7 +46,7 @@ index 9ec60c04f9..a5c268db93 100644
* The same as NewDefaultPlatform but disables the worker thread pool. * The same as NewDefaultPlatform but disables the worker thread pool.
* It must be used with the --single-threaded V8 flag. * It must be used with the --single-threaded V8 flag.
diff --git a/include/v8-initialization.h b/include/v8-initialization.h diff --git a/include/v8-initialization.h b/include/v8-initialization.h
index d3e35d6ec5..56b3faaa79 100644 index d3e35d6ec5f..56b3faaa791 100644
--- a/include/v8-initialization.h --- a/include/v8-initialization.h
+++ b/include/v8-initialization.h +++ b/include/v8-initialization.h
@@ -136,6 +136,7 @@ class V8_EXPORT V8 { @@ -136,6 +136,7 @@ class V8_EXPORT V8 {
@ -68,10 +68,10 @@ index d3e35d6ec5..56b3faaa79 100644
V8(); V8();
diff --git a/include/v8-platform.h b/include/v8-platform.h diff --git a/include/v8-platform.h b/include/v8-platform.h
index 9811c6e7bf..3d34d1697a 100644 index 0d82f4b990a..16d717a2cef 100644
--- a/include/v8-platform.h --- a/include/v8-platform.h
+++ b/include/v8-platform.h +++ b/include/v8-platform.h
@@ -1206,7 +1206,7 @@ class Platform { @@ -1232,7 +1232,7 @@ class Platform {
* required. * required.
*/ */
virtual int64_t CurrentClockTimeMilliseconds() { virtual int64_t CurrentClockTimeMilliseconds() {
@ -81,7 +81,7 @@ index 9811c6e7bf..3d34d1697a 100644
/** /**
diff --git a/include/v8-template.h b/include/v8-template.h diff --git a/include/v8-template.h b/include/v8-template.h
index 11296cd488..0f090446dc 100644 index 11296cd4889..0f090446dc0 100644
--- a/include/v8-template.h --- a/include/v8-template.h
+++ b/include/v8-template.h +++ b/include/v8-template.h
@@ -939,6 +939,9 @@ class V8_EXPORT ObjectTemplate : public Template { @@ -939,6 +939,9 @@ class V8_EXPORT ObjectTemplate : public Template {
@ -95,7 +95,7 @@ index 11296cd488..0f090446dc 100644
* Support for TC39 "dynamic code brand checks" proposal. * Support for TC39 "dynamic code brand checks" proposal.
* *
diff --git a/include/v8config.h b/include/v8config.h diff --git a/include/v8config.h b/include/v8config.h
index 33bb3f9431..f03936a972 100644 index 33bb3f94316..f03936a972d 100644
--- a/include/v8config.h --- a/include/v8config.h
+++ b/include/v8config.h +++ b/include/v8config.h
@@ -532,7 +532,7 @@ path. Add it with -I<path> to the command line @@ -532,7 +532,7 @@ path. Add it with -I<path> to the command line
@ -108,7 +108,7 @@ index 33bb3f9431..f03936a972 100644
# define V8_PRESERVE_MOST /* NOT SUPPORTED */ # define V8_PRESERVE_MOST /* NOT SUPPORTED */
#endif #endif
diff --git a/src/api/api-natives.cc b/src/api/api-natives.cc diff --git a/src/api/api-natives.cc b/src/api/api-natives.cc
index aadb9ffb71..279c2f35ed 100644 index 3015c2f80fb..cafd758b32a 100644
--- a/src/api/api-natives.cc --- a/src/api/api-natives.cc
+++ b/src/api/api-natives.cc +++ b/src/api/api-natives.cc
@@ -448,6 +448,9 @@ MaybeHandle<JSObject> InstantiateObject(Isolate* isolate, @@ -448,6 +448,9 @@ MaybeHandle<JSObject> InstantiateObject(Isolate* isolate,
@ -122,28 +122,28 @@ index aadb9ffb71..279c2f35ed 100644
// Keep prototypes in slow-mode. Let them be lazily turned fast later on. // Keep prototypes in slow-mode. Let them be lazily turned fast later on.
// TODO(dcarney): is this necessary? // TODO(dcarney): is this necessary?
diff --git a/src/api/api.cc b/src/api/api.cc diff --git a/src/api/api.cc b/src/api/api.cc
index a510fe68e6..0e94b2fa93 100644 index f6505e6820b..00a0a06575e 100644
--- a/src/api/api.cc --- a/src/api/api.cc
+++ b/src/api/api.cc +++ b/src/api/api.cc
@@ -2110,6 +2110,17 @@ void ObjectTemplate::SetImmutableProto() { @@ -1921,6 +1921,17 @@ void ObjectTemplate::SetImmutableProto() {
self->set_immutable_proto(true); self->set_immutable_proto(true);
} }
+bool ObjectTemplate::IsHostDelegate() const { +bool ObjectTemplate::IsHostDelegate() const {
+ return Utils::OpenHandle(this)->host_delegate(); + return Utils::OpenDirectHandle(this)->host_delegate();
+} +}
+ +
+void ObjectTemplate::SetHostDelegate() { +void ObjectTemplate::SetHostDelegate() {
+ auto self = Utils::OpenHandle(this); + auto self = Utils::OpenDirectHandle(this);
+ i::Isolate* isolate = self->GetIsolate(); + i::Isolate* isolate = self->GetIsolate();
+ ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate); + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
+ self->set_host_delegate(true); + self->set_host_delegate(true);
+} +}
+ +
bool ObjectTemplate::IsCodeLike() const { bool ObjectTemplate::IsCodeLike() const {
return Utils::OpenHandle(this)->code_like(); return Utils::OpenDirectHandle(this)->code_like();
} }
@@ -6573,6 +6584,10 @@ bool v8::V8::InitializeICU(const char* icu_data_file) { @@ -6454,6 +6465,10 @@ bool v8::V8::InitializeICU(const char* icu_data_file) {
return i::InitializeICU(icu_data_file); return i::InitializeICU(icu_data_file);
} }
@ -155,10 +155,10 @@ index a510fe68e6..0e94b2fa93 100644
const char* icu_data_file) { const char* icu_data_file) {
return i::InitializeICUDefaultLocation(exec_path, icu_data_file); return i::InitializeICUDefaultLocation(exec_path, icu_data_file);
diff --git a/src/ast/ast.cc b/src/ast/ast.cc diff --git a/src/ast/ast.cc b/src/ast/ast.cc
index 34a26d9c26..f995a2fc64 100644 index 25a9bd3f82e..4e2ff80d108 100644
--- a/src/ast/ast.cc --- a/src/ast/ast.cc
+++ b/src/ast/ast.cc +++ b/src/ast/ast.cc
@@ -883,8 +883,11 @@ static bool MatchLiteralCompareTypeof(Expression* left, Token::Value op, @@ -886,8 +886,11 @@ static bool MatchLiteralCompareTypeof(Expression* left, Token::Value op,
return false; return false;
} }
@ -171,7 +171,7 @@ index 34a26d9c26..f995a2fc64 100644
MatchLiteralCompareTypeof(right_, op(), left_, expr, literal); MatchLiteralCompareTypeof(right_, op(), left_, expr, literal);
} }
diff --git a/src/base/build_config.h b/src/base/build_config.h diff --git a/src/base/build_config.h b/src/base/build_config.h
index 673330236c..30e752bc84 100644 index 673330236ce..30e752bc843 100644
--- a/src/base/build_config.h --- a/src/base/build_config.h
+++ b/src/base/build_config.h +++ b/src/base/build_config.h
@@ -36,7 +36,7 @@ @@ -36,7 +36,7 @@
@ -184,7 +184,7 @@ index 673330236c..30e752bc84 100644
#define V8_HAS_PKU_JIT_WRITE_PROTECT 0 #define V8_HAS_PKU_JIT_WRITE_PROTECT 0
#endif #endif
diff --git a/src/base/platform/platform.h b/src/base/platform/platform.h diff --git a/src/base/platform/platform.h b/src/base/platform/platform.h
index 27369a7a8d..fc58ac3d1d 100644 index 4ced4fdeddc..ca5ab82c54a 100644
--- a/src/base/platform/platform.h --- a/src/base/platform/platform.h
+++ b/src/base/platform/platform.h +++ b/src/base/platform/platform.h
@@ -52,6 +52,8 @@ @@ -52,6 +52,8 @@
@ -197,11 +197,11 @@ index 27369a7a8d..fc58ac3d1d 100644
#if V8_CC_MSVC && V8_HOST_ARCH_IA32 #if V8_CC_MSVC && V8_HOST_ARCH_IA32
// __readfsdword is supposed to be declared in intrin.h but it is missing from // __readfsdword is supposed to be declared in intrin.h but it is missing from
diff --git a/src/builtins/builtins-async-module.cc b/src/builtins/builtins-async-module.cc diff --git a/src/builtins/builtins-async-module.cc b/src/builtins/builtins-async-module.cc
index e1a2a71c42..9152368a0e 100644 index 9920f0b6dc1..61559e2d5fb 100644
--- a/src/builtins/builtins-async-module.cc --- a/src/builtins/builtins-async-module.cc
+++ b/src/builtins/builtins-async-module.cc +++ b/src/builtins/builtins-async-module.cc
@@ -15,7 +15,8 @@ BUILTIN(CallAsyncModuleFulfilled) { @@ -15,7 +15,8 @@ BUILTIN(CallAsyncModuleFulfilled) {
SourceTextModule::cast(isolate->context().get( SourceTextModule::cast(isolate->context()->get(
SourceTextModule::ExecuteAsyncModuleContextSlots::kModule)), SourceTextModule::ExecuteAsyncModuleContextSlots::kModule)),
isolate); isolate);
- if (SourceTextModule::AsyncModuleExecutionFulfilled(isolate, module) - if (SourceTextModule::AsyncModuleExecutionFulfilled(isolate, module)
@ -211,10 +211,10 @@ index e1a2a71c42..9152368a0e 100644
// The evaluation of async module can not throwing a JavaScript observable // The evaluation of async module can not throwing a JavaScript observable
// exception. // exception.
diff --git a/src/codegen/code-stub-assembler.cc b/src/codegen/code-stub-assembler.cc diff --git a/src/codegen/code-stub-assembler.cc b/src/codegen/code-stub-assembler.cc
index 012bf97622..013f83d963 100644 index 5edbe168532..2fd4cbad80c 100644
--- a/src/codegen/code-stub-assembler.cc --- a/src/codegen/code-stub-assembler.cc
+++ b/src/codegen/code-stub-assembler.cc +++ b/src/codegen/code-stub-assembler.cc
@@ -2062,6 +2062,10 @@ TNode<Uint32T> CodeStubAssembler::LoadMapBitField3(TNode<Map> map) { @@ -2126,6 +2126,10 @@ TNode<Uint32T> CodeStubAssembler::LoadMapBitField3(TNode<Map> map) {
return LoadObjectField<Uint32T>(map, Map::kBitField3Offset); return LoadObjectField<Uint32T>(map, Map::kBitField3Offset);
} }
@ -225,7 +225,7 @@ index 012bf97622..013f83d963 100644
TNode<Uint16T> CodeStubAssembler::LoadMapInstanceType(TNode<Map> map) { TNode<Uint16T> CodeStubAssembler::LoadMapInstanceType(TNode<Map> map) {
return LoadObjectField<Uint16T>(map, Map::kInstanceTypeOffset); return LoadObjectField<Uint16T>(map, Map::kInstanceTypeOffset);
} }
@@ -14552,6 +14556,11 @@ TNode<String> CodeStubAssembler::Typeof(TNode<Object> value) { @@ -14732,6 +14736,11 @@ TNode<String> CodeStubAssembler::Typeof(TNode<Object> value) {
GotoIf(InstanceTypeEqual(instance_type, ODDBALL_TYPE), &if_oddball); GotoIf(InstanceTypeEqual(instance_type, ODDBALL_TYPE), &if_oddball);
@ -238,10 +238,10 @@ index 012bf97622..013f83d963 100644
Word32And(LoadMapBitField(map), Word32And(LoadMapBitField(map),
Int32Constant(Map::Bits1::IsCallableBit::kMask | Int32Constant(Map::Bits1::IsCallableBit::kMask |
diff --git a/src/codegen/code-stub-assembler.h b/src/codegen/code-stub-assembler.h diff --git a/src/codegen/code-stub-assembler.h b/src/codegen/code-stub-assembler.h
index 4e6d3c0dfa..c5aa9da763 100644 index 24def3b60b9..169e3b1a19f 100644
--- a/src/codegen/code-stub-assembler.h --- a/src/codegen/code-stub-assembler.h
+++ b/src/codegen/code-stub-assembler.h +++ b/src/codegen/code-stub-assembler.h
@@ -1419,6 +1419,8 @@ class V8_EXPORT_PRIVATE CodeStubAssembler @@ -1491,6 +1491,8 @@ class V8_EXPORT_PRIVATE CodeStubAssembler
TNode<Int32T> LoadMapBitField2(TNode<Map> map); TNode<Int32T> LoadMapBitField2(TNode<Map> map);
// Load bit field 3 of a map. // Load bit field 3 of a map.
TNode<Uint32T> LoadMapBitField3(TNode<Map> map); TNode<Uint32T> LoadMapBitField3(TNode<Map> map);
@ -251,11 +251,11 @@ index 4e6d3c0dfa..c5aa9da763 100644
TNode<Uint16T> LoadMapInstanceType(TNode<Map> map); TNode<Uint16T> LoadMapInstanceType(TNode<Map> map);
// Load the ElementsKind of a map. // Load the ElementsKind of a map.
diff --git a/src/common/code-memory-access-inl.h b/src/common/code-memory-access-inl.h diff --git a/src/common/code-memory-access-inl.h b/src/common/code-memory-access-inl.h
index 4b8ac2e5c7..cd39ac8203 100644 index e357648966e..c37396eff65 100644
--- a/src/common/code-memory-access-inl.h --- a/src/common/code-memory-access-inl.h
+++ b/src/common/code-memory-access-inl.h +++ b/src/common/code-memory-access-inl.h
@@ -29,31 +29,92 @@ RwxMemoryWriteScope::~RwxMemoryWriteScope() { @@ -97,31 +97,92 @@ void ThreadIsolation::WritableJitAllocation::ClearBytes(size_t offset,
} memset(reinterpret_cast<void*>(address_ + offset), 0, len);
} }
-#if V8_HAS_PTHREAD_JIT_WRITE_PROTECT -#if V8_HAS_PTHREAD_JIT_WRITE_PROTECT
@ -313,7 +313,7 @@ index 4b8ac2e5c7..cd39ac8203 100644
} }
} }
+#else // !V8_HAS_PTHREAD_JIT_WRITE_PROTECT && !V8_TRY_USE_PKU_JIT_WRITE_PROTECT +#else // !V8_HAS_PTHREAD_JIT_WRITE_PROTECT && !V8_HAS_PKU_JIT_WRITE_PROTECT
+ +
+// static +// static
+int RwxMemoryWriteScope::EnterHostScope() { return 0; } +int RwxMemoryWriteScope::EnterHostScope() { return 0; }
@ -352,7 +352,7 @@ index 4b8ac2e5c7..cd39ac8203 100644
// static // static
bool RwxMemoryWriteScope::IsSupported() { bool RwxMemoryWriteScope::IsSupported() {
static_assert(base::MemoryProtectionKey::kNoMemoryProtectionKey == -1); static_assert(base::MemoryProtectionKey::kNoMemoryProtectionKey == -1);
@@ -72,31 +133,23 @@ bool RwxMemoryWriteScope::IsSupportedUntrusted() { @@ -140,31 +201,23 @@ bool RwxMemoryWriteScope::IsSupportedUntrusted() {
} }
// static // static
@ -386,7 +386,7 @@ index 4b8ac2e5c7..cd39ac8203 100644
} }
#else // !V8_HAS_PTHREAD_JIT_WRITE_PROTECT && !V8_TRY_USE_PKU_JIT_WRITE_PROTECT #else // !V8_HAS_PTHREAD_JIT_WRITE_PROTECT && !V8_TRY_USE_PKU_JIT_WRITE_PROTECT
@@ -108,10 +161,10 @@ bool RwxMemoryWriteScope::IsSupported() { return false; } @@ -176,10 +229,10 @@ bool RwxMemoryWriteScope::IsSupported() { return false; }
bool RwxMemoryWriteScope::IsSupportedUntrusted() { return false; } bool RwxMemoryWriteScope::IsSupportedUntrusted() { return false; }
// static // static
@ -400,7 +400,7 @@ index 4b8ac2e5c7..cd39ac8203 100644
#endif // V8_HAS_PTHREAD_JIT_WRITE_PROTECT #endif // V8_HAS_PTHREAD_JIT_WRITE_PROTECT
diff --git a/src/common/code-memory-access.cc b/src/common/code-memory-access.cc diff --git a/src/common/code-memory-access.cc b/src/common/code-memory-access.cc
index be3b9741d2..3a533926da 100644 index 34ee8c78ca5..f6c4537f562 100644
--- a/src/common/code-memory-access.cc --- a/src/common/code-memory-access.cc
+++ b/src/common/code-memory-access.cc +++ b/src/common/code-memory-access.cc
@@ -2,10 +2,22 @@ @@ -2,10 +2,22 @@
@ -435,10 +435,10 @@ index be3b9741d2..3a533926da 100644
#if V8_HAS_PKU_JIT_WRITE_PROTECT #if V8_HAS_PKU_JIT_WRITE_PROTECT
diff --git a/src/common/code-memory-access.h b/src/common/code-memory-access.h diff --git a/src/common/code-memory-access.h b/src/common/code-memory-access.h
index e90dcc9a64..78411014b2 100644 index c44982d2256..b90eec27f46 100644
--- a/src/common/code-memory-access.h --- a/src/common/code-memory-access.h
+++ b/src/common/code-memory-access.h +++ b/src/common/code-memory-access.h
@@ -314,6 +314,9 @@ class V8_NODISCARD RwxMemoryWriteScope { @@ -122,6 +122,9 @@ class V8_NODISCARD RwxMemoryWriteScope {
static V8_EXPORT void SetDefaultPermissionsForSignalHandler(); static V8_EXPORT void SetDefaultPermissionsForSignalHandler();
#endif // V8_HAS_PKU_JIT_WRITE_PROTECT #endif // V8_HAS_PKU_JIT_WRITE_PROTECT
@ -448,7 +448,7 @@ index e90dcc9a64..78411014b2 100644
private: private:
friend class CodePageMemoryModificationScope; friend class CodePageMemoryModificationScope;
friend class RwxMemoryWriteScopeForTesting; friend class RwxMemoryWriteScopeForTesting;
@@ -325,9 +328,13 @@ class V8_NODISCARD RwxMemoryWriteScope { @@ -133,9 +136,13 @@ class V8_NODISCARD RwxMemoryWriteScope {
V8_INLINE static void SetWritable(); V8_INLINE static void SetWritable();
V8_INLINE static void SetExecutable(); V8_INLINE static void SetExecutable();
@ -463,7 +463,7 @@ index e90dcc9a64..78411014b2 100644
}; };
diff --git a/src/diagnostics/unwinding-info-win64.cc b/src/diagnostics/unwinding-info-win64.cc diff --git a/src/diagnostics/unwinding-info-win64.cc b/src/diagnostics/unwinding-info-win64.cc
index a71b866135..4f1d26676c 100644 index a71b866135b..4f1d26676c2 100644
--- a/src/diagnostics/unwinding-info-win64.cc --- a/src/diagnostics/unwinding-info-win64.cc
+++ b/src/diagnostics/unwinding-info-win64.cc +++ b/src/diagnostics/unwinding-info-win64.cc
@@ -462,6 +462,14 @@ void InitUnwindingRecord(Record* record, size_t code_size_in_bytes) { @@ -462,6 +462,14 @@ void InitUnwindingRecord(Record* record, size_t code_size_in_bytes) {
@ -542,7 +542,7 @@ index a71b866135..4f1d26676c 100644
// Unprotect reserved page. // Unprotect reserved page.
DWORD old_protect; DWORD old_protect;
diff --git a/src/execution/isolate-inl.h b/src/execution/isolate-inl.h diff --git a/src/execution/isolate-inl.h b/src/execution/isolate-inl.h
index 8edeb5dfb8..9189c32794 100644 index d956e5f088c..f882ef02606 100644
--- a/src/execution/isolate-inl.h --- a/src/execution/isolate-inl.h
+++ b/src/execution/isolate-inl.h +++ b/src/execution/isolate-inl.h
@@ -35,7 +35,6 @@ V8_INLINE Isolate* Isolate::TryGetCurrent() { return g_current_isolate_; } @@ -35,7 +35,6 @@ V8_INLINE Isolate* Isolate::TryGetCurrent() { return g_current_isolate_; }
@ -554,10 +554,10 @@ index 8edeb5dfb8..9189c32794 100644
} }
diff --git a/src/execution/stack-guard.cc b/src/execution/stack-guard.cc diff --git a/src/execution/stack-guard.cc b/src/execution/stack-guard.cc
index efa6a6f0c4..d266dff4f5 100644 index 563916a4e96..954e9eb242e 100644
--- a/src/execution/stack-guard.cc --- a/src/execution/stack-guard.cc
+++ b/src/execution/stack-guard.cc +++ b/src/execution/stack-guard.cc
@@ -209,8 +209,10 @@ void StackGuard::FreeThreadResources() { @@ -232,8 +232,10 @@ void StackGuard::FreeThreadResources() {
void StackGuard::ThreadLocal::Initialize(Isolate* isolate, void StackGuard::ThreadLocal::Initialize(Isolate* isolate,
const ExecutionAccess& lock) { const ExecutionAccess& lock) {
const uintptr_t kLimitSize = v8_flags.stack_size * KB; const uintptr_t kLimitSize = v8_flags.stack_size * KB;
@ -570,31 +570,31 @@ index efa6a6f0c4..d266dff4f5 100644
set_jslimit(SimulatorStack::JsLimitFromCLimit(isolate, limit)); set_jslimit(SimulatorStack::JsLimitFromCLimit(isolate, limit));
real_climit_ = limit; real_climit_ = limit;
diff --git a/src/heap/factory.cc b/src/heap/factory.cc diff --git a/src/heap/factory.cc b/src/heap/factory.cc
index 10c184779e..189974f664 100644 index 462a3944e14..ab9ea0f0d3b 100644
--- a/src/heap/factory.cc --- a/src/heap/factory.cc
+++ b/src/heap/factory.cc +++ b/src/heap/factory.cc
@@ -2105,6 +2105,7 @@ Map Factory::InitializeMap(Map map, InstanceType type, int instance_size, @@ -2111,6 +2111,7 @@ Tagged<Map> Factory::InitializeMap(Tagged<Map> map, InstanceType type,
Map::Bits3::ConstructionCounterBits::encode(Map::kNoSlackTracking) | Map::Bits3::ConstructionCounterBits::encode(Map::kNoSlackTracking) |
Map::Bits3::IsExtensibleBit::encode(true); Map::Bits3::IsExtensibleBit::encode(true);
map.set_bit_field3(bit_field3); map->set_bit_field3(bit_field3);
+ map.set_host_bit_field(0); + map->set_host_bit_field(0);
map.set_instance_type(type); map->set_instance_type(type);
ReadOnlyRoots ro_roots(roots); ReadOnlyRoots ro_roots(roots);
map.init_prototype_and_constructor_or_back_pointer(ro_roots); map->init_prototype_and_constructor_or_back_pointer(ro_roots);
diff --git a/src/heap/setup-heap-internal.cc b/src/heap/setup-heap-internal.cc diff --git a/src/heap/setup-heap-internal.cc b/src/heap/setup-heap-internal.cc
index de292a6ca8..c1d3b483f5 100644 index 9f51a70c46c..fb2a712c56c 100644
--- a/src/heap/setup-heap-internal.cc --- a/src/heap/setup-heap-internal.cc
+++ b/src/heap/setup-heap-internal.cc +++ b/src/heap/setup-heap-internal.cc
@@ -302,6 +302,7 @@ AllocationResult Heap::AllocatePartialMap(InstanceType instance_type, @@ -298,6 +298,7 @@ AllocationResult Heap::AllocatePartialMap(InstanceType instance_type,
Map::Bits3::OwnsDescriptorsBit::encode(true) | Map::Bits3::OwnsDescriptorsBit::encode(true) |
Map::Bits3::ConstructionCounterBits::encode(Map::kNoSlackTracking); Map::Bits3::ConstructionCounterBits::encode(Map::kNoSlackTracking);
map.set_bit_field3(bit_field3); map->set_bit_field3(bit_field3);
+ map.set_host_bit_field(0); + map->set_host_bit_field(0);
DCHECK(!map.is_in_retained_map_list()); DCHECK(!map->is_in_retained_map_list());
map.clear_padding(); map->clear_padding();
map.set_elements_kind(TERMINAL_FAST_ELEMENTS_KIND); map->set_elements_kind(TERMINAL_FAST_ELEMENTS_KIND);
diff --git a/src/init/icu_util.cc b/src/init/icu_util.cc diff --git a/src/init/icu_util.cc b/src/init/icu_util.cc
index 67d349557c..49ffb52386 100644 index 67d349557c6..49ffb52386b 100644
--- a/src/init/icu_util.cc --- a/src/init/icu_util.cc
+++ b/src/init/icu_util.cc +++ b/src/init/icu_util.cc
@@ -98,6 +98,26 @@ bool InitializeICU(const char* icu_data_file) { @@ -98,6 +98,26 @@ bool InitializeICU(const char* icu_data_file) {
@ -625,7 +625,7 @@ index 67d349557c..49ffb52386 100644
#undef ICU_UTIL_DATA_STATIC #undef ICU_UTIL_DATA_STATIC
diff --git a/src/init/icu_util.h b/src/init/icu_util.h diff --git a/src/init/icu_util.h b/src/init/icu_util.h
index e127e75f10..b0e4bd2d68 100644 index e127e75f10f..b0e4bd2d68e 100644
--- a/src/init/icu_util.h --- a/src/init/icu_util.h
+++ b/src/init/icu_util.h +++ b/src/init/icu_util.h
@@ -5,6 +5,8 @@ @@ -5,6 +5,8 @@
@ -646,7 +646,7 @@ index e127e75f10..b0e4bd2d68 100644
// Like above, but using the default icudt[lb].dat location if icu_data_file is // Like above, but using the default icudt[lb].dat location if icu_data_file is
// not specified. // not specified.
diff --git a/src/init/v8.cc b/src/init/v8.cc diff --git a/src/init/v8.cc b/src/init/v8.cc
index 71b811a107..64c43485ea 100644 index 7200df07078..d98d23f708d 100644
--- a/src/init/v8.cc --- a/src/init/v8.cc
+++ b/src/init/v8.cc +++ b/src/init/v8.cc
@@ -95,7 +95,6 @@ V8_DECLARE_ONCE(init_snapshot_once); @@ -95,7 +95,6 @@ V8_DECLARE_ONCE(init_snapshot_once);
@ -658,10 +658,10 @@ index 71b811a107..64c43485ea 100644
platform_ = platform; platform_ = platform;
v8::base::SetPrintStackTrace(platform_->GetStackTracePrinter()); v8::base::SetPrintStackTrace(platform_->GetStackTracePrinter());
diff --git a/src/libplatform/default-platform.cc b/src/libplatform/default-platform.cc diff --git a/src/libplatform/default-platform.cc b/src/libplatform/default-platform.cc
index b1617b5f9a..0452721beb 100644 index 958aa0b9841..1f48b84928b 100644
--- a/src/libplatform/default-platform.cc --- a/src/libplatform/default-platform.cc
+++ b/src/libplatform/default-platform.cc +++ b/src/libplatform/default-platform.cc
@@ -55,6 +55,10 @@ std::unique_ptr<v8::Platform> NewDefaultPlatform( @@ -57,6 +57,10 @@ std::unique_ptr<v8::Platform> NewDefaultPlatform(
return platform; return platform;
} }
@ -673,10 +673,10 @@ index b1617b5f9a..0452721beb 100644
IdleTaskSupport idle_task_support, IdleTaskSupport idle_task_support,
InProcessStackDumping in_process_stack_dumping, InProcessStackDumping in_process_stack_dumping,
diff --git a/src/objects/js-objects.cc b/src/objects/js-objects.cc diff --git a/src/objects/js-objects.cc b/src/objects/js-objects.cc
index b2a0e553a0..a774ea3c24 100644 index 6094323ee09..c1d645c631d 100644
--- a/src/objects/js-objects.cc --- a/src/objects/js-objects.cc
+++ b/src/objects/js-objects.cc +++ b/src/objects/js-objects.cc
@@ -5301,6 +5301,13 @@ void JSObject::SetImmutableProto(Handle<JSObject> object) { @@ -5329,6 +5329,13 @@ void JSObject::SetImmutableProto(Handle<JSObject> object) {
object->set_map(*new_map, kReleaseStore); object->set_map(*new_map, kReleaseStore);
} }
@ -691,10 +691,10 @@ index b2a0e553a0..a774ea3c24 100644
JavaScriptArguments* args, JavaScriptArguments* args,
uint32_t arg_count, uint32_t arg_count,
diff --git a/src/objects/js-objects.h b/src/objects/js-objects.h diff --git a/src/objects/js-objects.h b/src/objects/js-objects.h
index 4b79f67fd3..27e4636e58 100644 index 82d367affe3..911b4036f85 100644
--- a/src/objects/js-objects.h --- a/src/objects/js-objects.h
+++ b/src/objects/js-objects.h +++ b/src/objects/js-objects.h
@@ -748,6 +748,8 @@ class JSObject : public TorqueGeneratedJSObject<JSObject, JSReceiver> { @@ -763,6 +763,8 @@ class JSObject : public TorqueGeneratedJSObject<JSObject, JSReceiver> {
// Never called from JavaScript // Never called from JavaScript
static void SetImmutableProto(Handle<JSObject> object); static void SetImmutableProto(Handle<JSObject> object);
@ -704,32 +704,32 @@ index 4b79f67fd3..27e4636e58 100644
// the caller to initialize object header. Fill the pre-allocated fields with // the caller to initialize object header. Fill the pre-allocated fields with
// undefined_value and the rest with filler_map. // undefined_value and the rest with filler_map.
diff --git a/src/objects/map-inl.h b/src/objects/map-inl.h diff --git a/src/objects/map-inl.h b/src/objects/map-inl.h
index 7eb247eacf..844adc05ff 100644 index 4856ecb7a8d..5a148dd3859 100644
--- a/src/objects/map-inl.h --- a/src/objects/map-inl.h
+++ b/src/objects/map-inl.h +++ b/src/objects/map-inl.h
@@ -126,6 +126,9 @@ BIT_FIELD_ACCESSORS(Map, bit_field3, may_have_interesting_properties, @@ -128,6 +128,9 @@ BIT_FIELD_ACCESSORS(Map, bit_field3, may_have_interesting_properties,
BIT_FIELD_ACCESSORS(Map, relaxed_bit_field3, construction_counter, BIT_FIELD_ACCESSORS(Map, relaxed_bit_field3, construction_counter,
Map::Bits3::ConstructionCounterBits) Map::Bits3::ConstructionCounterBits)
+// |host_bit_field| fields. +// |host_bit_field| fields.
+BIT_FIELD_ACCESSORS(Map, host_bit_field, is_host_delegate, Map::HostBits::IsHostDelegateBit) +BIT_FIELD_ACCESSORS(Map, host_bit_field, is_host_delegate, Map::HostBits::IsHostDelegateBit)
+ +
DEF_GETTER(Map, GetNamedInterceptor, InterceptorInfo) { DEF_GETTER(Map, GetNamedInterceptor, Tagged<InterceptorInfo>) {
DCHECK(has_named_interceptor()); DCHECK(has_named_interceptor());
FunctionTemplateInfo info = GetFunctionTemplateInfo(cage_base); Tagged<FunctionTemplateInfo> info = GetFunctionTemplateInfo(cage_base);
diff --git a/src/objects/map.cc b/src/objects/map.cc diff --git a/src/objects/map.cc b/src/objects/map.cc
index 5582485fd0..cded5cbee0 100644 index 798c9c59535..975f264363e 100644
--- a/src/objects/map.cc --- a/src/objects/map.cc
+++ b/src/objects/map.cc +++ b/src/objects/map.cc
@@ -1177,6 +1177,7 @@ Handle<Map> Map::RawCopy(Isolate* isolate, Handle<Map> src_handle, @@ -1190,6 +1190,7 @@ Handle<Map> Map::RawCopy(Isolate* isolate, Handle<Map> src_handle,
} }
// Same as bit_field comment above. // Same as bit_field comment above.
raw.set_bit_field3(new_bit_field3); raw->set_bit_field3(new_bit_field3);
+ raw.set_host_bit_field(src.host_bit_field()); + raw->set_host_bit_field(src->host_bit_field());
raw.clear_padding(); raw->clear_padding();
} }
Handle<HeapObject> prototype(src_handle->prototype(), isolate); Handle<HeapObject> prototype(src_handle->prototype(), isolate);
@@ -1303,6 +1304,12 @@ Handle<Map> Map::TransitionToImmutableProto(Isolate* isolate, Handle<Map> map) { @@ -1316,6 +1317,12 @@ Handle<Map> Map::TransitionToImmutableProto(Isolate* isolate, Handle<Map> map) {
return new_map; return new_map;
} }
@ -743,10 +743,10 @@ index 5582485fd0..cded5cbee0 100644
void EnsureInitialMap(Isolate* isolate, Handle<Map> map) { void EnsureInitialMap(Isolate* isolate, Handle<Map> map) {
#ifdef DEBUG #ifdef DEBUG
diff --git a/src/objects/map.h b/src/objects/map.h diff --git a/src/objects/map.h b/src/objects/map.h
index af5e9ae236..30a27cab82 100644 index 2853bdc738f..88ce6b166db 100644
--- a/src/objects/map.h --- a/src/objects/map.h
+++ b/src/objects/map.h +++ b/src/objects/map.h
@@ -324,6 +324,11 @@ class Map : public TorqueGeneratedMap<Map, HeapObject> { @@ -327,6 +327,11 @@ class Map : public TorqueGeneratedMap<Map, HeapObject> {
static_assert(kSlackTrackingCounterStart <= static_assert(kSlackTrackingCounterStart <=
Bits3::ConstructionCounterBits::kMax); Bits3::ConstructionCounterBits::kMax);
@ -758,7 +758,7 @@ index af5e9ae236..30a27cab82 100644
// Inobject slack tracking is the way to reclaim unused inobject space. // Inobject slack tracking is the way to reclaim unused inobject space.
// //
// The instance size is initially determined by adding some slack to // The instance size is initially determined by adding some slack to
@@ -686,6 +691,8 @@ class Map : public TorqueGeneratedMap<Map, HeapObject> { @@ -692,6 +697,8 @@ class Map : public TorqueGeneratedMap<Map, HeapObject> {
DECL_BOOLEAN_ACCESSORS(is_immutable_proto) DECL_BOOLEAN_ACCESSORS(is_immutable_proto)
@ -767,7 +767,7 @@ index af5e9ae236..30a27cab82 100644
// This counter is used for in-object slack tracking. // This counter is used for in-object slack tracking.
// The in-object slack tracking is considered enabled when the counter is // The in-object slack tracking is considered enabled when the counter is
// non zero. The counter only has a valid count for initial maps. For // non zero. The counter only has a valid count for initial maps. For
@@ -868,6 +875,8 @@ class Map : public TorqueGeneratedMap<Map, HeapObject> { @@ -869,6 +876,8 @@ class Map : public TorqueGeneratedMap<Map, HeapObject> {
static Handle<Map> TransitionToImmutableProto(Isolate* isolate, static Handle<Map> TransitionToImmutableProto(Isolate* isolate,
Handle<Map> map); Handle<Map> map);
@ -777,7 +777,7 @@ index af5e9ae236..30a27cab82 100644
static_assert(kInstanceTypeOffset == Internals::kMapInstanceTypeOffset); static_assert(kInstanceTypeOffset == Internals::kMapInstanceTypeOffset);
diff --git a/src/objects/map.tq b/src/objects/map.tq diff --git a/src/objects/map.tq b/src/objects/map.tq
index 590fac8d96..dcadae3285 100644 index 590fac8d969..dcadae3285c 100644
--- a/src/objects/map.tq --- a/src/objects/map.tq
+++ b/src/objects/map.tq +++ b/src/objects/map.tq
@@ -34,6 +34,10 @@ bitfield struct MapBitFields3 extends uint32 { @@ -34,6 +34,10 @@ bitfield struct MapBitFields3 extends uint32 {
@ -803,27 +803,28 @@ index 590fac8d96..dcadae3285 100644
prototype: JSReceiver|Null; prototype: JSReceiver|Null;
constructor_or_back_pointer_or_native_context: Object; constructor_or_back_pointer_or_native_context: Object;
diff --git a/src/objects/objects.cc b/src/objects/objects.cc diff --git a/src/objects/objects.cc b/src/objects/objects.cc
index 5d6bd464c1..20ac4feed4 100644 index d55f192de84..a7c7f4937bf 100644
--- a/src/objects/objects.cc --- a/src/objects/objects.cc
+++ b/src/objects/objects.cc +++ b/src/objects/objects.cc
@@ -902,6 +902,12 @@ Handle<String> Object::TypeOf(Isolate* isolate, Handle<Object> object) { @@ -911,7 +911,12 @@ Handle<String> Object::TypeOf(Isolate* isolate, Handle<Object> object) {
if (object->IsString()) return isolate->factory()->string_string(); if (IsString(*object)) return isolate->factory()->string_string();
if (object->IsSymbol()) return isolate->factory()->symbol_string(); if (IsSymbol(*object)) return isolate->factory()->symbol_string();
if (object->IsBigInt()) return isolate->factory()->bigint_string(); if (IsBigInt(*object)) return isolate->factory()->bigint_string();
+ if (object->IsJSObject()) { - if (IsCallable(*object)) return isolate->factory()->function_string();
+ if (IsJSObject(*object)) {
+ Handle<JSObject> obj = Handle<JSObject>::cast(object); + Handle<JSObject> obj = Handle<JSObject>::cast(object);
+ if (obj->HasNamedInterceptor()) { + if (obj->HasNamedInterceptor()) {
+ return obj->map().is_host_delegate() ? isolate->factory()->function_string() : isolate->factory()->object_string(); + return obj->map()->is_host_delegate() ? isolate->factory()->function_string() : isolate->factory()->object_string();
+ } + }
+ } + } if (IsCallable(*object)) return isolate->factory()->function_string();
if (object->IsCallable()) return isolate->factory()->function_string();
return isolate->factory()->object_string(); return isolate->factory()->object_string();
} }
diff --git a/src/objects/source-text-module.cc b/src/objects/source-text-module.cc diff --git a/src/objects/source-text-module.cc b/src/objects/source-text-module.cc
index 8a9d2cff94..9c566709b8 100644 index 6d391b2bebc..d14dbc17f7e 100644
--- a/src/objects/source-text-module.cc --- a/src/objects/source-text-module.cc
+++ b/src/objects/source-text-module.cc +++ b/src/objects/source-text-module.cc
@@ -746,7 +746,7 @@ MaybeHandle<Object> SourceTextModule::Evaluate( @@ -747,7 +747,7 @@ MaybeHandle<Object> SourceTextModule::Evaluate(
if (!module->IsAsyncEvaluating()) { if (!module->IsAsyncEvaluating()) {
// i. Perform ! Call(capability.[[Resolve]], undefined, // i. Perform ! Call(capability.[[Resolve]], undefined,
// «undefined»). // «undefined»).
@ -832,7 +833,7 @@ index 8a9d2cff94..9c566709b8 100644
.ToHandleChecked(); .ToHandleChecked();
} }
@@ -759,7 +759,7 @@ MaybeHandle<Object> SourceTextModule::Evaluate( @@ -760,7 +760,7 @@ MaybeHandle<Object> SourceTextModule::Evaluate(
} }
Maybe<bool> SourceTextModule::AsyncModuleExecutionFulfilled( Maybe<bool> SourceTextModule::AsyncModuleExecutionFulfilled(
@ -841,7 +842,7 @@ index 8a9d2cff94..9c566709b8 100644
// 1. If module.[[Status]] is evaluated, then // 1. If module.[[Status]] is evaluated, then
if (module->status() == kErrored) { if (module->status() == kErrored) {
// a. Assert: module.[[EvaluationError]] is not empty. // a. Assert: module.[[EvaluationError]] is not empty.
@@ -783,7 +783,7 @@ Maybe<bool> SourceTextModule::AsyncModuleExecutionFulfilled( @@ -784,7 +784,7 @@ Maybe<bool> SourceTextModule::AsyncModuleExecutionFulfilled(
// «undefined»). // «undefined»).
Handle<JSPromise> capability( Handle<JSPromise> capability(
JSPromise::cast(module->top_level_capability()), isolate); JSPromise::cast(module->top_level_capability()), isolate);
@ -850,7 +851,7 @@ index 8a9d2cff94..9c566709b8 100644
.ToHandleChecked(); .ToHandleChecked();
} }
@@ -849,7 +849,7 @@ Maybe<bool> SourceTextModule::AsyncModuleExecutionFulfilled( @@ -850,7 +850,7 @@ Maybe<bool> SourceTextModule::AsyncModuleExecutionFulfilled(
// undefined, «undefined»). // undefined, «undefined»).
Handle<JSPromise> capability( Handle<JSPromise> capability(
JSPromise::cast(m->top_level_capability()), isolate); JSPromise::cast(m->top_level_capability()), isolate);
@ -860,7 +861,7 @@ index 8a9d2cff94..9c566709b8 100644
} }
} }
diff --git a/src/objects/source-text-module.h b/src/objects/source-text-module.h diff --git a/src/objects/source-text-module.h b/src/objects/source-text-module.h
index 05a1cef551..9b58cc8385 100644 index 55754c0a7d4..09cc31846d2 100644
--- a/src/objects/source-text-module.h --- a/src/objects/source-text-module.h
+++ b/src/objects/source-text-module.h +++ b/src/objects/source-text-module.h
@@ -58,7 +58,7 @@ class SourceTextModule @@ -58,7 +58,7 @@ class SourceTextModule
@ -873,10 +874,10 @@ index 05a1cef551..9b58cc8385 100644
Handle<SourceTextModule> module, Handle<SourceTextModule> module,
Handle<Object> exception); Handle<Object> exception);
diff --git a/src/objects/templates-inl.h b/src/objects/templates-inl.h diff --git a/src/objects/templates-inl.h b/src/objects/templates-inl.h
index 1455538b5e..0197c87a7c 100644 index afa42afc4e6..f8d5e7717cb 100644
--- a/src/objects/templates-inl.h --- a/src/objects/templates-inl.h
+++ b/src/objects/templates-inl.h +++ b/src/objects/templates-inl.h
@@ -180,6 +180,14 @@ void ObjectTemplateInfo::set_code_like(bool is_code_like) { @@ -184,6 +184,14 @@ void ObjectTemplateInfo::set_code_like(bool is_code_like) {
return set_data(IsCodeKindBit::update(data(), is_code_like)); return set_data(IsCodeKindBit::update(data(), is_code_like));
} }
@ -888,23 +889,23 @@ index 1455538b5e..0197c87a7c 100644
+ return set_data(IsHostDelegateBit::update(data(), value)); + return set_data(IsHostDelegateBit::update(data(), value));
+} +}
+ +
bool FunctionTemplateInfo::IsTemplateFor(JSObject object) { bool FunctionTemplateInfo::IsTemplateFor(Tagged<JSObject> object) const {
return IsTemplateFor(object.map()); return IsTemplateFor(object->map());
} }
diff --git a/src/objects/templates.h b/src/objects/templates.h diff --git a/src/objects/templates.h b/src/objects/templates.h
index d48beb9555..5e6a3a23af 100644 index 1683a7cb0bc..dd0c7ac149a 100644
--- a/src/objects/templates.h --- a/src/objects/templates.h
+++ b/src/objects/templates.h +++ b/src/objects/templates.h
@@ -206,6 +206,7 @@ class ObjectTemplateInfo @@ -207,6 +207,7 @@ class ObjectTemplateInfo
DECL_INT_ACCESSORS(embedder_field_count) DECL_INT_ACCESSORS(embedder_field_count)
DECL_BOOLEAN_ACCESSORS(immutable_proto) DECL_BOOLEAN_ACCESSORS(immutable_proto)
DECL_BOOLEAN_ACCESSORS(code_like) DECL_BOOLEAN_ACCESSORS(code_like)
+ DECL_BOOLEAN_ACCESSORS(host_delegate) + DECL_BOOLEAN_ACCESSORS(host_delegate)
// Dispatched behavior. // Starting from given object template's constructor walk up the inheritance
DECL_PRINTER(ObjectTemplateInfo) // chain till a function template that has an instance template is found.
diff --git a/src/objects/templates.tq b/src/objects/templates.tq diff --git a/src/objects/templates.tq b/src/objects/templates.tq
index fec43b195e..17a121316c 100644 index fec43b195e7..17a121316c7 100644
--- a/src/objects/templates.tq --- a/src/objects/templates.tq
+++ b/src/objects/templates.tq +++ b/src/objects/templates.tq
@@ -71,7 +71,8 @@ extern class FunctionTemplateInfo extends TemplateInfo { @@ -71,7 +71,8 @@ extern class FunctionTemplateInfo extends TemplateInfo {

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

@ -1,8 +1,9 @@
@echo off @echo off
setlocal setlocal
set v8testedrev=11.6.189.18 set v8testedrev=11.8.172.15
set v8testedcommit= set v8testedcommit=
set v8cherrypicks=28a7e2d45fd620fa68fb0678a7246fc8e426d1cc
if not "%v8testedcommit%"=="" goto ProcessArgs if not "%v8testedcommit%"=="" goto ProcessArgs
set v8testedcommit=%v8testedrev% set v8testedcommit=%v8testedrev%
@ -184,6 +185,10 @@ call git config user.name ClearScript
if errorlevel 1 goto Error if errorlevel 1 goto Error
call git config user.email "ClearScript@microsoft.com" call git config user.email "ClearScript@microsoft.com"
if errorlevel 1 goto Error if errorlevel 1 goto Error
if "%v8cherrypicks%"=="" goto ApplyV8Patch
call git cherry-pick --allow-empty-message --keep-redundant-commits %v8cherrypicks% >applyCherryPicks.log 2>&1
if errorlevel 1 goto Error
:ApplyV8Patch
call git apply --reject --ignore-whitespace ..\..\V8Patch.txt 2>applyV8Patch.log call git apply --reject --ignore-whitespace ..\..\V8Patch.txt 2>applyV8Patch.log
if errorlevel 1 goto Error if errorlevel 1 goto Error
cd .. cd ..

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

@ -1,5 +1,5 @@
<# <#
var version = new Version(7, 4, 3); var version = new Version(7, 4, 4);
var versionSuffix = string.Empty; var versionSuffix = string.Empty;
new Random(versionSuffix.Length); // suppress "versionSuffix not used" warning new Random(versionSuffix.Length); // suppress "versionSuffix not used" warning
#> #>

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

@ -1,13 +1,20 @@
GEM GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
activesupport (7.0.7.2) activesupport (7.1.0)
base64
bigdecimal
concurrent-ruby (~> 1.0, >= 1.0.2) concurrent-ruby (~> 1.0, >= 1.0.2)
connection_pool (>= 2.2.5)
drb
i18n (>= 1.6, < 2) i18n (>= 1.6, < 2)
minitest (>= 5.1) minitest (>= 5.1)
mutex_m
tzinfo (~> 2.0) tzinfo (~> 2.0)
addressable (2.8.5) addressable (2.8.5)
public_suffix (>= 2.0.2, < 6.0) public_suffix (>= 2.0.2, < 6.0)
base64 (0.1.1)
bigdecimal (3.1.4)
coffee-script (2.4.1) coffee-script (2.4.1)
coffee-script-source coffee-script-source
execjs execjs
@ -15,20 +22,24 @@ GEM
colorator (1.1.0) colorator (1.1.0)
commonmarker (0.23.10) commonmarker (0.23.10)
concurrent-ruby (1.2.2) concurrent-ruby (1.2.2)
connection_pool (2.4.1)
dnsruby (1.70.0) dnsruby (1.70.0)
simpleidn (~> 0.2.1) simpleidn (~> 0.2.1)
drb (2.1.1)
ruby2_keywords
em-websocket (0.5.3) em-websocket (0.5.3)
eventmachine (>= 0.12.9) eventmachine (>= 0.12.9)
http_parser.rb (~> 0) http_parser.rb (~> 0)
ethon (0.16.0) ethon (0.16.0)
ffi (>= 1.15.0) ffi (>= 1.15.0)
eventmachine (1.2.7) eventmachine (1.2.7)
execjs (2.8.1) execjs (2.9.1)
faraday (2.7.10) faraday (2.7.11)
base64
faraday-net_http (>= 2.0, < 3.1) faraday-net_http (>= 2.0, < 3.1)
ruby2_keywords (>= 0.0.4) ruby2_keywords (>= 0.0.4)
faraday-net_http (3.0.2) faraday-net_http (3.0.2)
ffi (1.15.5) ffi (1.16.3)
forwardable-extended (2.6.0) forwardable-extended (2.6.0)
gemoji (3.0.1) gemoji (3.0.1)
github-pages (228) github-pages (228)
@ -209,8 +220,9 @@ GEM
jekyll (>= 3.5, < 5.0) jekyll (>= 3.5, < 5.0)
jekyll-feed (~> 0.9) jekyll-feed (~> 0.9)
jekyll-seo-tag (~> 2.1) jekyll-seo-tag (~> 2.1)
minitest (5.19.0) minitest (5.20.0)
nokogiri (1.15.3-x86_64-linux) mutex_m (0.1.2)
nokogiri (1.15.4-x86_64-linux)
racc (~> 1.4) racc (~> 1.4)
octokit (4.25.1) octokit (4.25.1)
faraday (>= 1, < 3) faraday (>= 1, < 3)

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

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

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

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

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

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

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

@ -1 +1 @@
{"javascriptobjectflags":[34078721,47513606,56098820],"json":[3538946,24379396,25100291,28049409,29032449,37421058,39452678,55443458,57016322,57606146],"java":[3801089,16187393,16449537,17235969,17498113,17956865,18546689,19202049,19595265,20054017,20512769,20905985,34078721,38141953,55640065,56098817,56623105],"jscript":[5963777,6553601,28311553,28835842,29491202,30277634,31064066,31588353,32047107,32243714,33161218,34013186,34209798,34865154,36110339,36372482,36569094,37093378,44498945,49872897,53084161,55181319,55836673,56492033,57344002,59310083,59834375],"javascript":[2621441,2686977,2752513,3145729,3211265,3407873,3801089,7077889,7798785,7929857,8060929,8388609,8585217,8716289,8781825,9306113,9437186,9502721,9568257,9633793,9830401,9895937,10158081,10223617,10289153,10682369,10747905,10813441,10878977,10944513,11665409,11862017,11927553,12320769,12451841,12779521,12845057,13434881,15138818,15204353,15269890,15925250,16187394,16252930,16449538,16515074,16842754,16973826,17235970,17301506,17498114,17825794,17956866,18153474,18546690,18874370,19202050,19595266,19660802,20054018,20250626,20512770,20905986,34078731,35258371,35979265,36634625,36962307,38010883,38141953,38928387,39714817,45088770,45416451,45678594,46202882,46661633,46792706,47513603,47775747,47841281,48168963,48824322,49414146,49610755,50069505,50331650,52559877,52690945,53477377,53673989,53936129,54788102,55640068,56098819,56623107,56885252,56950785,57344004,57606150,59965445,60162052,60293125],"javascriptobjectkind":[34078721,48168966,56623108],"javascrip":[13959169,20643841,44302337,48234497,60358657],"javascriptextensions":[3801090,16187393,16449537,17235969,17498113,17956865,18546689,19202049,19595265,20054017,20512769,20905985,34078721,38141953,55640070],"jscriptengine":[5963778,6553602,28311554,28835845,29491205,30277637,31064069,31588354,32047109,32243717,33161221,34013189,34209798,34865157,36110341,36372481,36569094,37093377,44498946,49872898,53084162,55181323,56492034,59113473,59310082,59834379,60489729],"just":[58458114,59310081]} {"javascriptobjectflags":[42008577,55640070,56885252],"json":[3538946,21626884,22282243,24969217,29753345,38731778,41811974,55705602,57802754,58851330],"java":[3342337,16711681,18087937,19660801,20578305,20840449,21495809,22020097,22544385,22806529,23527425,24313857,41549825,42008577,56492033,56885249,57409537],"jscript":[5832705,6684673,29818882,30343170,30801921,31064066,31457282,31916034,32178178,32243714,32702466,32768002,32899075,33685506,34340865,34865155,38666246,42074118,44630017,50528257,50921473,54788097,55246849,56360962,59637763,60751879,61603847],"javascript":[2752513,2818049,2949121,3080193,3211265,3342337,3604481,7208961,7733249,7864321,8126466,8585217,8650753,8716289,9306113,9568257,9699329,9764865,9830401,10092545,10158081,10289153,10354689,10420225,10485761,10616833,10747905,10813441,10878977,11141121,11337729,11403265,11599873,11796481,12124161,12255233,12779521,13762561,13893633,15007746,15597570,15859714,16252930,16580610,16646146,16711682,17039362,17498114,17956866,18022402,18087938,18415618,19070978,19660802,19988482,20578306,20840450,21495810,22020098,22544386,22806530,23527426,24313858,31391747,36765699,37683203,38469635,38862849,39780353,40304641,41222147,41549825,41615361,41680899,42008587,42336258,42926082,43712514,44695553,50462723,51118082,51511299,51576833,51707905,52232194,52953090,53477377,53608453,54591490,54919169,55312390,55640067,56360964,56492036,56885251,57409539,57671684,58458113,58851334,60620805,60882948,61014021,61210629],"javascriptobjectkind":[41680902,42008577,57409540],"javascrip":[15663105,18808833,50003969,56426497,61145089],"javascriptextensions":[3342338,16711681,18087937,19660801,20578305,20840449,21495809,22020097,22544385,22806529,23527425,24313857,41549825,42008577,56492038],"jscriptengine":[5832706,6684674,29818885,30343173,30801922,31064069,31457285,31916037,32178181,32243713,32702469,32768001,32899077,33685509,34340866,34865157,38666246,42074118,44630018,50528258,50921474,54788098,59375617,59637762,60751883,61407233,61603851],"just":[59113474,59637761]}

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

@ -1 +1 @@
{"kind":[21823490,22740994,23789570,24248322,24510466,24576002,24838146,25165826,25493506,25559042,25821186,26083330,26148866,26607618,26673154,26935298,27066370,27131906,27394050,27721730,27918338,28573698,28704770,29163522,29229058,29294594,29425666,29753346,30474242,30539778,30670850,30801922,31457282,31653890,32309250,32833538,36962306,38010882,38928386,45416450,47775746,48168966,49610754,52559874,53673986,54788098,55967745,56623106,57606145,59965442,60162050,60293122],"keys":[40828929,41680897,42270722,42336263,57409537,58523650,58589185],"key":[2490372,16318470,17694727,18350086,20316166,41287686,42270721,47448065,58523653,59899905],"keyword":[13959169,20643841],"keyvaluepair":[2490374,42270722,58523664,58589192],"kinds":[34078721,56623105]} {"kind":[23986178,24182786,24707074,24903682,25034754,25952258,26148866,26542082,26673154,26738690,26935298,27131906,27394050,27590658,27656194,27787266,28049410,28180482,28377090,28442626,28639234,28770306,28901378,29229058,29294594,29491202,29884418,29949954,30146562,30212098,30408706,31195138,31522818,32505858,34471938,35454978,36765698,37683202,38469634,41222146,41680902,50462722,51511298,53608450,55312386,56688641,57409538,58851329,60620802,60882946,61014018,61210626],"keys":[40501249,43450369,44498945,45613063,45875202,57737217,58195969,58982402,59047937],"key":[3276804,16973830,17694726,18939911,19791878,44892166,45481985,45875201,58982405,60555265],"keyword":[15663105,18808833],"keyvaluepair":[3276806,45875202,58982416,59047944],"kinds":[42008577,57409537]}

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

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

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

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

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

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

@ -1 +1 @@
{"qux":[10747905],"qualified":[1703937,3604481,8060929,9437185,10289153,12845057,13041665,13303809,13631489,13828097,14155777,14286849,17629185,18415617,22806529,23920641,56688641,58064897]} {"qux":[11599873],"qualified":[1769473,3670017,8126465,9830401,10813441,12189697,13041665,13238273,13893633,14876673,15728641,17170433,17891329,19464193,20119553,21954561,57147393,58720257]}

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

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

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

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

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

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

@ -1 +1 @@
{"www":[15204353],"writeruntimeheapsnapshot":[7340033,29032452,56950785],"writeheapsnapshot":[4784129,28049412,59179009],"windowsscriptengineflags":[29491205,30736389,31064069,32047109,33030149,33161221,33947653,34209795,34799621,34865157,35323907,35586053,35848197,36110341,36372481,36569091,36831237,36896773,37355523,55181315,57802755,59310084,59834371,60424195],"windowsscriptengine":[5963782,6225926,6553606,6619142,8650754,9109512,31260673,31916033,32768001,34275330,34996225,35520513,35913729,36372481,36831236,36896772,37093377,44498948,46006276,47316994,49872901,51052549,52494342,54525953,55050241,55181329,55377921,55771137,56950785,57212929,57802769,59113494,59506689,59834383,60424207,60489736],"writes":[3538945,4784129,7340033,25100289,28049409,29032449,57016321,56950785,59179009],"written":[40697857,43253761,58720257],"webclient":[11862020],"writable":[16580609,17367041,18022401,20774913,38993922,58589186,58851329],"window":[4456449,30343169,47710210,55050241,56164354,60555266],"way":[9437185,13959169,20643841],"write":[3407873,10747905,16842757,17825793,19660801,25100290,28049410,29032450,54788097],"wrapnullresult":[8192002,44302337,48234497,49283073,54591489,60358657],"writeline":[8716289,8781825,11862019],"writer":[3538945,25100295,57016321],"widget":[8388609],"work":[58458114],"webclientt":[11862018],"waited":[56295425],"web":[11862018,37945345,54853633],"waiting":[7340033,25690113,56950785],"wrapping":[8192001,42729473,43384833,44302338,44498945,45023233,46006273,47316993,48234498,49872897,51052545,52494337,55181313,56950785,57802753,59113473,59375617,59506689,59834369,60424193,60489729],"writejson":[3538945,25100292,57016321],"wrapped":[50069505,52690945],"windows":[458753,589825,1376260,1441796,4456449,4915201,4980737,5963777,6225921,6488065,6553601,6619137,7143425,8650754,9109506,13959169,14680065,16187393,16449537,20512769,20643841,20905985,21364737,27525124,28311556,28835844,29491205,30081028,30277636,30343172,30736389,30867460,30932996,30998532,31064069,31260677,31391748,31588356,31784964,31916037,31981572,32047109,32243716,32374788,32440324,32505860,32636932,32768005,32964612,33030149,33161221,33423364,33882116,33947653,34013188,34209793,34275333,34668545,34734084,34799621,34865157,34996229,35323905,35520517,35586053,35848197,35913730,36110341,36372487,36569089,36831239,36896775,37093381,37355521,41943041,44498945,46006273,47316994,47710209,48431105,49872897,51052545,52494338,53084164,53739524,54525957,55050245,55181320,55377925,55771141,55836678,56164356,56229889,56295426,56492036,56819716,57212933,57344006,57802760,58982405,59113484,59310086,59506689,59834374,60030982,60424198,60489739,60555269,60620805],"writebytes":[2621441,2686977,2752513,3211265,3407873,17825796,19660804,53673985,54788097,59965441,60162049,60293121],"wait":[56295425,57606145],"weight":[8388609]} {"www":[8650753],"writeruntimeheapsnapshot":[6619137,29753348,58458113],"writeheapsnapshot":[5046273,24969220,59965441],"windowsscriptengineflags":[30343173,31719429,31916037,32178181,32243713,32899077,33030149,33357829,33685509,34209797,34865157,34930693,36110341,36438021,37093379,37289989,38666243,39452675,42074115,57933827,59637764,60751875,61341699,61603843],"windowsscriptengine":[5832710,6553606,6684678,6815750,9175042,10027016,31653889,32243713,32374785,32768001,33488898,34144257,35061761,36438020,36896769,37289988,37748737,38404102,44630020,46137348,47906818,50921477,51970049,52297733,52428801,53018625,53673985,55967745,57933841,58458113,59375638,60227585,60751887,61341711,61407240,61603857],"writes":[3538945,5046273,6619137,22282241,24969217,29753345,57802753,58458113,59965441],"written":[44302337,49020929,60030977],"webclient":[12779524],"writable":[4980737,5111809,5439489,5570561,17235969,17432577,18219009,19005441,33619970,42139650,57737218,59047938,59310081],"window":[4653057,37355521,48496642,52428801,54198274,61472770],"way":[8126465,15663105,18808833],"write":[3604481,11599873,15597569,17498113,19988485,22282242,24969218,29753346,55312385],"wrapnullresult":[8519682,40632321,45350913,50003969,56426497,61145089],"writeline":[7208961,10092545,12779523],"writer":[3538945,22282247,57802753],"widget":[11141121],"work":[59113474],"webclientt":[12779522],"waited":[56623105],"web":[12779522,39976961,54722561],"waiting":[6619137,29687809,58458113],"wrapping":[8519681,38404097,42401793,44433409,44630017,46137345,47120385,47906817,50003970,50921473,52297729,56426498,57933825,58458113,59375617,59899905,60227585,60751873,61341697,61407233,61603841],"writejson":[3538945,22282244,57802753],"wrapped":[51576833,53477377],"windows":[524289,917505,1376260,2359300,4653057,5177345,5832705,5898241,6422529,6553601,6684673,6815745,7274497,9175042,10027010,15663105,16056321,18087937,18808833,19660801,19726337,22544385,23527425,29818884,30343173,30736388,30801924,30932996,31064068,31457284,31588356,31653893,31719429,31784964,31916037,32112644,32178181,32243719,32309252,32374789,32440324,32702468,32768005,32833540,32899077,33030149,33357829,33488901,33554436,33685509,33816580,34013188,34144261,34209797,34340868,34734084,34865157,34930693,35061765,35520516,35717124,36110341,36175873,36438023,36700164,36896773,37093377,37289991,37355524,37748738,38404098,38666241,38993924,39452673,41484289,42074113,44630017,46137345,47906818,48496641,49283073,50528260,50921473,51249156,51970053,52297729,52428805,53018629,53673989,54198276,54788100,55246854,55574532,55967749,56360966,56623106,56754177,57933832,59375628,59637766,60096517,60227585,60751878,60948486,61341702,61407243,61472773,61538309,61603848],"writebytes":[2752513,2818049,2949121,3211265,3604481,15597572,17498116,53608449,55312385,60620801,60882945,61014017],"wait":[56623105,58851329],"weight":[11141121]}

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

@ -1 +1 @@
{"yields":[57606145],"young":[39256065,51118082,59441153],"yield":[7405569,8060929,9437185,12517377,13041665,13303809,13828097,14155777,14548993,15073281,15532033,16121857,17629185,18415617,19070977,19857409,20381697,21233665,22806529,23920641,24903681]} {"yields":[58851329],"young":[39518209,54132738,60293121],"yield":[7143425,8126465,9830401,13238273,13303809,13828097,13959169,14155777,14614529,14876673,15728641,17170433,17891329,18612225,18677761,19136513,19464193,20119553,21954561,22872065,23658497]}

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

@ -1 +1 @@
{"zero":[44040193,46858241,47382529,49741825,59637761]} {"zero":[44367873,45547521,47972353,53936129,60162049]}

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

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

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

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

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

@ -1,6 +1,6 @@
<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="Microsoft.Help.SelfBranded" content="true" /><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Locale" content="en-us" /><meta name="Microsoft.Help.TopicLocale" content="en-us" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"></script><title>PropertyBag.PropertyChanged Event</title><meta name="Title" content="PropertyChanged Event" /><meta name="Microsoft.Help.Id" content="E:Microsoft.ClearScript.PropertyBag.PropertyChanged" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="System.Keywords" content="PropertyBag.PropertyChanged event" /><meta name="System.Keywords" content="PropertyChanged event" /><meta name="Microsoft.Help.F1" content="Microsoft.ClearScript.PropertyBag.PropertyChanged" /><meta name="Microsoft.Help.F1" content="PropertyBag.PropertyChanged" /><meta name="Microsoft.Help.F1" content="PropertyChanged" /><meta name="container" content="Microsoft.ClearScript" /><meta name="file" content="E_Microsoft_ClearScript_PropertyBag_PropertyChanged" /><meta name="guid" content="E_Microsoft_ClearScript_PropertyBag_PropertyChanged" /><meta name="Description" content="Occurs when a property is added or replaced, or when the collection is cleared." /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-3.5.1.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script><script type="text/javascript" src="../scripts/clipboard.min.js"></script></head><body onload="SetDefaultLanguage('cs');"><input type="hidden" id="userDataCache" class="userDataStyle" /><div id="PageHeader" class="pageHeader">ClearScript Library<form id="SearchForm" method="get" action="#" onsubmit="TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library" tocid="roottoc">ClearScript Library</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library Reference" tocid="R_Project_Reference">ClearScript Library Reference</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/N_Microsoft_ClearScript.htm" title="Microsoft.ClearScript" tocid="N_Microsoft_ClearScript">Microsoft.ClearScript</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/T_Microsoft_ClearScript_PropertyBag.htm" title="PropertyBag Class" tocid="T_Microsoft_ClearScript_PropertyBag">PropertyBag Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/Events_T_Microsoft_ClearScript_PropertyBag.htm" title="PropertyBag Events" tocid="Events_T_Microsoft_ClearScript_PropertyBag">PropertyBag Events</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="../html/E_Microsoft_ClearScript_PropertyBag_PropertyChanged.htm" title="PropertyChanged Event" tocid="E_Microsoft_ClearScript_PropertyBag_PropertyChanged">PropertyChanged Event</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div id="TopicContent" class="topicContent"><table class="titleTable"><tr><td class="titleColumn"><h1>Property<wbr />Bag<span id="LSTB9514013_0" data-languageSpecificText="cpp=::|nu=."></span>Property<wbr />Changed Event</h1></td></tr></table><div class="summary"> <html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="Microsoft.Help.SelfBranded" content="true" /><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Locale" content="en-us" /><meta name="Microsoft.Help.TopicLocale" content="en-us" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"></script><title>PropertyBag.PropertyChanged Event</title><meta name="Title" content="PropertyChanged Event" /><meta name="Microsoft.Help.Id" content="E:Microsoft.ClearScript.PropertyBag.PropertyChanged" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="System.Keywords" content="PropertyBag.PropertyChanged event" /><meta name="System.Keywords" content="PropertyChanged event" /><meta name="Microsoft.Help.F1" content="Microsoft.ClearScript.PropertyBag.PropertyChanged" /><meta name="Microsoft.Help.F1" content="PropertyBag.PropertyChanged" /><meta name="Microsoft.Help.F1" content="PropertyChanged" /><meta name="container" content="Microsoft.ClearScript" /><meta name="file" content="E_Microsoft_ClearScript_PropertyBag_PropertyChanged" /><meta name="guid" content="E_Microsoft_ClearScript_PropertyBag_PropertyChanged" /><meta name="Description" content="Occurs when a property is added or replaced, or when the collection is cleared." /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-3.5.1.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script><script type="text/javascript" src="../scripts/clipboard.min.js"></script></head><body onload="SetDefaultLanguage('cs');"><input type="hidden" id="userDataCache" class="userDataStyle" /><div id="PageHeader" class="pageHeader">ClearScript Library<form id="SearchForm" method="get" action="#" onsubmit="TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library" tocid="roottoc">ClearScript Library</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library Reference" tocid="R_Project_Reference">ClearScript Library Reference</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/N_Microsoft_ClearScript.htm" title="Microsoft.ClearScript" tocid="N_Microsoft_ClearScript">Microsoft.ClearScript</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/T_Microsoft_ClearScript_PropertyBag.htm" title="PropertyBag Class" tocid="T_Microsoft_ClearScript_PropertyBag">PropertyBag Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/Events_T_Microsoft_ClearScript_PropertyBag.htm" title="PropertyBag Events" tocid="Events_T_Microsoft_ClearScript_PropertyBag">PropertyBag Events</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="../html/E_Microsoft_ClearScript_PropertyBag_PropertyChanged.htm" title="PropertyChanged Event" tocid="E_Microsoft_ClearScript_PropertyBag_PropertyChanged">PropertyChanged Event</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div id="TopicContent" class="topicContent"><table class="titleTable"><tr><td class="titleColumn"><h1>Property<wbr />Bag<span id="LSTB9514013_0" data-languageSpecificText="cpp=::|nu=."></span>Property<wbr />Changed Event</h1></td></tr></table><div class="summary">
Occurs when a property is added or replaced, or when the collection is cleared. Occurs when a property is added or replaced, or when the collection is cleared.
</div><br /><strong>Namespace:</strong> <a href="N_Microsoft_ClearScript.htm">Microsoft.ClearScript</a><br /><strong>Assembly:</strong> ClearScript.Core (in ClearScript.Core.dll) Version: 7.4.3<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('IDB')" onkeypress="SectionExpandCollapse_CheckKey('IDB', event)" tabindex="0"><img id="IDBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="IDBSection" class="collapsibleSection"><div id="IDAB" class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="IDAB_tab1" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cs','1','4');return false;">C#</a></div><div id="IDAB_tab2" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','vb','2','4');return false;">VB</a></div><div id="IDAB_tab3" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cpp','3','4');return false;">C++</a></div><div id="IDAB_tab4" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="IDAB_copyCode" href="#" class="copyCodeSnippet" onclick="CopyToClipboard('IDAB');return false;" title="Copy">Copy</a></div></div><div id="IDAB_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> event <span class="identifier">PropertyChangedEventHandler</span> <span class="identifier">PropertyChanged</span></pre></div><div id="IDAB_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> Event <span class="identifier">PropertyChanged</span> <span class="keyword">As</span> <span class="identifier">PropertyChangedEventHandler</span></pre></div><div id="IDAB_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>: </div><br /><strong>Namespace:</strong> <a href="N_Microsoft_ClearScript.htm">Microsoft.ClearScript</a><br /><strong>Assembly:</strong> ClearScript.Core (in ClearScript.Core.dll) Version: 7.4.4<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('IDB')" onkeypress="SectionExpandCollapse_CheckKey('IDB', event)" tabindex="0"><img id="IDBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="IDBSection" class="collapsibleSection"><div id="IDAB" class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="IDAB_tab1" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cs','1','4');return false;">C#</a></div><div id="IDAB_tab2" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','vb','2','4');return false;">VB</a></div><div id="IDAB_tab3" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cpp','3','4');return false;">C++</a></div><div id="IDAB_tab4" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="IDAB_copyCode" href="#" class="copyCodeSnippet" onclick="CopyToClipboard('IDAB');return false;" title="Copy">Copy</a></div></div><div id="IDAB_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> event <span class="identifier">PropertyChangedEventHandler</span> <span class="identifier">PropertyChanged</span></pre></div><div id="IDAB_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> Event <span class="identifier">PropertyChanged</span> <span class="keyword">As</span> <span class="identifier">PropertyChangedEventHandler</span></pre></div><div id="IDAB_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
<span class="keyword">virtual</span> <span class="keyword">event</span> <span class="identifier">PropertyChangedEventHandler</span>^ <span class="identifier">PropertyChanged</span> { <span class="keyword">virtual</span> <span class="keyword">event</span> <span class="identifier">PropertyChangedEventHandler</span>^ <span class="identifier">PropertyChanged</span> {
<span class="keyword">void</span> <span class="keyword">add</span> (<span class="identifier">PropertyChangedEventHandler</span>^ <span class="parameter">value</span>); <span class="keyword">void</span> <span class="keyword">add</span> (<span class="identifier">PropertyChangedEventHandler</span>^ <span class="parameter">value</span>);
<span class="keyword">void</span> <span class="keyword">remove</span> (<span class="identifier">PropertyChangedEventHandler</span>^ <span class="parameter">value</span>); <span class="keyword">void</span> <span class="keyword">remove</span> (<span class="identifier">PropertyChangedEventHandler</span>^ <span class="parameter">value</span>);

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

@ -1,6 +1,6 @@
<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="Microsoft.Help.SelfBranded" content="true" /><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Locale" content="en-us" /><meta name="Microsoft.Help.TopicLocale" content="en-us" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"></script><title>V8Runtime.DebuggerConnected Event</title><meta name="Title" content="DebuggerConnected Event" /><meta name="Microsoft.Help.Id" content="E:Microsoft.ClearScript.V8.V8Runtime.DebuggerConnected" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="System.Keywords" content="V8Runtime.DebuggerConnected event" /><meta name="System.Keywords" content="DebuggerConnected event" /><meta name="Microsoft.Help.F1" content="Microsoft.ClearScript.V8.V8Runtime.DebuggerConnected" /><meta name="Microsoft.Help.F1" content="V8Runtime.DebuggerConnected" /><meta name="Microsoft.Help.F1" content="DebuggerConnected" /><meta name="container" content="Microsoft.ClearScript.V8" /><meta name="file" content="E_Microsoft_ClearScript_V8_V8Runtime_DebuggerConnected" /><meta name="guid" content="E_Microsoft_ClearScript_V8_V8Runtime_DebuggerConnected" /><meta name="Description" content="Occurs when a debugger connects to a V8 runtime." /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-3.5.1.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script><script type="text/javascript" src="../scripts/clipboard.min.js"></script></head><body onload="SetDefaultLanguage('cs');"><input type="hidden" id="userDataCache" class="userDataStyle" /><div id="PageHeader" class="pageHeader">ClearScript Library<form id="SearchForm" method="get" action="#" onsubmit="TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library" tocid="roottoc">ClearScript Library</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library Reference" tocid="R_Project_Reference">ClearScript Library Reference</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/N_Microsoft_ClearScript_V8.htm" title="Microsoft.ClearScript.V8" tocid="N_Microsoft_ClearScript_V8">Microsoft.ClearScript.V8</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/T_Microsoft_ClearScript_V8_V8Runtime.htm" title="V8Runtime Class" tocid="T_Microsoft_ClearScript_V8_V8Runtime">V8Runtime Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/Events_T_Microsoft_ClearScript_V8_V8Runtime.htm" title="V8Runtime Events" tocid="Events_T_Microsoft_ClearScript_V8_V8Runtime">V8Runtime Events</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="../html/E_Microsoft_ClearScript_V8_V8Runtime_DebuggerConnected.htm" title="DebuggerConnected Event" tocid="E_Microsoft_ClearScript_V8_V8Runtime_DebuggerConnected">DebuggerConnected Event</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="../html/E_Microsoft_ClearScript_V8_V8Runtime_DebuggerDisconnected.htm" title="DebuggerDisconnected Event" tocid="E_Microsoft_ClearScript_V8_V8Runtime_DebuggerDisconnected">DebuggerDisconnected Event</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div id="TopicContent" class="topicContent"><table class="titleTable"><tr><td class="titleColumn"><h1>V8Runtime<span id="LSTC4DB887C_0" data-languageSpecificText="cpp=::|nu=."></span>Debugger<wbr />Connected Event</h1></td></tr></table><div class="summary"> <html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="Microsoft.Help.SelfBranded" content="true" /><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Locale" content="en-us" /><meta name="Microsoft.Help.TopicLocale" content="en-us" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"></script><title>V8Runtime.DebuggerConnected Event</title><meta name="Title" content="DebuggerConnected Event" /><meta name="Microsoft.Help.Id" content="E:Microsoft.ClearScript.V8.V8Runtime.DebuggerConnected" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="System.Keywords" content="V8Runtime.DebuggerConnected event" /><meta name="System.Keywords" content="DebuggerConnected event" /><meta name="Microsoft.Help.F1" content="Microsoft.ClearScript.V8.V8Runtime.DebuggerConnected" /><meta name="Microsoft.Help.F1" content="V8Runtime.DebuggerConnected" /><meta name="Microsoft.Help.F1" content="DebuggerConnected" /><meta name="container" content="Microsoft.ClearScript.V8" /><meta name="file" content="E_Microsoft_ClearScript_V8_V8Runtime_DebuggerConnected" /><meta name="guid" content="E_Microsoft_ClearScript_V8_V8Runtime_DebuggerConnected" /><meta name="Description" content="Occurs when a debugger connects to a V8 runtime." /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-3.5.1.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script><script type="text/javascript" src="../scripts/clipboard.min.js"></script></head><body onload="SetDefaultLanguage('cs');"><input type="hidden" id="userDataCache" class="userDataStyle" /><div id="PageHeader" class="pageHeader">ClearScript Library<form id="SearchForm" method="get" action="#" onsubmit="TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library" tocid="roottoc">ClearScript Library</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library Reference" tocid="R_Project_Reference">ClearScript Library Reference</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/N_Microsoft_ClearScript_V8.htm" title="Microsoft.ClearScript.V8" tocid="N_Microsoft_ClearScript_V8">Microsoft.ClearScript.V8</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/T_Microsoft_ClearScript_V8_V8Runtime.htm" title="V8Runtime Class" tocid="T_Microsoft_ClearScript_V8_V8Runtime">V8Runtime Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/Events_T_Microsoft_ClearScript_V8_V8Runtime.htm" title="V8Runtime Events" tocid="Events_T_Microsoft_ClearScript_V8_V8Runtime">V8Runtime Events</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="../html/E_Microsoft_ClearScript_V8_V8Runtime_DebuggerConnected.htm" title="DebuggerConnected Event" tocid="E_Microsoft_ClearScript_V8_V8Runtime_DebuggerConnected">DebuggerConnected Event</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="../html/E_Microsoft_ClearScript_V8_V8Runtime_DebuggerDisconnected.htm" title="DebuggerDisconnected Event" tocid="E_Microsoft_ClearScript_V8_V8Runtime_DebuggerDisconnected">DebuggerDisconnected Event</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div id="TopicContent" class="topicContent"><table class="titleTable"><tr><td class="titleColumn"><h1>V8Runtime<span id="LSTC4DB887C_0" data-languageSpecificText="cpp=::|nu=."></span>Debugger<wbr />Connected Event</h1></td></tr></table><div class="summary">
Occurs when a debugger connects to a V8 runtime. Occurs when a debugger connects to a V8 runtime.
</div><br /><strong>Namespace:</strong> <a href="N_Microsoft_ClearScript_V8.htm">Microsoft.ClearScript.V8</a><br /><strong>Assembly:</strong> ClearScript.V8 (in ClearScript.V8.dll) Version: 7.4.3<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('IDB')" onkeypress="SectionExpandCollapse_CheckKey('IDB', event)" tabindex="0"><img id="IDBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="IDBSection" class="collapsibleSection"><div id="IDAB" class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="IDAB_tab1" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cs','1','4');return false;">C#</a></div><div id="IDAB_tab2" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','vb','2','4');return false;">VB</a></div><div id="IDAB_tab3" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cpp','3','4');return false;">C++</a></div><div id="IDAB_tab4" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="IDAB_copyCode" href="#" class="copyCodeSnippet" onclick="CopyToClipboard('IDAB');return false;" title="Copy">Copy</a></div></div><div id="IDAB_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> event <span class="identifier">EventHandler</span>&lt;<span class="identifier">V8RuntimeDebuggerEventArgs</span>&gt; <span class="identifier">DebuggerConnected</span></pre></div><div id="IDAB_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> Event <span class="identifier">DebuggerConnected</span> <span class="keyword">As</span> <span class="identifier">EventHandler</span>(<span class="keyword">Of</span> <span class="identifier">V8RuntimeDebuggerEventArgs</span>)</pre></div><div id="IDAB_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>: </div><br /><strong>Namespace:</strong> <a href="N_Microsoft_ClearScript_V8.htm">Microsoft.ClearScript.V8</a><br /><strong>Assembly:</strong> ClearScript.V8 (in ClearScript.V8.dll) Version: 7.4.4<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('IDB')" onkeypress="SectionExpandCollapse_CheckKey('IDB', event)" tabindex="0"><img id="IDBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="IDBSection" class="collapsibleSection"><div id="IDAB" class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="IDAB_tab1" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cs','1','4');return false;">C#</a></div><div id="IDAB_tab2" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','vb','2','4');return false;">VB</a></div><div id="IDAB_tab3" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cpp','3','4');return false;">C++</a></div><div id="IDAB_tab4" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="IDAB_copyCode" href="#" class="copyCodeSnippet" onclick="CopyToClipboard('IDAB');return false;" title="Copy">Copy</a></div></div><div id="IDAB_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> event <span class="identifier">EventHandler</span>&lt;<span class="identifier">V8RuntimeDebuggerEventArgs</span>&gt; <span class="identifier">DebuggerConnected</span></pre></div><div id="IDAB_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> Event <span class="identifier">DebuggerConnected</span> <span class="keyword">As</span> <span class="identifier">EventHandler</span>(<span class="keyword">Of</span> <span class="identifier">V8RuntimeDebuggerEventArgs</span>)</pre></div><div id="IDAB_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
<span class="keyword">static</span> <span class="keyword">event</span> <span class="identifier">EventHandler</span>&lt;<span class="identifier">V8RuntimeDebuggerEventArgs</span>^&gt;^ <span class="identifier">DebuggerConnected</span> { <span class="keyword">static</span> <span class="keyword">event</span> <span class="identifier">EventHandler</span>&lt;<span class="identifier">V8RuntimeDebuggerEventArgs</span>^&gt;^ <span class="identifier">DebuggerConnected</span> {
<span class="keyword">void</span> <span class="keyword">add</span> (<span class="identifier">EventHandler</span>&lt;<span class="identifier">V8RuntimeDebuggerEventArgs</span>^&gt;^ <span class="parameter">value</span>); <span class="keyword">void</span> <span class="keyword">add</span> (<span class="identifier">EventHandler</span>&lt;<span class="identifier">V8RuntimeDebuggerEventArgs</span>^&gt;^ <span class="parameter">value</span>);
<span class="keyword">void</span> <span class="keyword">remove</span> (<span class="identifier">EventHandler</span>&lt;<span class="identifier">V8RuntimeDebuggerEventArgs</span>^&gt;^ <span class="parameter">value</span>); <span class="keyword">void</span> <span class="keyword">remove</span> (<span class="identifier">EventHandler</span>&lt;<span class="identifier">V8RuntimeDebuggerEventArgs</span>^&gt;^ <span class="parameter">value</span>);

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

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

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

@ -1,6 +1,6 @@
<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="Microsoft.Help.SelfBranded" content="true" /><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Locale" content="en-us" /><meta name="Microsoft.Help.TopicLocale" content="en-us" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"></script><title>Undefined.Value Field</title><meta name="Title" content="Value Field" /><meta name="Microsoft.Help.Id" content="F:Microsoft.ClearScript.Undefined.Value" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="System.Keywords" content="Undefined.Value field" /><meta name="System.Keywords" content="Value field" /><meta name="Microsoft.Help.F1" content="Microsoft.ClearScript.Undefined.Value" /><meta name="Microsoft.Help.F1" content="Undefined.Value" /><meta name="Microsoft.Help.F1" content="Value" /><meta name="container" content="Microsoft.ClearScript" /><meta name="file" content="F_Microsoft_ClearScript_Undefined_Value" /><meta name="guid" content="F_Microsoft_ClearScript_Undefined_Value" /><meta name="Description" content="The sole instance of the class." /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-3.5.1.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script><script type="text/javascript" src="../scripts/clipboard.min.js"></script></head><body onload="SetDefaultLanguage('cs');"><input type="hidden" id="userDataCache" class="userDataStyle" /><div id="PageHeader" class="pageHeader">ClearScript Library<form id="SearchForm" method="get" action="#" onsubmit="TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library" tocid="roottoc">ClearScript Library</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library Reference" tocid="R_Project_Reference">ClearScript Library Reference</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/N_Microsoft_ClearScript.htm" title="Microsoft.ClearScript" tocid="N_Microsoft_ClearScript">Microsoft.ClearScript</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/T_Microsoft_ClearScript_Undefined.htm" title="Undefined Class" tocid="T_Microsoft_ClearScript_Undefined">Undefined Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/Fields_T_Microsoft_ClearScript_Undefined.htm" title="Undefined Fields" tocid="Fields_T_Microsoft_ClearScript_Undefined">Undefined Fields</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_Microsoft_ClearScript_Undefined_Value.htm" title="Value Field" tocid="F_Microsoft_ClearScript_Undefined_Value">Value Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div id="TopicContent" class="topicContent"><table class="titleTable"><tr><td class="titleColumn"><h1>Undefined<span id="LST300E21CC_0" data-languageSpecificText="cpp=::|nu=."></span>Value Field</h1></td></tr></table><div class="summary"> <html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="Microsoft.Help.SelfBranded" content="true" /><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Locale" content="en-us" /><meta name="Microsoft.Help.TopicLocale" content="en-us" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"></script><title>Undefined.Value Field</title><meta name="Title" content="Value Field" /><meta name="Microsoft.Help.Id" content="F:Microsoft.ClearScript.Undefined.Value" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="System.Keywords" content="Undefined.Value field" /><meta name="System.Keywords" content="Value field" /><meta name="Microsoft.Help.F1" content="Microsoft.ClearScript.Undefined.Value" /><meta name="Microsoft.Help.F1" content="Undefined.Value" /><meta name="Microsoft.Help.F1" content="Value" /><meta name="container" content="Microsoft.ClearScript" /><meta name="file" content="F_Microsoft_ClearScript_Undefined_Value" /><meta name="guid" content="F_Microsoft_ClearScript_Undefined_Value" /><meta name="Description" content="The sole instance of the class." /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-3.5.1.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script><script type="text/javascript" src="../scripts/clipboard.min.js"></script></head><body onload="SetDefaultLanguage('cs');"><input type="hidden" id="userDataCache" class="userDataStyle" /><div id="PageHeader" class="pageHeader">ClearScript Library<form id="SearchForm" method="get" action="#" onsubmit="TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library" tocid="roottoc">ClearScript Library</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library Reference" tocid="R_Project_Reference">ClearScript Library Reference</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/N_Microsoft_ClearScript.htm" title="Microsoft.ClearScript" tocid="N_Microsoft_ClearScript">Microsoft.ClearScript</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/T_Microsoft_ClearScript_Undefined.htm" title="Undefined Class" tocid="T_Microsoft_ClearScript_Undefined">Undefined Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/Fields_T_Microsoft_ClearScript_Undefined.htm" title="Undefined Fields" tocid="Fields_T_Microsoft_ClearScript_Undefined">Undefined Fields</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_Microsoft_ClearScript_Undefined_Value.htm" title="Value Field" tocid="F_Microsoft_ClearScript_Undefined_Value">Value Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div id="TopicContent" class="topicContent"><table class="titleTable"><tr><td class="titleColumn"><h1>Undefined<span id="LST300E21CC_0" data-languageSpecificText="cpp=::|nu=."></span>Value Field</h1></td></tr></table><div class="summary">
The sole instance of the <span class="code"><a href="T_Microsoft_ClearScript_Undefined.htm">Undefined</a></span> class. The sole instance of the <span class="code"><a href="T_Microsoft_ClearScript_Undefined.htm">Undefined</a></span> class.
</div><br /><strong>Namespace:</strong> <a href="N_Microsoft_ClearScript.htm">Microsoft.ClearScript</a><br /><strong>Assembly:</strong> ClearScript.Core (in ClearScript.Core.dll) Version: 7.4.3<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('IDB')" onkeypress="SectionExpandCollapse_CheckKey('IDB', event)" tabindex="0"><img id="IDBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="IDBSection" class="collapsibleSection"><div id="IDAB" class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="IDAB_tab1" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cs','1','4');return false;">C#</a></div><div id="IDAB_tab2" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','vb','2','4');return false;">VB</a></div><div id="IDAB_tab3" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cpp','3','4');return false;">C++</a></div><div id="IDAB_tab4" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="IDAB_copyCode" href="#" class="copyCodeSnippet" onclick="CopyToClipboard('IDAB');return false;" title="Copy">Copy</a></div></div><div id="IDAB_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">readonly</span> <span class="identifier">Undefined</span> <span class="identifier">Value</span></pre></div><div id="IDAB_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">ReadOnly</span> <span class="identifier">Value</span> <span class="keyword">As</span> <span class="identifier">Undefined</span></pre></div><div id="IDAB_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>: </div><br /><strong>Namespace:</strong> <a href="N_Microsoft_ClearScript.htm">Microsoft.ClearScript</a><br /><strong>Assembly:</strong> ClearScript.Core (in ClearScript.Core.dll) Version: 7.4.4<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('IDB')" onkeypress="SectionExpandCollapse_CheckKey('IDB', event)" tabindex="0"><img id="IDBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="IDBSection" class="collapsibleSection"><div id="IDAB" class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="IDAB_tab1" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cs','1','4');return false;">C#</a></div><div id="IDAB_tab2" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','vb','2','4');return false;">VB</a></div><div id="IDAB_tab3" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cpp','3','4');return false;">C++</a></div><div id="IDAB_tab4" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="IDAB_copyCode" href="#" class="copyCodeSnippet" onclick="CopyToClipboard('IDAB');return false;" title="Copy">Copy</a></div></div><div id="IDAB_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">readonly</span> <span class="identifier">Undefined</span> <span class="identifier">Value</span></pre></div><div id="IDAB_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">ReadOnly</span> <span class="identifier">Value</span> <span class="keyword">As</span> <span class="identifier">Undefined</span></pre></div><div id="IDAB_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
<span class="keyword">static</span> <span class="keyword">initonly</span> <span class="identifier">Undefined</span>^ <span class="identifier">Value</span></pre></div><div id="IDAB_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="identifier">Value</span>: <span class="identifier">Undefined</span></pre></div></div></div><h4>Field Value</h4><a href="T_Microsoft_ClearScript_Undefined.htm">Undefined</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('seeAlso')" onkeypress="SectionExpandCollapse_CheckKey('seeAlso', event)" tabindex="0"><img id="seeAlsoToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="seeAlsoSection" class="collapsibleSection"><h4>Reference</h4><div><a href="T_Microsoft_ClearScript_Undefined.htm">Undefined Class</a></div><div><a href="N_Microsoft_ClearScript.htm">Microsoft.ClearScript Namespace</a></div></div></div></div><div id="PageFooter" class="pageFooter"><p>Copyright © Microsoft Corporation. All rights reserved.</p><div class="feedbackLink">Send comments on this topic to <span class="keyword">static</span> <span class="keyword">initonly</span> <span class="identifier">Undefined</span>^ <span class="identifier">Value</span></pre></div><div id="IDAB_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="identifier">Value</span>: <span class="identifier">Undefined</span></pre></div></div></div><h4>Field Value</h4><a href="T_Microsoft_ClearScript_Undefined.htm">Undefined</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('seeAlso')" onkeypress="SectionExpandCollapse_CheckKey('seeAlso', event)" tabindex="0"><img id="seeAlsoToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="seeAlsoSection" class="collapsibleSection"><h4>Reference</h4><div><a href="T_Microsoft_ClearScript_Undefined.htm">Undefined Class</a></div><div><a href="N_Microsoft_ClearScript.htm">Microsoft.ClearScript Namespace</a></div></div></div></div><div id="PageFooter" class="pageFooter"><p>Copyright © Microsoft Corporation. All rights reserved.</p><div class="feedbackLink">Send comments on this topic to
<a id="HT_MailLink" href="mailto:ClearScript%40microsoft.com?Subject=ClearScript%20Library">Microsoft</a></div> <a id="HT_MailLink" href="mailto:ClearScript%40microsoft.com?Subject=ClearScript%20Library">Microsoft</a></div>
<script type="text/javascript"> <script type="text/javascript">

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

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

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

@ -1,6 +1,6 @@
<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="Microsoft.Help.SelfBranded" content="true" /><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Locale" content="en-us" /><meta name="Microsoft.Help.TopicLocale" content="en-us" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"></script><title>ValueRef&lt;T&gt;.Value Field</title><meta name="Title" content="Value Field" /><meta name="Microsoft.Help.Id" content="F:Microsoft.ClearScript.ValueRef`1.Value" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="System.Keywords" content="ValueRef&lt;T&gt;.Value field" /><meta name="System.Keywords" content="Value field" /><meta name="Microsoft.Help.F1" content="Microsoft.ClearScript.ValueRef`1.Value" /><meta name="Microsoft.Help.F1" content="ValueRef`1.Value" /><meta name="Microsoft.Help.F1" content="Value" /><meta name="container" content="Microsoft.ClearScript" /><meta name="file" content="F_Microsoft_ClearScript_ValueRef_1_Value" /><meta name="guid" content="F_Microsoft_ClearScript_ValueRef_1_Value" /><meta name="Description" content="The value currently held by the instance." /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-3.5.1.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script><script type="text/javascript" src="../scripts/clipboard.min.js"></script></head><body onload="SetDefaultLanguage('cs');"><input type="hidden" id="userDataCache" class="userDataStyle" /><div id="PageHeader" class="pageHeader">ClearScript Library<form id="SearchForm" method="get" action="#" onsubmit="TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library" tocid="roottoc">ClearScript Library</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library Reference" tocid="R_Project_Reference">ClearScript Library Reference</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/N_Microsoft_ClearScript.htm" title="Microsoft.ClearScript" tocid="N_Microsoft_ClearScript">Microsoft.ClearScript</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/T_Microsoft_ClearScript_ValueRef_1.htm" title="ValueRef&lt;T&gt; Class" tocid="T_Microsoft_ClearScript_ValueRef_1">ValueRef&lt;T&gt; Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/Fields_T_Microsoft_ClearScript_ValueRef_1.htm" title="ValueRef&lt;T&gt; Fields" tocid="Fields_T_Microsoft_ClearScript_ValueRef_1">ValueRef&lt;T&gt; Fields</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_Microsoft_ClearScript_ValueRef_1_Value.htm" title="Value Field" tocid="F_Microsoft_ClearScript_ValueRef_1_Value">Value Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div id="TopicContent" class="topicContent"><table class="titleTable"><tr><td class="titleColumn"><h1>Value<wbr />Ref<span id="LST84C254E1_0" data-languageSpecificText="cpp=&lt;|cs=&lt;|fs=&lt;|vb=(Of |nu=("></span><span class="typeparameter">T</span><span id="LST84C254E1_1" data-languageSpecificText="cpp=&gt;|cs=&gt;|fs=&gt;|vb=)|nu=)"></span><span id="LST84C254E1_2" data-languageSpecificText="cpp=::|nu=."></span>Value Field</h1></td></tr></table><div class="summary"> <html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="Microsoft.Help.SelfBranded" content="true" /><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Locale" content="en-us" /><meta name="Microsoft.Help.TopicLocale" content="en-us" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"></script><title>ValueRef&lt;T&gt;.Value Field</title><meta name="Title" content="Value Field" /><meta name="Microsoft.Help.Id" content="F:Microsoft.ClearScript.ValueRef`1.Value" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="System.Keywords" content="ValueRef&lt;T&gt;.Value field" /><meta name="System.Keywords" content="Value field" /><meta name="Microsoft.Help.F1" content="Microsoft.ClearScript.ValueRef`1.Value" /><meta name="Microsoft.Help.F1" content="ValueRef`1.Value" /><meta name="Microsoft.Help.F1" content="Value" /><meta name="container" content="Microsoft.ClearScript" /><meta name="file" content="F_Microsoft_ClearScript_ValueRef_1_Value" /><meta name="guid" content="F_Microsoft_ClearScript_ValueRef_1_Value" /><meta name="Description" content="The value currently held by the instance." /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-3.5.1.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script><script type="text/javascript" src="../scripts/clipboard.min.js"></script></head><body onload="SetDefaultLanguage('cs');"><input type="hidden" id="userDataCache" class="userDataStyle" /><div id="PageHeader" class="pageHeader">ClearScript Library<form id="SearchForm" method="get" action="#" onsubmit="TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library" tocid="roottoc">ClearScript Library</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library Reference" tocid="R_Project_Reference">ClearScript Library Reference</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/N_Microsoft_ClearScript.htm" title="Microsoft.ClearScript" tocid="N_Microsoft_ClearScript">Microsoft.ClearScript</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/T_Microsoft_ClearScript_ValueRef_1.htm" title="ValueRef&lt;T&gt; Class" tocid="T_Microsoft_ClearScript_ValueRef_1">ValueRef&lt;T&gt; Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/Fields_T_Microsoft_ClearScript_ValueRef_1.htm" title="ValueRef&lt;T&gt; Fields" tocid="Fields_T_Microsoft_ClearScript_ValueRef_1">ValueRef&lt;T&gt; Fields</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_Microsoft_ClearScript_ValueRef_1_Value.htm" title="Value Field" tocid="F_Microsoft_ClearScript_ValueRef_1_Value">Value Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div id="TopicContent" class="topicContent"><table class="titleTable"><tr><td class="titleColumn"><h1>Value<wbr />Ref<span id="LST84C254E1_0" data-languageSpecificText="cpp=&lt;|cs=&lt;|fs=&lt;|vb=(Of |nu=("></span><span class="typeparameter">T</span><span id="LST84C254E1_1" data-languageSpecificText="cpp=&gt;|cs=&gt;|fs=&gt;|vb=)|nu=)"></span><span id="LST84C254E1_2" data-languageSpecificText="cpp=::|nu=."></span>Value Field</h1></td></tr></table><div class="summary">
The value currently held by the <span class="code"><a href="T_Microsoft_ClearScript_ValueRef_1.htm">ValueRef<span id="LST84C254E1_3" data-languageSpecificText="cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'"></span>T<span id="LST84C254E1_4" data-languageSpecificText="cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;"></span></a></span> instance. The value currently held by the <span class="code"><a href="T_Microsoft_ClearScript_ValueRef_1.htm">ValueRef<span id="LST84C254E1_3" data-languageSpecificText="cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'"></span>T<span id="LST84C254E1_4" data-languageSpecificText="cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;"></span></a></span> instance.
</div><br /><strong>Namespace:</strong> <a href="N_Microsoft_ClearScript.htm">Microsoft.ClearScript</a><br /><strong>Assembly:</strong> ClearScript.Core (in ClearScript.Core.dll) Version: 7.4.3<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('IDB')" onkeypress="SectionExpandCollapse_CheckKey('IDB', event)" tabindex="0"><img id="IDBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="IDBSection" class="collapsibleSection"><div id="IDAB" class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="IDAB_tab1" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cs','1','4');return false;">C#</a></div><div id="IDAB_tab2" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','vb','2','4');return false;">VB</a></div><div id="IDAB_tab3" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cpp','3','4');return false;">C++</a></div><div id="IDAB_tab4" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="IDAB_copyCode" href="#" class="copyCodeSnippet" onclick="CopyToClipboard('IDAB');return false;" title="Copy">Copy</a></div></div><div id="IDAB_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> T <span class="identifier">Value</span></pre></div><div id="IDAB_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="identifier">Value</span> <span class="keyword">As</span> T</pre></div><div id="IDAB_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>: </div><br /><strong>Namespace:</strong> <a href="N_Microsoft_ClearScript.htm">Microsoft.ClearScript</a><br /><strong>Assembly:</strong> ClearScript.Core (in ClearScript.Core.dll) Version: 7.4.4<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('IDB')" onkeypress="SectionExpandCollapse_CheckKey('IDB', event)" tabindex="0"><img id="IDBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="IDBSection" class="collapsibleSection"><div id="IDAB" class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="IDAB_tab1" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cs','1','4');return false;">C#</a></div><div id="IDAB_tab2" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','vb','2','4');return false;">VB</a></div><div id="IDAB_tab3" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cpp','3','4');return false;">C++</a></div><div id="IDAB_tab4" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="IDAB_copyCode" href="#" class="copyCodeSnippet" onclick="CopyToClipboard('IDAB');return false;" title="Copy">Copy</a></div></div><div id="IDAB_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> T <span class="identifier">Value</span></pre></div><div id="IDAB_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="identifier">Value</span> <span class="keyword">As</span> T</pre></div><div id="IDAB_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
T <span class="identifier">Value</span></pre></div><div id="IDAB_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">val</span> <span class="keyword">mutable</span> <span class="identifier">Value</span>: 'T</pre></div></div></div><h4>Field Value</h4><a href="T_Microsoft_ClearScript_ValueRef_1.htm"><span class="typeparameter">T</span></a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('seeAlso')" onkeypress="SectionExpandCollapse_CheckKey('seeAlso', event)" tabindex="0"><img id="seeAlsoToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="seeAlsoSection" class="collapsibleSection"><h4>Reference</h4><div><a href="T_Microsoft_ClearScript_ValueRef_1.htm">ValueRef<span id="LST84C254E1_5" data-languageSpecificText="cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'"></span>T<span id="LST84C254E1_6" data-languageSpecificText="cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;"></span> Class</a></div><div><a href="N_Microsoft_ClearScript.htm">Microsoft.ClearScript Namespace</a></div></div></div></div><div id="PageFooter" class="pageFooter"><p>Copyright © Microsoft Corporation. All rights reserved.</p><div class="feedbackLink">Send comments on this topic to T <span class="identifier">Value</span></pre></div><div id="IDAB_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">val</span> <span class="keyword">mutable</span> <span class="identifier">Value</span>: 'T</pre></div></div></div><h4>Field Value</h4><a href="T_Microsoft_ClearScript_ValueRef_1.htm"><span class="typeparameter">T</span></a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('seeAlso')" onkeypress="SectionExpandCollapse_CheckKey('seeAlso', event)" tabindex="0"><img id="seeAlsoToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="seeAlsoSection" class="collapsibleSection"><h4>Reference</h4><div><a href="T_Microsoft_ClearScript_ValueRef_1.htm">ValueRef<span id="LST84C254E1_5" data-languageSpecificText="cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'"></span>T<span id="LST84C254E1_6" data-languageSpecificText="cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;"></span> Class</a></div><div><a href="N_Microsoft_ClearScript.htm">Microsoft.ClearScript Namespace</a></div></div></div></div><div id="PageFooter" class="pageFooter"><p>Copyright © Microsoft Corporation. All rights reserved.</p><div class="feedbackLink">Send comments on this topic to
<a id="HT_MailLink" href="mailto:ClearScript%40microsoft.com?Subject=ClearScript%20Library">Microsoft</a></div> <a id="HT_MailLink" href="mailto:ClearScript%40microsoft.com?Subject=ClearScript%20Library">Microsoft</a></div>
<script type="text/javascript"> <script type="text/javascript">

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

@ -1,6 +1,6 @@
<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="Microsoft.Help.SelfBranded" content="true" /><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Locale" content="en-us" /><meta name="Microsoft.Help.TopicLocale" content="en-us" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"></script><title>VoidResult.Value Field</title><meta name="Title" content="Value Field" /><meta name="Microsoft.Help.Id" content="F:Microsoft.ClearScript.VoidResult.Value" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="System.Keywords" content="VoidResult.Value field" /><meta name="System.Keywords" content="Value field" /><meta name="Microsoft.Help.F1" content="Microsoft.ClearScript.VoidResult.Value" /><meta name="Microsoft.Help.F1" content="VoidResult.Value" /><meta name="Microsoft.Help.F1" content="Value" /><meta name="container" content="Microsoft.ClearScript" /><meta name="file" content="F_Microsoft_ClearScript_VoidResult_Value" /><meta name="guid" content="F_Microsoft_ClearScript_VoidResult_Value" /><meta name="Description" content="The sole instance of the class." /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-3.5.1.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script><script type="text/javascript" src="../scripts/clipboard.min.js"></script></head><body onload="SetDefaultLanguage('cs');"><input type="hidden" id="userDataCache" class="userDataStyle" /><div id="PageHeader" class="pageHeader">ClearScript Library<form id="SearchForm" method="get" action="#" onsubmit="TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library" tocid="roottoc">ClearScript Library</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library Reference" tocid="R_Project_Reference">ClearScript Library Reference</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/N_Microsoft_ClearScript.htm" title="Microsoft.ClearScript" tocid="N_Microsoft_ClearScript">Microsoft.ClearScript</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/T_Microsoft_ClearScript_VoidResult.htm" title="VoidResult Class" tocid="T_Microsoft_ClearScript_VoidResult">VoidResult Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/Fields_T_Microsoft_ClearScript_VoidResult.htm" title="VoidResult Fields" tocid="Fields_T_Microsoft_ClearScript_VoidResult">VoidResult Fields</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_Microsoft_ClearScript_VoidResult_Value.htm" title="Value Field" tocid="F_Microsoft_ClearScript_VoidResult_Value">Value Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div id="TopicContent" class="topicContent"><table class="titleTable"><tr><td class="titleColumn"><h1>Void<wbr />Result<span id="LST48349C76_0" data-languageSpecificText="cpp=::|nu=."></span>Value Field</h1></td></tr></table><div class="summary"> <html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="Microsoft.Help.SelfBranded" content="true" /><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Locale" content="en-us" /><meta name="Microsoft.Help.TopicLocale" content="en-us" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"></script><title>VoidResult.Value Field</title><meta name="Title" content="Value Field" /><meta name="Microsoft.Help.Id" content="F:Microsoft.ClearScript.VoidResult.Value" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="System.Keywords" content="VoidResult.Value field" /><meta name="System.Keywords" content="Value field" /><meta name="Microsoft.Help.F1" content="Microsoft.ClearScript.VoidResult.Value" /><meta name="Microsoft.Help.F1" content="VoidResult.Value" /><meta name="Microsoft.Help.F1" content="Value" /><meta name="container" content="Microsoft.ClearScript" /><meta name="file" content="F_Microsoft_ClearScript_VoidResult_Value" /><meta name="guid" content="F_Microsoft_ClearScript_VoidResult_Value" /><meta name="Description" content="The sole instance of the class." /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-3.5.1.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script><script type="text/javascript" src="../scripts/clipboard.min.js"></script></head><body onload="SetDefaultLanguage('cs');"><input type="hidden" id="userDataCache" class="userDataStyle" /><div id="PageHeader" class="pageHeader">ClearScript Library<form id="SearchForm" method="get" action="#" onsubmit="TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library" tocid="roottoc">ClearScript Library</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library Reference" tocid="R_Project_Reference">ClearScript Library Reference</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/N_Microsoft_ClearScript.htm" title="Microsoft.ClearScript" tocid="N_Microsoft_ClearScript">Microsoft.ClearScript</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/T_Microsoft_ClearScript_VoidResult.htm" title="VoidResult Class" tocid="T_Microsoft_ClearScript_VoidResult">VoidResult Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/Fields_T_Microsoft_ClearScript_VoidResult.htm" title="VoidResult Fields" tocid="Fields_T_Microsoft_ClearScript_VoidResult">VoidResult Fields</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_Microsoft_ClearScript_VoidResult_Value.htm" title="Value Field" tocid="F_Microsoft_ClearScript_VoidResult_Value">Value Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div id="TopicContent" class="topicContent"><table class="titleTable"><tr><td class="titleColumn"><h1>Void<wbr />Result<span id="LST48349C76_0" data-languageSpecificText="cpp=::|nu=."></span>Value Field</h1></td></tr></table><div class="summary">
The sole instance of the <span class="code"><a href="T_Microsoft_ClearScript_VoidResult.htm">VoidResult</a></span> class. The sole instance of the <span class="code"><a href="T_Microsoft_ClearScript_VoidResult.htm">VoidResult</a></span> class.
</div><br /><strong>Namespace:</strong> <a href="N_Microsoft_ClearScript.htm">Microsoft.ClearScript</a><br /><strong>Assembly:</strong> ClearScript.Core (in ClearScript.Core.dll) Version: 7.4.3<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('IDB')" onkeypress="SectionExpandCollapse_CheckKey('IDB', event)" tabindex="0"><img id="IDBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="IDBSection" class="collapsibleSection"><div id="IDAB" class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="IDAB_tab1" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cs','1','4');return false;">C#</a></div><div id="IDAB_tab2" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','vb','2','4');return false;">VB</a></div><div id="IDAB_tab3" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cpp','3','4');return false;">C++</a></div><div id="IDAB_tab4" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="IDAB_copyCode" href="#" class="copyCodeSnippet" onclick="CopyToClipboard('IDAB');return false;" title="Copy">Copy</a></div></div><div id="IDAB_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">readonly</span> <span class="identifier">VoidResult</span> <span class="identifier">Value</span></pre></div><div id="IDAB_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">ReadOnly</span> <span class="identifier">Value</span> <span class="keyword">As</span> <span class="identifier">VoidResult</span></pre></div><div id="IDAB_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>: </div><br /><strong>Namespace:</strong> <a href="N_Microsoft_ClearScript.htm">Microsoft.ClearScript</a><br /><strong>Assembly:</strong> ClearScript.Core (in ClearScript.Core.dll) Version: 7.4.4<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('IDB')" onkeypress="SectionExpandCollapse_CheckKey('IDB', event)" tabindex="0"><img id="IDBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="IDBSection" class="collapsibleSection"><div id="IDAB" class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="IDAB_tab1" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cs','1','4');return false;">C#</a></div><div id="IDAB_tab2" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','vb','2','4');return false;">VB</a></div><div id="IDAB_tab3" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cpp','3','4');return false;">C++</a></div><div id="IDAB_tab4" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="IDAB_copyCode" href="#" class="copyCodeSnippet" onclick="CopyToClipboard('IDAB');return false;" title="Copy">Copy</a></div></div><div id="IDAB_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">readonly</span> <span class="identifier">VoidResult</span> <span class="identifier">Value</span></pre></div><div id="IDAB_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">ReadOnly</span> <span class="identifier">Value</span> <span class="keyword">As</span> <span class="identifier">VoidResult</span></pre></div><div id="IDAB_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
<span class="keyword">static</span> <span class="keyword">initonly</span> <span class="identifier">VoidResult</span>^ <span class="identifier">Value</span></pre></div><div id="IDAB_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="identifier">Value</span>: <span class="identifier">VoidResult</span></pre></div></div></div><h4>Field Value</h4><a href="T_Microsoft_ClearScript_VoidResult.htm">VoidResult</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('seeAlso')" onkeypress="SectionExpandCollapse_CheckKey('seeAlso', event)" tabindex="0"><img id="seeAlsoToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="seeAlsoSection" class="collapsibleSection"><h4>Reference</h4><div><a href="T_Microsoft_ClearScript_VoidResult.htm">VoidResult Class</a></div><div><a href="N_Microsoft_ClearScript.htm">Microsoft.ClearScript Namespace</a></div></div></div></div><div id="PageFooter" class="pageFooter"><p>Copyright © Microsoft Corporation. All rights reserved.</p><div class="feedbackLink">Send comments on this topic to <span class="keyword">static</span> <span class="keyword">initonly</span> <span class="identifier">VoidResult</span>^ <span class="identifier">Value</span></pre></div><div id="IDAB_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="identifier">Value</span>: <span class="identifier">VoidResult</span></pre></div></div></div><h4>Field Value</h4><a href="T_Microsoft_ClearScript_VoidResult.htm">VoidResult</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('seeAlso')" onkeypress="SectionExpandCollapse_CheckKey('seeAlso', event)" tabindex="0"><img id="seeAlsoToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="seeAlsoSection" class="collapsibleSection"><h4>Reference</h4><div><a href="T_Microsoft_ClearScript_VoidResult.htm">VoidResult Class</a></div><div><a href="N_Microsoft_ClearScript.htm">Microsoft.ClearScript Namespace</a></div></div></div></div><div id="PageFooter" class="pageFooter"><p>Copyright © Microsoft Corporation. All rights reserved.</p><div class="feedbackLink">Send comments on this topic to
<a id="HT_MailLink" href="mailto:ClearScript%40microsoft.com?Subject=ClearScript%20Library">Microsoft</a></div> <a id="HT_MailLink" href="mailto:ClearScript%40microsoft.com?Subject=ClearScript%20Library">Microsoft</a></div>
<script type="text/javascript"> <script type="text/javascript">

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

@ -1,6 +1,6 @@
<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="Microsoft.Help.SelfBranded" content="true" /><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Locale" content="en-us" /><meta name="Microsoft.Help.TopicLocale" content="en-us" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"></script><title>NullSyncInvoker.Instance Field</title><meta name="Title" content="Instance Field" /><meta name="Microsoft.Help.Id" content="F:Microsoft.ClearScript.Windows.Core.NullSyncInvoker.Instance" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="System.Keywords" content="NullSyncInvoker.Instance field" /><meta name="System.Keywords" content="Instance field" /><meta name="Microsoft.Help.F1" content="Microsoft.ClearScript.Windows.Core.NullSyncInvoker.Instance" /><meta name="Microsoft.Help.F1" content="NullSyncInvoker.Instance" /><meta name="Microsoft.Help.F1" content="Instance" /><meta name="container" content="Microsoft.ClearScript.Windows.Core" /><meta name="file" content="F_Microsoft_ClearScript_Windows_Core_NullSyncInvoker_Instance" /><meta name="guid" content="F_Microsoft_ClearScript_Windows_Core_NullSyncInvoker_Instance" /><meta name="Description" content="The sole instance of the class." /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-3.5.1.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script><script type="text/javascript" src="../scripts/clipboard.min.js"></script></head><body onload="SetDefaultLanguage('cs');"><input type="hidden" id="userDataCache" class="userDataStyle" /><div id="PageHeader" class="pageHeader">ClearScript Library<form id="SearchForm" method="get" action="#" onsubmit="TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library" tocid="roottoc">ClearScript Library</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library Reference" tocid="R_Project_Reference">ClearScript Library Reference</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/N_Microsoft_ClearScript_Windows_Core.htm" title="Microsoft.ClearScript.Windows.Core" tocid="N_Microsoft_ClearScript_Windows_Core">Microsoft.ClearScript.Windows.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/T_Microsoft_ClearScript_Windows_Core_NullSyncInvoker.htm" title="NullSyncInvoker Class" tocid="T_Microsoft_ClearScript_Windows_Core_NullSyncInvoker">NullSyncInvoker Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/Fields_T_Microsoft_ClearScript_Windows_Core_NullSyncInvoker.htm" title="NullSyncInvoker Fields" tocid="Fields_T_Microsoft_ClearScript_Windows_Core_NullSyncInvoker">NullSyncInvoker Fields</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_Microsoft_ClearScript_Windows_Core_NullSyncInvoker_Instance.htm" title="Instance Field" tocid="F_Microsoft_ClearScript_Windows_Core_NullSyncInvoker_Instance">Instance Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div id="TopicContent" class="topicContent"><table class="titleTable"><tr><td class="titleColumn"><h1>Null<wbr />Sync<wbr />Invoker<span id="LSTC6585049_0" data-languageSpecificText="cpp=::|nu=."></span>Instance Field</h1></td></tr></table><div class="summary"> <html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="Microsoft.Help.SelfBranded" content="true" /><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Locale" content="en-us" /><meta name="Microsoft.Help.TopicLocale" content="en-us" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"></script><title>NullSyncInvoker.Instance Field</title><meta name="Title" content="Instance Field" /><meta name="Microsoft.Help.Id" content="F:Microsoft.ClearScript.Windows.Core.NullSyncInvoker.Instance" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="System.Keywords" content="NullSyncInvoker.Instance field" /><meta name="System.Keywords" content="Instance field" /><meta name="Microsoft.Help.F1" content="Microsoft.ClearScript.Windows.Core.NullSyncInvoker.Instance" /><meta name="Microsoft.Help.F1" content="NullSyncInvoker.Instance" /><meta name="Microsoft.Help.F1" content="Instance" /><meta name="container" content="Microsoft.ClearScript.Windows.Core" /><meta name="file" content="F_Microsoft_ClearScript_Windows_Core_NullSyncInvoker_Instance" /><meta name="guid" content="F_Microsoft_ClearScript_Windows_Core_NullSyncInvoker_Instance" /><meta name="Description" content="The sole instance of the class." /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-3.5.1.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script><script type="text/javascript" src="../scripts/clipboard.min.js"></script></head><body onload="SetDefaultLanguage('cs');"><input type="hidden" id="userDataCache" class="userDataStyle" /><div id="PageHeader" class="pageHeader">ClearScript Library<form id="SearchForm" method="get" action="#" onsubmit="TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library" tocid="roottoc">ClearScript Library</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library Reference" tocid="R_Project_Reference">ClearScript Library Reference</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/N_Microsoft_ClearScript_Windows_Core.htm" title="Microsoft.ClearScript.Windows.Core" tocid="N_Microsoft_ClearScript_Windows_Core">Microsoft.ClearScript.Windows.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/T_Microsoft_ClearScript_Windows_Core_NullSyncInvoker.htm" title="NullSyncInvoker Class" tocid="T_Microsoft_ClearScript_Windows_Core_NullSyncInvoker">NullSyncInvoker Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/Fields_T_Microsoft_ClearScript_Windows_Core_NullSyncInvoker.htm" title="NullSyncInvoker Fields" tocid="Fields_T_Microsoft_ClearScript_Windows_Core_NullSyncInvoker">NullSyncInvoker Fields</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_Microsoft_ClearScript_Windows_Core_NullSyncInvoker_Instance.htm" title="Instance Field" tocid="F_Microsoft_ClearScript_Windows_Core_NullSyncInvoker_Instance">Instance Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div id="TopicContent" class="topicContent"><table class="titleTable"><tr><td class="titleColumn"><h1>Null<wbr />Sync<wbr />Invoker<span id="LSTC6585049_0" data-languageSpecificText="cpp=::|nu=."></span>Instance Field</h1></td></tr></table><div class="summary">
The sole instance of the <span class="code"><a href="T_Microsoft_ClearScript_Windows_Core_NullSyncInvoker.htm">NullSyncInvoker</a></span> class. The sole instance of the <span class="code"><a href="T_Microsoft_ClearScript_Windows_Core_NullSyncInvoker.htm">NullSyncInvoker</a></span> class.
</div><br /><strong>Namespace:</strong> <a href="N_Microsoft_ClearScript_Windows_Core.htm">Microsoft.ClearScript.Windows.Core</a><br /><strong>Assembly:</strong> ClearScript.Windows.Core (in ClearScript.Windows.Core.dll) Version: 7.4.3<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('IDB')" onkeypress="SectionExpandCollapse_CheckKey('IDB', event)" tabindex="0"><img id="IDBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="IDBSection" class="collapsibleSection"><div id="IDAB" class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="IDAB_tab1" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cs','1','4');return false;">C#</a></div><div id="IDAB_tab2" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','vb','2','4');return false;">VB</a></div><div id="IDAB_tab3" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cpp','3','4');return false;">C++</a></div><div id="IDAB_tab4" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="IDAB_copyCode" href="#" class="copyCodeSnippet" onclick="CopyToClipboard('IDAB');return false;" title="Copy">Copy</a></div></div><div id="IDAB_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">readonly</span> <span class="identifier">ISyncInvoker</span> <span class="identifier">Instance</span></pre></div><div id="IDAB_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">ReadOnly</span> <span class="identifier">Instance</span> <span class="keyword">As</span> <span class="identifier">ISyncInvoker</span></pre></div><div id="IDAB_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>: </div><br /><strong>Namespace:</strong> <a href="N_Microsoft_ClearScript_Windows_Core.htm">Microsoft.ClearScript.Windows.Core</a><br /><strong>Assembly:</strong> ClearScript.Windows.Core (in ClearScript.Windows.Core.dll) Version: 7.4.4<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('IDB')" onkeypress="SectionExpandCollapse_CheckKey('IDB', event)" tabindex="0"><img id="IDBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="IDBSection" class="collapsibleSection"><div id="IDAB" class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="IDAB_tab1" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cs','1','4');return false;">C#</a></div><div id="IDAB_tab2" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','vb','2','4');return false;">VB</a></div><div id="IDAB_tab3" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cpp','3','4');return false;">C++</a></div><div id="IDAB_tab4" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="IDAB_copyCode" href="#" class="copyCodeSnippet" onclick="CopyToClipboard('IDAB');return false;" title="Copy">Copy</a></div></div><div id="IDAB_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">readonly</span> <span class="identifier">ISyncInvoker</span> <span class="identifier">Instance</span></pre></div><div id="IDAB_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">ReadOnly</span> <span class="identifier">Instance</span> <span class="keyword">As</span> <span class="identifier">ISyncInvoker</span></pre></div><div id="IDAB_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
<span class="keyword">static</span> <span class="keyword">initonly</span> <span class="identifier">ISyncInvoker</span>^ <span class="identifier">Instance</span></pre></div><div id="IDAB_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="identifier">Instance</span>: <span class="identifier">ISyncInvoker</span></pre></div></div></div><h4>Field Value</h4><a href="T_Microsoft_ClearScript_Windows_Core_ISyncInvoker.htm">ISyncInvoker</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('seeAlso')" onkeypress="SectionExpandCollapse_CheckKey('seeAlso', event)" tabindex="0"><img id="seeAlsoToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="seeAlsoSection" class="collapsibleSection"><h4>Reference</h4><div><a href="T_Microsoft_ClearScript_Windows_Core_NullSyncInvoker.htm">NullSyncInvoker Class</a></div><div><a href="N_Microsoft_ClearScript_Windows_Core.htm">Microsoft.ClearScript.Windows.Core Namespace</a></div></div></div></div><div id="PageFooter" class="pageFooter"><p>Copyright © Microsoft Corporation. All rights reserved.</p><div class="feedbackLink">Send comments on this topic to <span class="keyword">static</span> <span class="keyword">initonly</span> <span class="identifier">ISyncInvoker</span>^ <span class="identifier">Instance</span></pre></div><div id="IDAB_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="identifier">Instance</span>: <span class="identifier">ISyncInvoker</span></pre></div></div></div><h4>Field Value</h4><a href="T_Microsoft_ClearScript_Windows_Core_ISyncInvoker.htm">ISyncInvoker</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('seeAlso')" onkeypress="SectionExpandCollapse_CheckKey('seeAlso', event)" tabindex="0"><img id="seeAlsoToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="seeAlsoSection" class="collapsibleSection"><h4>Reference</h4><div><a href="T_Microsoft_ClearScript_Windows_Core_NullSyncInvoker.htm">NullSyncInvoker Class</a></div><div><a href="N_Microsoft_ClearScript_Windows_Core.htm">Microsoft.ClearScript.Windows.Core Namespace</a></div></div></div></div><div id="PageFooter" class="pageFooter"><p>Copyright © Microsoft Corporation. All rights reserved.</p><div class="feedbackLink">Send comments on this topic to
<a id="HT_MailLink" href="mailto:ClearScript%40microsoft.com?Subject=ClearScript%20Library">Microsoft</a></div> <a id="HT_MailLink" href="mailto:ClearScript%40microsoft.com?Subject=ClearScript%20Library">Microsoft</a></div>
<script type="text/javascript"> <script type="text/javascript">

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

@ -1,6 +1,6 @@
<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="Microsoft.Help.SelfBranded" content="true" /><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Locale" content="en-us" /><meta name="Microsoft.Help.TopicLocale" content="en-us" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"></script><title>Nothing.Value Field</title><meta name="Title" content="Value Field" /><meta name="Microsoft.Help.Id" content="F:Microsoft.ClearScript.Windows.Nothing.Value" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="System.Keywords" content="Nothing.Value field" /><meta name="System.Keywords" content="Value field" /><meta name="Microsoft.Help.F1" content="Microsoft.ClearScript.Windows.Nothing.Value" /><meta name="Microsoft.Help.F1" content="Nothing.Value" /><meta name="Microsoft.Help.F1" content="Value" /><meta name="container" content="Microsoft.ClearScript.Windows" /><meta name="file" content="F_Microsoft_ClearScript_Windows_Nothing_Value" /><meta name="guid" content="F_Microsoft_ClearScript_Windows_Nothing_Value" /><meta name="Description" content="The sole instance of the class." /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-3.5.1.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script><script type="text/javascript" src="../scripts/clipboard.min.js"></script></head><body onload="SetDefaultLanguage('cs');"><input type="hidden" id="userDataCache" class="userDataStyle" /><div id="PageHeader" class="pageHeader">ClearScript Library<form id="SearchForm" method="get" action="#" onsubmit="TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library" tocid="roottoc">ClearScript Library</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library Reference" tocid="R_Project_Reference">ClearScript Library Reference</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/N_Microsoft_ClearScript_Windows.htm" title="Microsoft.ClearScript.Windows" tocid="N_Microsoft_ClearScript_Windows">Microsoft.ClearScript.Windows</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/T_Microsoft_ClearScript_Windows_Nothing.htm" title="Nothing Class" tocid="T_Microsoft_ClearScript_Windows_Nothing">Nothing Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/Fields_T_Microsoft_ClearScript_Windows_Nothing.htm" title="Nothing Fields" tocid="Fields_T_Microsoft_ClearScript_Windows_Nothing">Nothing Fields</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_Microsoft_ClearScript_Windows_Nothing_Value.htm" title="Value Field" tocid="F_Microsoft_ClearScript_Windows_Nothing_Value">Value Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div id="TopicContent" class="topicContent"><table class="titleTable"><tr><td class="titleColumn"><h1>Nothing<span id="LST4ACEDED7_0" data-languageSpecificText="cpp=::|nu=."></span>Value Field</h1></td></tr></table><div class="summary"> <html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="Microsoft.Help.SelfBranded" content="true" /><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Locale" content="en-us" /><meta name="Microsoft.Help.TopicLocale" content="en-us" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"></script><title>Nothing.Value Field</title><meta name="Title" content="Value Field" /><meta name="Microsoft.Help.Id" content="F:Microsoft.ClearScript.Windows.Nothing.Value" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="System.Keywords" content="Nothing.Value field" /><meta name="System.Keywords" content="Value field" /><meta name="Microsoft.Help.F1" content="Microsoft.ClearScript.Windows.Nothing.Value" /><meta name="Microsoft.Help.F1" content="Nothing.Value" /><meta name="Microsoft.Help.F1" content="Value" /><meta name="container" content="Microsoft.ClearScript.Windows" /><meta name="file" content="F_Microsoft_ClearScript_Windows_Nothing_Value" /><meta name="guid" content="F_Microsoft_ClearScript_Windows_Nothing_Value" /><meta name="Description" content="The sole instance of the class." /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-3.5.1.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script><script type="text/javascript" src="../scripts/clipboard.min.js"></script></head><body onload="SetDefaultLanguage('cs');"><input type="hidden" id="userDataCache" class="userDataStyle" /><div id="PageHeader" class="pageHeader">ClearScript Library<form id="SearchForm" method="get" action="#" onsubmit="TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library" tocid="roottoc">ClearScript Library</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/R_Project_Reference.htm" title="ClearScript Library Reference" tocid="R_Project_Reference">ClearScript Library Reference</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/N_Microsoft_ClearScript_Windows.htm" title="Microsoft.ClearScript.Windows" tocid="N_Microsoft_ClearScript_Windows">Microsoft.ClearScript.Windows</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/T_Microsoft_ClearScript_Windows_Nothing.htm" title="Nothing Class" tocid="T_Microsoft_ClearScript_Windows_Nothing">Nothing Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/Fields_T_Microsoft_ClearScript_Windows_Nothing.htm" title="Nothing Fields" tocid="Fields_T_Microsoft_ClearScript_Windows_Nothing">Nothing Fields</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_Microsoft_ClearScript_Windows_Nothing_Value.htm" title="Value Field" tocid="F_Microsoft_ClearScript_Windows_Nothing_Value">Value Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div id="TopicContent" class="topicContent"><table class="titleTable"><tr><td class="titleColumn"><h1>Nothing<span id="LST4ACEDED7_0" data-languageSpecificText="cpp=::|nu=."></span>Value Field</h1></td></tr></table><div class="summary">
The sole instance of the <span class="code"><a href="T_Microsoft_ClearScript_Windows_Nothing.htm">Nothing</a></span> class. The sole instance of the <span class="code"><a href="T_Microsoft_ClearScript_Windows_Nothing.htm">Nothing</a></span> class.
</div><br /><strong>Namespace:</strong> <a href="N_Microsoft_ClearScript_Windows.htm">Microsoft.ClearScript.Windows</a><br /><strong>Assembly:</strong> ClearScript.Windows.Core (in ClearScript.Windows.Core.dll) Version: 7.4.3<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('IDB')" onkeypress="SectionExpandCollapse_CheckKey('IDB', event)" tabindex="0"><img id="IDBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="IDBSection" class="collapsibleSection"><div id="IDAB" class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="IDAB_tab1" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cs','1','4');return false;">C#</a></div><div id="IDAB_tab2" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','vb','2','4');return false;">VB</a></div><div id="IDAB_tab3" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cpp','3','4');return false;">C++</a></div><div id="IDAB_tab4" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="IDAB_copyCode" href="#" class="copyCodeSnippet" onclick="CopyToClipboard('IDAB');return false;" title="Copy">Copy</a></div></div><div id="IDAB_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">readonly</span> <span class="identifier">Nothing</span> <span class="identifier">Value</span></pre></div><div id="IDAB_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">ReadOnly</span> <span class="identifier">Value</span> <span class="keyword">As</span> <span class="identifier">Nothing</span></pre></div><div id="IDAB_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>: </div><br /><strong>Namespace:</strong> <a href="N_Microsoft_ClearScript_Windows.htm">Microsoft.ClearScript.Windows</a><br /><strong>Assembly:</strong> ClearScript.Windows.Core (in ClearScript.Windows.Core.dll) Version: 7.4.4<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('IDB')" onkeypress="SectionExpandCollapse_CheckKey('IDB', event)" tabindex="0"><img id="IDBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="IDBSection" class="collapsibleSection"><div id="IDAB" class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="IDAB_tab1" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cs','1','4');return false;">C#</a></div><div id="IDAB_tab2" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','vb','2','4');return false;">VB</a></div><div id="IDAB_tab3" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','cpp','3','4');return false;">C++</a></div><div id="IDAB_tab4" class="codeSnippetContainerTab"><a href="#" onclick="ChangeTab('IDAB','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="IDAB_copyCode" href="#" class="copyCodeSnippet" onclick="CopyToClipboard('IDAB');return false;" title="Copy">Copy</a></div></div><div id="IDAB_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">readonly</span> <span class="identifier">Nothing</span> <span class="identifier">Value</span></pre></div><div id="IDAB_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">ReadOnly</span> <span class="identifier">Value</span> <span class="keyword">As</span> <span class="identifier">Nothing</span></pre></div><div id="IDAB_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
<span class="keyword">static</span> <span class="keyword">initonly</span> <span class="identifier">Nothing</span>^ <span class="identifier">Value</span></pre></div><div id="IDAB_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="identifier">Value</span>: <span class="identifier">Nothing</span></pre></div></div></div><h4>Field Value</h4><a href="T_Microsoft_ClearScript_Windows_Nothing.htm">Nothing</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('seeAlso')" onkeypress="SectionExpandCollapse_CheckKey('seeAlso', event)" tabindex="0"><img id="seeAlsoToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="seeAlsoSection" class="collapsibleSection"><h4>Reference</h4><div><a href="T_Microsoft_ClearScript_Windows_Nothing.htm">Nothing Class</a></div><div><a href="N_Microsoft_ClearScript_Windows.htm">Microsoft.ClearScript.Windows Namespace</a></div></div></div></div><div id="PageFooter" class="pageFooter"><p>Copyright © Microsoft Corporation. All rights reserved.</p><div class="feedbackLink">Send comments on this topic to <span class="keyword">static</span> <span class="keyword">initonly</span> <span class="identifier">Nothing</span>^ <span class="identifier">Value</span></pre></div><div id="IDAB_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="identifier">Value</span>: <span class="identifier">Nothing</span></pre></div></div></div><h4>Field Value</h4><a href="T_Microsoft_ClearScript_Windows_Nothing.htm">Nothing</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('seeAlso')" onkeypress="SectionExpandCollapse_CheckKey('seeAlso', event)" tabindex="0"><img id="seeAlsoToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="seeAlsoSection" class="collapsibleSection"><h4>Reference</h4><div><a href="T_Microsoft_ClearScript_Windows_Nothing.htm">Nothing Class</a></div><div><a href="N_Microsoft_ClearScript_Windows.htm">Microsoft.ClearScript.Windows Namespace</a></div></div></div></div><div id="PageFooter" class="pageFooter"><p>Copyright © Microsoft Corporation. All rights reserved.</p><div class="feedbackLink">Send comments on this topic to
<a id="HT_MailLink" href="mailto:ClearScript%40microsoft.com?Subject=ClearScript%20Library">Microsoft</a></div> <a id="HT_MailLink" href="mailto:ClearScript%40microsoft.com?Subject=ClearScript%20Library">Microsoft</a></div>
<script type="text/javascript"> <script type="text/javascript">

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

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

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

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

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

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

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

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