diff --git a/src/OneScript.Core/TypeUtils.cs b/src/OneScript.Core/TypeUtils.cs index 1cb9bda5f..c742a45ac 100644 --- a/src/OneScript.Core/TypeUtils.cs +++ b/src/OneScript.Core/TypeUtils.cs @@ -18,6 +18,7 @@ public static bool IsNumeric(this Type type) switch (Type.GetTypeCode(type)) { case TypeCode.Int32: + return !type.IsEnum; case TypeCode.Decimal: case TypeCode.UInt32: case TypeCode.Int64: diff --git a/src/ScriptEngine/Machine/Contexts/ClrEnumValueWrapper.cs b/src/OneScript.Core/Values/ClrEnumValueWrapper.cs similarity index 66% rename from src/ScriptEngine/Machine/Contexts/ClrEnumValueWrapper.cs rename to src/OneScript.Core/Values/ClrEnumValueWrapper.cs index 0f6b71ed5..95970adf1 100644 --- a/src/ScriptEngine/Machine/Contexts/ClrEnumValueWrapper.cs +++ b/src/OneScript.Core/Values/ClrEnumValueWrapper.cs @@ -6,35 +6,25 @@ This Source Code Form is subject to the terms of the ----------------------------------------------------------*/ using OneScript.Commons; +using OneScript.Types; -namespace ScriptEngine.Machine.Contexts +namespace OneScript.Values { public class ClrEnumValueWrapper : EnumerationValue, IObjectWrapper where T :struct { private readonly T _realValue; - public ClrEnumValueWrapper(EnumerationContext owner, T realValue):base(owner) - { + public ClrEnumValueWrapper(TypeDescriptor systemType, T realValue, string name, string alias) + : base (systemType, name, alias) + { _realValue = realValue; } - public object UnderlyingObject - { - get - { - return _realValue; - } - } + public object UnderlyingObject => _realValue; - public T UnderlyingValue - { - get - { - return _realValue; - } - } + public T UnderlyingValue => _realValue; - public override bool Equals(IValue other) + public override bool Equals(BslValue other) { if (!(other?.GetRawValue() is ClrEnumValueWrapper otherWrapper)) return false; diff --git a/src/OneScript.Core/Values/EnumerationValue.cs b/src/OneScript.Core/Values/EnumerationValue.cs new file mode 100644 index 000000000..4d91d31bb --- /dev/null +++ b/src/OneScript.Core/Values/EnumerationValue.cs @@ -0,0 +1,59 @@ +/*---------------------------------------------------------- +This Source Code Form is subject to the terms of the +Mozilla Public License, v.2.0. If a copy of the MPL +was not distributed with this file, You can obtain one +at http://mozilla.org/MPL/2.0/. +----------------------------------------------------------*/ + +using OneScript.Commons; +using OneScript.Exceptions; +using OneScript.Localization; +using OneScript.Types; +using System; +using ScriptEngine.Machine; + +namespace OneScript.Values +{ + public abstract class EnumerationValue : BslValue + { + readonly TypeDescriptor _systemType; + readonly string _name, _alias; + + public EnumerationValue(TypeDescriptor systemType, string name, string alias) + { + if (!Utils.IsValidIdentifier(name)) + throw new ArgumentException("Name must be a valid identifier", "name"); + + if(alias != null && !Utils.IsValidIdentifier(alias)) + throw new ArgumentException("Name must be a valid identifier", "alias"); + + _systemType = systemType; + _name = name; + _alias = alias; + } + + public string Name => _name; + public string Alias => _alias; + + public bool IsFilled() => true; + + public override TypeDescriptor SystemType => _systemType; + + public override string ToString() + { + return BilingualString.Localize(_name, _alias); + } + + public override IValue GetRawValue() => this; + + public override int CompareTo(BslValue other) + { + throw RuntimeException.ComparisonNotSupportedException(); + } + + public override bool Equals(BslValue other) + { + return ReferenceEquals(other?.GetRawValue(), this); + } + } +} diff --git a/src/OneScript.Native/Compiler/ExpressionHelpers.cs b/src/OneScript.Native/Compiler/ExpressionHelpers.cs index c141e641a..a79d45285 100644 --- a/src/OneScript.Native/Compiler/ExpressionHelpers.cs +++ b/src/OneScript.Native/Compiler/ExpressionHelpers.cs @@ -267,6 +267,24 @@ private static Expression TryFindConversionOp(Expression value, Type targetType) return DowncastDecimal(decimalNum, targetType); } + else if (targetType.IsEnum) + { + Type generic = typeof(ClrEnumValueWrapper<>); + var wrapperType = generic.MakeGenericType(new[]{targetType}); + try + { + var wrapper = Expression.Convert(value, wrapperType); + return Expression.Property(wrapper,"UnderlyingValue"); + } + catch (InvalidOperationException) + { + throw new NativeCompilerException( + BilingualString.Localize( + $"Преобразование {value.Type} в тип {targetType} недоступно", + $"Conversion from {value.Type} to {targetType} is unavailable") + ); + } + } else { var conversion = TryConvertBslValueToPrimitiveType(value, targetType); diff --git a/src/OneScript.StandardLibrary/Binary/FileStreamContext.cs b/src/OneScript.StandardLibrary/Binary/FileStreamContext.cs index c186d9038..fb7b67294 100644 --- a/src/OneScript.StandardLibrary/Binary/FileStreamContext.cs +++ b/src/OneScript.StandardLibrary/Binary/FileStreamContext.cs @@ -8,7 +8,9 @@ This Source Code Form is subject to the terms of the using System; using System.IO; using OneScript.Contexts; +using OneScript.Exceptions; using OneScript.Types; +using OneScript.Values; using ScriptEngine.Machine; using ScriptEngine.Machine.Contexts; @@ -301,30 +303,34 @@ public Stream GetUnderlyingStream() } [ScriptConstructor(Name = "С указанием режима открытия")] - public static FileStreamContext Constructor(IValue filename, IValue openMode, IValue bufferSize = null) + public static FileStreamContext Constructor(IValue filename, IValue openMode, IValue param3 = null) { - if (bufferSize == null || bufferSize.SystemType == BasicTypes.Number) + if (param3 == null || param3.SystemType == BasicTypes.Number) { return new FileStreamContext( filename.AsString(), ContextValuesMarshaller.ConvertParam(openMode), FileAccessEnum.ReadAndWrite, - ContextValuesMarshaller.ConvertParam(bufferSize)); + ContextValuesMarshaller.ConvertParam(param3)); } else { - // перегрузка методов не позволяет вызвать второй конструктор без доуточнения реальных типов - return Constructor( - filename, - openMode, - new ClrEnumValueWrapper(null, FileAccessEnum.ReadAndWrite), - bufferSize); + if (param3 is ClrEnumValueWrapper access) + return new FileStreamContext( + filename.AsString(), + ContextValuesMarshaller.ConvertParam(openMode), + ContextValuesMarshaller.ConvertParam(access)); + else + throw RuntimeException.InvalidNthArgumentType(3); } } [ScriptConstructor(Name = "С указанием режима открытия и уровня доступа")] public static FileStreamContext Constructor(IValue filename, IValue openMode, IValue access, IValue bufferSize = null) { + if ( bufferSize != null && bufferSize.SystemType != BasicTypes.Number) + throw RuntimeException.InvalidNthArgumentType(4); + return new FileStreamContext( filename.AsString(), ContextValuesMarshaller.ConvertParam(openMode), diff --git a/src/OneScript.StandardLibrary/DriveInfo/DriveTypeEnum.cs b/src/OneScript.StandardLibrary/DriveInfo/DriveTypeEnum.cs index 83e55ef5b..44d5a73e3 100644 --- a/src/OneScript.StandardLibrary/DriveInfo/DriveTypeEnum.cs +++ b/src/OneScript.StandardLibrary/DriveInfo/DriveTypeEnum.cs @@ -7,6 +7,7 @@ This Source Code Form is subject to the terms of the using OneScript.Contexts.Enums; using OneScript.Types; +using OneScript.Values; using ScriptEngine.Machine.Contexts; namespace OneScript.StandardLibrary.DriveInfo @@ -24,31 +25,22 @@ namespace OneScript.StandardLibrary.DriveInfo [SystemEnum("ТипДиска", "DriveType")] public class DriveTypeEnum : EnumerationContext { - private DriveTypeEnum(TypeDescriptor typeRepresentation, TypeDescriptor valuesType) : base(typeRepresentation, valuesType) { - + this.WrapClrValue("Неизвестный", "Unknown", System.IO.DriveType.Unknown); + this.WrapClrValue("НеИмеетКорневойКаталог", "NoRootDirectory", System.IO.DriveType.NoRootDirectory); + this.WrapClrValue("СъемноеЗапоминающееУстройство", "Removable", System.IO.DriveType.Removable); + this.WrapClrValue("ЖесткийДиск", "Fixed", System.IO.DriveType.Fixed); + this.WrapClrValue("СетевойДиск", "Network", System.IO.DriveType.Network); + this.WrapClrValue("ОптическийДиск", "CDRom", System.IO.DriveType.CDRom); + this.WrapClrValue("ДискОЗУ", "Ram", System.IO.DriveType.Ram); } public static DriveTypeEnum CreateInstance(ITypeManager typeManager) { - - var instance = EnumContextHelper.CreateClrEnumInstance( - typeManager, - (t, v) => new DriveTypeEnum(t, v)); - - instance.WrapClrValue("Неизвестный", "Unknown", System.IO.DriveType.Unknown); - instance.WrapClrValue("НеИмеетКорневойКаталог", "NoRootDirectory", System.IO.DriveType.NoRootDirectory); - instance.WrapClrValue("СъемноеЗапоминающееУстройство", "Removable", System.IO.DriveType.Removable); - instance.WrapClrValue("ЖесткийДиск", "Fixed", System.IO.DriveType.Fixed); - instance.WrapClrValue("СетевойДиск", "Network", System.IO.DriveType.Network); - instance.WrapClrValue("ОптическийДиск", "CDRom", System.IO.DriveType.CDRom); - instance.WrapClrValue("ДискОЗУ", "Ram", System.IO.DriveType.Ram); - - return instance; + return EnumContextHelper.CreateClrEnumInstance( + typeManager, (t, v) => new DriveTypeEnum(t, v)); } - } - } diff --git a/src/OneScript.StandardLibrary/Json/JSONWriterSettings.cs b/src/OneScript.StandardLibrary/Json/JSONWriterSettings.cs index bbd82ebd6..44ea6bcb2 100644 --- a/src/OneScript.StandardLibrary/Json/JSONWriterSettings.cs +++ b/src/OneScript.StandardLibrary/Json/JSONWriterSettings.cs @@ -6,6 +6,7 @@ This Source Code Form is subject to the terms of the ----------------------------------------------------------*/ using OneScript.Contexts; +using OneScript.Values; using ScriptEngine.Machine; using ScriptEngine.Machine.Contexts; diff --git a/src/OneScript.StandardLibrary/SystemEnvironmentContext.cs b/src/OneScript.StandardLibrary/SystemEnvironmentContext.cs index fd57231a2..57b74b6b2 100644 --- a/src/OneScript.StandardLibrary/SystemEnvironmentContext.cs +++ b/src/OneScript.StandardLibrary/SystemEnvironmentContext.cs @@ -12,6 +12,7 @@ This Source Code Form is subject to the terms of the using OneScript.Contexts; using OneScript.Exceptions; using OneScript.StandardLibrary.Collections; +using OneScript.Values; using ScriptEngine; using ScriptEngine.HostedScript.Library; using ScriptEngine.Machine; diff --git a/src/OneScript.StandardLibrary/Tasks/BackgroundTasksManager.cs b/src/OneScript.StandardLibrary/Tasks/BackgroundTasksManager.cs index b29110e35..cece7e540 100644 --- a/src/OneScript.StandardLibrary/Tasks/BackgroundTasksManager.cs +++ b/src/OneScript.StandardLibrary/Tasks/BackgroundTasksManager.cs @@ -15,6 +15,7 @@ This Source Code Form is subject to the terms of the using OneScript.Exceptions; using OneScript.StandardLibrary.Collections; using OneScript.Types; +using OneScript.Values; using ScriptEngine.Machine; using ScriptEngine.Machine.Contexts; using ExecutionContext = ScriptEngine.Machine.ExecutionContext; diff --git a/src/OneScript.StandardLibrary/Text/ConsoleColorEnum.cs b/src/OneScript.StandardLibrary/Text/ConsoleColorEnum.cs index adc8b984b..dc0cf548d 100644 --- a/src/OneScript.StandardLibrary/Text/ConsoleColorEnum.cs +++ b/src/OneScript.StandardLibrary/Text/ConsoleColorEnum.cs @@ -8,6 +8,7 @@ This Source Code Form is subject to the terms of the using System; using OneScript.Contexts.Enums; using OneScript.Types; +using OneScript.Values; using ScriptEngine.Machine.Contexts; namespace OneScript.StandardLibrary.Text @@ -18,35 +19,28 @@ public class ConsoleColorEnum : ClrEnumWrapper private ConsoleColorEnum(TypeDescriptor typeRepresentation, TypeDescriptor valuesType) : base(typeRepresentation, valuesType) { + this.WrapClrValue("Черный", "Black", ConsoleColor.Black); + this.WrapClrValue("ТемноСиний", "DarkBlue", ConsoleColor.DarkBlue); + this.WrapClrValue("ТемноЗеленый", "DarkGreen", ConsoleColor.DarkGreen); + this.WrapClrValue("ТемноБирюзовый", "DarkCyan", ConsoleColor.DarkCyan); + this.WrapClrValue("ТемноКрасный", "DarkRed", ConsoleColor.DarkRed); + this.WrapClrValue("ТемноМалиновый", "DarkMagenta", ConsoleColor.DarkMagenta); + this.WrapClrValue("ТемноЖелтый", "DarkYellow", ConsoleColor.DarkYellow); + this.WrapClrValue("Серый", "Gray", ConsoleColor.Gray); + + this.WrapClrValue("ТемноСерый", "DarkGray", ConsoleColor.DarkGray); + this.WrapClrValue("Синий", "Blue", ConsoleColor.Blue); + this.WrapClrValue("Зеленый", "Green", ConsoleColor.Green); + this.WrapClrValue("Бирюза", "Cyan", ConsoleColor.Cyan); + this.WrapClrValue("Красный", "Red", ConsoleColor.Red); + this.WrapClrValue("Малиновый", "Magenta", ConsoleColor.Magenta); + this.WrapClrValue("Желтый", "Yellow", ConsoleColor.Yellow); + this.WrapClrValue("Белый", "White", ConsoleColor.White); } public static ConsoleColorEnum CreateInstance(ITypeManager typeManager) { - var instance = EnumContextHelper.CreateClrEnumInstance( - typeManager, - (t,v) => new ConsoleColorEnum(t,v)); - - instance.WrapClrValue("Черный", "Black", ConsoleColor.Black); - instance.WrapClrValue("ТемноСиний", "DarkBlue", ConsoleColor.DarkBlue); - instance.WrapClrValue("ТемноЗеленый", "DarkGreen", ConsoleColor.DarkGreen); - instance.WrapClrValue("ТемноБирюзовый", "DarkCyan", ConsoleColor.DarkCyan); - instance.WrapClrValue("ТемноКрасный", "DarkRed", ConsoleColor.DarkRed); - instance.WrapClrValue("ТемноМалиновый", "DarkMagenta", ConsoleColor.DarkMagenta); - instance.WrapClrValue("ТемноЖелтый", "DarkYellow", ConsoleColor.DarkYellow); - instance.WrapClrValue("Серый", "Gray", ConsoleColor.Gray); - - instance.WrapClrValue("ТемноСерый", "DarkGray", ConsoleColor.DarkGray); - instance.WrapClrValue("Синий", "Blue", ConsoleColor.Blue); - instance.WrapClrValue("Зеленый", "Green", ConsoleColor.Green); - instance.WrapClrValue("Бирюза", "Cyan", ConsoleColor.Cyan); - instance.WrapClrValue("Красный", "Red", ConsoleColor.Red); - instance.WrapClrValue("Малиновый", "Magenta", ConsoleColor.Magenta); - instance.WrapClrValue("Желтый", "Yellow", ConsoleColor.Yellow); - instance.WrapClrValue("Белый", "White", ConsoleColor.White); - - OnInstanceCreation(instance); - - return instance; + return CreateInstance(typeManager, (t, v) => new ConsoleColorEnum(t, v)); } } } diff --git a/src/OneScript.StandardLibrary/Text/ConsoleContext.cs b/src/OneScript.StandardLibrary/Text/ConsoleContext.cs index 76f547229..f0c484672 100644 --- a/src/OneScript.StandardLibrary/Text/ConsoleContext.cs +++ b/src/OneScript.StandardLibrary/Text/ConsoleContext.cs @@ -10,6 +10,7 @@ This Source Code Form is subject to the terms of the using OneScript.Contexts; using OneScript.Exceptions; using OneScript.StandardLibrary.Binary; +using OneScript.Values; using ScriptEngine.Machine; using ScriptEngine.Machine.Contexts; diff --git a/src/OneScript.StandardLibrary/Text/TextEncodingEnum.cs b/src/OneScript.StandardLibrary/Text/TextEncodingEnum.cs index 46ccd36a6..33ce7cf7c 100644 --- a/src/OneScript.StandardLibrary/Text/TextEncodingEnum.cs +++ b/src/OneScript.StandardLibrary/Text/TextEncodingEnum.cs @@ -11,6 +11,7 @@ This Source Code Form is subject to the terms of the using OneScript.Types; using ScriptEngine.Machine; using ScriptEngine.Machine.Contexts; +using OneScript.Values; namespace OneScript.StandardLibrary.Text { @@ -141,7 +142,7 @@ public static Encoding GetEncoding(IValue encoding, bool addBOM = true) if (!(encoding.GetRawValue() is ClrEnumValueWrapper encValue)) throw RuntimeException.InvalidArgumentType(); - var encodingEnum = (TextEncodingEnum)encValue.Owner; + var encodingEnum = GlobalsHelper.GetEnum(); Encoding enc; if (encValue == encodingEnum.Ansi) diff --git a/src/OneScript.StandardLibrary/XDTO/XDTOSerializer.cs b/src/OneScript.StandardLibrary/XDTO/XDTOSerializer.cs index d09602c57..032e07ad6 100644 --- a/src/OneScript.StandardLibrary/XDTO/XDTOSerializer.cs +++ b/src/OneScript.StandardLibrary/XDTO/XDTOSerializer.cs @@ -23,13 +23,10 @@ namespace OneScript.StandardLibrary.XDTO public sealed class XDTOSerializer : AutoContext { private readonly XmlGlobalFunctions _xmlGlobalFunctions; - private readonly XmlNodeTypeEnum _xmlNodeEnum; - private XDTOSerializer(IGlobalsManager globalsManager) { _xmlGlobalFunctions = globalsManager.GetInstance(); - _xmlNodeEnum = globalsManager.GetInstance(); } private void WriteXMLSimpleData(XmlWriterImpl xmlWriter, @@ -190,7 +187,7 @@ public IValue ReadXML(XmlReaderImpl xmlReader, IValue valueType = null) if (valueType is BslTypeValue typeTypeValue) typeValue = typeTypeValue; - else if (xmlReader.NodeType.Equals(_xmlNodeEnum.FromNativeValue(XmlNodeType.Element))) + else if (xmlReader.NodeType.Equals(XmlNodeTypeEnum.FromNativeValue(XmlNodeType.Element))) { IValue xsiType = xmlReader.GetAttribute(ValueFactory.Create("type"), XmlSchema.InstanceNamespace); IValue xsiNil = xmlReader.GetAttribute(ValueFactory.Create("nil"), XmlSchema.InstanceNamespace); @@ -238,7 +235,7 @@ public IValue ReadXML(XmlReaderImpl xmlReader, IValue valueType = null) else if (typeof(BslPrimitiveValue).IsAssignableFrom(implType)) { xmlReader.Read(); - if (xmlReader.NodeType.Equals(_xmlNodeEnum.FromNativeValue(XmlNodeType.Text))) + if (xmlReader.NodeType.Equals(XmlNodeTypeEnum.FromNativeValue(XmlNodeType.Text))) { result = XMLValue(typeValue, xmlReader.Value); xmlReader.Read(); diff --git a/src/OneScript.StandardLibrary/XMLSchema/Collections/XSComplexFinalUnion.cs b/src/OneScript.StandardLibrary/XMLSchema/Collections/XSComplexFinalUnion.cs index 3ca016b24..6b8b24765 100644 --- a/src/OneScript.StandardLibrary/XMLSchema/Collections/XSComplexFinalUnion.cs +++ b/src/OneScript.StandardLibrary/XMLSchema/Collections/XSComplexFinalUnion.cs @@ -22,7 +22,7 @@ public sealed class XSComplexFinalUnion : AutoContext private bool Contains(XmlSchemaDerivationMethod value) { - XSComplexFinal enumValue = XSComplexFinal.FromNativeValue(value); + var enumValue = EnumerationXSComplexFinal.FromNativeValue(value); IValue idx = _values.Find(enumValue); return idx.SystemType == BasicTypes.Number; } diff --git a/src/OneScript.StandardLibrary/XMLSchema/Collections/XSProhibitedSubstitutionsUnion.cs b/src/OneScript.StandardLibrary/XMLSchema/Collections/XSProhibitedSubstitutionsUnion.cs index 04e19508b..c8b7b46a2 100644 --- a/src/OneScript.StandardLibrary/XMLSchema/Collections/XSProhibitedSubstitutionsUnion.cs +++ b/src/OneScript.StandardLibrary/XMLSchema/Collections/XSProhibitedSubstitutionsUnion.cs @@ -22,7 +22,7 @@ public sealed class XsProhibitedSubstitutionsUnion : AutoContext private bool Contains(XmlSchemaDerivationMethod value) { - var enumValue = EnumerationXSSchemaFinal.Instance.FromNativeValue(value); + var enumValue = EnumerationXSSchemaFinal.FromNativeValue(value); var idx = _values.Find(enumValue); return (idx.SystemType != BasicTypes.Undefined); } diff --git a/src/OneScript.StandardLibrary/XMLSchema/Collections/XSSubstitutionGroupExclusionsUnion.cs b/src/OneScript.StandardLibrary/XMLSchema/Collections/XSSubstitutionGroupExclusionsUnion.cs index 489c33adf..bee4847ff 100644 --- a/src/OneScript.StandardLibrary/XMLSchema/Collections/XSSubstitutionGroupExclusionsUnion.cs +++ b/src/OneScript.StandardLibrary/XMLSchema/Collections/XSSubstitutionGroupExclusionsUnion.cs @@ -21,7 +21,7 @@ public sealed class XsSubstitutionGroupExclusionsUnion : AutoContext _derivationMethod = derivationMethod; - - public static XSComplexFinal FromNativeValue(XmlSchemaDerivationMethod native) - => EnumerationXSComplexFinal.FromNativeValue(native); - - public static XmlSchemaDerivationMethod ToNativeValue(XSComplexFinal wrapper) - => wrapper._derivationMethod; - } - [SystemEnum("ЗавершенностьСоставногоТипаXS", "XSComplexFinal")] - public sealed class EnumerationXSComplexFinal : EnumerationContext + public sealed class EnumerationXSComplexFinal : ClrEnumWrapperCached { - private readonly Dictionary _valuesCache; - private EnumerationXSComplexFinal(TypeDescriptor typeRepresentation, TypeDescriptor valuesType) : base(typeRepresentation, valuesType) { - _valuesCache = new Dictionary - { - { XmlSchemaDerivationMethod.All, new XSComplexFinal(this, XmlSchemaDerivationMethod.All) }, - { XmlSchemaDerivationMethod.Restriction, new XSComplexFinal(this, XmlSchemaDerivationMethod.Restriction) }, - { XmlSchemaDerivationMethod.Extension, new XSComplexFinal(this, XmlSchemaDerivationMethod.Extension) } - }; - } - internal static XSComplexFinal FromNativeValue(XmlSchemaDerivationMethod native) - { - EnumerationXSComplexFinal enumeration = GlobalsHelper.GetEnum(); - enumeration._valuesCache.TryGetValue(native, out XSComplexFinal value); - return value; + MakeValue("Все", "All", XmlSchemaDerivationMethod.All); + MakeValue("Ограничение", "Restriction", XmlSchemaDerivationMethod.Restriction); + MakeValue("Список", "List", XmlSchemaDerivationMethod.List); } public static EnumerationXSComplexFinal CreateInstance(ITypeManager typeManager) { - var type = typeManager.RegisterType( - "ПеречислениеЗавершенностьСоставногоТипаXS", - "EnumerationXSComplexFinal", - typeof(EnumerationXSComplexFinal)); - - var enumValueType = typeManager.RegisterType( - "ЗавершенностьСоставногоТипаXS", - "XSComplexFinal", - typeof(XSComplexFinal)); - - EnumerationXSComplexFinal instance = new EnumerationXSComplexFinal(type, enumValueType); - instance.AddValue("Все", "All", new XSComplexFinal(instance, XmlSchemaDerivationMethod.All)); - instance.AddValue("Ограничение", "Restriction", new XSComplexFinal(instance, XmlSchemaDerivationMethod.Restriction)); - instance.AddValue("Расширение", "Extension", new XSComplexFinal(instance, XmlSchemaDerivationMethod.Extension)); - - return instance; + return CreateInstance(typeManager, (t,v) => new EnumerationXSComplexFinal(t,v)); } } - } diff --git a/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSDisallowedSubstitutions.cs b/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSDisallowedSubstitutions.cs index 9a52f923c..db80ce228 100644 --- a/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSDisallowedSubstitutions.cs +++ b/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSDisallowedSubstitutions.cs @@ -5,86 +5,28 @@ This Source Code Form is subject to the terms of the at http://mozilla.org/MPL/2.0/. ----------------------------------------------------------*/ -using System.Collections.Generic; using System.Xml.Schema; using OneScript.Contexts.Enums; using OneScript.Types; -using ScriptEngine.Machine; using ScriptEngine.Machine.Contexts; namespace OneScript.StandardLibrary.XMLSchema.Enumerations { - public sealed class XSDisallowedSubstitutions : ClrEnumValueWrapper - { - internal XSDisallowedSubstitutions(EnumerationXSDisallowedSubstitutions instance, XmlSchemaDerivationMethod realValue) - : base(instance, realValue) - { - } - - public static XSDisallowedSubstitutions FromNativeValue(XmlSchemaDerivationMethod native) - => EnumerationXSDisallowedSubstitutions.FromNativeValue(native); - - public static XmlSchemaDerivationMethod ToNativeValue(XSDisallowedSubstitutions wrapper) - => wrapper.UnderlyingValue; - } - [SystemEnum("НедопустимыеПодстановкиXS", "XSDisallowedSubstitutions")] - public sealed class EnumerationXSDisallowedSubstitutions : EnumerationContext + public sealed class EnumerationXSDisallowedSubstitutions : ClrEnumWrapperCached { - - private readonly Dictionary _valuesCache; - private EnumerationXSDisallowedSubstitutions(TypeDescriptor typeRepresentation, TypeDescriptor valuesType) : base(typeRepresentation, valuesType) { - _valuesCache = new Dictionary - { - { XmlSchemaDerivationMethod.All, new XSDisallowedSubstitutions(this, XmlSchemaDerivationMethod.All) }, - { XmlSchemaDerivationMethod.Restriction, new XSDisallowedSubstitutions(this, XmlSchemaDerivationMethod.Restriction) }, - { XmlSchemaDerivationMethod.Substitution, new XSDisallowedSubstitutions(this, XmlSchemaDerivationMethod.Substitution) }, - { XmlSchemaDerivationMethod.Extension, new XSDisallowedSubstitutions(this, XmlSchemaDerivationMethod.Extension) } - }; - } - - internal static XSDisallowedSubstitutions FromNativeValue(XmlSchemaDerivationMethod native) - { - - switch (native) - { - case XmlSchemaDerivationMethod.All: - case XmlSchemaDerivationMethod.Restriction: - case XmlSchemaDerivationMethod.Substitution: - case XmlSchemaDerivationMethod.Extension: - - EnumerationXSDisallowedSubstitutions enumeration = GlobalsHelper.GetEnum(); - return enumeration._valuesCache[native]; - - default: - return null; - } + MakeValue("Все", "All", XmlSchemaDerivationMethod.All); + MakeValue("Ограничение", "Restriction", XmlSchemaDerivationMethod.Restriction); + MakeValue("Подстановка", "Substitution", XmlSchemaDerivationMethod.Substitution); + MakeValue("Расширение", "Extension", XmlSchemaDerivationMethod.Extension); } public static EnumerationXSDisallowedSubstitutions CreateInstance(ITypeManager typeManager) { - - var type = typeManager.RegisterType( - "ПеречислениеНедопустимыеПодстановкиXS", - "EnumerationXSDisallowedSubstitutions", - typeof(EnumerationXSDisallowedSubstitutions)); - - var enumValueType = typeManager.RegisterType( - "НедопустимыеПодстановкиXS", - "XSDisallowedSubstitutions", - typeof(XSDisallowedSubstitutions)); - - EnumerationXSDisallowedSubstitutions instance = new EnumerationXSDisallowedSubstitutions(type, enumValueType); - - instance.AddValue("Все", "All", instance._valuesCache[XmlSchemaDerivationMethod.All]); - instance.AddValue("Ограничение", "Restriction", instance._valuesCache[XmlSchemaDerivationMethod.Restriction]); - instance.AddValue("Подстановка", "Substitution", instance._valuesCache[XmlSchemaDerivationMethod.Substitution]); - instance.AddValue("Расширение", "Extension", instance._valuesCache[XmlSchemaDerivationMethod.Extension]); - - return instance; + return CreateInstance(typeManager, (t,v) => new EnumerationXSDisallowedSubstitutions(t, v)); } } } diff --git a/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSForm.cs b/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSForm.cs index 29b8ee707..256a3335f 100644 --- a/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSForm.cs +++ b/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSForm.cs @@ -5,73 +5,27 @@ This Source Code Form is subject to the terms of the at http://mozilla.org/MPL/2.0/. ----------------------------------------------------------*/ -using System.Collections.Generic; using System.Xml.Schema; using OneScript.Contexts.Enums; using OneScript.Types; -using ScriptEngine.Machine; using ScriptEngine.Machine.Contexts; + namespace OneScript.StandardLibrary.XMLSchema.Enumerations { - public sealed class XSForm : ClrEnumValueWrapper - { - internal XSForm(EnumerationXSForm instance, XmlSchemaForm realValue) : base(instance, realValue ) - { - } - - public static XSForm FromNativeValue(XmlSchemaForm native) => EnumerationXSForm.FromNativeValue(native); - - public static XmlSchemaForm ToNativeValue(XSForm wrapper) => wrapper.UnderlyingValue; - } - [SystemEnum("ФормаПредставленияXS", "XSForm")] - public sealed class EnumerationXSForm : EnumerationContext + public sealed class EnumerationXSForm : ClrEnumWrapperCached { - private readonly Dictionary _valuesCache; - private EnumerationXSForm(TypeDescriptor typeRepresentation, TypeDescriptor valuesType) : base(typeRepresentation, valuesType) { - _valuesCache = new Dictionary - { - { XmlSchemaForm.Qualified, new XSForm(this, XmlSchemaForm.Qualified) }, - { XmlSchemaForm.Unqualified, new XSForm(this, XmlSchemaForm.Unqualified) } - }; - } - - internal static XSForm FromNativeValue(XmlSchemaForm native) - { - switch (native) - { - case XmlSchemaForm.Qualified: - case XmlSchemaForm.Unqualified: - - EnumerationXSForm enumeration = GlobalsHelper.GetEnum(); - return enumeration._valuesCache[native]; - - default: - return null; - } + MakeValue("Квалифицированная", "Qualified", XmlSchemaForm.Qualified); + MakeValue("Неквалифицированная", "Unqualified", XmlSchemaForm.Unqualified); } public static EnumerationXSForm CreateInstance(ITypeManager typeManager) { - - var type = typeManager.RegisterType( - "ПеречислениеФормаПредставленияXS", - "EnumerationXSForm", typeof(EnumerationXSForm)); - - var enumValueType = typeManager.RegisterType( - "ФормаПредставленияXS", - "XSForm", typeof(XSForm)); - - EnumerationXSForm instance = new EnumerationXSForm(type, enumValueType); - - instance.AddValue("Квалифицированная", "Qualified", instance._valuesCache[XmlSchemaForm.Qualified]); - instance.AddValue("Неквалифицированная", "Unqualified", instance._valuesCache[XmlSchemaForm.Unqualified]); - - return instance; + return CreateInstance(typeManager, (t,v) => new EnumerationXSForm(t,v)); } } } diff --git a/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSProhibitedSubstitutions.cs b/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSProhibitedSubstitutions.cs index e60bd06a4..a1e8aca1a 100644 --- a/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSProhibitedSubstitutions.cs +++ b/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSProhibitedSubstitutions.cs @@ -5,74 +5,27 @@ This Source Code Form is subject to the terms of the at http://mozilla.org/MPL/2.0/. ----------------------------------------------------------*/ -using System.Collections.Generic; using System.Xml.Schema; using OneScript.Contexts.Enums; using OneScript.Types; -using ScriptEngine.Machine; using ScriptEngine.Machine.Contexts; namespace OneScript.StandardLibrary.XMLSchema.Enumerations { - public sealed class XSProhibitedSubstitutions : ClrEnumValueWrapper + [SystemEnum("ЗапрещенныеПодстановкиXS", "XSProhibitedSubstitutions")] + public sealed class EnumerationXSProhibitedSubstitutions : ClrEnumWrapperCached { - internal XSProhibitedSubstitutions(EnumerationXSProhibitedSubstitutions instance, XmlSchemaDerivationMethod realValue) - : base(instance, realValue) - { - } - - public static XSProhibitedSubstitutions FromNativeValue(XmlSchemaDerivationMethod native) - => EnumerationXSProhibitedSubstitutions.FromNativeValue(native); - - public static XmlSchemaDerivationMethod ToNativeValue(XSProhibitedSubstitutions wrapper) - => wrapper.UnderlyingValue; - } - - [SystemEnum("ЗапрещенныеПодстановкиXS", "EnumerationXSProhibitedSubstitutions")] - public sealed class EnumerationXSProhibitedSubstitutions : EnumerationContext - { - - private readonly Dictionary _valuesCache; - private EnumerationXSProhibitedSubstitutions(TypeDescriptor typeRepresentation, TypeDescriptor valuesType) : base(typeRepresentation, valuesType) { - _valuesCache = new Dictionary - { - { XmlSchemaDerivationMethod.All, new XSProhibitedSubstitutions(this, XmlSchemaDerivationMethod.All) }, - { XmlSchemaDerivationMethod.Restriction, new XSProhibitedSubstitutions(this, XmlSchemaDerivationMethod.Restriction) }, - { XmlSchemaDerivationMethod.Extension, new XSProhibitedSubstitutions(this, XmlSchemaDerivationMethod.Extension) } - }; - } - - internal static XSProhibitedSubstitutions FromNativeValue(XmlSchemaDerivationMethod native) - { - - switch (native) - { - case XmlSchemaDerivationMethod.All: - case XmlSchemaDerivationMethod.Restriction: - case XmlSchemaDerivationMethod.Extension: - - EnumerationXSProhibitedSubstitutions enumeration = GlobalsHelper.GetEnum(); - return enumeration._valuesCache[native]; - - default: - return null; - } + MakeValue("Все", "All", XmlSchemaDerivationMethod.All); + MakeValue("Ограничение", "Restriction", XmlSchemaDerivationMethod.Restriction); + MakeValue("Расширение", "Extension", XmlSchemaDerivationMethod.Extension); } public static EnumerationXSProhibitedSubstitutions CreateInstance(ITypeManager typeManager) { - var instance = EnumContextHelper.CreateClrEnumInstance( - typeManager, - (t,v) => new EnumerationXSProhibitedSubstitutions(t, v)); - - instance.AddValue("Все", "All", instance._valuesCache[XmlSchemaDerivationMethod.All]); - instance.AddValue("Ограничение", "Restriction", instance._valuesCache[XmlSchemaDerivationMethod.Restriction]); - instance.AddValue("Расширение", "Extension", instance._valuesCache[XmlSchemaDerivationMethod.Extension]); - - return instance; + return CreateInstance(typeManager, (t, v) => new EnumerationXSProhibitedSubstitutions(t, v)); } } } diff --git a/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSSchemaFinal.cs b/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSSchemaFinal.cs index 998213398..1490c287b 100644 --- a/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSSchemaFinal.cs +++ b/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSSchemaFinal.cs @@ -5,7 +5,6 @@ This Source Code Form is subject to the terms of the at http://mozilla.org/MPL/2.0/. ----------------------------------------------------------*/ -using System.Collections.Generic; using System.Xml.Schema; using OneScript.Contexts.Enums; using OneScript.Types; @@ -13,64 +12,23 @@ This Source Code Form is subject to the terms of the namespace OneScript.StandardLibrary.XMLSchema.Enumerations { - public sealed class XSSchemaFinal : ClrEnumValueWrapper - { - internal XSSchemaFinal(EnumerationXSSchemaFinal instance, XmlSchemaDerivationMethod realValue) - : base(instance, realValue) - { - } - } - [SystemEnum("ЗавершенностьСхемыXS", "XSSchemaFinal")] - public sealed class EnumerationXSSchemaFinal : ClrEnumWrapper + public sealed class EnumerationXSSchemaFinal : ClrEnumWrapperCached { - private readonly Dictionary _valuesCache; - private EnumerationXSSchemaFinal(TypeDescriptor typeRepresentation, TypeDescriptor valuesType) : base(typeRepresentation, valuesType) { - _valuesCache = new Dictionary - { - { XmlSchemaDerivationMethod.All, new XSSchemaFinal(this, XmlSchemaDerivationMethod.All) }, - { XmlSchemaDerivationMethod.Union, new XSSchemaFinal(this, XmlSchemaDerivationMethod.Union) }, - { XmlSchemaDerivationMethod.Restriction, new XSSchemaFinal(this, XmlSchemaDerivationMethod.Restriction) }, - { XmlSchemaDerivationMethod.Extension, new XSSchemaFinal(this, XmlSchemaDerivationMethod.Extension) }, - { XmlSchemaDerivationMethod.List, new XSSchemaFinal(this, XmlSchemaDerivationMethod.List) } - }; - } - - public override ClrEnumValueWrapper FromNativeValue(XmlSchemaDerivationMethod native) - { - switch (native) - { - case XmlSchemaDerivationMethod.All: - case XmlSchemaDerivationMethod.Union: - case XmlSchemaDerivationMethod.Restriction: - case XmlSchemaDerivationMethod.Extension: - case XmlSchemaDerivationMethod.List: - - return _valuesCache[native]; - - default: - return null; - } + MakeValue("Все", "All", XmlSchemaDerivationMethod.All); + MakeValue("Объединение", "Union", XmlSchemaDerivationMethod.Union); + MakeValue("Ограничение", "Restriction", XmlSchemaDerivationMethod.Restriction); + MakeValue("Расширение", "Extension", XmlSchemaDerivationMethod.Extension); + MakeValue("Список", "List", XmlSchemaDerivationMethod.List); } + public static EnumerationXSSchemaFinal CreateInstance(ITypeManager typeManager) { - var (enumType, enumValType) = EnumContextHelper.RegisterEnumType(typeManager); - - var instance = new EnumerationXSSchemaFinal(enumType, enumValType); - - instance.AddValue("Все", "All", instance._valuesCache[XmlSchemaDerivationMethod.All]); - instance.AddValue("Объединение", "Union", instance._valuesCache[XmlSchemaDerivationMethod.Union]); - instance.AddValue("Ограничение", "Restriction", instance._valuesCache[XmlSchemaDerivationMethod.Restriction]); - instance.AddValue("Расширение", "Extension", instance._valuesCache[XmlSchemaDerivationMethod.Extension]); - instance.AddValue("Список", "List", instance._valuesCache[XmlSchemaDerivationMethod.List]); - - OnInstanceCreation(instance); - - return instance; + return CreateInstance(typeManager, (t, v) => new EnumerationXSSchemaFinal(t, v)); } } } diff --git a/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSSimpleFinal.cs b/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSSimpleFinal.cs index 281563283..09230581b 100644 --- a/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSSimpleFinal.cs +++ b/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSSimpleFinal.cs @@ -5,82 +5,28 @@ This Source Code Form is subject to the terms of the at http://mozilla.org/MPL/2.0/. ----------------------------------------------------------*/ -using System.Collections.Generic; using System.Xml.Schema; using OneScript.Contexts.Enums; using OneScript.Types; -using ScriptEngine.Machine; using ScriptEngine.Machine.Contexts; namespace OneScript.StandardLibrary.XMLSchema.Enumerations { - public sealed class XSSimpleFinal : ClrEnumValueWrapper - { - internal XSSimpleFinal(EnumerationXSSimpleFinal instance, XmlSchemaDerivationMethod realValue) - : base(instance, realValue) - { - } - - public static XSSimpleFinal FromNativeValue(XmlSchemaDerivationMethod native) - => EnumerationXSSimpleFinal.FromNativeValue(native); - - public static XmlSchemaDerivationMethod ToNativeValue(XSSimpleFinal wrapper) - => wrapper.UnderlyingValue; - } - [SystemEnum("ЗавершенностьПростогоТипаXS", "XSSimpleFinal")] - public sealed class EnumerationXSSimpleFinal : EnumerationContext + public sealed class EnumerationXSSimpleFinal : ClrEnumWrapperCached { - private readonly Dictionary _valuesCache; - private EnumerationXSSimpleFinal(TypeDescriptor typeRepresentation, TypeDescriptor valuesType) : base(typeRepresentation, valuesType) { - _valuesCache = new Dictionary - { - { XmlSchemaDerivationMethod.All, new XSSimpleFinal(this, XmlSchemaDerivationMethod.All) }, - { XmlSchemaDerivationMethod.Union, new XSSimpleFinal(this, XmlSchemaDerivationMethod.Union) }, - { XmlSchemaDerivationMethod.Restriction, new XSSimpleFinal(this, XmlSchemaDerivationMethod.Restriction) }, - { XmlSchemaDerivationMethod.List, new XSSimpleFinal(this, XmlSchemaDerivationMethod.List) } - }; - } - - public static XSSimpleFinal FromNativeValue(XmlSchemaDerivationMethod native) - { - switch (native) - { - case XmlSchemaDerivationMethod.All: - case XmlSchemaDerivationMethod.Union: - case XmlSchemaDerivationMethod.Restriction: - case XmlSchemaDerivationMethod.List: - - EnumerationXSSimpleFinal enumeration = GlobalsHelper.GetEnum(); - return enumeration._valuesCache[native]; - - default: - return null; - } + MakeValue("Все", "All", XmlSchemaDerivationMethod.All); + MakeValue("Объединение", "Union", XmlSchemaDerivationMethod.Union); + MakeValue("Ограничение", "Restriction", XmlSchemaDerivationMethod.Restriction); + MakeValue("Список", "List", XmlSchemaDerivationMethod.List); } public static EnumerationXSSimpleFinal CreateInstance(ITypeManager typeManager) { - - var type = typeManager.RegisterType( - "ПеречислениеЗавершенностьПростогоТипаXS", - "EnumerationXSSimpleFinal", typeof(EnumerationXSSimpleFinal)); - - var enumValueType = typeManager.RegisterType( - "ЗавершенностьПростогоТипаXS", - "XSSimpleFinal", typeof(XSSimpleFinal)); - - EnumerationXSSimpleFinal instance = new EnumerationXSSimpleFinal(type, enumValueType); - - instance.AddValue("Все", "All", instance._valuesCache[XmlSchemaDerivationMethod.All]); - instance.AddValue("Объединение", "Union", instance._valuesCache[XmlSchemaDerivationMethod.Union]); - instance.AddValue("Ограничение", "Restriction", instance._valuesCache[XmlSchemaDerivationMethod.Restriction]); - instance.AddValue("Список", "List", instance._valuesCache[XmlSchemaDerivationMethod.List]); - - return instance; + return CreateInstance(typeManager, (t, v) => new EnumerationXSSimpleFinal(t, v)); } } } diff --git a/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSSubstitutionGroupExclusions.cs b/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSSubstitutionGroupExclusions.cs index a90644bb3..e84d04226 100644 --- a/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSSubstitutionGroupExclusions.cs +++ b/src/OneScript.StandardLibrary/XMLSchema/Enumerations/XSSubstitutionGroupExclusions.cs @@ -5,80 +5,27 @@ This Source Code Form is subject to the terms of the at http://mozilla.org/MPL/2.0/. ----------------------------------------------------------*/ -using System.Collections.Generic; using System.Xml.Schema; using OneScript.Contexts.Enums; using OneScript.Types; -using ScriptEngine.Machine; using ScriptEngine.Machine.Contexts; namespace OneScript.StandardLibrary.XMLSchema.Enumerations { - public sealed class XSSubstitutionGroupExclusions : ClrEnumValueWrapper - { - internal XSSubstitutionGroupExclusions(EnumerationXSSubstitutionGroupExclusions instance, XmlSchemaDerivationMethod realValue) - : base(instance, realValue) - { - } - - public static XSSubstitutionGroupExclusions FromNativeValue(XmlSchemaDerivationMethod native) - => EnumerationXSSubstitutionGroupExclusions.FromNativeValue(native); - - public static XmlSchemaDerivationMethod ToNativeValue(XSSubstitutionGroupExclusions wrapper) - => wrapper.UnderlyingValue; - } - [SystemEnum("ИсключенияГруппПодстановкиXS", "XSSubstitutionGroupExclusions")] - public sealed class EnumerationXSSubstitutionGroupExclusions : EnumerationContext + public sealed class EnumerationXSSubstitutionGroupExclusions : ClrEnumWrapperCached { - - private readonly Dictionary _valuesCache; - private EnumerationXSSubstitutionGroupExclusions(TypeDescriptor typeRepresentation, TypeDescriptor valuesType) : base(typeRepresentation, valuesType) { - _valuesCache = new Dictionary - { - { XmlSchemaDerivationMethod.All, new XSSubstitutionGroupExclusions(this, XmlSchemaDerivationMethod.All) }, - { XmlSchemaDerivationMethod.Restriction, new XSSubstitutionGroupExclusions(this, XmlSchemaDerivationMethod.Restriction) }, - { XmlSchemaDerivationMethod.Extension, new XSSubstitutionGroupExclusions(this, XmlSchemaDerivationMethod.Extension) } - }; - } - - internal static XSSubstitutionGroupExclusions FromNativeValue(XmlSchemaDerivationMethod native) - { - - switch (native) - { - case XmlSchemaDerivationMethod.All: - case XmlSchemaDerivationMethod.Restriction: - case XmlSchemaDerivationMethod.Extension: - - EnumerationXSSubstitutionGroupExclusions enumeration = GlobalsHelper.GetEnum(); - return enumeration._valuesCache[native]; - - default: - return null; - } + MakeValue("Все", "All", XmlSchemaDerivationMethod.All); + MakeValue("Ограничение", "Restriction", XmlSchemaDerivationMethod.Restriction); + MakeValue("Расширение", "Extension", XmlSchemaDerivationMethod.Extension); } public static EnumerationXSSubstitutionGroupExclusions CreateInstance(ITypeManager typeManager) { - - var type = typeManager.RegisterType( - "ПеречислениеИсключенияГруппПодстановкиXS", - "EnumerationXSSubstitutionGroupExclusions", typeof(EnumerationXSSubstitutionGroupExclusions)); - var enumValueType = typeManager.RegisterType( - "ИсключенияГруппПодстановкиXS", - "XSSubstitutionGroupExclusions", typeof(XSSubstitutionGroupExclusions)); - - EnumerationXSSubstitutionGroupExclusions instance = new EnumerationXSSubstitutionGroupExclusions(type, enumValueType); - - instance.AddValue("Все", "All", instance._valuesCache[XmlSchemaDerivationMethod.All]); - instance.AddValue("Ограничение", "Restriction", instance._valuesCache[XmlSchemaDerivationMethod.Restriction]); - instance.AddValue("Расширение", "Extension", instance._valuesCache[XmlSchemaDerivationMethod.Extension]); - - return instance; + return CreateInstance(typeManager, (t, v) => new EnumerationXSSubstitutionGroupExclusions(t, v)); } } } diff --git a/src/OneScript.StandardLibrary/XMLSchema/Objects/XMLSchema.cs b/src/OneScript.StandardLibrary/XMLSchema/Objects/XMLSchema.cs index 524eaf759..cd5a042a7 100644 --- a/src/OneScript.StandardLibrary/XMLSchema/Objects/XMLSchema.cs +++ b/src/OneScript.StandardLibrary/XMLSchema/Objects/XMLSchema.cs @@ -18,6 +18,7 @@ This Source Code Form is subject to the terms of the using OneScript.StandardLibrary.XMLSchema.Enumerations; using OneScript.StandardLibrary.XMLSchema.Interfaces; using OneScript.Types; +using OneScript.Values; using ScriptEngine; using ScriptEngine.Machine; using ScriptEngine.Machine.Contexts; @@ -208,17 +209,17 @@ public string TargetNamespace public XMLSchema SchemaForSchema { get; } [ContextProperty("ФормаАтрибутовПоУмолчанию", "AttributeFormDefault")] - public XSForm AttributeFormDefault + public ClrEnumValueWrapper AttributeFormDefault { - get => XSForm.FromNativeValue(_schema.AttributeFormDefault); - set => _schema.AttributeFormDefault = XSForm.ToNativeValue(value); + get => EnumerationXSForm.FromNativeValue(_schema.AttributeFormDefault); + set => _schema.AttributeFormDefault = value.UnderlyingValue; } [ContextProperty("ФормаЭлементовПоУмолчанию", "ElementFormDefault")] - public XSForm ElementFormDefault + public ClrEnumValueWrapper ElementFormDefault { - get => XSForm.FromNativeValue(_schema.ElementFormDefault); - set => _schema.ElementFormDefault = XSForm.ToNativeValue(value); + get => EnumerationXSForm.FromNativeValue(_schema.ElementFormDefault); + set => _schema.ElementFormDefault = value.UnderlyingValue; } [ContextProperty("Язык", "Lang")] diff --git a/src/OneScript.StandardLibrary/XMLSchema/Objects/XSAttributeDeclaration.cs b/src/OneScript.StandardLibrary/XMLSchema/Objects/XSAttributeDeclaration.cs index a548df57d..cbb47d518 100644 --- a/src/OneScript.StandardLibrary/XMLSchema/Objects/XSAttributeDeclaration.cs +++ b/src/OneScript.StandardLibrary/XMLSchema/Objects/XSAttributeDeclaration.cs @@ -15,6 +15,7 @@ This Source Code Form is subject to the terms of the using OneScript.StandardLibrary.XMLSchema.Interfaces; using ScriptEngine.Machine; using ScriptEngine.Machine.Contexts; +using OneScript.Values; namespace OneScript.StandardLibrary.XMLSchema.Objects { @@ -190,10 +191,10 @@ public XMLExpandedName Reference } [ContextProperty("Форма", "Form")] - public XSForm Form + public ClrEnumValueWrapper Form { - get => XSForm.FromNativeValue(_attribute.Form); - set => _attribute.Form = XSForm.ToNativeValue(value); + get => EnumerationXSForm.FromNativeValue(_attribute.Form); + set => _attribute.Form = value.UnderlyingValue; } [ContextProperty("ЭтоГлобальноеОбъявление", "IsGlobal")] diff --git a/src/OneScript.StandardLibrary/XMLSchema/Objects/XSElementDeclaration.cs b/src/OneScript.StandardLibrary/XMLSchema/Objects/XSElementDeclaration.cs index 45f1fd7d4..27ccf2bcd 100644 --- a/src/OneScript.StandardLibrary/XMLSchema/Objects/XSElementDeclaration.cs +++ b/src/OneScript.StandardLibrary/XMLSchema/Objects/XSElementDeclaration.cs @@ -13,6 +13,7 @@ This Source Code Form is subject to the terms of the using OneScript.StandardLibrary.XMLSchema.Collections; using OneScript.StandardLibrary.XMLSchema.Enumerations; using OneScript.StandardLibrary.XMLSchema.Interfaces; +using OneScript.Values; using ScriptEngine.Machine; using ScriptEngine.Machine.Contexts; @@ -193,10 +194,10 @@ public XMLExpandedName Reference } [ContextProperty("Форма", "Form")] - public XSForm Form + public ClrEnumValueWrapper Form { - get => XSForm.FromNativeValue(_element.Form); - set => _element.Form = XSForm.ToNativeValue(value); + get => EnumerationXSForm.FromNativeValue(_element.Form); + set => _element.Form = value.UnderlyingValue; } [ContextProperty("ЭтоГлобальноеОбъявление", "IsGlobal")] diff --git a/src/OneScript.StandardLibrary/Xml/XmlNodeTypeEnum.cs b/src/OneScript.StandardLibrary/Xml/XmlNodeTypeEnum.cs index 8611c1245..46618868e 100644 --- a/src/OneScript.StandardLibrary/Xml/XmlNodeTypeEnum.cs +++ b/src/OneScript.StandardLibrary/Xml/XmlNodeTypeEnum.cs @@ -5,7 +5,6 @@ This Source Code Form is subject to the terms of the at http://mozilla.org/MPL/2.0/. ----------------------------------------------------------*/ -using System.Collections.Generic; using System.Xml; using OneScript.Contexts.Enums; using OneScript.Types; @@ -14,10 +13,8 @@ This Source Code Form is subject to the terms of the namespace OneScript.StandardLibrary.Xml { [SystemEnum("ТипУзлаXML", "XMLNodeType")] - public class XmlNodeTypeEnum : ClrEnumWrapper + public class XmlNodeTypeEnum : ClrEnumWrapperCached { - readonly Dictionary> _valuesCache = new Dictionary>(); - private XmlNodeTypeEnum(TypeDescriptor typeRepresentation, TypeDescriptor valuesType) : base(typeRepresentation, valuesType) { @@ -38,29 +35,9 @@ private XmlNodeTypeEnum(TypeDescriptor typeRepresentation, TypeDescriptor values MakeValue("Текст", "Text", XmlNodeType.Text); } - private void MakeValue(string name, string alias, XmlNodeType enumValue) - { - var wrappedValue = this.WrapClrValue(name, alias, enumValue); - _valuesCache[enumValue] = wrappedValue; - } - - public override ClrEnumValueWrapper FromNativeValue(XmlNodeType native) - { - if (native == XmlNodeType.SignificantWhitespace) - native = XmlNodeType.Whitespace; - - return _valuesCache[native]; - } - public static XmlNodeTypeEnum CreateInstance(ITypeManager typeManager) { - var instance = EnumContextHelper.CreateClrEnumInstance( - typeManager, - (t,v) => new XmlNodeTypeEnum(t, v)); - - OnInstanceCreation(instance); - - return instance; + return CreateInstance(typeManager, (t, v) => new XmlNodeTypeEnum(t, v)); } } } diff --git a/src/OneScript.StandardLibrary/Xml/XmlReaderImpl.cs b/src/OneScript.StandardLibrary/Xml/XmlReaderImpl.cs index 4b9de8d2f..271da43a4 100644 --- a/src/OneScript.StandardLibrary/Xml/XmlReaderImpl.cs +++ b/src/OneScript.StandardLibrary/Xml/XmlReaderImpl.cs @@ -11,6 +11,7 @@ This Source Code Form is subject to the terms of the using OneScript.Contexts; using OneScript.Exceptions; using OneScript.Types; +using OneScript.Values; using ScriptEngine.Machine; using ScriptEngine.Machine.Contexts; @@ -189,7 +190,6 @@ public ClrEnumValueWrapper NodeType { get { - var enumInstance = XmlNodeTypeEnum.Instance; XmlNodeType nodeType; if (_reader == null) { @@ -212,7 +212,7 @@ public ClrEnumValueWrapper NodeType nodeType = _reader.NodeType; } - return enumInstance.FromNativeValue(nodeType); + return XmlNodeTypeEnum.FromNativeValue(nodeType); } } @@ -431,7 +431,7 @@ private void CheckEmptyElementEntering() private bool IsEndElement() { - var isEnd = (NodeType == XmlNodeTypeEnum.Instance.FromNativeValue(XmlNodeType.EndElement)); + var isEnd = (NodeType == XmlNodeTypeEnum.FromNativeValue(XmlNodeType.EndElement)); return isEnd; } @@ -484,7 +484,7 @@ public IValue MoveToContent() { var nodeType = _reader.MoveToContent(); CheckEmptyElementEntering(); - return GlobalsHelper.GetEnum().FromNativeValue(nodeType); + return XmlNodeTypeEnum.FromNativeValue(nodeType); } #endregion diff --git a/src/OneScript.StandardLibrary/Xml/XmlReaderSettingsImpl.cs b/src/OneScript.StandardLibrary/Xml/XmlReaderSettingsImpl.cs index 7b80b6287..b35838f42 100644 --- a/src/OneScript.StandardLibrary/Xml/XmlReaderSettingsImpl.cs +++ b/src/OneScript.StandardLibrary/Xml/XmlReaderSettingsImpl.cs @@ -52,10 +52,10 @@ public XmlReaderSettingsImpl(string version, XmlParserContext context, XmlReader public string Language => _context.XmlLang; [ContextProperty("ПробельныеСимволы", "Space")] - public IValue Space => XmlSpaceEnum.Instance.FromNativeValue(_context.XmlSpace); + public IValue Space => XmlSpaceEnum.FromNativeValue(_context.XmlSpace); [ContextProperty("ТипПроверкиПравильности","ValidationType")] - public IValue ValidationTypeImpl => XmlValidationTypeEnum.Instance.FromNativeValue(_settings.ValidationType); + public IValue ValidationTypeImpl => XmlValidationTypeEnum.FromNativeValue(_settings.ValidationType); [ContextProperty("ИгнорироватьОбъявлениеXML", "IgnoreXMLDeclaration")] public bool IgnoreXMLDeclaration { get; } diff --git a/src/OneScript.StandardLibrary/Xml/XmlSpaceEnum.cs b/src/OneScript.StandardLibrary/Xml/XmlSpaceEnum.cs index 671f629ee..436db9024 100644 --- a/src/OneScript.StandardLibrary/Xml/XmlSpaceEnum.cs +++ b/src/OneScript.StandardLibrary/Xml/XmlSpaceEnum.cs @@ -13,24 +13,18 @@ This Source Code Form is subject to the terms of the namespace OneScript.StandardLibrary.Xml { [SystemEnum("ПробельныеСимволыXML", "XMLSpace")] - public class XmlSpaceEnum : ClrEnumWrapper + public class XmlSpaceEnum : ClrEnumWrapperCached { private XmlSpaceEnum(TypeDescriptor typeRepresentation, TypeDescriptor valuesType) : base(typeRepresentation, valuesType) { - this.WrapClrValue("ПоУмолчанию", "Default", XmlSpace.Default); - this.WrapClrValue("Сохранять", "Preserve", XmlSpace.Preserve); + MakeValue("ПоУмолчанию", "Default", XmlSpace.Default); + MakeValue("Сохранять", "Preserve", XmlSpace.Preserve); } public static XmlSpaceEnum CreateInstance(ITypeManager typeManager) { - var instance = EnumContextHelper.CreateClrEnumInstance( - typeManager, - (t,v) => new XmlSpaceEnum(t, v)); - - OnInstanceCreation(instance); - - return instance; + return CreateInstance(typeManager, (t, v) => new XmlSpaceEnum(t, v)); } } } diff --git a/src/OneScript.StandardLibrary/Xml/XmlValidationTypeEnum.cs b/src/OneScript.StandardLibrary/Xml/XmlValidationTypeEnum.cs index f061f6de7..bbe072343 100644 --- a/src/OneScript.StandardLibrary/Xml/XmlValidationTypeEnum.cs +++ b/src/OneScript.StandardLibrary/Xml/XmlValidationTypeEnum.cs @@ -8,16 +8,15 @@ This Source Code Form is subject to the terms of the using System.Collections.Generic; using System.Xml; using OneScript.Contexts.Enums; +using OneScript.StandardLibrary.XMLSchema.Enumerations; using OneScript.Types; using ScriptEngine.Machine.Contexts; namespace OneScript.StandardLibrary.Xml { [SystemEnum("ТипПроверкиXML", "XMLValidationType")] - public class XmlValidationTypeEnum : ClrEnumWrapper + public class XmlValidationTypeEnum : ClrEnumWrapperCached { - readonly Dictionary> _valuesCache = new Dictionary>(); - private XmlValidationTypeEnum(TypeDescriptor typeRepresentation, TypeDescriptor valuesType) : base(typeRepresentation, valuesType) { @@ -26,34 +25,9 @@ private XmlValidationTypeEnum(TypeDescriptor typeRepresentation, TypeDescriptor MakeValue("СхемаXML", "XMLSchema", ValidationType.Schema); } - private void MakeValue(string name, string alias, ValidationType enumValue) - { - var wrappedValue = this.WrapClrValue(name, alias, enumValue); - _valuesCache[enumValue] = wrappedValue; - } - - public override ClrEnumValueWrapper FromNativeValue(ValidationType native) - { - if (_valuesCache.TryGetValue(native, out var val)) - { - return val; - } - - val = base.FromNativeValue(native); - _valuesCache.Add(native, val); - - return val; - } - public static XmlValidationTypeEnum CreateInstance(ITypeManager typeManager) { - var instance = EnumContextHelper.CreateClrEnumInstance( - typeManager, - (t,v) => new XmlValidationTypeEnum(t, v)); - - OnInstanceCreation(instance); - - return instance; + return CreateInstance(typeManager, (t, v) => new XmlValidationTypeEnum(t, v)); } } } diff --git a/src/OneScript.StandardLibrary/Zip/ZipWriter.cs b/src/OneScript.StandardLibrary/Zip/ZipWriter.cs index 856593a40..3ab846ff9 100644 --- a/src/OneScript.StandardLibrary/Zip/ZipWriter.cs +++ b/src/OneScript.StandardLibrary/Zip/ZipWriter.cs @@ -13,6 +13,7 @@ This Source Code Form is subject to the terms of the using Ionic.Zlib; using OneScript.Contexts; using OneScript.Exceptions; +using OneScript.Values; using ScriptEngine.Machine; using ScriptEngine.Machine.Contexts; diff --git a/src/ScriptEngine/Machine/Contexts/ClrEnumWrapper.cs b/src/ScriptEngine/Machine/Contexts/ClrEnumWrapper.cs index ff31dce72..e9d881b14 100644 --- a/src/ScriptEngine/Machine/Contexts/ClrEnumWrapper.cs +++ b/src/ScriptEngine/Machine/Contexts/ClrEnumWrapper.cs @@ -6,8 +6,10 @@ This Source Code Form is subject to the terms of the ----------------------------------------------------------*/ using System; +using System.Collections.Generic; using OneScript.Contexts.Enums; using OneScript.Types; +using OneScript.Values; namespace ScriptEngine.Machine.Contexts { @@ -31,6 +33,11 @@ protected ClrEnumWrapper(TypeDescriptor typeRepresentation, TypeDescriptor value public virtual ClrEnumValueWrapper FromNativeValue(T native) { + /* TODO: benchmark + return ((List>)ValuesInternal) + .Find(x => x.UnderlyingValue.Equals(native)) + ?? throw new InvalidOperationException($"Item '{native}' not found"); + */ foreach (var value in ValuesInternal) { var wrapper = (ClrEnumValueWrapper) value; @@ -40,8 +47,8 @@ public virtual ClrEnumValueWrapper FromNativeValue(T native) throw new InvalidOperationException($"Item '{native}' not found"); } - - private void Autoregister() + + private void Autoregister(TypeDescriptor valuesType) { var attrib = typeof(T).GetCustomAttributes(typeof(EnumerationTypeAttribute), false); if(attrib.Length == 0) @@ -54,27 +61,28 @@ private void Autoregister() foreach (var contextFieldAttribute in field.GetCustomAttributes (typeof (EnumValueAttribute), false)) { var contextField = (EnumValueAttribute)contextFieldAttribute; - var osValue = new ClrEnumValueWrapper(this, (T)field.GetValue(null)); - if (contextField.Alias == null) + string alias = contextField.Alias; + if ( alias == null) { if(StringComparer .InvariantCultureIgnoreCase .Compare(field.Name, contextField.Name) != 0) - AddValue(contextField.Name, field.Name, osValue); - else - AddValue(contextField.Name, osValue); + alias = field.Name; } - else - AddValue(contextField.Name, contextField.Alias, osValue); + + var osValue = new ClrEnumValueWrapper(valuesType, (T)field.GetValue(null), + contextField.Name, alias); + + AddValue(osValue); } } } - + public static ClrEnumWrapper CreateInstance(TypeDescriptor typeRepresentation, TypeDescriptor valuesType) { var instance = new ClrEnumWrapper(typeRepresentation, valuesType); - instance.Autoregister(); + instance.Autoregister(valuesType); Instance = instance; return instance; @@ -84,5 +92,37 @@ protected static void OnInstanceCreation(ClrEnumWrapper instance) { Instance = instance; } + + protected static TE CreateInstance(ITypeManager typeManager,EnumCreationDelegate creator) + where TE: ClrEnumWrapper + { + var instance = EnumContextHelper.CreateClrEnumInstance(typeManager, creator); + + OnInstanceCreation(instance); + return instance; + } } + + public abstract class ClrEnumWrapperCached : ClrEnumWrapper where T : struct + { + private static readonly Dictionary> _valuesCache + = new Dictionary>(); + + protected ClrEnumWrapperCached(TypeDescriptor typeRepresentation, TypeDescriptor valuesType) + : base(typeRepresentation, valuesType) + { + _valuesCache.Clear(); + } + + protected void MakeValue(string name, string alias, T enumValue) + { + _valuesCache[enumValue] = this.WrapClrValue(name, alias, enumValue); + } + + public static new ClrEnumValueWrapper FromNativeValue(T native) + { + _valuesCache.TryGetValue(native, out ClrEnumValueWrapper value); + return value; // TODO: исключение или null? + } + } } \ No newline at end of file diff --git a/src/ScriptEngine/Machine/Contexts/ContextDiscoverer.cs b/src/ScriptEngine/Machine/Contexts/ContextDiscoverer.cs index 98dd2b77d..f971cb5d4 100644 --- a/src/ScriptEngine/Machine/Contexts/ContextDiscoverer.cs +++ b/src/ScriptEngine/Machine/Contexts/ContextDiscoverer.cs @@ -14,6 +14,7 @@ This Source Code Form is subject to the terms of the using OneScript.Contexts.Enums; using OneScript.DependencyInjection; using OneScript.Types; +using OneScript.Values; using ScriptEngine.Types; namespace ScriptEngine.Machine.Contexts diff --git a/src/ScriptEngine/Machine/Contexts/EnumContextHelper.cs b/src/ScriptEngine/Machine/Contexts/EnumContextHelper.cs index c544d22b4..7dc7ea376 100644 --- a/src/ScriptEngine/Machine/Contexts/EnumContextHelper.cs +++ b/src/ScriptEngine/Machine/Contexts/EnumContextHelper.cs @@ -7,6 +7,7 @@ This Source Code Form is subject to the terms of the using System; using OneScript.Contexts.Enums; using OneScript.Types; +using OneScript.Values; namespace ScriptEngine.Machine.Contexts { @@ -51,7 +52,7 @@ private static TypeDescriptor CreateEnumType(Type enumType, IEnumMetadataProvide return new TypeDescriptor( metadata.TypeUUID == default ? Guid.NewGuid() : Guid.Parse(metadata.TypeUUID), "Перечисление" + metadata.Name, - metadata.Alias != default? "Enum" + metadata.Alias : default, + metadata.Alias != default ? "Enum" + metadata.Alias : default, enumType ); } @@ -70,15 +71,8 @@ public static TOwner CreateClrEnumInstance(ITypeManager typeManag where TOwner : EnumerationContext where TEnum : struct { - TOwner instance; - - TypeDescriptor enumType; - TypeDescriptor enumValType; - - (enumType, enumValType) = EnumContextHelper.RegisterEnumType>(typeManager); - - instance = creator(enumType, enumValType); - return instance; + var (enumType, enumValType) = RegisterEnumType>(typeManager); + return creator(enumType, enumValType); } public static ClrEnumValueWrapper WrapClrValue( @@ -88,11 +82,10 @@ public static ClrEnumValueWrapper WrapClrValue( T value) where T : struct { - var wrappedValue = new ClrEnumValueWrapper(owner, value); - owner.AddValue(name, alias, wrappedValue); + var wrappedValue = new ClrEnumValueWrapper(owner.ValuesType, value, name, alias); + owner.AddValue(wrappedValue); return wrappedValue; } - } public delegate T EnumCreationDelegate(TypeDescriptor typeRepresentation, TypeDescriptor valuesType) where T : EnumerationContext; diff --git a/src/ScriptEngine/Machine/Contexts/EnumerationContext.cs b/src/ScriptEngine/Machine/Contexts/EnumerationContext.cs index 603131aff..8d8894866 100644 --- a/src/ScriptEngine/Machine/Contexts/EnumerationContext.cs +++ b/src/ScriptEngine/Machine/Contexts/EnumerationContext.cs @@ -10,6 +10,7 @@ This Source Code Form is subject to the terms of the using OneScript.Commons; using OneScript.Contexts; using OneScript.Types; +using OneScript.Values; namespace ScriptEngine.Machine.Contexts { @@ -25,35 +26,15 @@ public EnumerationContext(TypeDescriptor typeRepresentation, TypeDescriptor valu _valuesType = valuesType; } - public void AddValue(string name, EnumerationValue val) + public void AddValue(EnumerationValue val) { - AddValue(name, null, val); - } - - public void AddValue(string name, string alias, EnumerationValue val) - { - System.Diagnostics.Debug.Assert(name != null); System.Diagnostics.Debug.Assert(val != null); - if (!Utils.IsValidIdentifier(name)) - throw new ArgumentException("Name must be a valid identifier", "name"); - - if(alias != null && !Utils.IsValidIdentifier(alias)) - throw new ArgumentException("Name must be a valid identifier", "alias"); - - _nameIds.RegisterName(name, alias); - val.ValuePresentation = name; + _nameIds.RegisterName(val.Name, val.Alias); _values.Add(val); - } - public TypeDescriptor ValuesType - { - get - { - return _valuesType; - } - } + public TypeDescriptor ValuesType => _valuesType; public EnumerationValue this[string name] { diff --git a/src/ScriptEngine/Machine/Contexts/EnumerationValue.cs b/src/ScriptEngine/Machine/Contexts/EnumerationValue.cs deleted file mode 100644 index ae3c79d4a..000000000 --- a/src/ScriptEngine/Machine/Contexts/EnumerationValue.cs +++ /dev/null @@ -1,60 +0,0 @@ -/*---------------------------------------------------------- -This Source Code Form is subject to the terms of the -Mozilla Public License, v.2.0. If a copy of the MPL -was not distributed with this file, You can obtain one -at http://mozilla.org/MPL/2.0/. -----------------------------------------------------------*/ - -using OneScript.Exceptions; -using OneScript.Types; -using OneScript.Values; - -namespace ScriptEngine.Machine.Contexts -{ - public abstract class EnumerationValue : BslValue - { - readonly EnumerationContext _owner; - - public EnumerationValue(EnumerationContext owner) - { - _owner = owner; - } - - public EnumerationContext Owner - { - get - { - return _owner; - } - } - - public string ValuePresentation - { - get;set; - } - - public bool IsFilled() => true; - - public override TypeDescriptor SystemType => _owner.ValuesType; - - public override string ToString() - { - return ValuePresentation == null ? SystemType.Name : ValuePresentation; - } - - public override IValue GetRawValue() - { - return this; - } - - public override int CompareTo(BslValue other) - { - throw RuntimeException.ComparisonNotSupportedException(); - } - - public override bool Equals(BslValue other) - { - return ReferenceEquals(other?.GetRawValue(), this); - } - } -} diff --git a/tests/XMLSchema/Enumerations/test-XSDisallowedSubstitutions.os b/tests/XMLSchema/Enumerations/test-XSDisallowedSubstitutions.os index 373f63504..b5eae9a33 100644 --- a/tests/XMLSchema/Enumerations/test-XSDisallowedSubstitutions.os +++ b/tests/XMLSchema/Enumerations/test-XSDisallowedSubstitutions.os @@ -34,7 +34,7 @@ Процедура TestConstructor() Экспорт - ЮнитТест.ПроверитьРавенство(TypeOf(XSDisallowedSubstitutions), Type("EnumerationXSDisallowedSubstitutions")); + ЮнитТест.ПроверитьРавенство(TypeOf(XSDisallowedSubstitutions), Type("EnumXSDisallowedSubstitutions")); ЮнитТест.ПроверитьРавенство(TypeOf(XSDisallowedSubstitutions.All), Type("XSDisallowedSubstitutions")); ЮнитТест.ПроверитьРавенство(TypeOf(XSDisallowedSubstitutions.Restriction), Type("XSDisallowedSubstitutions")); ЮнитТест.ПроверитьРавенство(TypeOf(XSDisallowedSubstitutions.Substitution), Type("XSDisallowedSubstitutions")); diff --git a/tests/XMLSchema/Enumerations/test-XSForm.os b/tests/XMLSchema/Enumerations/test-XSForm.os index fe902db01..7576ee43f 100644 --- a/tests/XMLSchema/Enumerations/test-XSForm.os +++ b/tests/XMLSchema/Enumerations/test-XSForm.os @@ -32,7 +32,7 @@ Процедура TestConstructor() Экспорт - ЮнитТест.ПроверитьРавенство(TypeOf(XSForm), Type("EnumerationXSForm")); + ЮнитТест.ПроверитьРавенство(TypeOf(XSForm), Type("EnumXSForm")); ЮнитТест.ПроверитьРавенство(TypeOf(XSForm.Qualified), Type("XSForm")); ЮнитТест.ПроверитьРавенство(TypeOf(XSForm.Unqualified), Type("XSForm")); diff --git a/tests/XMLSchema/Enumerations/test-XSSimpleFinal.os b/tests/XMLSchema/Enumerations/test-XSSimpleFinal.os index ff9ee3ca4..6a7a3d305 100644 --- a/tests/XMLSchema/Enumerations/test-XSSimpleFinal.os +++ b/tests/XMLSchema/Enumerations/test-XSSimpleFinal.os @@ -34,7 +34,7 @@ Процедура TestConstructor() Экспорт - ЮнитТест.ПроверитьРавенство(TypeOf(XSSimpleFinal), Type("EnumerationXSSimpleFinal")); + ЮнитТест.ПроверитьРавенство(TypeOf(XSSimpleFinal), Type("EnumXSSimpleFinal")); ЮнитТест.ПроверитьРавенство(TypeOf(XSSimpleFinal.All), Type("XSSimpleFinal")); ЮнитТест.ПроверитьРавенство(TypeOf(XSSimpleFinal.Union), Type("XSSimpleFinal")); ЮнитТест.ПроверитьРавенство(TypeOf(XSSimpleFinal.Restriction), Type("XSSimpleFinal"));