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:
Родитель
cb50bb0238
Коммит
6df5f19436
|
@ -40,9 +40,9 @@ namespace Microsoft.ClearScript
|
|||
type == typeof(TimeSpan) ||
|
||||
type == typeof(Guid) ||
|
||||
#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
|
||||
type.GetOrLoadCustomAttributes<ImmutableValueAttribute>(false).Any())
|
||||
type.GetOrLoadCustomAttributes<ImmutableValueAttribute>(null, false).Any())
|
||||
{
|
||||
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>
|
||||
public class CustomAttributeLoader
|
||||
{
|
||||
private readonly CustomAttributeCache cache = new CustomAttributeCache();
|
||||
|
||||
// ReSharper disable EmptyConstructor
|
||||
|
||||
/// <summary>
|
||||
|
@ -22,6 +24,11 @@ namespace Microsoft.ClearScript
|
|||
// 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
|
||||
|
||||
/// <summary>
|
||||
|
@ -60,5 +67,10 @@ namespace Microsoft.ClearScript
|
|||
|
||||
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.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using Microsoft.ClearScript.Util;
|
||||
|
||||
namespace Microsoft.ClearScript
|
||||
{
|
||||
internal static partial class CustomAttributes
|
||||
internal static class CustomAttributes
|
||||
{
|
||||
private static readonly object cacheLock = new object();
|
||||
|
||||
public static T[] GetOrLoad<T>(ICustomAttributeProvider resource, bool inherit) where T : Attribute
|
||||
public static T[] GetOrLoad<T>(IHostContext context, ICustomAttributeProvider resource, bool inherit) where T : Attribute
|
||||
{
|
||||
lock (cacheLock)
|
||||
{
|
||||
return GetOrLoad<T>(cache.GetOrCreateValue(resource), resource, inherit);
|
||||
}
|
||||
var loader = context?.CustomAttributeLoader ?? HostSettings.CustomAttributeLoader;
|
||||
return loader.GetOrLoad<T>(resource, inherit);
|
||||
}
|
||||
|
||||
public static bool Has<T>(ICustomAttributeProvider resource, bool inherit) where T : Attribute
|
||||
public static bool Has<T>(IHostContext context, ICustomAttributeProvider resource, bool inherit) where T : Attribute
|
||||
{
|
||||
lock (cacheLock)
|
||||
{
|
||||
return Has<T>(cache.GetOrCreateValue(resource), resource, inherit);
|
||||
return GetOrLoad<T>(context, resource, inherit).Length > 0;
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
#define CLEARSCRIPT_VERSION_STRING "7.4.3"
|
||||
#define CLEARSCRIPT_VERSION_COMMA_SEPARATED 7,4,3
|
||||
#define CLEARSCRIPT_VERSION_STRING_INFORMATIONAL "7.4.3"
|
||||
#define CLEARSCRIPT_VERSION_STRING "7.4.4"
|
||||
#define CLEARSCRIPT_VERSION_COMMA_SEPARATED 7,4,4
|
||||
#define CLEARSCRIPT_VERSION_STRING_INFORMATIONAL "7.4.4"
|
||||
#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);
|
||||
return collection;
|
||||
|
|
|
@ -17,28 +17,28 @@ namespace Microsoft.ClearScript
|
|||
|
||||
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());
|
||||
if (!table.ContainsKey(type) && type.HasExtensionMethods())
|
||||
if (!table.ContainsKey(type) && type.HasExtensionMethods(context))
|
||||
{
|
||||
const BindingFlags bindFlags = BindingFlags.Public | BindingFlags.Static;
|
||||
table[type] = type.GetMethods(bindFlags).Where(method => IsScriptableExtensionMethod(method, context)).ToArray();
|
||||
RebuildSummary();
|
||||
table[type] = type.GetMethods(bindFlags).Where(method => IsScriptableExtensionMethod(context, method)).ToArray();
|
||||
RebuildSummary(context);
|
||||
return true;
|
||||
}
|
||||
|
||||
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>();
|
||||
}
|
||||
|
||||
public ExtensionMethodSummary(Dictionary<Type, MethodInfo[]> table)
|
||||
public ExtensionMethodSummary(IHostContext context, Dictionary<Type, MethodInfo[]> table)
|
||||
{
|
||||
Types = table.Keys.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; }
|
||||
|
|
|
@ -643,7 +643,7 @@ namespace Microsoft.ClearScript
|
|||
public T flags<T>(params T[] args)
|
||||
{
|
||||
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()));
|
||||
}
|
||||
|
|
|
@ -346,7 +346,7 @@ namespace Microsoft.ClearScript
|
|||
{
|
||||
try
|
||||
{
|
||||
var rawResult = TypeHelpers.BindToMember(candidates, bindFlags, args, bindArgs);
|
||||
var rawResult = TypeHelpers.BindToMember(this, candidates, bindFlags, args, bindArgs);
|
||||
if (rawResult != null)
|
||||
{
|
||||
return MethodBindResult.Create(name, bindFlags, rawResult, hostTarget, args);
|
||||
|
@ -494,12 +494,12 @@ namespace Microsoft.ClearScript
|
|||
|
||||
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)
|
||||
{
|
||||
return !method.IsBlockedFromScript(hostItem.DefaultAccess);
|
||||
return !method.IsBlockedFromScript(hostItem, hostItem.DefaultAccess);
|
||||
}
|
||||
|
||||
public override object Invoke(HostItem hostItem)
|
||||
|
@ -509,7 +509,7 @@ namespace Microsoft.ClearScript
|
|||
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
|
||||
|
|
|
@ -362,12 +362,16 @@ namespace Microsoft.ClearScript
|
|||
set => targetMemberData.TargetInvocability = value;
|
||||
}
|
||||
|
||||
private CustomAttributeLoader CurrentCustomAttributeLoader => Engine.CustomAttributeLoader;
|
||||
|
||||
private Type CurrentAccessContext => Flags.HasFlag(HostItemFlags.PrivateAccess) ? Target.Type : Engine.AccessContext;
|
||||
|
||||
private ScriptAccess CurrentDefaultAccess => Engine.DefaultAccess;
|
||||
|
||||
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 ScriptAccess CachedDefaultAccess
|
||||
|
@ -562,7 +566,7 @@ namespace Microsoft.ClearScript
|
|||
|
||||
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)
|
||||
{
|
||||
|
@ -590,13 +594,13 @@ namespace Microsoft.ClearScript
|
|||
if ((TargetDynamic == null) && (TargetPropertyBag == null) && (TargetList == null) && (TargetDynamicMetaObject == null))
|
||||
{
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
|
||||
// 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)
|
||||
{
|
||||
var localEvents = Target.Type.GetScriptableEvents(this, GetCommonBindFlags());
|
||||
TypeEventNames = localEvents.Select(eventInfo => eventInfo.GetScriptName()).ToArray();
|
||||
TypeEventNames = localEvents.Select(eventInfo => eventInfo.GetScriptName(this)).ToArray();
|
||||
}
|
||||
|
||||
return TypeEventNames;
|
||||
|
@ -625,7 +629,7 @@ namespace Microsoft.ClearScript
|
|||
if (TypeFieldNames == null)
|
||||
{
|
||||
var localFields = Target.Type.GetScriptableFields(this, GetCommonBindFlags());
|
||||
TypeFieldNames = localFields.Select(field => field.GetScriptName()).ToArray();
|
||||
TypeFieldNames = localFields.Select(field => field.GetScriptName(this)).ToArray();
|
||||
}
|
||||
|
||||
return TypeFieldNames;
|
||||
|
@ -636,7 +640,7 @@ namespace Microsoft.ClearScript
|
|||
if (TypeMethodNames == null)
|
||||
{
|
||||
var localMethods = Target.Type.GetScriptableMethods(this, GetMethodBindFlags());
|
||||
TypeMethodNames = localMethods.Select(method => method.GetScriptName()).ToArray();
|
||||
TypeMethodNames = localMethods.Select(method => method.GetScriptName(this)).ToArray();
|
||||
}
|
||||
|
||||
return TypeMethodNames;
|
||||
|
@ -647,7 +651,7 @@ namespace Microsoft.ClearScript
|
|||
if (TypePropertyNames == null)
|
||||
{
|
||||
var localProperties = Target.Type.GetScriptableProperties(this, GetCommonBindFlags());
|
||||
TypePropertyNames = localProperties.Select(property => property.GetScriptName()).ToArray();
|
||||
TypePropertyNames = localProperties.Select(property => property.GetScriptName(this)).ToArray();
|
||||
}
|
||||
|
||||
return TypePropertyNames;
|
||||
|
@ -1600,33 +1604,31 @@ namespace Microsoft.ClearScript
|
|||
}
|
||||
|
||||
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");
|
||||
}
|
||||
|
||||
var result = GetHostPropertyWorker(property, getMethod, args);
|
||||
Engine.CachePropertyGetBindResult(signature, property);
|
||||
return result;
|
||||
return GetHostPropertyWorker(property, getMethod, 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)
|
||||
{
|
||||
var result = GetHostFieldWorker(field, out isCacheable);
|
||||
Engine.CachePropertyGetBindResult(signature, field);
|
||||
return result;
|
||||
return GetHostFieldWorker(field, out isCacheable);
|
||||
}
|
||||
|
||||
private object GetHostFieldWorker(FieldInfo field, out bool isCacheable)
|
||||
{
|
||||
var result = field.GetValue(Target.InvokeTarget);
|
||||
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)
|
||||
|
@ -1752,21 +1754,20 @@ namespace Microsoft.ClearScript
|
|||
|
||||
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)
|
||||
{
|
||||
throw new UnauthorizedAccessException("The property is read-only");
|
||||
}
|
||||
|
||||
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");
|
||||
}
|
||||
|
||||
var result = SetHostPropertyWorker(property, setMethod, args, bindArgs);
|
||||
Engine.CachePropertySetBindResult(signature, property);
|
||||
return result;
|
||||
return SetHostPropertyWorker(property, setMethod, args, 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))
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -1821,7 +1822,7 @@ namespace Microsoft.ClearScript
|
|||
if ((setParams.Length >= args.Length) && (setParams[args.Length - 1].ParameterType.IsAssignableFromValue(ref 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;
|
||||
}
|
||||
|
||||
|
@ -1835,14 +1836,13 @@ namespace Microsoft.ClearScript
|
|||
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");
|
||||
}
|
||||
|
||||
var result = SetHostFieldWorker(field, args);
|
||||
Engine.CachePropertySetBindResult(signature, field);
|
||||
return result;
|
||||
return SetHostFieldWorker(field, args);
|
||||
}
|
||||
|
||||
private object SetHostFieldWorker(FieldInfo field, object[] args)
|
||||
|
@ -2259,6 +2259,8 @@ namespace Microsoft.ClearScript
|
|||
return HostInvoke(() =>
|
||||
{
|
||||
var index = 0;
|
||||
|
||||
// ReSharper disable once ConditionIsAlwaysTrueOrFalse
|
||||
if (elements != null)
|
||||
{
|
||||
var maxCount = Math.Min(count, elements.Length);
|
||||
|
@ -2368,6 +2370,8 @@ namespace Microsoft.ClearScript
|
|||
|
||||
#region IHostTargetContext implementation
|
||||
|
||||
public CustomAttributeLoader CustomAttributeLoader => CachedCustomAttributeLoader;
|
||||
|
||||
public Type AccessContext => CachedAccessContext;
|
||||
|
||||
public ScriptAccess DefaultAccess => CachedDefaultAccess;
|
||||
|
|
|
@ -40,17 +40,14 @@ namespace Microsoft.ClearScript
|
|||
/// <summary>
|
||||
/// Gets or sets the custom attribute loader for ClearScript.
|
||||
/// </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
|
||||
{
|
||||
get => customAttributeLoader ?? DefaultCustomAttributeLoader;
|
||||
|
||||
set
|
||||
{
|
||||
customAttributeLoader = value;
|
||||
CustomAttributes.ClearCache();
|
||||
get => customAttributeLoader ?? CustomAttributeLoader.Default;
|
||||
set => customAttributeLoader = value;
|
||||
}
|
||||
}
|
||||
|
||||
internal static readonly CustomAttributeLoader DefaultCustomAttributeLoader = new CustomAttributeLoader();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,12 +30,14 @@ namespace Microsoft.ClearScript
|
|||
|
||||
internal class HostTargetMemberDataWithContext : HostTargetMemberData
|
||||
{
|
||||
public readonly CustomAttributeLoader CustomAttributeLoader;
|
||||
public readonly Type AccessContext;
|
||||
public readonly ScriptAccess DefaultAccess;
|
||||
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;
|
||||
DefaultAccess = defaultAccess;
|
||||
TargetFlags = targetFlags;
|
||||
|
|
|
@ -91,7 +91,7 @@ namespace Microsoft.ClearScript
|
|||
public void AddAssembly(Assembly assembly)
|
||||
{
|
||||
MiscHelpers.VerifyNonNullArgument(assembly, nameof(assembly));
|
||||
assembly.GetAllTypes().Where(type => type.IsImportable()).ForEach(AddType);
|
||||
assembly.GetAllTypes().Where(type => type.IsImportable(null)).ForEach(AddType);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -113,7 +113,7 @@ namespace Microsoft.ClearScript
|
|||
{
|
||||
MiscHelpers.VerifyNonNullArgument(assembly, nameof(assembly));
|
||||
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>
|
||||
|
|
|
@ -189,7 +189,7 @@ namespace Microsoft.ClearScript
|
|||
bool EnableAutoHostVariables { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the engine's undefined import value.
|
||||
/// Gets or sets the script engine's undefined import value.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 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; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the engine's null export value.
|
||||
/// Gets or sets the script engine's null export value.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// <para>
|
||||
|
@ -221,7 +221,7 @@ namespace Microsoft.ClearScript
|
|||
object NullExportValue { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the engine's void result export value.
|
||||
/// Gets or sets the script engine's void result export value.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Some script languages expect every subroutine call to return a value. When script code
|
||||
|
@ -259,7 +259,7 @@ namespace Microsoft.ClearScript
|
|||
/// <remarks>
|
||||
/// 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
|
||||
/// <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>.
|
||||
/// </remarks>
|
||||
ScriptObject Global { get; }
|
||||
|
@ -269,6 +269,20 @@ namespace Microsoft.ClearScript
|
|||
/// </summary>
|
||||
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>
|
||||
/// Exposes a host object to script code.
|
||||
/// </summary>
|
||||
|
|
|
@ -18,15 +18,15 @@ using System.Runtime.InteropServices;
|
|||
[assembly: InternalsVisibleTo("ClearScriptTest")]
|
||||
|
||||
[assembly: ComVisible(false)]
|
||||
[assembly: AssemblyVersion("7.4.3")]
|
||||
[assembly: AssemblyFileVersion("7.4.3")]
|
||||
[assembly: AssemblyInformationalVersion("7.4.3")]
|
||||
[assembly: AssemblyVersion("7.4.4")]
|
||||
[assembly: AssemblyFileVersion("7.4.4")]
|
||||
[assembly: AssemblyInformationalVersion("7.4.4")]
|
||||
|
||||
namespace Microsoft.ClearScript.Properties
|
||||
{
|
||||
internal static class ClearScriptVersion
|
||||
{
|
||||
public const string Triad = "7.4.3";
|
||||
public const string Informational = "7.4.3";
|
||||
public const string Triad = "7.4.4";
|
||||
public const string Informational = "7.4.4";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,6 +15,6 @@ using System.Runtime.InteropServices;
|
|||
[assembly: InternalsVisibleTo("ClearScript.V8")]
|
||||
|
||||
[assembly: ComVisible(false)]
|
||||
[assembly: AssemblyVersion("7.4.3")]
|
||||
[assembly: AssemblyFileVersion("7.4.3")]
|
||||
[assembly: AssemblyInformationalVersion("7.4.3")]
|
||||
[assembly: AssemblyVersion("7.4.4")]
|
||||
[assembly: AssemblyFileVersion("7.4.4")]
|
||||
[assembly: AssemblyInformationalVersion("7.4.4")]
|
||||
|
|
|
@ -15,6 +15,6 @@ using System.Runtime.InteropServices;
|
|||
[assembly: InternalsVisibleTo("ClearScriptTest")]
|
||||
|
||||
[assembly: ComVisible(false)]
|
||||
[assembly: AssemblyVersion("7.4.3")]
|
||||
[assembly: AssemblyFileVersion("7.4.3")]
|
||||
[assembly: AssemblyInformationalVersion("7.4.3")]
|
||||
[assembly: AssemblyVersion("7.4.4")]
|
||||
[assembly: AssemblyFileVersion("7.4.4")]
|
||||
[assembly: AssemblyInformationalVersion("7.4.4")]
|
||||
|
|
|
@ -16,6 +16,6 @@ using System.Runtime.InteropServices;
|
|||
[assembly: InternalsVisibleTo("ClearScriptTest")]
|
||||
|
||||
[assembly: ComVisible(false)]
|
||||
[assembly: AssemblyVersion("7.4.3")]
|
||||
[assembly: AssemblyFileVersion("7.4.3")]
|
||||
[assembly: AssemblyInformationalVersion("7.4.3")]
|
||||
[assembly: AssemblyVersion("7.4.4")]
|
||||
[assembly: AssemblyFileVersion("7.4.4")]
|
||||
[assembly: AssemblyInformationalVersion("7.4.4")]
|
||||
|
|
|
@ -15,6 +15,6 @@ using System.Runtime.InteropServices;
|
|||
[assembly: InternalsVisibleTo("ClearScriptTest")]
|
||||
|
||||
[assembly: ComVisible(false)]
|
||||
[assembly: AssemblyVersion("7.4.3")]
|
||||
[assembly: AssemblyFileVersion("7.4.3")]
|
||||
[assembly: AssemblyInformationalVersion("7.4.3")]
|
||||
[assembly: AssemblyVersion("7.4.4")]
|
||||
[assembly: AssemblyFileVersion("7.4.4")]
|
||||
[assembly: AssemblyInformationalVersion("7.4.4")]
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
@ -33,8 +34,7 @@ namespace Microsoft.ClearScript
|
|||
{
|
||||
#region data
|
||||
|
||||
private readonly Dictionary<string, object> dictionary;
|
||||
private readonly ICollection<KeyValuePair<string, object>> collection;
|
||||
private readonly IDictionary<string, object> dictionary;
|
||||
private readonly bool isReadOnly;
|
||||
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="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)
|
||||
: 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;
|
||||
Comparer = comparer;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
@ -93,7 +98,7 @@ namespace Microsoft.ClearScript
|
|||
/// <summary>
|
||||
/// Gets the property name comparer for the <c><see cref="PropertyBag"/></c>.
|
||||
/// </summary>
|
||||
public IEqualityComparer<string> Comparer => dictionary.Comparer;
|
||||
public IEqualityComparer<string> Comparer { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 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.")]
|
||||
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.")]
|
||||
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.")]
|
||||
bool ICollection<KeyValuePair<string, object>>.Remove(KeyValuePair<string, object> item)
|
||||
{
|
||||
CheckReadOnly();
|
||||
if (collection.Remove(item))
|
||||
if (dictionary.Remove(item))
|
||||
{
|
||||
NotifyPropertyChanged(item.Key);
|
||||
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.")]
|
||||
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.")]
|
||||
bool ICollection<KeyValuePair<string, object>>.IsReadOnly => isReadOnly;
|
||||
|
@ -345,4 +350,56 @@ namespace Microsoft.ClearScript
|
|||
|
||||
#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 bool enforceAnonymousTypeAccess;
|
||||
private bool exposeHostObjectStaticMembers;
|
||||
private CustomAttributeLoader customAttributeLoader;
|
||||
|
||||
private DocumentSettings documentSettings;
|
||||
private readonly DocumentSettings defaultDocumentSettings = new DocumentSettings();
|
||||
|
@ -80,7 +81,7 @@ namespace Microsoft.ClearScript
|
|||
/// <inheritdoc/>
|
||||
public abstract string FileNameExtension { get; }
|
||||
|
||||
/// <inheritdoc cref="ScriptEngine" />
|
||||
/// <inheritdoc cref="IScriptEngine.AccessContext" />
|
||||
public Type AccessContext
|
||||
{
|
||||
get => accessContext;
|
||||
|
@ -92,7 +93,7 @@ namespace Microsoft.ClearScript
|
|||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="ScriptEngine" />
|
||||
/// <inheritdoc cref="IScriptEngine.DefaultAccess" />
|
||||
public ScriptAccess DefaultAccess
|
||||
{
|
||||
get => defaultAccess;
|
||||
|
@ -203,6 +204,21 @@ namespace Microsoft.ClearScript
|
|||
set => documentSettings = value;
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="IScriptEngine.CustomAttributeLoader" />
|
||||
public CustomAttributeLoader CustomAttributeLoader
|
||||
{
|
||||
get => customAttributeLoader;
|
||||
|
||||
set
|
||||
{
|
||||
customAttributeLoader = value;
|
||||
OnAccessSettingsChanged();
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public object HostData { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public void AddHostObject(string itemName, object target)
|
||||
{
|
||||
|
@ -760,7 +776,7 @@ namespace Microsoft.ClearScript
|
|||
{
|
||||
if (extensionMethodTable != emptyExtensionMethodTable)
|
||||
{
|
||||
if (extensionMethodTable.ProcessType(type, this))
|
||||
if (extensionMethodTable.ProcessType(this, type))
|
||||
{
|
||||
ClearMethodBindCache();
|
||||
}
|
||||
|
@ -773,7 +789,7 @@ namespace Microsoft.ClearScript
|
|||
{
|
||||
if (extensionMethodTable != emptyExtensionMethodTable)
|
||||
{
|
||||
extensionMethodTable.RebuildSummary();
|
||||
extensionMethodTable.RebuildSummary(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -785,7 +801,7 @@ namespace Microsoft.ClearScript
|
|||
|
||||
internal void CacheConstructorBindResult(BindSignature signature, ConstructorInfo result)
|
||||
{
|
||||
constructorBindCache.Add(signature, result);
|
||||
constructorBindCache[signature] = result;
|
||||
}
|
||||
|
||||
internal bool TryGetCachedConstructorBindResult(BindSignature signature, out ConstructorInfo result)
|
||||
|
@ -806,7 +822,7 @@ namespace Microsoft.ClearScript
|
|||
|
||||
internal void CacheMethodBindResult(BindSignature signature, object result)
|
||||
{
|
||||
methodBindCache.Add(signature, result);
|
||||
methodBindCache[signature] = result;
|
||||
}
|
||||
|
||||
internal bool TryGetCachedMethodBindResult(BindSignature signature, out object result)
|
||||
|
@ -828,7 +844,7 @@ namespace Microsoft.ClearScript
|
|||
|
||||
internal void CachePropertyGetBindResult(BindSignature signature, MemberInfo property)
|
||||
{
|
||||
propertyGetBindCache.Add(signature, property);
|
||||
propertyGetBindCache[signature] = property;
|
||||
}
|
||||
|
||||
internal bool TryGetCachedPropertyGetBindResult(BindSignature signature, out MemberInfo property)
|
||||
|
@ -838,7 +854,7 @@ namespace Microsoft.ClearScript
|
|||
|
||||
internal void CachePropertySetBindResult(BindSignature signature, MemberInfo property)
|
||||
{
|
||||
propertySetBindCache.Add(signature, property);
|
||||
propertySetBindCache[signature] = 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>>();
|
||||
|
||||
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);
|
||||
|
||||
|
@ -1029,7 +1045,7 @@ namespace Microsoft.ClearScript
|
|||
}
|
||||
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;
|
||||
}
|
||||
|
@ -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));
|
||||
return newMemberData;
|
||||
}
|
||||
|
|
|
@ -74,22 +74,22 @@ namespace Microsoft.ClearScript.Util
|
|||
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)
|
||||
{
|
||||
|
@ -97,7 +97,7 @@ namespace Microsoft.ClearScript.Util
|
|||
}
|
||||
|
||||
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);
|
||||
if (AssemblyName.ReferenceMatchesDefinition(thatName, thisName))
|
||||
|
|
|
@ -7,6 +7,7 @@ namespace Microsoft.ClearScript.Util
|
|||
{
|
||||
internal interface IHostContext
|
||||
{
|
||||
CustomAttributeLoader CustomAttributeLoader { get; }
|
||||
ScriptEngine Engine { get; }
|
||||
Type AccessContext { get; }
|
||||
ScriptAccess DefaultAccess { get; }
|
||||
|
|
|
@ -83,7 +83,7 @@ namespace Microsoft.ClearScript.Util
|
|||
for (var index = 0; index < parameters.Length; 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]))
|
||||
{
|
||||
|
|
|
@ -13,27 +13,27 @@ namespace Microsoft.ClearScript.Util
|
|||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
|
@ -76,17 +76,17 @@ namespace Microsoft.ClearScript.Util
|
|||
|
||||
if (access == FieldAttributes.Assembly)
|
||||
{
|
||||
return accessContext.IsFriendOf(type);
|
||||
return accessContext.IsFriendOf(context, type);
|
||||
}
|
||||
|
||||
if (access == FieldAttributes.FamORAssem)
|
||||
{
|
||||
return accessContext.IsFamilyOf(type) || accessContext.IsFriendOf(type);
|
||||
return accessContext.IsFamilyOf(type) || accessContext.IsFriendOf(context, type);
|
||||
}
|
||||
|
||||
if (access == FieldAttributes.FamANDAssem)
|
||||
{
|
||||
return accessContext.IsFamilyOf(type) && accessContext.IsFriendOf(type);
|
||||
return accessContext.IsFamilyOf(type) && accessContext.IsFriendOf(context, type);
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -127,17 +127,17 @@ namespace Microsoft.ClearScript.Util
|
|||
|
||||
if (access == MethodAttributes.Assembly)
|
||||
{
|
||||
return accessContext.IsFriendOf(type);
|
||||
return accessContext.IsFriendOf(context, type);
|
||||
}
|
||||
|
||||
if (access == MethodAttributes.FamORAssem)
|
||||
{
|
||||
return accessContext.IsFamilyOf(type) || accessContext.IsFriendOf(type);
|
||||
return accessContext.IsFamilyOf(type) || accessContext.IsFriendOf(context, type);
|
||||
}
|
||||
|
||||
if (access == MethodAttributes.FamANDAssem)
|
||||
{
|
||||
return accessContext.IsFamilyOf(type) && accessContext.IsFriendOf(type);
|
||||
return accessContext.IsFamilyOf(type) && accessContext.IsFriendOf(context, type);
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -167,7 +167,7 @@ namespace Microsoft.ClearScript.Util
|
|||
|
||||
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)
|
||||
{
|
||||
|
@ -183,7 +183,7 @@ namespace Microsoft.ClearScript.Util
|
|||
|
||||
if (visibility == TypeAttributes.NotPublic)
|
||||
{
|
||||
return accessContext.IsFriendOf(type);
|
||||
return accessContext.IsFriendOf(context, type);
|
||||
}
|
||||
|
||||
type = type.DeclaringType;
|
||||
|
@ -210,41 +210,41 @@ namespace Microsoft.ClearScript.Util
|
|||
|
||||
if (visibility == TypeAttributes.NestedAssembly)
|
||||
{
|
||||
return accessContext.IsFriendOf(type);
|
||||
return accessContext.IsFriendOf(context, type);
|
||||
}
|
||||
|
||||
if (visibility == TypeAttributes.NestedFamORAssem)
|
||||
{
|
||||
return accessContext.IsFamilyOf(type) || accessContext.IsFriendOf(type);
|
||||
return accessContext.IsFamilyOf(type) || accessContext.IsFriendOf(context, type);
|
||||
}
|
||||
|
||||
if (visibility == TypeAttributes.NestedFamANDAssem)
|
||||
{
|
||||
return accessContext.IsFamilyOf(type) && accessContext.IsFriendOf(type);
|
||||
return accessContext.IsFamilyOf(type) && accessContext.IsFriendOf(context, type);
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
return attribute.Access;
|
||||
|
@ -260,14 +260,14 @@ namespace Microsoft.ClearScript.Util
|
|||
{
|
||||
if (testType.IsNested)
|
||||
{
|
||||
var nestedTypeAttribute = testType.GetOrLoadCustomAttribute<ScriptUsageAttribute>();
|
||||
var nestedTypeAttribute = testType.GetOrLoadCustomAttribute<ScriptUsageAttribute>(context);
|
||||
if (nestedTypeAttribute != null)
|
||||
{
|
||||
return nestedTypeAttribute.Access;
|
||||
}
|
||||
}
|
||||
|
||||
var typeAttribute = testType.GetOrLoadCustomAttribute<DefaultScriptUsageAttribute>();
|
||||
var typeAttribute = testType.GetOrLoadCustomAttribute<DefaultScriptUsageAttribute>(context);
|
||||
if (typeAttribute != null)
|
||||
{
|
||||
return typeAttribute.Access;
|
||||
|
@ -277,7 +277,7 @@ namespace Microsoft.ClearScript.Util
|
|||
|
||||
} while (testType != null);
|
||||
|
||||
var assemblyAttribute = declaringType.Assembly.GetOrLoadCustomAttribute<DefaultScriptUsageAttribute>();
|
||||
var assemblyAttribute = declaringType.Assembly.GetOrLoadCustomAttribute<DefaultScriptUsageAttribute>(context);
|
||||
if (assemblyAttribute != null)
|
||||
{
|
||||
return assemblyAttribute.Access;
|
||||
|
@ -288,20 +288,20 @@ namespace Microsoft.ClearScript.Util
|
|||
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);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -312,11 +312,11 @@ namespace Microsoft.ClearScript.Util
|
|||
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
|
||||
{
|
||||
return CustomAttributes.GetOrLoad<T>(member, inherit).SingleOrDefault();
|
||||
return CustomAttributes.GetOrLoad<T>(context, member, inherit).SingleOrDefault();
|
||||
}
|
||||
catch (AmbiguousMatchException)
|
||||
{
|
||||
|
@ -325,21 +325,21 @@ namespace Microsoft.ClearScript.Util
|
|||
// 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
|
||||
|
||||
return CustomAttributes.GetOrLoad<T>(member, false).SingleOrDefault();
|
||||
return CustomAttributes.GetOrLoad<T>(context, member, false).SingleOrDefault();
|
||||
}
|
||||
|
||||
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)
|
||||
|
|
|
@ -67,19 +67,19 @@ namespace Microsoft.ClearScript.Util
|
|||
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();
|
||||
return !importDenyList.Contains(locator) && IsValidLocator(locator);
|
||||
|
@ -88,7 +88,7 @@ namespace Microsoft.ClearScript.Util
|
|||
return false;
|
||||
}
|
||||
|
||||
public static bool IsAnonymous(this Type type)
|
||||
public static bool IsAnonymous(this Type type, IHostContext context)
|
||||
{
|
||||
if (!type.IsGenericType)
|
||||
{
|
||||
|
@ -112,7 +112,7 @@ namespace Microsoft.ClearScript.Util
|
|||
return false;
|
||||
}
|
||||
|
||||
if (!type.IsCompilerGenerated())
|
||||
if (!type.IsCompilerGenerated(context))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@ -222,9 +222,9 @@ namespace Microsoft.ClearScript.Util
|
|||
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)
|
||||
|
@ -253,20 +253,20 @@ namespace Microsoft.ClearScript.Util
|
|||
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)
|
||||
{
|
||||
return attribute.Value;
|
||||
}
|
||||
|
||||
attribute = type.Assembly.GetOrLoadCustomAttribute<ComVisibleAttribute>(false);
|
||||
attribute = type.Assembly.GetOrLoadCustomAttribute<ComVisibleAttribute>(context, false);
|
||||
if (attribute != null)
|
||||
{
|
||||
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)
|
||||
|
@ -360,12 +360,12 @@ namespace Microsoft.ClearScript.Util
|
|||
public static FieldInfo GetScriptableField(this Type type, IHostContext context, string name, BindingFlags 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 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)
|
||||
|
@ -382,7 +382,7 @@ namespace Microsoft.ClearScript.Util
|
|||
|
||||
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)
|
||||
|
@ -411,12 +411,12 @@ namespace Microsoft.ClearScript.Util
|
|||
}
|
||||
|
||||
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)
|
||||
{
|
||||
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)
|
||||
|
@ -430,7 +430,7 @@ namespace Microsoft.ClearScript.Util
|
|||
try
|
||||
{
|
||||
// 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)
|
||||
{
|
||||
|
@ -456,13 +456,13 @@ namespace Microsoft.ClearScript.Util
|
|||
}
|
||||
|
||||
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)
|
||||
{
|
||||
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)
|
||||
|
@ -506,13 +506,13 @@ namespace Microsoft.ClearScript.Util
|
|||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
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);
|
||||
|
||||
if (result == null)
|
||||
|
@ -718,7 +718,7 @@ namespace Microsoft.ClearScript.Util
|
|||
try
|
||||
{
|
||||
// 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)
|
||||
{
|
||||
|
@ -1001,21 +1001,21 @@ namespace Microsoft.ClearScript.Util
|
|||
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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
@ -1326,7 +1326,7 @@ namespace Microsoft.ClearScript.Util
|
|||
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 paramArray = false;
|
||||
|
@ -1343,7 +1343,7 @@ namespace Microsoft.ClearScript.Util
|
|||
var param = parameters[paramIndex];
|
||||
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;
|
||||
break;
|
||||
|
|
|
@ -1792,17 +1792,19 @@ namespace Microsoft.ClearScript.V8
|
|||
|
||||
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) =>
|
||||
{
|
||||
task.ContinueWith(_ => CompletePromise(task, resolve, reject), TaskContinuationOptions.ExecuteSynchronously);
|
||||
task.ContinueWith(_ => CompletePromise(task, resolve, reject), CancellationToken.None, TaskContinuationOptions.ExecuteSynchronously, scheduler);
|
||||
});
|
||||
}
|
||||
|
||||
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) =>
|
||||
{
|
||||
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 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 =>
|
||||
{
|
||||
source.SetResult(result);
|
||||
setResult(result);
|
||||
};
|
||||
|
||||
Action<object> onRejected = error =>
|
||||
|
@ -1829,7 +1838,7 @@ namespace Microsoft.ClearScript.V8
|
|||
}
|
||||
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.
|
||||
/// This option suppresses that behavior.
|
||||
/// </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)
|
||||
{
|
||||
|
@ -278,7 +278,7 @@ namespace Microsoft.ClearScript.Windows.Core
|
|||
continue;
|
||||
}
|
||||
|
||||
if ((item != null) && (item.GetType().IsCOMObject || item.GetType().IsCOMVisible()))
|
||||
if ((item != null) && (item.GetType().IsCOMObject || item.GetType().IsCOMVisible(this)))
|
||||
{
|
||||
directAccessItem = item;
|
||||
return true;
|
||||
|
|
|
@ -93,7 +93,7 @@ namespace Microsoft.ClearScript.Windows.Core
|
|||
else if (HResult.GetFacility(result) == HResult.FACILITY_CONTROL)
|
||||
{
|
||||
// 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))
|
||||
{
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT license.
|
||||
|
||||
using System;
|
||||
|
@ -9,12 +9,7 @@ namespace Microsoft.ClearScript.Windows
|
|||
{
|
||||
internal sealed class DispatcherSyncInvoker : ISyncInvoker
|
||||
{
|
||||
public DispatcherSyncInvoker()
|
||||
{
|
||||
Dispatcher = Dispatcher.CurrentDispatcher;
|
||||
}
|
||||
|
||||
public Dispatcher Dispatcher { get; }
|
||||
public Dispatcher Dispatcher { get; } = Dispatcher.CurrentDispatcher;
|
||||
|
||||
public bool CheckAccess()
|
||||
{
|
||||
|
|
Двоичные данные
ClearScript/doc/Reference.chm
Двоичные данные
ClearScript/doc/Reference.chm
Двоичный файл не отображается.
|
@ -11,6 +11,6 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCopyright("(c) Microsoft Corporation")]
|
||||
|
||||
[assembly: ComVisible(false)]
|
||||
[assembly: AssemblyVersion("7.4.3")]
|
||||
[assembly: AssemblyFileVersion("7.4.3")]
|
||||
[assembly: AssemblyInformationalVersion("7.4.3")]
|
||||
[assembly: AssemblyVersion("7.4.4")]
|
||||
[assembly: AssemblyFileVersion("7.4.4")]
|
||||
[assembly: AssemblyInformationalVersion("7.4.4")]
|
||||
|
|
|
@ -11,6 +11,6 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCopyright("(c) Microsoft Corporation")]
|
||||
|
||||
[assembly: ComVisible(false)]
|
||||
[assembly: AssemblyVersion("7.4.3")]
|
||||
[assembly: AssemblyFileVersion("7.4.3")]
|
||||
[assembly: AssemblyInformationalVersion("7.4.3")]
|
||||
[assembly: AssemblyVersion("7.4.4")]
|
||||
[assembly: AssemblyFileVersion("7.4.4")]
|
||||
[assembly: AssemblyInformationalVersion("7.4.4")]
|
||||
|
|
|
@ -1837,6 +1837,32 @@ namespace Microsoft.ClearScript.Test
|
|||
|
||||
#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
|
||||
|
||||
#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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -86,7 +86,7 @@ namespace Microsoft.ClearScript.Test
|
|||
{
|
||||
var assemblies = assemblyNames.Select(assemblyName => Assembly.Load(AssemblyTable.GetFullAssemblyName(assemblyName)));
|
||||
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)
|
||||
|
|
|
@ -657,7 +657,7 @@ namespace Microsoft.ClearScript.Test
|
|||
[TestMethod, TestCategory("JScriptCoreEngine")]
|
||||
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);
|
||||
// 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")]
|
||||
public void JScriptCoreEngine_ScriptObjectIdentity()
|
||||
{
|
||||
|
|
|
@ -656,7 +656,7 @@ namespace Microsoft.ClearScript.Test
|
|||
[TestMethod, TestCategory("JScriptEngine")]
|
||||
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);
|
||||
// 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")]
|
||||
public void JScriptEngine_ScriptObjectIdentity()
|
||||
{
|
||||
|
|
|
@ -11,6 +11,6 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCopyright("(c) Microsoft Corporation")]
|
||||
|
||||
[assembly: ComVisible(false)]
|
||||
[assembly: AssemblyVersion("7.4.3")]
|
||||
[assembly: AssemblyFileVersion("7.4.3")]
|
||||
[assembly: AssemblyInformationalVersion("7.4.3")]
|
||||
[assembly: AssemblyVersion("7.4.4")]
|
||||
[assembly: AssemblyFileVersion("7.4.4")]
|
||||
[assembly: AssemblyInformationalVersion("7.4.4")]
|
||||
|
|
|
@ -21,8 +21,8 @@ namespace Microsoft.ClearScript.Test
|
|||
|
||||
Action innerTest = () =>
|
||||
{
|
||||
// The Visual Studio 2013 debugging stack fails to release the engine properly,
|
||||
// resulting in test failure. Visual Studio 2012 does not have this bug.
|
||||
// The Visual Studio 2013 debugging stack fails to release the script engine
|
||||
// properly, resulting in test failure. Visual Studio 2012 does not have this bug.
|
||||
|
||||
using (var scriptEngine = new V8ScriptEngine())
|
||||
{
|
||||
|
@ -45,8 +45,8 @@ namespace Microsoft.ClearScript.Test
|
|||
var innerBag = new PropertyBag();
|
||||
Action innerTest = () =>
|
||||
{
|
||||
// The Visual Studio 2013 debugging stack fails to release the engine properly,
|
||||
// resulting in test failure. Visual Studio 2012 does not have this bug.
|
||||
// The Visual Studio 2013 debugging stack fails to release the script engine
|
||||
// properly, resulting in test failure. Visual Studio 2012 does not have this bug.
|
||||
|
||||
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.
|
||||
|
||||
using System;
|
||||
|
@ -25,8 +25,8 @@ namespace Microsoft.ClearScript.Test
|
|||
|
||||
Action innerTest = () =>
|
||||
{
|
||||
// The Visual Studio 2013 debugging stack fails to release the engine properly,
|
||||
// resulting in test failure. Visual Studio 2012 does not have this bug.
|
||||
// The Visual Studio 2013 debugging stack fails to release the script engine
|
||||
// properly, resulting in test failure. Visual Studio 2012 does not have this bug.
|
||||
|
||||
using (var scriptEngine = new VBScriptEngine())
|
||||
{
|
||||
|
@ -49,8 +49,8 @@ namespace Microsoft.ClearScript.Test
|
|||
var innerBag = new PropertyBag();
|
||||
Action innerTest = () =>
|
||||
{
|
||||
// The Visual Studio 2013 debugging stack fails to release the engine properly,
|
||||
// resulting in test failure. Visual Studio 2012 does not have this bug.
|
||||
// The Visual Studio 2013 debugging stack fails to release the script engine
|
||||
// properly, resulting in test failure. Visual Studio 2012 does not have this bug.
|
||||
|
||||
using (var scriptEngine = new VBScriptEngine())
|
||||
{
|
||||
|
@ -170,6 +170,70 @@ namespace Microsoft.ClearScript.Test
|
|||
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
|
||||
|
||||
#endregion
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
|
||||
using System;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using Microsoft.ClearScript.Util;
|
||||
using Microsoft.ClearScript.V8;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
|
||||
|
@ -196,6 +199,75 @@ namespace Microsoft.ClearScript.Test
|
|||
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
|
||||
|
||||
#endregion
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
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")]
|
||||
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
|
||||
|
||||
#endregion
|
||||
|
@ -5252,7 +5326,7 @@ namespace Microsoft.ClearScript.Test
|
|||
|
||||
builder.AppendLine();
|
||||
AppendCpuProfileTestSequence(builder, 4, MiscHelpers.CreateSeededRandom(), new List<int>());
|
||||
builder.Append(@" })()");
|
||||
builder.Append(" })()");
|
||||
builder.AppendLine();
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,7 +27,8 @@ public:
|
|||
EnableValueTaskPromiseConversion = 0x00000200,
|
||||
UseCaseInsensitiveMemberBinding = 0x00000400,
|
||||
EnableStringifyEnhancements = 0x00000800,
|
||||
HideHostExceptions = 0x00001000
|
||||
HideHostExceptions = 0x00001000,
|
||||
UseSynchronizationContexts = 0x00002000
|
||||
};
|
||||
|
||||
struct Options final
|
||||
|
|
|
@ -43,9 +43,9 @@
|
|||
<Compile Include="..\..\ClearScript\ByRefArg.cs" Link="ByRefArg.cs" />
|
||||
<Compile Include="..\..\ClearScript\CanonicalRefTable.cs" Link="CanonicalRefTable.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\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\DefaultScriptUsageAttribute.cs" Link="DefaultScriptUsageAttribute.cs" />
|
||||
<Compile Include="..\..\ClearScript\DelegateFactory.cs" Link="DelegateFactory.cs" />
|
||||
|
|
|
@ -40,9 +40,9 @@
|
|||
<Compile Include="..\..\ClearScript\ByRefArg.cs" Link="ByRefArg.cs" />
|
||||
<Compile Include="..\..\ClearScript\CanonicalRefTable.cs" Link="CanonicalRefTable.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\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\DefaultScriptUsageAttribute.cs" Link="DefaultScriptUsageAttribute.cs" />
|
||||
<Compile Include="..\..\ClearScript\DelegateFactory.cs" Link="DelegateFactory.cs" />
|
||||
|
|
|
@ -42,9 +42,9 @@
|
|||
<Compile Include="..\..\ClearScript\ByRefArg.cs" Link="ByRefArg.cs" />
|
||||
<Compile Include="..\..\ClearScript\CanonicalRefTable.cs" Link="CanonicalRefTable.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\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\DefaultScriptUsageAttribute.cs" Link="DefaultScriptUsageAttribute.cs" />
|
||||
<Compile Include="..\..\ClearScript\DelegateFactory.cs" Link="DelegateFactory.cs" />
|
||||
|
|
|
@ -66,9 +66,9 @@
|
|||
<Compile Include="..\..\ClearScript\ByRefArg.cs" Link="ByRefArg.cs" />
|
||||
<Compile Include="..\..\ClearScript\CanonicalRefTable.cs" Link="CanonicalRefTable.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\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\DefaultScriptUsageAttribute.cs" Link="DefaultScriptUsageAttribute.cs" />
|
||||
<Compile Include="..\..\ClearScript\DelegateFactory.cs" Link="DelegateFactory.cs" />
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
#!/bin/bash
|
||||
|
||||
v8testedrev=11.6.189.18
|
||||
v8testedrev=11.8.172.15
|
||||
v8testedcommit=
|
||||
v8cherrypicks=
|
||||
v8cherrypicks=28a7e2d45fd620fa68fb0678a7246fc8e426d1cc
|
||||
v8linuxbuildcommit=3d9590754d5d23e62d15472c5baf6777ca59df20
|
||||
v8linuxclangcommit=184bc29dd86c3994a02b4f3feca125ffe785319c
|
||||
|
||||
|
@ -174,6 +174,9 @@ if [[ $download == true ]]; then
|
|||
fi
|
||||
git apply --reject --ignore-whitespace ../../V8Patch.txt 2>apply-patch.log || fail
|
||||
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
|
||||
if [[ $v8linuxbuildcommit != "" ]]; then
|
||||
git reset --hard $v8linuxbuildcommit >resetBuild.log || fail
|
||||
|
@ -209,6 +212,12 @@ cd build/v8 || abort
|
|||
echo "Creating/updating patches ..."
|
||||
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
|
||||
echo "Installing LKG sysroots ..."
|
||||
build/linux/sysroot_scripts/install-sysroot.py --arch=x64 >install-x64-sysroot.log || fail
|
||||
|
@ -225,6 +234,10 @@ cd ../..
|
|||
echo "Importing patches ..."
|
||||
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 ..."
|
||||
cp build/v8/out/$cpu/$mode/icudtl.dat . || fail
|
||||
|
||||
|
|
|
@ -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",
|
||||
]
|
215
V8/V8Patch.txt
215
V8/V8Patch.txt
|
@ -1,5 +1,5 @@
|
|||
diff --git a/BUILD.gn b/BUILD.gn
|
||||
index c13cf053a8..07eca38dd3 100644
|
||||
index dd97c4f922c..b847c2d4cd4 100644
|
||||
--- a/BUILD.gn
|
||||
+++ b/BUILD.gn
|
||||
@@ -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_overrides/build.gni")
|
||||
|
||||
@@ -1179,7 +1178,7 @@ config("toolchain") {
|
||||
@@ -1228,7 +1227,7 @@ config("toolchain") {
|
||||
visibility = [ "./*" ]
|
||||
|
||||
defines = []
|
||||
- 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 = []
|
||||
|
||||
if (v8_current_cpu == "arm") {
|
||||
diff --git a/gni/v8.gni b/gni/v8.gni
|
||||
index 6a9f9c6610..efd40329f8 100644
|
||||
index e2505eea24e..977b8776db2 100644
|
||||
--- a/gni/v8.gni
|
||||
+++ b/gni/v8.gni
|
||||
@@ -100,7 +100,7 @@ declare_args() {
|
||||
@@ -103,7 +103,7 @@ declare_args() {
|
||||
cppgc_is_standalone = false
|
||||
|
||||
# Enable object names in cppgc for profiling purposes.
|
||||
|
@ -33,12 +33,12 @@ index 6a9f9c6610..efd40329f8 100644
|
|||
# Enable young generation in cppgc.
|
||||
cppgc_enable_young_generation = false
|
||||
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
|
||||
+++ b/include/libplatform/libplatform.h
|
||||
@@ -43,6 +43,8 @@ V8_PLATFORM_EXPORT std::unique_ptr<v8::Platform> NewDefaultPlatform(
|
||||
InProcessStackDumping::kDisabled,
|
||||
std::unique_ptr<v8::TracingController> tracing_controller = {});
|
||||
@@ -49,6 +49,8 @@ V8_PLATFORM_EXPORT std::unique_ptr<v8::Platform> NewDefaultPlatform(
|
||||
std::unique_ptr<v8::TracingController> tracing_controller = {},
|
||||
PriorityMode priority_mode = PriorityMode::kDontApply);
|
||||
|
||||
+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.
|
||||
* It must be used with the --single-threaded V8 flag.
|
||||
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
|
||||
+++ b/include/v8-initialization.h
|
||||
@@ -136,6 +136,7 @@ class V8_EXPORT V8 {
|
||||
|
@ -68,10 +68,10 @@ index d3e35d6ec5..56b3faaa79 100644
|
|||
V8();
|
||||
|
||||
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
|
||||
+++ b/include/v8-platform.h
|
||||
@@ -1206,7 +1206,7 @@ class Platform {
|
||||
@@ -1232,7 +1232,7 @@ class Platform {
|
||||
* required.
|
||||
*/
|
||||
virtual int64_t CurrentClockTimeMilliseconds() {
|
||||
|
@ -81,7 +81,7 @@ index 9811c6e7bf..3d34d1697a 100644
|
|||
|
||||
/**
|
||||
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
|
||||
+++ b/include/v8-template.h
|
||||
@@ -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.
|
||||
*
|
||||
diff --git a/include/v8config.h b/include/v8config.h
|
||||
index 33bb3f9431..f03936a972 100644
|
||||
index 33bb3f94316..f03936a972d 100644
|
||||
--- a/include/v8config.h
|
||||
+++ b/include/v8config.h
|
||||
@@ -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 */
|
||||
#endif
|
||||
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
|
||||
+++ b/src/api/api-natives.cc
|
||||
@@ -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.
|
||||
// TODO(dcarney): is this necessary?
|
||||
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
|
||||
+++ b/src/api/api.cc
|
||||
@@ -2110,6 +2110,17 @@ void ObjectTemplate::SetImmutableProto() {
|
||||
@@ -1921,6 +1921,17 @@ void ObjectTemplate::SetImmutableProto() {
|
||||
self->set_immutable_proto(true);
|
||||
}
|
||||
|
||||
+bool ObjectTemplate::IsHostDelegate() const {
|
||||
+ return Utils::OpenHandle(this)->host_delegate();
|
||||
+ return Utils::OpenDirectHandle(this)->host_delegate();
|
||||
+}
|
||||
+
|
||||
+void ObjectTemplate::SetHostDelegate() {
|
||||
+ auto self = Utils::OpenHandle(this);
|
||||
+ auto self = Utils::OpenDirectHandle(this);
|
||||
+ i::Isolate* isolate = self->GetIsolate();
|
||||
+ ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
||||
+ self->set_host_delegate(true);
|
||||
+}
|
||||
+
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -155,10 +155,10 @@ index a510fe68e6..0e94b2fa93 100644
|
|||
const char* icu_data_file) {
|
||||
return i::InitializeICUDefaultLocation(exec_path, icu_data_file);
|
||||
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
|
||||
+++ 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;
|
||||
}
|
||||
|
||||
|
@ -171,7 +171,7 @@ index 34a26d9c26..f995a2fc64 100644
|
|||
MatchLiteralCompareTypeof(right_, op(), left_, expr, literal);
|
||||
}
|
||||
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
|
||||
+++ b/src/base/build_config.h
|
||||
@@ -36,7 +36,7 @@
|
||||
|
@ -184,7 +184,7 @@ index 673330236c..30e752bc84 100644
|
|||
#define V8_HAS_PKU_JIT_WRITE_PROTECT 0
|
||||
#endif
|
||||
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
|
||||
+++ b/src/base/platform/platform.h
|
||||
@@ -52,6 +52,8 @@
|
||||
|
@ -197,11 +197,11 @@ index 27369a7a8d..fc58ac3d1d 100644
|
|||
#if V8_CC_MSVC && V8_HOST_ARCH_IA32
|
||||
// __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
|
||||
index e1a2a71c42..9152368a0e 100644
|
||||
index 9920f0b6dc1..61559e2d5fb 100644
|
||||
--- a/src/builtins/builtins-async-module.cc
|
||||
+++ b/src/builtins/builtins-async-module.cc
|
||||
@@ -15,7 +15,8 @@ BUILTIN(CallAsyncModuleFulfilled) {
|
||||
SourceTextModule::cast(isolate->context().get(
|
||||
SourceTextModule::cast(isolate->context()->get(
|
||||
SourceTextModule::ExecuteAsyncModuleContextSlots::kModule)),
|
||||
isolate);
|
||||
- if (SourceTextModule::AsyncModuleExecutionFulfilled(isolate, module)
|
||||
|
@ -211,10 +211,10 @@ index e1a2a71c42..9152368a0e 100644
|
|||
// The evaluation of async module can not throwing a JavaScript observable
|
||||
// exception.
|
||||
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
|
||||
+++ 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);
|
||||
}
|
||||
|
||||
|
@ -225,7 +225,7 @@ index 012bf97622..013f83d963 100644
|
|||
TNode<Uint16T> CodeStubAssembler::LoadMapInstanceType(TNode<Map> map) {
|
||||
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);
|
||||
|
||||
|
@ -238,10 +238,10 @@ index 012bf97622..013f83d963 100644
|
|||
Word32And(LoadMapBitField(map),
|
||||
Int32Constant(Map::Bits1::IsCallableBit::kMask |
|
||||
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
|
||||
+++ 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);
|
||||
// Load bit field 3 of a map.
|
||||
TNode<Uint32T> LoadMapBitField3(TNode<Map> map);
|
||||
|
@ -251,11 +251,11 @@ index 4e6d3c0dfa..c5aa9da763 100644
|
|||
TNode<Uint16T> LoadMapInstanceType(TNode<Map> 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
|
||||
index 4b8ac2e5c7..cd39ac8203 100644
|
||||
index e357648966e..c37396eff65 100644
|
||||
--- a/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
|
||||
|
@ -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
|
||||
+int RwxMemoryWriteScope::EnterHostScope() { return 0; }
|
||||
|
@ -352,7 +352,7 @@ index 4b8ac2e5c7..cd39ac8203 100644
|
|||
// static
|
||||
bool RwxMemoryWriteScope::IsSupported() {
|
||||
static_assert(base::MemoryProtectionKey::kNoMemoryProtectionKey == -1);
|
||||
@@ -72,31 +133,23 @@ bool RwxMemoryWriteScope::IsSupportedUntrusted() {
|
||||
@@ -140,31 +201,23 @@ bool RwxMemoryWriteScope::IsSupportedUntrusted() {
|
||||
}
|
||||
|
||||
// static
|
||||
|
@ -386,7 +386,7 @@ index 4b8ac2e5c7..cd39ac8203 100644
|
|||
}
|
||||
|
||||
#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; }
|
||||
|
||||
// static
|
||||
|
@ -400,7 +400,7 @@ index 4b8ac2e5c7..cd39ac8203 100644
|
|||
#endif // V8_HAS_PTHREAD_JIT_WRITE_PROTECT
|
||||
|
||||
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
|
||||
+++ b/src/common/code-memory-access.cc
|
||||
@@ -2,10 +2,22 @@
|
||||
|
@ -435,10 +435,10 @@ index be3b9741d2..3a533926da 100644
|
|||
|
||||
#if V8_HAS_PKU_JIT_WRITE_PROTECT
|
||||
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
|
||||
+++ 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();
|
||||
#endif // V8_HAS_PKU_JIT_WRITE_PROTECT
|
||||
|
||||
|
@ -448,7 +448,7 @@ index e90dcc9a64..78411014b2 100644
|
|||
private:
|
||||
friend class CodePageMemoryModificationScope;
|
||||
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 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
|
||||
index a71b866135..4f1d26676c 100644
|
||||
index a71b866135b..4f1d26676c2 100644
|
||||
--- a/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) {
|
||||
|
@ -542,7 +542,7 @@ index a71b866135..4f1d26676c 100644
|
|||
// Unprotect reserved page.
|
||||
DWORD old_protect;
|
||||
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
|
||||
+++ b/src/execution/isolate-inl.h
|
||||
@@ -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
|
||||
index efa6a6f0c4..d266dff4f5 100644
|
||||
index 563916a4e96..954e9eb242e 100644
|
||||
--- a/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,
|
||||
const ExecutionAccess& lock) {
|
||||
const uintptr_t kLimitSize = v8_flags.stack_size * KB;
|
||||
|
@ -570,31 +570,31 @@ index efa6a6f0c4..d266dff4f5 100644
|
|||
set_jslimit(SimulatorStack::JsLimitFromCLimit(isolate, limit));
|
||||
real_climit_ = limit;
|
||||
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
|
||||
+++ 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::IsExtensibleBit::encode(true);
|
||||
map.set_bit_field3(bit_field3);
|
||||
+ map.set_host_bit_field(0);
|
||||
map.set_instance_type(type);
|
||||
map->set_bit_field3(bit_field3);
|
||||
+ map->set_host_bit_field(0);
|
||||
map->set_instance_type(type);
|
||||
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
|
||||
index de292a6ca8..c1d3b483f5 100644
|
||||
index 9f51a70c46c..fb2a712c56c 100644
|
||||
--- a/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::ConstructionCounterBits::encode(Map::kNoSlackTracking);
|
||||
map.set_bit_field3(bit_field3);
|
||||
+ map.set_host_bit_field(0);
|
||||
DCHECK(!map.is_in_retained_map_list());
|
||||
map.clear_padding();
|
||||
map.set_elements_kind(TERMINAL_FAST_ELEMENTS_KIND);
|
||||
map->set_bit_field3(bit_field3);
|
||||
+ map->set_host_bit_field(0);
|
||||
DCHECK(!map->is_in_retained_map_list());
|
||||
map->clear_padding();
|
||||
map->set_elements_kind(TERMINAL_FAST_ELEMENTS_KIND);
|
||||
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
|
||||
+++ b/src/init/icu_util.cc
|
||||
@@ -98,6 +98,26 @@ bool InitializeICU(const char* icu_data_file) {
|
||||
|
@ -625,7 +625,7 @@ index 67d349557c..49ffb52386 100644
|
|||
#undef ICU_UTIL_DATA_STATIC
|
||||
|
||||
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
|
||||
+++ b/src/init/icu_util.h
|
||||
@@ -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
|
||||
// not specified.
|
||||
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
|
||||
+++ b/src/init/v8.cc
|
||||
@@ -95,7 +95,6 @@ V8_DECLARE_ONCE(init_snapshot_once);
|
||||
|
@ -658,10 +658,10 @@ index 71b811a107..64c43485ea 100644
|
|||
platform_ = platform;
|
||||
v8::base::SetPrintStackTrace(platform_->GetStackTracePrinter());
|
||||
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
|
||||
+++ 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;
|
||||
}
|
||||
|
||||
|
@ -673,10 +673,10 @@ index b1617b5f9a..0452721beb 100644
|
|||
IdleTaskSupport idle_task_support,
|
||||
InProcessStackDumping in_process_stack_dumping,
|
||||
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
|
||||
+++ 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);
|
||||
}
|
||||
|
||||
|
@ -691,10 +691,10 @@ index b2a0e553a0..a774ea3c24 100644
|
|||
JavaScriptArguments* args,
|
||||
uint32_t arg_count,
|
||||
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
|
||||
+++ 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
|
||||
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
|
||||
// undefined_value and the rest with filler_map.
|
||||
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
|
||||
+++ 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,
|
||||
Map::Bits3::ConstructionCounterBits)
|
||||
|
||||
+// |host_bit_field| fields.
|
||||
+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());
|
||||
FunctionTemplateInfo info = GetFunctionTemplateInfo(cage_base);
|
||||
Tagged<FunctionTemplateInfo> info = GetFunctionTemplateInfo(cage_base);
|
||||
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
|
||||
+++ 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.
|
||||
raw.set_bit_field3(new_bit_field3);
|
||||
+ raw.set_host_bit_field(src.host_bit_field());
|
||||
raw.clear_padding();
|
||||
raw->set_bit_field3(new_bit_field3);
|
||||
+ raw->set_host_bit_field(src->host_bit_field());
|
||||
raw->clear_padding();
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -743,10 +743,10 @@ index 5582485fd0..cded5cbee0 100644
|
|||
void EnsureInitialMap(Isolate* isolate, Handle<Map> map) {
|
||||
#ifdef DEBUG
|
||||
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
|
||||
+++ 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 <=
|
||||
Bits3::ConstructionCounterBits::kMax);
|
||||
|
||||
|
@ -758,7 +758,7 @@ index af5e9ae236..30a27cab82 100644
|
|||
// Inobject slack tracking is the way to reclaim unused inobject space.
|
||||
//
|
||||
// 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)
|
||||
|
||||
|
@ -767,7 +767,7 @@ index af5e9ae236..30a27cab82 100644
|
|||
// This counter is used for in-object slack tracking.
|
||||
// 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
|
||||
@@ -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,
|
||||
Handle<Map> map);
|
||||
|
||||
|
@ -777,7 +777,7 @@ index af5e9ae236..30a27cab82 100644
|
|||
|
||||
static_assert(kInstanceTypeOffset == Internals::kMapInstanceTypeOffset);
|
||||
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
|
||||
+++ b/src/objects/map.tq
|
||||
@@ -34,6 +34,10 @@ bitfield struct MapBitFields3 extends uint32 {
|
||||
|
@ -803,27 +803,28 @@ index 590fac8d96..dcadae3285 100644
|
|||
prototype: JSReceiver|Null;
|
||||
constructor_or_back_pointer_or_native_context: Object;
|
||||
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
|
||||
+++ b/src/objects/objects.cc
|
||||
@@ -902,6 +902,12 @@ Handle<String> Object::TypeOf(Isolate* isolate, Handle<Object> object) {
|
||||
if (object->IsString()) return isolate->factory()->string_string();
|
||||
if (object->IsSymbol()) return isolate->factory()->symbol_string();
|
||||
if (object->IsBigInt()) return isolate->factory()->bigint_string();
|
||||
+ if (object->IsJSObject()) {
|
||||
@@ -911,7 +911,12 @@ Handle<String> Object::TypeOf(Isolate* isolate, Handle<Object> object) {
|
||||
if (IsString(*object)) return isolate->factory()->string_string();
|
||||
if (IsSymbol(*object)) return isolate->factory()->symbol_string();
|
||||
if (IsBigInt(*object)) return isolate->factory()->bigint_string();
|
||||
- if (IsCallable(*object)) return isolate->factory()->function_string();
|
||||
+ if (IsJSObject(*object)) {
|
||||
+ Handle<JSObject> obj = Handle<JSObject>::cast(object);
|
||||
+ 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 (object->IsCallable()) return isolate->factory()->function_string();
|
||||
+ } if (IsCallable(*object)) return isolate->factory()->function_string();
|
||||
return isolate->factory()->object_string();
|
||||
}
|
||||
|
||||
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
|
||||
+++ 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()) {
|
||||
// i. Perform ! Call(capability.[[Resolve]], undefined,
|
||||
// «undefined»).
|
||||
|
@ -832,7 +833,7 @@ index 8a9d2cff94..9c566709b8 100644
|
|||
.ToHandleChecked();
|
||||
}
|
||||
|
||||
@@ -759,7 +759,7 @@ MaybeHandle<Object> SourceTextModule::Evaluate(
|
||||
@@ -760,7 +760,7 @@ MaybeHandle<Object> SourceTextModule::Evaluate(
|
||||
}
|
||||
|
||||
Maybe<bool> SourceTextModule::AsyncModuleExecutionFulfilled(
|
||||
|
@ -841,7 +842,7 @@ index 8a9d2cff94..9c566709b8 100644
|
|||
// 1. If module.[[Status]] is evaluated, then
|
||||
if (module->status() == kErrored) {
|
||||
// a. Assert: module.[[EvaluationError]] is not empty.
|
||||
@@ -783,7 +783,7 @@ Maybe<bool> SourceTextModule::AsyncModuleExecutionFulfilled(
|
||||
@@ -784,7 +784,7 @@ Maybe<bool> SourceTextModule::AsyncModuleExecutionFulfilled(
|
||||
// «undefined»).
|
||||
Handle<JSPromise> capability(
|
||||
JSPromise::cast(module->top_level_capability()), isolate);
|
||||
|
@ -850,7 +851,7 @@ index 8a9d2cff94..9c566709b8 100644
|
|||
.ToHandleChecked();
|
||||
}
|
||||
|
||||
@@ -849,7 +849,7 @@ Maybe<bool> SourceTextModule::AsyncModuleExecutionFulfilled(
|
||||
@@ -850,7 +850,7 @@ Maybe<bool> SourceTextModule::AsyncModuleExecutionFulfilled(
|
||||
// undefined, «undefined»).
|
||||
Handle<JSPromise> capability(
|
||||
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
|
||||
index 05a1cef551..9b58cc8385 100644
|
||||
index 55754c0a7d4..09cc31846d2 100644
|
||||
--- a/src/objects/source-text-module.h
|
||||
+++ b/src/objects/source-text-module.h
|
||||
@@ -58,7 +58,7 @@ class SourceTextModule
|
||||
|
@ -873,10 +874,10 @@ index 05a1cef551..9b58cc8385 100644
|
|||
Handle<SourceTextModule> module,
|
||||
Handle<Object> exception);
|
||||
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
|
||||
+++ 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));
|
||||
}
|
||||
|
||||
|
@ -888,23 +889,23 @@ index 1455538b5e..0197c87a7c 100644
|
|||
+ return set_data(IsHostDelegateBit::update(data(), value));
|
||||
+}
|
||||
+
|
||||
bool FunctionTemplateInfo::IsTemplateFor(JSObject object) {
|
||||
return IsTemplateFor(object.map());
|
||||
bool FunctionTemplateInfo::IsTemplateFor(Tagged<JSObject> object) const {
|
||||
return IsTemplateFor(object->map());
|
||||
}
|
||||
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
|
||||
+++ b/src/objects/templates.h
|
||||
@@ -206,6 +206,7 @@ class ObjectTemplateInfo
|
||||
@@ -207,6 +207,7 @@ class ObjectTemplateInfo
|
||||
DECL_INT_ACCESSORS(embedder_field_count)
|
||||
DECL_BOOLEAN_ACCESSORS(immutable_proto)
|
||||
DECL_BOOLEAN_ACCESSORS(code_like)
|
||||
+ DECL_BOOLEAN_ACCESSORS(host_delegate)
|
||||
|
||||
// Dispatched behavior.
|
||||
DECL_PRINTER(ObjectTemplateInfo)
|
||||
// Starting from given object template's constructor walk up the inheritance
|
||||
// chain till a function template that has an instance template is found.
|
||||
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
|
||||
+++ b/src/objects/templates.tq
|
||||
@@ -71,7 +71,8 @@ extern class FunctionTemplateInfo extends TemplateInfo {
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
@echo off
|
||||
setlocal
|
||||
|
||||
set v8testedrev=11.6.189.18
|
||||
set v8testedrev=11.8.172.15
|
||||
set v8testedcommit=
|
||||
set v8cherrypicks=28a7e2d45fd620fa68fb0678a7246fc8e426d1cc
|
||||
|
||||
if not "%v8testedcommit%"=="" goto ProcessArgs
|
||||
set v8testedcommit=%v8testedrev%
|
||||
|
@ -184,6 +185,10 @@ call git config user.name ClearScript
|
|||
if errorlevel 1 goto Error
|
||||
call git config user.email "ClearScript@microsoft.com"
|
||||
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
|
||||
if errorlevel 1 goto Error
|
||||
cd ..
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<#
|
||||
var version = new Version(7, 4, 3);
|
||||
var version = new Version(7, 4, 4);
|
||||
var versionSuffix = string.Empty;
|
||||
new Random(versionSuffix.Length); // suppress "versionSuffix not used" warning
|
||||
#>
|
||||
|
|
|
@ -1,13 +1,20 @@
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
activesupport (7.0.7.2)
|
||||
activesupport (7.1.0)
|
||||
base64
|
||||
bigdecimal
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
connection_pool (>= 2.2.5)
|
||||
drb
|
||||
i18n (>= 1.6, < 2)
|
||||
minitest (>= 5.1)
|
||||
mutex_m
|
||||
tzinfo (~> 2.0)
|
||||
addressable (2.8.5)
|
||||
public_suffix (>= 2.0.2, < 6.0)
|
||||
base64 (0.1.1)
|
||||
bigdecimal (3.1.4)
|
||||
coffee-script (2.4.1)
|
||||
coffee-script-source
|
||||
execjs
|
||||
|
@ -15,20 +22,24 @@ GEM
|
|||
colorator (1.1.0)
|
||||
commonmarker (0.23.10)
|
||||
concurrent-ruby (1.2.2)
|
||||
connection_pool (2.4.1)
|
||||
dnsruby (1.70.0)
|
||||
simpleidn (~> 0.2.1)
|
||||
drb (2.1.1)
|
||||
ruby2_keywords
|
||||
em-websocket (0.5.3)
|
||||
eventmachine (>= 0.12.9)
|
||||
http_parser.rb (~> 0)
|
||||
ethon (0.16.0)
|
||||
ffi (>= 1.15.0)
|
||||
eventmachine (1.2.7)
|
||||
execjs (2.8.1)
|
||||
faraday (2.7.10)
|
||||
execjs (2.9.1)
|
||||
faraday (2.7.11)
|
||||
base64
|
||||
faraday-net_http (>= 2.0, < 3.1)
|
||||
ruby2_keywords (>= 0.0.4)
|
||||
faraday-net_http (3.0.2)
|
||||
ffi (1.15.5)
|
||||
ffi (1.16.3)
|
||||
forwardable-extended (2.6.0)
|
||||
gemoji (3.0.1)
|
||||
github-pages (228)
|
||||
|
@ -209,8 +220,9 @@ GEM
|
|||
jekyll (>= 3.5, < 5.0)
|
||||
jekyll-feed (~> 0.9)
|
||||
jekyll-seo-tag (~> 2.1)
|
||||
minitest (5.19.0)
|
||||
nokogiri (1.15.3-x86_64-linux)
|
||||
minitest (5.20.0)
|
||||
mutex_m (0.1.2)
|
||||
nokogiri (1.15.4-x86_64-linux)
|
||||
racc (~> 1.4)
|
||||
octokit (4.25.1)
|
||||
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">
|
||||
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">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>);
|
||||
|
|
|
@ -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">
|
||||
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><<span class="identifier">V8RuntimeDebuggerEventArgs</span>> <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><<span class="identifier">V8RuntimeDebuggerEventArgs</span>> <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><<span class="identifier">V8RuntimeDebuggerEventArgs</span>^>^ <span class="identifier">DebuggerConnected</span> {
|
||||
<span class="keyword">void</span> <span class="keyword">add</span> (<span class="identifier">EventHandler</span><<span class="identifier">V8RuntimeDebuggerEventArgs</span>^>^ <span class="parameter">value</span>);
|
||||
<span class="keyword">void</span> <span class="keyword">remove</span> (<span class="identifier">EventHandler</span><<span class="identifier">V8RuntimeDebuggerEventArgs</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>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.
|
||||
</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
|
||||
<a id="HT_MailLink" href="mailto:ClearScript%40microsoft.com?Subject=ClearScript%20Library">Microsoft</a></div>
|
||||
<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<T>.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<T>.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<T> Class" tocid="T_Microsoft_ClearScript_ValueRef_1">ValueRef<T> 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<T> Fields" tocid="Fields_T_Microsoft_ClearScript_ValueRef_1">ValueRef<T> 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=<|cs=<|fs=<|vb=(Of |nu=("></span><span class="typeparameter">T</span><span id="LST84C254E1_1" data-languageSpecificText="cpp=>|cs=>|fs=>|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=<|vb=(Of |cpp=<|nu=(|fs=<'"></span>T<span id="LST84C254E1_4" data-languageSpecificText="cs=>|vb=)|cpp=>|nu=)|fs=>"></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=<|vb=(Of |cpp=<|nu=(|fs=<'"></span>T<span id="LST84C254E1_6" data-languageSpecificText="cs=>|vb=)|cpp=>|nu=)|fs=>"></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>
|
||||
<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">
|
||||
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
|
||||
<a id="HT_MailLink" href="mailto:ClearScript%40microsoft.com?Subject=ClearScript%20Library">Microsoft</a></div>
|
||||
<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">
|
||||
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
|
||||
<a id="HT_MailLink" href="mailto:ClearScript%40microsoft.com?Subject=ClearScript%20Library">Microsoft</a></div>
|
||||
<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">
|
||||
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
|
||||
<a id="HT_MailLink" href="mailto:ClearScript%40microsoft.com?Subject=ClearScript%20Library">Microsoft</a></div>
|
||||
<script type="text/javascript">
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче