浏览代码

Add net60 target (#1515)

Marko Lahma 2 年之前
父节点
当前提交
75a7b12aef
共有 32 个文件被更改,包括 106 次插入69 次删除
  1. 1 1
      Jint/EsprimaExtensions.cs
  2. 2 2
      Jint/Extensions/ReflectionExtensions.cs
  3. 1 1
      Jint/Jint.csproj
  4. 1 1
      Jint/Key.cs
  5. 1 1
      Jint/Native/Argument/ArgumentsInstance.cs
  6. 9 2
      Jint/Native/Array/ArrayInstance.cs
  7. 1 1
      Jint/Native/Array/ArrayPrototype.cs
  8. 4 3
      Jint/Native/ArrayBuffer/ArrayBufferInstance.cs
  9. 1 1
      Jint/Native/ArrayBuffer/ArrayBufferPrototype.cs
  10. 1 1
      Jint/Native/Error/ErrorInstance.cs
  11. 1 1
      Jint/Native/JsBigInt.cs
  12. 1 1
      Jint/Native/JsString.cs
  13. 1 1
      Jint/Native/JsValue.cs
  14. 2 2
      Jint/Native/SameValueZeroComparer.cs
  15. 3 3
      Jint/Native/String/StringExecutionContext.cs
  16. 21 1
      Jint/Native/TypedArray/IntrinsicTypedArrayPrototype.cs
  17. 16 16
      Jint/Native/TypedArray/TypedArrayValue.cs
  18. 1 1
      Jint/Options.cs
  19. 8 8
      Jint/Runtime/Interop/DefaultTypeConverter.cs
  20. 1 1
      Jint/Runtime/Interop/DelegateWrapper.cs
  21. 1 1
      Jint/Runtime/Interop/NamespaceReference.cs
  22. 3 3
      Jint/Runtime/Interop/Reflection/DynamicObjectAccessor.cs
  23. 2 1
      Jint/Runtime/Interop/Reflection/ExtensionMethodCache.cs
  24. 1 1
      Jint/Runtime/Interop/Reflection/FieldAccessor.cs
  25. 4 4
      Jint/Runtime/Interop/Reflection/IndexerAccessor.cs
  26. 1 1
      Jint/Runtime/Interop/Reflection/PropertyAccessor.cs
  27. 3 3
      Jint/Runtime/Interop/TypeDescriptor.cs
  28. 2 2
      Jint/Runtime/Interop/TypeReference.cs
  29. 2 2
      Jint/Runtime/Interop/TypeResolver.cs
  30. 5 1
      Jint/Runtime/Modules/DefaultModuleLoader.cs
  31. 1 1
      Jint/Runtime/TypeConverter.cs
  32. 4 0
      Jint/SkipLocalsInitAttribute.cs

+ 1 - 1
Jint/EsprimaExtensions.cs

@@ -158,7 +158,7 @@ namespace Jint
                 return TypeConverter.ToString(d);
                 return TypeConverter.ToString(d);
             }
             }
 
 
-            return literal.Value as string ?? Convert.ToString(literal.Value, provider: null);
+            return literal.Value as string ?? Convert.ToString(literal.Value, provider: null) ?? "";
         }
         }
 
 
         internal static void GetBoundNames(this VariableDeclaration variableDeclaration, List<string> target)
         internal static void GetBoundNames(this VariableDeclaration variableDeclaration, List<string> target)

+ 2 - 2
Jint/Extensions/ReflectionExtensions.cs

@@ -127,7 +127,7 @@ namespace Jint.Extensions
         }
         }
 
 
         public static bool TryConvertViaTypeCoercion(
         public static bool TryConvertViaTypeCoercion(
-            Type memberType,
+            Type? memberType,
             ValueCoercionType valueCoercionType,
             ValueCoercionType valueCoercionType,
             JsValue value,
             JsValue value,
             [NotNullWhen(true)] out object? converted)
             [NotNullWhen(true)] out object? converted)
@@ -155,7 +155,7 @@ namespace Jint.Extensions
                 return true;
                 return true;
             }
             }
 
 
