11using System ;
22using System . Collections . Generic ;
33using System . Linq ;
4+ using System . Reflection ;
45using DynamicExpresso . Reflection ;
56
67namespace DynamicExpresso . Parsing
78{
9+ /// <summary>
10+ /// Contains all the signatures for the binary and unary operators supported by DynamicExpresso.
11+ /// It allows to reuse the existing method resolutions logic in <see cref="Resolution.MethodResolution"/>.
12+ /// </summary>
813 internal static class ParseSignatures
914 {
10- private static MethodData [ ] MakeUnarySignatures ( params Type [ ] possibleOperandTypes )
15+ private static MethodBase [ ] MakeUnarySignatures ( params Type [ ] possibleOperandTypes )
1116 {
12- var signatures = new MethodData [ possibleOperandTypes . Length ] ;
17+ var signatures = new MethodBase [ possibleOperandTypes . Length ] ;
1318 for ( var i = 0 ; i < possibleOperandTypes . Length ; i ++ )
1419 {
15- signatures [ i ] = new MethodData
16- {
17- Parameters = new [ ] { new SimpleParameterInfo ( possibleOperandTypes [ i ] ) } ,
18- } ;
20+ signatures [ i ] = new SimpleMethodSignature ( possibleOperandTypes [ i ] ) ;
1921 }
2022 return signatures ;
2123 }
2224
23- private static MethodData [ ] MakeBinarySignatures ( IList < ( Type , Type ) > possibleOperandTypes )
25+ private static MethodBase [ ] MakeBinarySignatures ( IList < ( Type , Type ) > possibleOperandTypes )
2426 {
25- var signatures = new MethodData [ possibleOperandTypes . Count ] ;
27+ var signatures = new MethodBase [ possibleOperandTypes . Count ] ;
2628 for ( var i = 0 ; i < possibleOperandTypes . Count ; i ++ )
2729 {
2830 var ( left , right ) = possibleOperandTypes [ i ] ;
29- signatures [ i ] = new MethodData
30- {
31- Parameters = new [ ] { new SimpleParameterInfo ( left ) , new SimpleParameterInfo ( right ) } ,
32- } ;
31+ signatures [ i ] = new SimpleMethodSignature ( left , right ) ;
3332 }
3433 return signatures ;
3534 }
3635
3736 /// <summary>
3837 /// Signatures for the binary logical operators.
3938 /// </summary>
40- public static MethodData [ ] LogicalSignatures = MakeBinarySignatures ( new [ ]
39+ public static MethodBase [ ] LogicalSignatures = MakeBinarySignatures ( new [ ]
4140 {
4241 ( typeof ( bool ) , typeof ( bool ) ) ,
4342 ( typeof ( bool ? ) , typeof ( bool ? ) ) ,
@@ -46,7 +45,7 @@ private static MethodData[] MakeBinarySignatures(IList<(Type, Type)> possibleOpe
4645 /// <summary>
4746 /// Signatures for the binary arithmetic operators.
4847 /// </summary>
49- public static MethodData [ ] ArithmeticSignatures = MakeBinarySignatures ( new [ ]
48+ public static MethodBase [ ] ArithmeticSignatures = MakeBinarySignatures ( new [ ]
5049 {
5150 ( typeof ( int ) , typeof ( int ) ) ,
5251 ( typeof ( uint ) , typeof ( uint ) ) ,
@@ -67,7 +66,7 @@ private static MethodData[] MakeBinarySignatures(IList<(Type, Type)> possibleOpe
6766 /// <summary>
6867 /// Signatures for the binary relational operators.
6968 /// </summary>
70- public static MethodData [ ] RelationalSignatures = ArithmeticSignatures . Concat ( MakeBinarySignatures ( new [ ]
69+ public static MethodBase [ ] RelationalSignatures = ArithmeticSignatures . Concat ( MakeBinarySignatures ( new [ ]
7170 {
7271 ( typeof ( string ) , typeof ( string ) ) ,
7372 ( typeof ( char ) , typeof ( char ) ) ,
@@ -81,12 +80,12 @@ private static MethodData[] MakeBinarySignatures(IList<(Type, Type)> possibleOpe
8180 /// <summary>
8281 /// Signatures for the binary equality operators.
8382 /// </summary>
84- public static MethodData [ ] EqualitySignatures = RelationalSignatures . Concat ( LogicalSignatures ) . ToArray ( ) ;
83+ public static MethodBase [ ] EqualitySignatures = RelationalSignatures . Concat ( LogicalSignatures ) . ToArray ( ) ;
8584
8685 /// <summary>
8786 /// Signatures for the binary + operators.
8887 /// </summary>
89- public static MethodData [ ] AddSignatures = ArithmeticSignatures . Concat ( MakeBinarySignatures ( new [ ]
88+ public static MethodBase [ ] AddSignatures = ArithmeticSignatures . Concat ( MakeBinarySignatures ( new [ ]
9089 {
9190 ( typeof ( DateTime ) , typeof ( TimeSpan ) ) ,
9291 ( typeof ( TimeSpan ) , typeof ( TimeSpan ) ) ,
@@ -97,7 +96,7 @@ private static MethodData[] MakeBinarySignatures(IList<(Type, Type)> possibleOpe
9796 /// <summary>
9897 /// Signatures for the binary - operators.
9998 /// </summary>
100- public static MethodData [ ] SubtractSignatures = AddSignatures . Concat ( MakeBinarySignatures ( new [ ]
99+ public static MethodBase [ ] SubtractSignatures = AddSignatures . Concat ( MakeBinarySignatures ( new [ ]
101100 {
102101 ( typeof ( DateTime ) , typeof ( DateTime ) ) ,
103102 ( typeof ( DateTime ? ) , typeof ( DateTime ? ) ) ,
@@ -106,28 +105,28 @@ private static MethodData[] MakeBinarySignatures(IList<(Type, Type)> possibleOpe
106105 /// <summary>
107106 /// Signatures for the unary - operators.
108107 /// </summary>
109- public static MethodData [ ] NegationSignatures = MakeUnarySignatures (
108+ public static MethodBase [ ] NegationSignatures = MakeUnarySignatures (
110109 typeof ( int ) , typeof ( uint ) , typeof ( long ) , typeof ( ulong ) , typeof ( float ) , typeof ( double ) , typeof ( decimal ) ,
111110 typeof ( int ? ) , typeof ( uint ? ) , typeof ( long ? ) , typeof ( ulong ? ) , typeof ( float ? ) , typeof ( double ? ) , typeof ( decimal ? )
112111 ) ;
113112
114113 /// <summary>
115114 /// Signatures for the unary not (!) operator.
116115 /// </summary>
117- public static MethodData [ ] NotSignatures = MakeUnarySignatures ( typeof ( bool ) , typeof ( bool ? ) ) ;
116+ public static MethodBase [ ] NotSignatures = MakeUnarySignatures ( typeof ( bool ) , typeof ( bool ? ) ) ;
118117
119118 /// <summary>
120119 /// Signatures for the bitwise completement operators.
121120 /// </summary>
122- public static MethodData [ ] BitwiseComplementSignatures = MakeUnarySignatures (
121+ public static MethodBase [ ] BitwiseComplementSignatures = MakeUnarySignatures (
123122 typeof ( int ) , typeof ( uint ) , typeof ( long ) , typeof ( ulong ) ,
124123 typeof ( int ? ) , typeof ( uint ? ) , typeof ( long ? ) , typeof ( ulong ? )
125124 ) ;
126125
127126 /// <summary>
128127 /// Signatures for the left and right shift operators.
129128 /// </summary>
130- public static MethodData [ ] ShiftSignatures = MakeBinarySignatures ( new [ ]
129+ public static MethodBase [ ] ShiftSignatures = MakeBinarySignatures ( new [ ]
131130 {
132131 ( typeof ( int ) , typeof ( int ) ) ,
133132 ( typeof ( uint ) , typeof ( int ) ) ,
0 commit comments