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,8 +25,6 @@ namespace FastExpressionCompiler.LightExpression.ILDecoder;
2225namespace FastExpressionCompiler . ILDecoder ;
2326#endif
2427
25- #pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
26-
2728[ 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." ) ]
2829public static class ILReaderFactory
2930{
@@ -109,7 +110,11 @@ public static StringBuilder ToILString(this IEnumerable<ILInstruction> ilInstruc
109110 case OperandType . InlineMethod :
110111 var m = ( InlineMethodInstruction ) il ;
111112 var sig = m . Method . ToString ( ) ;
113+ #if NET
114+ var paramStart = sig . IndexOf ( '(' , StringComparison . Ordinal ) ;
115+ #else
112116 var paramStart = sig . IndexOf ( '(' ) ;
117+ #endif
113118 var paramList = paramStart == - 1 ? "()" : sig . Substring ( paramStart ) ;
114119
115120 if ( m . Method is MethodInfo met )
@@ -556,8 +561,12 @@ public class MethodBaseILProvider : IILProvider
556561
557562 public MethodBaseILProvider ( MethodBase method )
558563 {
564+ #if NET
565+ ArgumentNullException . ThrowIfNull ( method ) ;
566+ #else
559567 if ( method == null )
560568 throw new ArgumentNullException ( nameof ( method ) ) ;
569+ #endif
561570
562571 var methodType = method . GetType ( ) ;
563572 if ( methodType != _runtimeMethodInfoType & methodType != _runtimeConstructorInfoType )
@@ -613,21 +622,21 @@ public DynamicMethodILProvider(DynamicMethod method)
613622
614623public static class ILFormatter
615624{
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} ") ;
625+ public static StringBuilder Int32ToHex ( StringBuilder sb , int int32 ) => sb . Append ( int32 . ToString ( "X8" , CultureInfo . InvariantCulture ) ) ;
626+ public static StringBuilder Int16ToHex ( StringBuilder sb , int int16 ) => sb . Append ( int16 . ToString ( "X4" , CultureInfo . InvariantCulture ) ) ;
627+ public static StringBuilder Int8ToHex ( StringBuilder sb , int int8 ) => sb . Append ( int8 . ToString ( "X2" , CultureInfo . InvariantCulture ) ) ;
628+ public static StringBuilder Argument ( StringBuilder sb , int ordinal ) => sb . AppendFormat ( CultureInfo . InvariantCulture , "V_{0}" , ordinal ) ;
629+ public static StringBuilder Label ( StringBuilder sb , int offset ) => sb . AppendFormat ( CultureInfo . InvariantCulture , "IL_{0 :D4}" , offset ) ;
621630
622631 public static StringBuilder MultipleLabels ( StringBuilder sb , int [ ] offsets )
623632 {
624633 var length = offsets . Length ;
625634 for ( var i = 0 ; i < length ; i ++ )
626635 {
627- sb . AppendFormat ( i == 0 ? "(" : ", " ) ;
636+ sb . Append ( i == 0 ? "(" : ", " ) ;
628637 sb . Append ( Label ( sb , offsets [ i ] ) ) ;
629638 }
630- sb . AppendFormat ( ")" ) ;
639+ sb . Append ( ')' ) ;
631640 return sb ;
632641 }
633642
@@ -648,9 +657,9 @@ public static StringBuilder EscapedString(StringBuilder sb, string str)
648657 else if ( ch == '\" ' )
649658 sb . Append ( "\\ \" " ) ;
650659 else if ( ch == '\\ ' )
651- sb . Append ( " \\ " ) ;
660+ sb . Append ( ' \\ ' ) ;
652661 else if ( ch < 0x20 || ch >= 0x7f )
653- sb . AppendFormat ( "\\ u{0:x4}" , ( int ) ch ) ;
662+ sb . AppendFormat ( CultureInfo . InvariantCulture , "\\ u{0:x4}" , ( int ) ch ) ;
654663 else
655664 sb . Append ( ch ) ;
656665 }
@@ -663,10 +672,10 @@ public static StringBuilder SigByteArrayToString(StringBuilder sb, byte[] sig)
663672 var length = sig . Length ;
664673 for ( var i = 0 ; i < length ; i ++ )
665674 {
666- sb . AppendFormat ( i == 0 ? "SIG [" : " " ) ;
675+ sb . Append ( i == 0 ? "SIG [" : " " ) ;
667676 sb . Append ( Int8ToHex ( sb , sig [ i ] ) ) ;
668677 }
669- sb . AppendFormat ( "]" ) ;
678+ sb . Append ( ']' ) ;
670679 return sb ;
671680 }
672681}
@@ -820,5 +829,3 @@ public MemberInfo AsMember(int token)
820829
821830 public byte [ ] AsSignature ( int token ) => this [ token ] as byte [ ] ;
822831}
823-
824- #pragma warning restore CS1591
0 commit comments