-            if (memberType.IsClrNumericCoercible() && (valueCoercionType & ValueCoercionType.Number) != 0)
+            if (memberType is not null && memberType.IsClrNumericCoercible() && (valueCoercionType & ValueCoercionType.Number) != 0)
             {
             {
                 // we know how to print out correct string presentation for primitives
                 // we know how to print out correct string presentation for primitives
                 // that are non-null and non-undefined
                 // that are non-null and non-undefined

+ 1 - 1
Jint/Jint.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
   <PropertyGroup>
     <NeutralLanguage>en-US</NeutralLanguage>
     <NeutralLanguage>en-US</NeutralLanguage>
-    <TargetFrameworks>net462;netstandard2.0;netstandard2.1</TargetFrameworks>
+    <TargetFrameworks>net462;netstandard2.0;netstandard2.1;net6.0</TargetFrameworks>
     <AssemblyOriginatorKeyFile>Jint.snk</AssemblyOriginatorKeyFile>
     <AssemblyOriginatorKeyFile>Jint.snk</AssemblyOriginatorKeyFile>
     <SignAssembly>true</SignAssembly>
     <SignAssembly>true</SignAssembly>
     <LangVersion>latest</LangVersion>
     <LangVersion>latest</LangVersion>

+ 1 - 1
Jint/Key.cs

@@ -53,7 +53,7 @@ namespace Jint
             return HashCode == other.HashCode && Name == other.Name;
             return HashCode == other.HashCode && Name == other.Name;
         }
         }
 
 
-        public override bool Equals(object obj)
+        public override bool Equals(object? obj)
         {
         {
             return obj is Key other && Equals(other);
             return obj is Key other && Equals(other);
         }
         }

+ 1 - 1
Jint/Native/Argument/ArgumentsInstance.cs

@@ -73,7 +73,7 @@ namespace Jint.Native.Argument
                 ObjectInstance? map = null;
                 ObjectInstance? map = null;
                 if (args.Length > 0)
                 if (args.Length > 0)
                 {
                 {
-                    var mappedNamed = _mappedNamed.Value;
+                    var mappedNamed = _mappedNamed.Value!;
                     mappedNamed.Clear();
                     mappedNamed.Clear();
 
 
                     map = Engine.Realm.Intrinsics.Object.Construct(Arguments.Empty);
                     map = Engine.Realm.Intrinsics.Object.Construct(Arguments.Empty);

+ 9 - 2
Jint/Native/Array/ArrayInstance.cs

@@ -944,7 +944,14 @@ namespace Jint.Native.Array
 
 
         internal void EnsureCapacity(uint capacity, bool force = false)
         internal void EnsureCapacity(uint capacity, bool force = false)
         {
         {
-            if (!force && (capacity > MaxDenseArrayLength || _dense is null || capacity <= (uint) _dense.Length))
+            var dense = _dense;
+
+            if (dense is null)
+            {
+                return;
+            }
+
+            if (!force && (capacity > MaxDenseArrayLength || capacity <= (uint) dense.Length))
             {
             {
                 return;
                 return;
             }
             }
@@ -956,7 +963,7 @@ namespace Jint.Native.Array
 
 
             // need to grow
             // need to grow
             var newArray = new object[capacity];
             var newArray = new object[capacity];
-            System.Array.Copy(_dense, newArray, _dense!.Length);
+            System.Array.Copy(dense, newArray, dense.Length);
             _dense = newArray;
             _dense = newArray;
             _isObjectArray = true;
             _isObjectArray = true;
         }
         }

+ 1 - 1
Jint/Native/Array/ArrayPrototype.cs

@@ -1761,7 +1761,7 @@ namespace Jint.Native.Array
                 _compare = compare;
                 _compare = compare;
             }
             }
 
 
