1+ #nullable disable
2+
13#if DEBUG
24// #define DEBUG_INTERNALS
35#endif
79using System . Collections ;
810using System . Collections . Generic ;
911using System . Diagnostics ;
12+ using System . Globalization ;
1013using System . Reflection ;
1114using System . Reflection . Emit ;
1215using System . Text ;
@@ -22,7 +25,13 @@ namespace FastExpressionCompiler.LightExpression.ILDecoder;
2225namespace FastExpressionCompiler . ILDecoder ;
2326#endif
2427
28+ #pragma warning disable IDE0079 // Remove unnecessary suppression (like the ones below when they don't apply)
29+ #pragma warning disable IDE1006 // Naming rule violation: Identifiers should be cased correctly
30+ #pragma warning disable IDE0038 // Use pattern matching
31+ #pragma warning disable IDE0057 // Use range operator
32+
2533#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
34+ #pragma warning disable CA1305 // Specify IFormatProvider
2635
2736[ UnconditionalSuppressMessage ( "Trimming" , "IL2026:Members annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code" , Justification = "Uses reflection on internal types and is not trim-compatible." ) ]
2837public static class ILReaderFactory
@@ -109,7 +118,11 @@ public static StringBuilder ToILString(this IEnumerable<ILInstruction> ilInstruc
109118 case OperandType . InlineMethod :
110119 var m = ( InlineMethodInstruction ) il ;
111120 var sig = m . Method . ToString ( ) ;
121+ #if NET
122+ var paramStart = sig . IndexOf ( '(' , StringComparison . Ordinal ) ;
123+ #else
112124 var paramStart = sig . IndexOf ( '(' ) ;
125+ #endif
113126 var paramList = paramStart == - 1 ? "()" : sig . Substring ( paramStart ) ;
114127
115128 if ( m . Method is MethodInfo met )
@@ -556,8 +569,12 @@ public class MethodBaseILProvider : IILProvider
556569
557570 public MethodBaseILProvider ( MethodBase method )
558571 {
572+ #if NET
573+ ArgumentNullException . ThrowIfNull ( method ) ;
574+ #else
559575 if ( method == null )
560576 throw new ArgumentNullException ( nameof ( method ) ) ;
577+ #endif
561578
562579 var methodType = method . GetType ( ) ;
563580 if ( methodType != _runtimeMethodInfoType & methodType != _runtimeConstructorInfoType )
@@ -613,21 +630,21 @@ public DynamicMethodILProvider(DynamicMethod method)
613630
614631public static class ILFormatter
615632{
616- public static StringBuilder Int32ToHex ( StringBuilder sb , int int32 ) => sb . Append ( int32 . ToString ( "X8" ) ) ;
617- public static StringBuilder Int16ToHex ( StringBuilder sb , int int16 ) => sb . Append ( int16 . ToString ( "X4" ) ) ;
618- public static StringBuilder Int8ToHex ( StringBuilder sb , int int8 ) => sb . Append ( int8 . ToString ( "X2" ) ) ;
619- public static StringBuilder Argument ( StringBuilder sb , int ordinal ) => sb . Append ( $ "V_{ ordinal } " ) ;
620- public static StringBuilder Label ( StringBuilder sb , int offset ) => sb . Append ( $ "IL_{ offset : D4} ") ;
633+ public static StringBuilder Int32ToHex ( StringBuilder sb , int int32 ) => sb . Append ( int32 . ToString ( "X8" , CultureInfo . InvariantCulture ) ) ;
634+ public static StringBuilder Int16ToHex ( StringBuilder sb , int int16 ) => sb . Append ( int16 . ToString ( "X4" , CultureInfo . InvariantCulture ) ) ;
635+ public static StringBuilder Int8ToHex ( StringBuilder sb , int int8 ) => sb . Append ( int8 . ToString ( "X2" , CultureInfo . InvariantCulture ) ) ;
636+ public static StringBuilder Argument ( StringBuilder sb , int ordinal ) => sb . AppendFormat ( CultureInfo . InvariantCulture , "V_{0}" , ordinal ) ;
637+ public static StringBuilder Label ( StringBuilder sb , int offset ) => sb . AppendFormat ( CultureInfo . InvariantCulture , "IL_{0 :D4}" , offset ) ;
621638
622639 public static StringBuilder MultipleLabels ( StringBuilder sb , int [ ] offsets )
623640 {
624641 var length = offsets . Length ;
625642 for ( var i = 0 ; i < length ; i ++ )
626643 {
627- sb . AppendFormat ( i == 0 ? "(" : ", " ) ;
644+ sb . Append ( i == 0 ? "(" : ", " ) ;
628645 sb . Append ( Label ( sb , offsets [ i ] ) ) ;
629646 }
630- sb . AppendFormat ( ")" ) ;
647+ sb . Append ( ')' ) ;
631648 return sb ;
632649 }
633650
@@ -648,9 +665,9 @@ public static StringBuilder EscapedString(StringBuilder sb, string str)
648665 else if ( ch == '\" ' )
649666 sb . Append ( "\\ \" " ) ;
650667 else if ( ch == '\\ ' )
651- sb . Append ( " \\ " ) ;
668+ sb . Append ( ' \\ ' ) ;
652669 else if ( ch < 0x20 || ch >= 0x7f )
653- sb . AppendFormat ( "\\ u{0:x4}" , ( int ) ch ) ;
670+ sb . AppendFormat ( CultureInfo . InvariantCulture , "\\ u{0:x4}" , ( int ) ch ) ;
654671 else
655672 sb . Append ( ch ) ;
656673 }
@@ -663,10 +680,10 @@ public static StringBuilder SigByteArrayToString(StringBuilder sb, byte[] sig)
663680 var length = sig . Length ;
664681 for ( var i = 0 ; i < length ; i ++ )
665682 {
666- sb . AppendFormat ( i == 0 ? "SIG [" : " " ) ;
683+ sb . Append ( i == 0 ? "SIG [" : " " ) ;
667684 sb . Append ( Int8ToHex ( sb , sig [ i ] ) ) ;
668685 }
669- sb . AppendFormat ( "]" ) ;
686+ sb . Append ( ']' ) ;
670687 return sb ;
671688 }
672689}
0 commit comments