-            public int Compare(JsValue x, JsValue y)
+            public int Compare(JsValue? x, JsValue? y)
             {
             {
                 var xIsNull = ReferenceEquals(x, null);
                 var xIsNull = ReferenceEquals(x, null);
                 var yIsNull = ReferenceEquals(y, null);
                 var yIsNull = ReferenceEquals(y, null);

+ 4 - 3
Jint/Native/ArrayBuffer/ArrayBufferInstance.cs

@@ -64,8 +64,9 @@ namespace Jint.Native.ArrayBuffer
         {
         {
             var targetBuffer = constructor.AllocateArrayBuffer(_engine.Realm.Intrinsics.ArrayBuffer, srcLength);
             var targetBuffer = constructor.AllocateArrayBuffer(_engine.Realm.Intrinsics.ArrayBuffer, srcLength);
             AssertNotDetached();
             AssertNotDetached();
-            var srcBlock = _arrayBufferData;
-            var targetBlock = targetBuffer.ArrayBufferData;
+
+            var srcBlock = _arrayBufferData!;
+            var targetBlock = targetBuffer.ArrayBufferData!;
 
 
             // TODO SharedArrayBuffer would use this
             // TODO SharedArrayBuffer would use this
             //CopyDataBlockBytes(targetBlock, 0, srcBlock, srcByteOffset, srcLength).
             //CopyDataBlockBytes(targetBlock, 0, srcBlock, srcByteOffset, srcLength).
@@ -202,7 +203,7 @@ namespace Jint.Native.ArrayBuffer
             ArrayBufferOrder order,
             ArrayBufferOrder order,
             bool? isLittleEndian = null)
             bool? isLittleEndian = null)
         {
         {
-            var block = _arrayBufferData;
+            var block = _arrayBufferData!;
             if (!IsSharedArrayBuffer)
             if (!IsSharedArrayBuffer)
             {
             {
                 // If isLittleEndian is not present, set isLittleEndian to the value of the [[LittleEndian]] field of the surrounding agent's Agent Record.
                 // If isLittleEndian is not present, set isLittleEndian to the value of the [[LittleEndian]] field of the surrounding agent's Agent Record.

+ 1 - 1
Jint/Native/ArrayBuffer/ArrayBufferPrototype.cs

@@ -165,7 +165,7 @@ namespace Jint.Native.ArrayBuffer
 
 
             var fromBuf = o.ArrayBufferData;
             var fromBuf = o.ArrayBufferData;
             var toBuf = bufferInstance.ArrayBufferData;
             var toBuf = bufferInstance.ArrayBufferData;
-            System.Array.Copy(fromBuf, first, toBuf, 0, newLen);
+            System.Array.Copy(fromBuf!, first, toBuf!, 0, newLen);
             return bufferInstance;
             return bufferInstance;
         }
         }
     }
     }

+ 1 - 1
Jint/Native/Error/ErrorInstance.cs

@@ -31,6 +31,6 @@ public class ErrorInstance : ObjectInstance
 
 
     public override string ToString()
     public override string ToString()
     {
     {
-        return Engine.Realm.Intrinsics.Error.PrototypeObject.ToString(this, Arguments.Empty).ToObject().ToString();
+        return Engine.Realm.Intrinsics.Error.PrototypeObject.ToString(this, Arguments.Empty).ToObject().ToString() ?? "";
     }
     }
 }
 }

+ 1 - 1
Jint/Native/JsBigInt.cs

@@ -95,7 +95,7 @@ public sealed class JsBigInt : JsValue, IEquatable<JsBigInt>
         return false;
         return false;
     }
     }
 
 
-    public override bool Equals(object other)
+    public override bool Equals(object? other)
     {
     {
         return Equals(other as JsBigInt);
         return Equals(other as JsBigInt);
     }
     }

+ 1 - 1
Jint/Native/JsString.cs

@@ -290,7 +290,7 @@ public class JsString : JsValue, IEquatable<JsString>, IEquatable<string>
         return base.IsLooselyEqual(value);
         return base.IsLooselyEqual(value);
     }
     }
 
 
-    public sealed override bool Equals(object obj)
+    public sealed override bool Equals(object? obj)
     {
     {
         return Equals(obj as JsString);
         return Equals(obj as JsString);
     }
     }

+ 1 - 1
Jint/Native/JsValue.cs

@@ -337,7 +337,7 @@ namespace Jint.Native
         /// <summary>
         /// <summary>
         /// Strict equality.
         /// Strict equality.
         /// </summary>
         /// </summary>
-        public override bool Equals(object obj)
+        public override bool Equals(object? obj)
         {
         {
             return Equals(obj as JsValue);
             return Equals(obj as JsValue);
         }
         }

+ 2 - 2
Jint/Native/SameValueZeroComparer.cs

@@ -6,7 +6,7 @@ internal sealed class SameValueZeroComparer : IEqualityComparer<JsValue>
 {
 {
     public static readonly SameValueZeroComparer Instance = new();
     public static readonly SameValueZeroComparer Instance = new();
 
 
-    bool IEqualityComparer<JsValue>.Equals(JsValue x, JsValue y)
+    bool IEqualityComparer<JsValue>.Equals(JsValue? x, JsValue? y)
     {
     {
         return Equals(x, y);
         return Equals(x, y);
     }
     }
@@ -17,7 +17,7 @@ internal sealed class SameValueZeroComparer : IEqualityComparer<JsValue>
     }
     }
 
 
     [MethodImpl(MethodImplOptions.AggressiveInlining)]
     [MethodImpl(MethodImplOptions.AggressiveInlining)]
-    internal static bool Equals(JsValue x, JsValue y)
+    internal static bool Equals(JsValue? x, JsValue? y)
     {
     {
         return x == y || x is JsNumber xNum && y is JsNumber yNum && double.IsNaN(xNum._value) && double.IsNaN(yNum._value);
         return x == y || x is JsNumber xNum && y is JsNumber yNum && double.IsNaN(xNum._value) && double.IsNaN(yNum._value);
     }
     }

+ 3 - 3
Jint/Native/String/StringExecutionContext.cs

@@ -16,10 +16,10 @@ namespace Jint.Native.String
         {
         {
         }
         }
 
 
-        public List<string> SplitSegmentList => _splitSegmentList = _splitSegmentList ?? new List<string>();
+        public List<string> SplitSegmentList => _splitSegmentList ??= new List<string>();
 
 
-        public string[] SplitArray1 => _splitArray1 = _splitArray1 ?? new string[1];
+        public string[] SplitArray1 => _splitArray1 ??= new string[1];
 
 
-        public static StringExecutionContext Current => _executionContext.Value;
+        public static StringExecutionContext Current => _executionContext.Value!;
     }
     }
 }
 }

+ 21 - 1
Jint/Native/TypedArray/IntrinsicTypedArrayPrototype.cs

@@ -1435,8 +1435,28 @@ namespace Jint.Native.TypedArray
                 _compare = compare;
                 _compare = compare;
             }
             }
 
 
-            public int Compare(JsValue x, JsValue y)
+            public int Compare(JsValue? x, JsValue? y)
             {
             {
+                if (x is null && y is null)
+                {
+                    return 0;
+                }
+
+                if (x is not null && y is null)
+                {
+                    return 1;
+                }
+
+                if (x is null)
+                {
+                    return -1;
+                }
+
+                if (y is null)
+                {
+                    return 1;
+                }
+
                 if (_compare is not null)
                 if (_compare is not null)
                 {
                 {
                     _comparableArray[0] = x;
                     _comparableArray[0] = x;

+ 16 - 16
Jint/Native/TypedArray/TypedArrayValue.cs

@@ -66,86 +66,86 @@ internal readonly record struct TypedArrayValue(Types Type, double DoubleValue,
         return default;
         return default;
     }
     }
 
 
-    public bool ToBoolean(IFormatProvider provider)
+    public bool ToBoolean(IFormatProvider? provider)
     {
     {
         ExceptionHelper.ThrowNotImplementedException();
         ExceptionHelper.ThrowNotImplementedException();
         return default;
         return default;
     }
     }
 
 
-    public char ToChar(IFormatProvider provider)
+    public char ToChar(IFormatProvider? provider)
     {
     {
         ExceptionHelper.ThrowNotImplementedException();
         ExceptionHelper.ThrowNotImplementedException();
         return default;
         return default;
     }
     }
 
 
-    public sbyte ToSByte(IFormatProvider provider)
+    public sbyte ToSByte(IFormatProvider? provider)
     {
     {
         return (sbyte) DoubleValue;
         return (sbyte) DoubleValue;
     }
     }
 
 
-    public byte ToByte(IFormatProvider provider)
+    public byte ToByte(IFormatProvider? provider)
     {
     {
         return (byte) DoubleValue;
         return (byte) DoubleValue;
     }
     }
 
 
-    public short ToInt16(IFormatProvider provider)
+    public short ToInt16(IFormatProvider? provider)
     {
     {
         return (short) DoubleValue;
         return (short) DoubleValue;
     }
     }
 
 
-    public ushort ToUInt16(IFormatProvider provider)
+    public ushort ToUInt16(IFormatProvider? provider)
     {
     {
         return (ushort) DoubleValue;
         return (ushort) DoubleValue;
     }
     }
 
 
-    public int ToInt32(IFormatProvider provider)
+    public int ToInt32(IFormatProvider? provider)
     {
     {
         return (int) DoubleValue;
         return (int) DoubleValue;
     }
     }
 
 
-    public uint ToUInt32(IFormatProvider provider)
+    public uint ToUInt32(IFormatProvider? provider)
     {
     {
         return (uint) DoubleValue;
         return (uint) DoubleValue;
     }
     }
 
 
-    public long ToInt64(IFormatProvider provider)
+    public long ToInt64(IFormatProvider? provider)
     {
     {
         return (long) BigInteger;
         return (long) BigInteger;
     }
     }
 
 
-    public ulong ToUInt64(IFormatProvider provider)
+    public ulong ToUInt64(IFormatProvider? provider)
     {
     {
         return (ulong) BigInteger;
         return (ulong) BigInteger;
     }
     }
 
 
-    public float ToSingle(IFormatProvider provider)
+    public float ToSingle(IFormatProvider? provider)
     {
     {
         return (float) DoubleValue;
         return (float) DoubleValue;
     }
     }
 
 
-    public double ToDouble(IFormatProvider provider)
+    public double ToDouble(IFormatProvider? provider)
     {
     {
         return DoubleValue;
         return DoubleValue;
     }
     }
 
 
-    public decimal ToDecimal(IFormatProvider provider)
+    public decimal ToDecimal(IFormatProvider? provider)
     {
     {
         return (decimal) DoubleValue;
         return (decimal) DoubleValue;
     }
     }
 
 
-    public DateTime ToDateTime(IFormatProvider provider)
+    public DateTime ToDateTime(IFormatProvider? provider)
     {
     {
         ExceptionHelper.ThrowNotImplementedException();
         ExceptionHelper.ThrowNotImplementedException();
         return default;
         return default;
     }
     }
 
 
-    public string ToString(IFormatProvider provider)
+    public string ToString(IFormatProvider? provider)
     {
     {
         ExceptionHelper.ThrowNotImplementedException();
         ExceptionHelper.ThrowNotImplementedException();
         return default;
         return default;
     }
     }
 
 
-    public object ToType(Type conversionType, IFormatProvider provider)
+    public object ToType(Type conversionType, IFormatProvider? provider)
     {
     {
         if (conversionType == typeof(BigInteger) && Type == Types.BigInt)
         if (conversionType == typeof(BigInteger) && Type == Types.BigInt)
         {
         {

+ 1 - 1
Jint/Options.cs

@@ -319,7 +319,7 @@ namespace Jint
         /// <summary>
         /// <summary>
         /// Strategy to create a CLR object to hold converted <see cref="ObjectInstance"/>.
         /// Strategy to create a CLR object to hold converted <see cref="ObjectInstance"/>.
         /// </summary>
         /// </summary>
-        public Func<ObjectInstance, IDictionary<string, object>> CreateClrObject = _ => new ExpandoObject();
+        public Func<ObjectInstance, IDictionary<string, object?>> CreateClrObject = _ => new ExpandoObject();
 
 
         /// <summary>
         /// <summary>
         /// Strategy to create a CLR object from TypeReference.
         /// Strategy to create a CLR object from TypeReference.

+ 8 - 8
Jint/Runtime/Interop/DefaultTypeConverter.cs

@@ -27,9 +27,9 @@ namespace Jint.Runtime.Interop
         private static readonly Type engineType = typeof(Engine);
         private static readonly Type engineType = typeof(Engine);
         private static readonly Type typeType = typeof(Type);
         private static readonly Type typeType = typeof(Type);
 
 
-        private static readonly MethodInfo convertChangeType = typeof(Convert).GetMethod("ChangeType", new[] { objectType, typeType, typeof(IFormatProvider) });
-        private static readonly MethodInfo jsValueFromObject = jsValueType.GetMethod(nameof(JsValue.FromObject));
-        private static readonly MethodInfo jsValueToObject = jsValueType.GetMethod(nameof(JsValue.ToObject));
+        private static readonly MethodInfo convertChangeType = typeof(Convert).GetMethod("ChangeType", new[] { objectType, typeType, typeof(IFormatProvider) })!;
+        private static readonly MethodInfo jsValueFromObject = jsValueType.GetMethod(nameof(JsValue.FromObject))!;
+        private static readonly MethodInfo jsValueToObject = jsValueType.GetMethod(nameof(JsValue.ToObject))!;
 
 
 
 
         public DefaultTypeConverter(Engine engine)
         public DefaultTypeConverter(Engine engine)
@@ -86,7 +86,7 @@ namespace Jint.Runtime.Interop
 
 
             if (type.IsNullable())
             if (type.IsNullable())
             {
             {
-                type = Nullable.GetUnderlyingType(type);
+                type = Nullable.GetUnderlyingType(type)!;
             }
             }
 
 
             if (type.IsEnum)
             if (type.IsEnum)
@@ -136,7 +136,7 @@ namespace Jint.Runtime.Interop
                     return false;
                     return false;
                 }
                 }
 
 
-                var targetElementType = type.GetElementType();
+                var targetElementType = type.GetElementType()!;
                 var itemsConverted = new object?[source.Length];
                 var itemsConverted = new object?[source.Length];
                 for (var i = 0; i < source.Length; i++)
                 for (var i = 0; i < source.Length; i++)
                 {
                 {
@@ -197,7 +197,7 @@ namespace Jint.Runtime.Interop
                     }
                     }
                 }
                 }
 
 
-                var obj = Activator.CreateInstance(type, constructorParameters);
+                var obj = Activator.CreateInstance(type, constructorParameters)!;
 
 
                 var members = type.GetMembers();
                 var members = type.GetMembers();
                 foreach (var member in members)
                 foreach (var member in members)
@@ -248,7 +248,7 @@ namespace Jint.Runtime.Interop
         private Delegate BuildDelegate(Type type, Func<JsValue, JsValue[], JsValue> function)
         private Delegate BuildDelegate(Type type, Func<JsValue, JsValue[], JsValue> function)
         {
         {
             var method = type.GetMethod("Invoke");
             var method = type.GetMethod("Invoke");
-            var arguments = method.GetParameters();
+            var arguments = method!.GetParameters();
 
 
             var parameters = new ParameterExpression[arguments.Length];
             var parameters = new ParameterExpression[arguments.Length];
             for (var i = 0; i < parameters.Length; i++)
             for (var i = 0; i < parameters.Length; i++)
@@ -336,7 +336,7 @@ namespace Jint.Runtime.Interop
                 try
                 try
                 {
                 {
                     converted = castOperator.Invoke(null, new[] { value });
                     converted = castOperator.Invoke(null, new[] { value });
-                    return true;
+                    return converted is not null;
                 }
                 }
                 catch
                 catch
                 {
                 {

+ 1 - 1
Jint/Runtime/Interop/DelegateWrapper.cs

@@ -118,7 +118,7 @@ namespace Jint.Runtime.Interop
                     {
                     {
                         converted = Engine.ClrTypeConverter.Convert(
                         converted = Engine.ClrTypeConverter.Convert(
                             value.ToObject(),
                             value.ToObject(),
-                            paramsParameterType,
+                            paramsParameterType!,
                             CultureInfo.InvariantCulture);
                             CultureInfo.InvariantCulture);
                     }
                     }
 
 

+ 1 - 1
Jint/Runtime/Interop/NamespaceReference.cs

@@ -124,7 +124,7 @@ namespace Jint.Runtime.Interop
                 {
                 {
                     foreach (Type nType in GetAllNestedTypes(type))
                     foreach (Type nType in GetAllNestedTypes(type))
                     {
                     {
-                        if (nType.FullName.Replace("+", ".").Equals(comparedPath))
+                        if (nType.FullName != null && nType.FullName.Replace("+", ".").Equals(comparedPath))
                         {
                         {
                             _engine.TypeCache.Add(comparedPath, nType);
                             _engine.TypeCache.Add(comparedPath, nType);
                             return TypeReference.CreateTypeReference(_engine, nType);
                             return TypeReference.CreateTypeReference(_engine, nType);

+ 3 - 3
Jint/Runtime/Interop/Reflection/DynamicObjectAccessor.cs

@@ -20,7 +20,7 @@ namespace Jint.Runtime.Interop.Reflection
 
 
         public override bool Writable => true;
         public override bool Writable => true;
 
 
-        protected override object DoGetValue(object target)
+        protected override object? DoGetValue(object target)
         {
         {
             var dynamicObject = (DynamicObject) target;
             var dynamicObject = (DynamicObject) target;
             var getter = _getter ??= new JintGetMemberBinder(_memberName, ignoreCase: true);
             var getter = _getter ??= new JintGetMemberBinder(_memberName, ignoreCase: true);
@@ -55,7 +55,7 @@ namespace Jint.Runtime.Interop.Reflection
             {
             {
             }
             }
 
 
-            public override DynamicMetaObject FallbackGetMember(DynamicMetaObject target, DynamicMetaObject errorSuggestion)
+            public override DynamicMetaObject FallbackGetMember(DynamicMetaObject target, DynamicMetaObject? errorSuggestion)
             {
             {
                 throw new NotImplementedException(nameof(FallbackGetMember) + " not implemented");
                 throw new NotImplementedException(nameof(FallbackGetMember) + " not implemented");
             }
             }
@@ -70,7 +70,7 @@ namespace Jint.Runtime.Interop.Reflection
             public override DynamicMetaObject FallbackSetMember(
             public override DynamicMetaObject FallbackSetMember(
                 DynamicMetaObject target,
                 DynamicMetaObject target,
                 DynamicMetaObject value,
                 DynamicMetaObject value,
-                DynamicMetaObject errorSuggestion)
+                DynamicMetaObject? errorSuggestion)
             {
             {
                 throw new NotImplementedException(nameof(FallbackSetMember) + " not implemented");
                 throw new NotImplementedException(nameof(FallbackSetMember) + " not implemented");
             }
             }

+ 2 - 1
Jint/Runtime/Interop/Reflection/ExtensionMethodCache.cs

@@ -1,3 +1,4 @@
+using System.Diagnostics.CodeAnalysis;
 using System.Linq;
 using System.Linq;
 using System.Reflection;
 using System.Reflection;
 using System.Threading;
 using System.Threading;
@@ -46,7 +47,7 @@ namespace Jint.Runtime.Interop.Reflection
 
 
         public bool HasMethods => _allExtensionMethods.Count > 0;
         public bool HasMethods => _allExtensionMethods.Count > 0;
 
 
-        public bool TryGetExtensionMethods(Type objectType, out MethodInfo[] methods)
+        public bool TryGetExtensionMethods(Type objectType, [NotNullWhen((true))] out MethodInfo[]? methods)
         {
         {
             var methodLookup = _extensionMethods;
             var methodLookup = _extensionMethods;
 
 

+ 1 - 1
Jint/Runtime/Interop/Reflection/FieldAccessor.cs

@@ -14,7 +14,7 @@ namespace Jint.Runtime.Interop.Reflection
 
 
         public override bool Writable => !_fieldInfo.Attributes.HasFlag(FieldAttributes.InitOnly);
         public override bool Writable => !_fieldInfo.Attributes.HasFlag(FieldAttributes.InitOnly);
 
 
-        protected override object DoGetValue(object target)
+        protected override object? DoGetValue(object target)
         {
         {
             return _fieldInfo.GetValue(target);
             return _fieldInfo.GetValue(target);
         }
         }

+ 4 - 4
Jint/Runtime/Interop/Reflection/IndexerAccessor.cs

@@ -13,11 +13,11 @@ namespace Jint.Runtime.Interop.Reflection
         private readonly object _key;
         private readonly object _key;
 
 
         private readonly PropertyInfo _indexer;
         private readonly PropertyInfo _indexer;
-        private readonly MethodInfo _getter;
-        private readonly MethodInfo _setter;
+        private readonly MethodInfo? _getter;
+        private readonly MethodInfo? _setter;
         private readonly MethodInfo? _containsKey;
         private readonly MethodInfo? _containsKey;
 
 
-        private static readonly PropertyInfo _iListIndexer = typeof(IList).GetProperty("Item");
+        private static readonly PropertyInfo _iListIndexer = typeof(IList).GetProperty("Item")!;
 
 
         private IndexerAccessor(PropertyInfo indexer, MethodInfo? containsKey, object key)
         private IndexerAccessor(PropertyInfo indexer, MethodInfo? containsKey, object key)
             : base(indexer.PropertyType, key)
             : base(indexer.PropertyType, key)
@@ -121,7 +121,7 @@ namespace Jint.Runtime.Interop.Reflection
 
 
         public override bool Writable => _indexer.CanWrite;
         public override bool Writable => _indexer.CanWrite;
 
 
-        protected override object DoGetValue(object target)
+        protected override object? DoGetValue(object target)
         {
         {
             if (_getter is null)
             if (_getter is null)
             {
             {

+ 1 - 1
Jint/Runtime/Interop/Reflection/PropertyAccessor.cs

@@ -17,7 +17,7 @@ namespace Jint.Runtime.Interop.Reflection
 
 
         public override bool Writable => _propertyInfo.CanWrite;
         public override bool Writable => _propertyInfo.CanWrite;
 
 
-        protected override object DoGetValue(object target)
+        protected override object? DoGetValue(object target)
         {
         {
             return _propertyInfo.GetValue(target, index: null);
             return _propertyInfo.GetValue(target, index: null);
         }
         }

+ 3 - 3
Jint/Runtime/Interop/TypeDescriptor.cs

@@ -96,7 +96,7 @@ namespace Jint.Runtime.Interop
             try
             try
             {
             {
                 var parameters = new[] { member, _valueType!.IsValueType ? Activator.CreateInstance(_valueType) : null };
                 var parameters = new[] { member, _valueType!.IsValueType ? Activator.CreateInstance(_valueType) : null };
-                var result = (bool) _tryGetValueMethod!.Invoke(target, parameters);
+                var result = (bool) _tryGetValueMethod!.Invoke(target, parameters)!;
                 o = parameters[1];
                 o = parameters[1];
                 return result;
                 return result;
             }
             }
@@ -114,7 +114,7 @@ namespace Jint.Runtime.Interop
                 return false;
                 return false;
             }
             }
 
 
-            return (bool) _removeMethod.Invoke(target , new object[] { key });
+            return (bool) _removeMethod.Invoke(target , new object[] { key })!;
         }
         }
 
 
         public ICollection<string> GetKeys(object target)
         public ICollection<string> GetKeys(object target)
@@ -124,7 +124,7 @@ namespace Jint.Runtime.Interop
                 ExceptionHelper.ThrowInvalidOperationException("Not a string-keyed dictionary");
                 ExceptionHelper.ThrowInvalidOperationException("Not a string-keyed dictionary");
             }
             }
 
 
-            return (ICollection<string>) _keysAccessor!.GetValue(target);
+            return (ICollection<string>) _keysAccessor!.GetValue(target)!;
         }
         }
     }
     }
 }
 }

+ 2 - 2
Jint/Runtime/Interop/TypeReference.cs

@@ -196,13 +196,13 @@ namespace Jint.Runtime.Interop
 
 
                 for (var i = 0; i < enumValues.Length; i++)
                 for (var i = 0; i < enumValues.Length; i++)
                 {
                 {
-                    var enumOriginalName = enumNames.GetValue(i).ToString();
+                    var enumOriginalName = enumNames.GetValue(i)?.ToString() ?? "";
                     var member = type.GetMember(enumOriginalName)[0];
                     var member = type.GetMember(enumOriginalName)[0];
                     foreach (var exposedName in typeResolverMemberNameCreator(member))
                     foreach (var exposedName in typeResolverMemberNameCreator(member))
                     {
                     {
                         if (memberNameComparer.Equals(name, exposedName))
                         if (memberNameComparer.Equals(name, exposedName))
                         {
                         {
-                            var value = enumValues.GetValue(i);
+                            var value = enumValues.GetValue(i)!;
                             return new ConstantValueAccessor(JsNumber.Create(value));
                             return new ConstantValueAccessor(JsNumber.Create(value));
                         }
                         }
                     }
                     }

+ 2 - 2
Jint/Runtime/Interop/TypeResolver.cs

@@ -311,12 +311,12 @@ namespace Jint.Runtime.Interop
         {
         {
             public static readonly StringComparer Instance = new DefaultMemberNameComparer();
             public static readonly StringComparer Instance = new DefaultMemberNameComparer();
 
 
-            public override int Compare(string x, string y)
+            public override int Compare(string? x, string? y)
             {
             {
                 throw new NotImplementedException();
                 throw new NotImplementedException();
             }
             }
 
 
-            public override bool Equals(string x, string y)
+            public override bool Equals(string? x, string? y)
             {
             {
                 if (ReferenceEquals(x, y))
                 if (ReferenceEquals(x, y))
                 {
                 {

+ 5 - 1
Jint/Runtime/Modules/DefaultModuleLoader.cs

@@ -22,7 +22,7 @@ public sealed class DefaultModuleLoader : IModuleLoader
 
 
         _restrictToBasePath = restrictToBasePath;
         _restrictToBasePath = restrictToBasePath;
 
 
-        if (!Uri.TryCreate(basePath, UriKind.Absolute, out _basePath))
+        if (!Uri.TryCreate(basePath, UriKind.Absolute, out var temp))
         {
         {
             if (!Path.IsPathRooted(basePath))
             if (!Path.IsPathRooted(basePath))
             {
             {
@@ -32,6 +32,10 @@ public sealed class DefaultModuleLoader : IModuleLoader
             basePath = Path.GetFullPath(basePath);
             basePath = Path.GetFullPath(basePath);
             _basePath = new Uri(basePath, UriKind.Absolute);
             _basePath = new Uri(basePath, UriKind.Absolute);
         }
         }
+        else
+        {
+            _basePath = temp;
+        }
 
 
         if (_basePath.AbsolutePath[_basePath.AbsolutePath.Length - 1] != '/')
         if (_basePath.AbsolutePath[_basePath.AbsolutePath.Length - 1] != '/')
         {
         {

+ 1 - 1
Jint/Runtime/TypeConverter.cs

@@ -1205,7 +1205,7 @@ namespace Jint.Runtime
                 return new AssignableResult(0, givenType);
                 return new AssignableResult(0, givenType);
             }
             }
 
 
-            Type baseType = givenType.BaseType;
+            var baseType = givenType.BaseType;
             if (baseType == null)
             if (baseType == null)
             {
             {
                 return new AssignableResult(-1, givenType);
                 return new AssignableResult(-1, givenType);

+ 4 - 0
Jint/SkipLocalsInitAttribute.cs

@@ -1,3 +1,5 @@
+#if !NET6_0_OR_GREATER
+
 namespace System.Runtime.CompilerServices;
 namespace System.Runtime.CompilerServices;
 
 
 [AttributeUsage(
 [AttributeUsage(
@@ -13,3 +15,5 @@ internal sealed class SkipLocalsInitAttribute : Attribute
 {
 {
     public SkipLocalsInitAttribute() { }
     public SkipLocalsInitAttribute() { }
 }
 }
+
+#endif