PredefinedMembers
class PredefinedMembers
using Microsoft.CSharp.RuntimeBinder.Errors;
using Microsoft.CSharp.RuntimeBinder.Syntax;
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
internal class PredefinedMembers
{
private SymbolLoader _loader;
internal SymbolTable RuntimeBinderSymbolTable;
private MethodSymbol[] _methods = new MethodSymbol[109];
private PropertySymbol[] _properties = new PropertySymbol[3];
private static int[] s_DelegateCtorSignature1 = new int[4] {
125,
2,
15,
13
};
private static int[] s_DelegateCtorSignature2 = new int[4] {
125,
2,
15,
14
};
private static PredefinedPropertyInfo[] s_predefinedProperties = new PredefinedPropertyInfo[3] {
new PredefinedPropertyInfo(PREDEFPROP.PP_FIRST, MethodRequiredEnum.Optional, PredefinedName.PN_COUNT, PREDEFMETH.PM_COUNT, PREDEFMETH.PM_COUNT),
new PredefinedPropertyInfo(PREDEFPROP.PP_ARRAY_LENGTH, MethodRequiredEnum.Optional, PredefinedName.PN_LENGTH, PREDEFMETH.PM_ARRAY_GETLENGTH, PREDEFMETH.PM_COUNT),
new PredefinedPropertyInfo(PREDEFPROP.PP_G_OPTIONAL_VALUE, MethodRequiredEnum.Optional, PredefinedName.PN_CAP_VALUE, PREDEFMETH.PM_G_OPTIONAL_GETVALUE, PREDEFMETH.PM_COUNT)
};
private static PredefinedMethodInfo[] s_predefinedMethods = new PredefinedMethodInfo[109] {
new PredefinedMethodInfo(PREDEFMETH.PM_FIRST, MethodRequiredEnum.Optional, PredefinedType.PT_COUNT, PredefinedName.PN_COUNT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[2] {
125,
0
}),
new PredefinedMethodInfo(PREDEFMETH.PM_ARRAY_GETLENGTH, MethodRequiredEnum.Optional, PredefinedType.PT_ARRAY, PredefinedName.PN_GETLENGTH, MethodCallingConventionEnum.Instance, ACCESS.ACC_PUBLIC, 0, new int[2] {
2,
0
}),
new PredefinedMethodInfo(PREDEFMETH.PM_DECIMAL_OPDECREMENT, MethodRequiredEnum.Optional, PredefinedType.PT_DECIMAL, PredefinedName.PN_OPDECREMENT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[3] {
6,
1,
6
}),
new PredefinedMethodInfo(PREDEFMETH.PM_DECIMAL_OPDIVISION, MethodRequiredEnum.Optional, PredefinedType.PT_DECIMAL, PredefinedName.PN_OPDIVISION, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
6,
2,
6,
6
}),
new PredefinedMethodInfo(PREDEFMETH.PM_DECIMAL_OPEQUALITY, MethodRequiredEnum.Optional, PredefinedType.PT_DECIMAL, PredefinedName.PN_OPEQUALITY, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
8,
2,
6,
6
}),
new PredefinedMethodInfo(PREDEFMETH.PM_DECIMAL_OPGREATERTHAN, MethodRequiredEnum.Optional, PredefinedType.PT_DECIMAL, PredefinedName.PN_OPGREATERTHAN, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
8,
2,
6,
6
}),
new PredefinedMethodInfo(PREDEFMETH.PM_DECIMAL_OPGREATERTHANOREQUAL, MethodRequiredEnum.Optional, PredefinedType.PT_DECIMAL, PredefinedName.PN_OPGREATERTHANOREQUAL, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
8,
2,
6,
6
}),
new PredefinedMethodInfo(PREDEFMETH.PM_DECIMAL_OPINCREMENT, MethodRequiredEnum.Optional, PredefinedType.PT_DECIMAL, PredefinedName.PN_OPINCREMENT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[3] {
6,
1,
6
}),
new PredefinedMethodInfo(PREDEFMETH.PM_DECIMAL_OPINEQUALITY, MethodRequiredEnum.Optional, PredefinedType.PT_DECIMAL, PredefinedName.PN_OPINEQUALITY, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
8,
2,
6,
6
}),
new PredefinedMethodInfo(PREDEFMETH.PM_DECIMAL_OPLESSTHAN, MethodRequiredEnum.Optional, PredefinedType.PT_DECIMAL, PredefinedName.PN_OPLESSTHAN, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
8,
2,
6,
6
}),
new PredefinedMethodInfo(PREDEFMETH.PM_DECIMAL_OPLESSTHANOREQUAL, MethodRequiredEnum.Optional, PredefinedType.PT_DECIMAL, PredefinedName.PN_OPLESSTHANOREQUAL, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
8,
2,
6,
6
}),
new PredefinedMethodInfo(PREDEFMETH.PM_DECIMAL_OPMINUS, MethodRequiredEnum.Optional, PredefinedType.PT_DECIMAL, PredefinedName.PN_OPMINUS, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
6,
2,
6,
6
}),
new PredefinedMethodInfo(PREDEFMETH.PM_DECIMAL_OPMODULUS, MethodRequiredEnum.Optional, PredefinedType.PT_DECIMAL, PredefinedName.PN_OPMODULUS, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
6,
2,
6,
6
}),
new PredefinedMethodInfo(PREDEFMETH.PM_DECIMAL_OPMULTIPLY, MethodRequiredEnum.Optional, PredefinedType.PT_DECIMAL, PredefinedName.PN_OPMULTIPLY, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
6,
2,
6,
6
}),
new PredefinedMethodInfo(PREDEFMETH.PM_DECIMAL_OPPLUS, MethodRequiredEnum.Optional, PredefinedType.PT_DECIMAL, PredefinedName.PN_OPPLUS, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
6,
2,
6,
6
}),
new PredefinedMethodInfo(PREDEFMETH.PM_DECIMAL_OPUNARYMINUS, MethodRequiredEnum.Optional, PredefinedType.PT_DECIMAL, PredefinedName.PN_OPUNARYMINUS, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[3] {
6,
1,
6
}),
new PredefinedMethodInfo(PREDEFMETH.PM_DECIMAL_OPUNARYPLUS, MethodRequiredEnum.Optional, PredefinedType.PT_DECIMAL, PredefinedName.PN_OPUNARYPLUS, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[3] {
6,
1,
6
}),
new PredefinedMethodInfo(PREDEFMETH.PM_DELEGATE_COMBINE, MethodRequiredEnum.Optional, PredefinedType.PT_DELEGATE, PredefinedName.PN_COMBINE, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
17,
2,
17,
17
}),
new PredefinedMethodInfo(PREDEFMETH.PM_DELEGATE_OPEQUALITY, MethodRequiredEnum.Optional, PredefinedType.PT_DELEGATE, PredefinedName.PN_OPEQUALITY, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
8,
2,
17,
17
}),
new PredefinedMethodInfo(PREDEFMETH.PM_DELEGATE_OPINEQUALITY, MethodRequiredEnum.Optional, PredefinedType.PT_DELEGATE, PredefinedName.PN_OPINEQUALITY, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
8,
2,
17,
17
}),
new PredefinedMethodInfo(PREDEFMETH.PM_DELEGATE_REMOVE, MethodRequiredEnum.Optional, PredefinedType.PT_DELEGATE, PredefinedName.PN_REMOVE, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
17,
2,
17,
17
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_ADD, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_ADD, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_ADD_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_ADD, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
93,
3,
91,
91,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_ADDCHECKED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_ADDCHECKED, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_ADDCHECKED_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_ADDCHECKED, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
93,
3,
91,
91,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_AND, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_AND, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_AND_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_AND, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
93,
3,
91,
91,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_ANDALSO, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_ANDALSO, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_ANDALSO_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_ANDALSO, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
93,
3,
91,
91,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_ARRAYINDEX, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_ARRAYINDEX, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_ARRAYINDEX2, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_ARRAYINDEX, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
99,
2,
91,
128,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_ASSIGN, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_ASSIGN, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_CONDITION, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_CONDITION, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
95,
3,
91,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_CONSTANT_OBJECT_TYPE, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_CONSTANT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
96,
2,
15,
21
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_CONVERT, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_CONVERT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
94,
2,
91,
21
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_CONVERT_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_CONVERT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
94,
3,
91,
21,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_CONVERTCHECKED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_CONVERTCHECKED, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
94,
2,
91,
21
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_CONVERTCHECKED_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_CONVERTCHECKED, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
94,
3,
91,
21,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_DIVIDE, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_DIVIDE, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_DIVIDE_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_DIVIDE, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
93,
3,
91,
91,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_EQUAL, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_EQUAL, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_EQUAL_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_EQUAL, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[6] {
93,
4,
91,
91,
8,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_EXCLUSIVEOR, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_EXCLUSIVEOR, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_EXCLUSIVEOR_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_EXCLUSIVEOR, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
93,
3,
91,
91,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_FIELD, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_CAP_FIELD, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
98,
2,
91,
110
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_GREATERTHAN, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_GREATERTHAN, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_GREATERTHAN_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_GREATERTHAN, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[6] {
93,
4,
91,
91,
8,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_GREATERTHANOREQUAL, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_GREATERTHANOREQUAL, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_GREATERTHANOREQUAL_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_GREATERTHANOREQUAL, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[6] {
93,
4,
91,
91,
8,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_LAMBDA, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_LAMBDA, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 1, new int[7] {
90,
127,
0,
2,
91,
128,
97
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_LEFTSHIFT, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_LEFTSHIFT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_LEFTSHIFT_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_LEFTSHIFT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
93,
3,
91,
91,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_LESSTHAN, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_LESSTHAN, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_LESSTHAN_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_LESSTHAN, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[6] {
93,
4,
91,
91,
8,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_LESSTHANOREQUAL, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_LESSTHANOREQUAL, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_LESSTHANOREQUAL_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_LESSTHANOREQUAL, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[6] {
93,
4,
91,
91,
8,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_MODULO, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_MODULO, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_MODULO_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_MODULO, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
93,
3,
91,
91,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_MULTIPLY, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_MULTIPLY, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_MULTIPLY_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_MULTIPLY, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
93,
3,
91,
91,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_MULTIPLYCHECKED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_MULTIPLYCHECKED, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_MULTIPLYCHECKED_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_MULTIPLYCHECKED, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
93,
3,
91,
91,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_NOTEQUAL, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_NOTEQUAL, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_NOTEQUAL_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_NOTEQUAL, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[6] {
93,
4,
91,
91,
8,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_OR, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_OR, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_OR_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_OR, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
93,
3,
91,
91,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_ORELSE, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_ORELSE, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_ORELSE_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_ORELSE, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
93,
3,
91,
91,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_PARAMETER, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_PARAMETER, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
97,
2,
21,
16
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_RIGHTSHIFT, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_RIGHTSHIFT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_RIGHTSHIFT_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_RIGHTSHIFT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
93,
3,
91,
91,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_SUBTRACT, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_SUBTRACT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_SUBTRACT_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_SUBTRACT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
93,
3,
91,
91,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_SUBTRACTCHECKED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_SUBTRACTCHECKED, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
93,
2,
91,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_SUBTRACTCHECKED_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_SUBTRACTCHECKED, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
93,
3,
91,
91,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_UNARYPLUS_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_PLUS, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
94,
2,
91,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_NEGATE, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_NEGATE, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[3] {
94,
1,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_NEGATE_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_NEGATE, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
94,
2,
91,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_NEGATECHECKED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_NEGATECHECKED, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[3] {
94,
1,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_NEGATECHECKED_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_NEGATECHECKED, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
94,
2,
91,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_CALL, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_CALL, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[6] {
99,
3,
91,
111,
128,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_NEW, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_NEW, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
100,
2,
112,
128,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_NEW_MEMBERS, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_NEW, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[7] {
100,
3,
112,
65,
91,
128,
115
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_NEW_TYPE, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_NEW, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[3] {
100,
1,
21
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_QUOTE, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_QUOTE, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[3] {
94,
1,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_ARRAYLENGTH, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_ARRAYLENGTH, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[3] {
94,
1,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_NOT, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_NOT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[3] {
94,
1,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_NOT_USER_DEFINED, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_NOT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
94,
2,
91,
111
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_NEWARRAYINIT, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_NEWARRAYINIT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
105,
2,
21,
128,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_PROPERTY, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_EXPRESSION_PROPERTY, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
98,
2,
91,
113
}),
new PredefinedMethodInfo(PREDEFMETH.PM_EXPRESSION_INVOKE, MethodRequiredEnum.Optional, PredefinedType.PT_EXPRESSION, PredefinedName.PN_INVOKE, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
109,
2,
91,
128,
91
}),
new PredefinedMethodInfo(PREDEFMETH.PM_METHODINFO_CREATEDELEGATE_TYPE_OBJECT, MethodRequiredEnum.Optional, PredefinedType.PT_METHODINFO, PredefinedName.PN_CREATEDELEGATE, MethodCallingConventionEnum.Virtual, ACCESS.ACC_PUBLIC, 0, new int[4] {
17,
2,
21,
15
}),
new PredefinedMethodInfo(PREDEFMETH.PM_G_OPTIONAL_CTOR, MethodRequiredEnum.Optional, PredefinedType.PT_G_OPTIONAL, PredefinedName.PN_CTOR, MethodCallingConventionEnum.Instance, ACCESS.ACC_PUBLIC, 0, new int[4] {
125,
1,
126,
0
}),
new PredefinedMethodInfo(PREDEFMETH.PM_G_OPTIONAL_GETHASVALUE, MethodRequiredEnum.Optional, PredefinedType.PT_G_OPTIONAL, PredefinedName.PN_GETHASVALUE, MethodCallingConventionEnum.Instance, ACCESS.ACC_PUBLIC, 0, new int[2] {
8,
0
}),
new PredefinedMethodInfo(PREDEFMETH.PM_G_OPTIONAL_GETVALUE, MethodRequiredEnum.Optional, PredefinedType.PT_G_OPTIONAL, PredefinedName.PN_GETVALUE, MethodCallingConventionEnum.Instance, ACCESS.ACC_PUBLIC, 0, new int[3] {
126,
0,
0
}),
new PredefinedMethodInfo(PREDEFMETH.PM_G_OPTIONAL_GET_VALUE_OR_DEF, MethodRequiredEnum.Optional, PredefinedType.PT_G_OPTIONAL, PredefinedName.PN_GET_VALUE_OR_DEF, MethodCallingConventionEnum.Instance, ACCESS.ACC_PUBLIC, 0, new int[3] {
126,
0,
0
}),
new PredefinedMethodInfo(PREDEFMETH.PM_STRING_CONCAT_OBJECT_1, MethodRequiredEnum.Optional, PredefinedType.PT_STRING, PredefinedName.PN_CONCAT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[3] {
16,
1,
15
}),
new PredefinedMethodInfo(PREDEFMETH.PM_STRING_CONCAT_OBJECT_2, MethodRequiredEnum.Optional, PredefinedType.PT_STRING, PredefinedName.PN_CONCAT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
16,
2,
15,
15
}),
new PredefinedMethodInfo(PREDEFMETH.PM_STRING_CONCAT_OBJECT_3, MethodRequiredEnum.Optional, PredefinedType.PT_STRING, PredefinedName.PN_CONCAT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
16,
3,
15,
15,
15
}),
new PredefinedMethodInfo(PREDEFMETH.PM_STRING_CONCAT_STRING_1, MethodRequiredEnum.Optional, PredefinedType.PT_STRING, PredefinedName.PN_CONCAT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[3] {
16,
1,
16
}),
new PredefinedMethodInfo(PREDEFMETH.PM_STRING_CONCAT_STRING_2, MethodRequiredEnum.Optional, PredefinedType.PT_STRING, PredefinedName.PN_CONCAT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
16,
2,
16,
16
}),
new PredefinedMethodInfo(PREDEFMETH.PM_STRING_CONCAT_STRING_3, MethodRequiredEnum.Optional, PredefinedType.PT_STRING, PredefinedName.PN_CONCAT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[5] {
16,
3,
16,
16,
16
}),
new PredefinedMethodInfo(PREDEFMETH.PM_STRING_CONCAT_STRING_4, MethodRequiredEnum.Optional, PredefinedType.PT_STRING, PredefinedName.PN_CONCAT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[6] {
16,
4,
16,
16,
16,
16
}),
new PredefinedMethodInfo(PREDEFMETH.PM_STRING_CONCAT_SZ_OBJECT, MethodRequiredEnum.Optional, PredefinedType.PT_STRING, PredefinedName.PN_CONCAT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
16,
1,
128,
15
}),
new PredefinedMethodInfo(PREDEFMETH.PM_STRING_CONCAT_SZ_STRING, MethodRequiredEnum.Optional, PredefinedType.PT_STRING, PredefinedName.PN_CONCAT, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
16,
1,
128,
16
}),
new PredefinedMethodInfo(PREDEFMETH.PM_STRING_GETCHARS, MethodRequiredEnum.Optional, PredefinedType.PT_STRING, PredefinedName.PN_GETCHARS, MethodCallingConventionEnum.Instance, ACCESS.ACC_PUBLIC, 0, new int[3] {
7,
1,
2
}),
new PredefinedMethodInfo(PREDEFMETH.PM_STRING_GETLENGTH, MethodRequiredEnum.Optional, PredefinedType.PT_STRING, PredefinedName.PN_GETLENGTH, MethodCallingConventionEnum.Instance, ACCESS.ACC_PUBLIC, 0, new int[2] {
2,
0
}),
new PredefinedMethodInfo(PREDEFMETH.PM_STRING_OPEQUALITY, MethodRequiredEnum.Optional, PredefinedType.PT_STRING, PredefinedName.PN_OPEQUALITY, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
8,
2,
16,
16
}),
new PredefinedMethodInfo(PREDEFMETH.PM_STRING_OPINEQUALITY, MethodRequiredEnum.Optional, PredefinedType.PT_STRING, PredefinedName.PN_OPINEQUALITY, MethodCallingConventionEnum.Static, ACCESS.ACC_PUBLIC, 0, new int[4] {
8,
2,
16,
16
})
};
protected static void RETAILVERIFY(bool f)
{
}
private Name GetMethName(PREDEFMETH method)
{
return GetPredefName(GetMethPredefName(method));
}
private AggregateSymbol GetMethParent(PREDEFMETH method)
{
return GetOptPredefAgg(GetMethPredefType(method));
}
private MethodSymbol FindDelegateConstructor(AggregateSymbol delegateType, int[] signature)
{
return LoadMethod(delegateType, signature, 0, GetPredefName(PredefinedName.PN_CTOR), ACCESS.ACC_PUBLIC, false, false);
}
private MethodSymbol FindDelegateConstructor(AggregateSymbol delegateType)
{
MethodSymbol methodSymbol = FindDelegateConstructor(delegateType, s_DelegateCtorSignature1);
if (methodSymbol == null)
methodSymbol = FindDelegateConstructor(delegateType, s_DelegateCtorSignature2);
return methodSymbol;
}
public MethodSymbol FindDelegateConstructor(AggregateSymbol delegateType, bool fReportErrors)
{
MethodSymbol methodSymbol = FindDelegateConstructor(delegateType);
if ((methodSymbol == null) & fReportErrors)
GetErrorContext().Error(ErrorCode.ERR_BadDelegateConstructor, delegateType);
return methodSymbol;
}
private PropertySymbol EnsureProperty(PREDEFPROP property)
{
RETAILVERIFY(property > PREDEFPROP.PP_FIRST && property < (PREDEFPROP)109);
if (_properties[(int)property] == null)
_properties[(int)property] = LoadProperty(property);
return _properties[(int)property];
}
private PropertySymbol LoadProperty(PREDEFPROP property)
{
return LoadProperty(property, GetPropName(property), GetPropGetter(property), GetPropSetter(property));
}
private Name GetPropName(PREDEFPROP property)
{
return GetPredefName(GetPropPredefName(property));
}
private PropertySymbol LoadProperty(PREDEFPROP predefProp, Name propertyName, PREDEFMETH propertyGetter, PREDEFMETH propertySetter)
{
MethodSymbol optionalMethod = GetOptionalMethod(propertyGetter);
MethodSymbol methodSymbol = null;
if (propertySetter != PREDEFMETH.PM_COUNT)
methodSymbol = GetOptionalMethod(propertySetter);
if (optionalMethod == null && methodSymbol == null) {
RuntimeBinderSymbolTable.AddPredefinedPropertyToSymbolTable(GetOptPredefAgg(GetPropPredefType(predefProp)), propertyName);
optionalMethod = GetOptionalMethod(propertyGetter);
if (propertySetter != PREDEFMETH.PM_COUNT)
methodSymbol = GetOptionalMethod(propertySetter);
}
methodSymbol?.SetMethKind(MethodKindEnum.PropAccessor);
PropertySymbol propertySymbol = null;
if (optionalMethod != null) {
optionalMethod.SetMethKind(MethodKindEnum.PropAccessor);
propertySymbol = optionalMethod.getProperty();
if (propertySymbol == null)
RuntimeBinderSymbolTable.AddPredefinedPropertyToSymbolTable(GetOptPredefAgg(GetPropPredefType(predefProp)), propertyName);
propertySymbol = optionalMethod.getProperty();
if (propertySymbol.name != propertyName || (propertySetter != PREDEFMETH.PM_COUNT && (methodSymbol == null || !methodSymbol.isPropertyAccessor() || methodSymbol.getProperty() != propertySymbol)) || propertySymbol.getBogus())
propertySymbol = null;
}
return propertySymbol;
}
private SymbolLoader GetSymbolLoader()
{
return _loader;
}
private ErrorHandling GetErrorContext()
{
return GetSymbolLoader().GetErrorContext();
}
private NameManager GetNameManager()
{
return GetSymbolLoader().GetNameManager();
}
private TypeManager GetTypeManager()
{
return GetSymbolLoader().GetTypeManager();
}
private BSYMMGR getBSymmgr()
{
return GetSymbolLoader().getBSymmgr();
}
private Name GetPredefName(PredefinedName pn)
{
return GetNameManager().GetPredefName(pn);
}
private AggregateSymbol GetOptPredefAgg(PredefinedType pt)
{
return GetSymbolLoader().GetOptPredefAgg(pt);
}
private CType LoadTypeFromSignature(int[] signature, ref int indexIntoSignatures, TypeArray classTyVars)
{
MethodSignatureEnum methodSignatureEnum = (MethodSignatureEnum)signature[indexIntoSignatures];
indexIntoSignatures++;
switch (methodSignatureEnum) {
case MethodSignatureEnum.SIG_REF: {
CType cType3 = LoadTypeFromSignature(signature, ref indexIntoSignatures, classTyVars);
if (cType3 == null)
return null;
return GetTypeManager().GetParameterModifier(cType3, false);
}
case MethodSignatureEnum.SIG_OUT: {
CType cType2 = LoadTypeFromSignature(signature, ref indexIntoSignatures, classTyVars);
if (cType2 == null)
return null;
return GetTypeManager().GetParameterModifier(cType2, true);
}
case MethodSignatureEnum.SIG_SZ_ARRAY: {
CType cType = LoadTypeFromSignature(signature, ref indexIntoSignatures, classTyVars);
if (cType == null)
return null;
return GetTypeManager().GetArray(cType, 1);
}
case MethodSignatureEnum.SIG_METH_TYVAR: {
int iv = signature[indexIntoSignatures];
indexIntoSignatures++;
return GetTypeManager().GetStdMethTypeVar(iv);
}
case MethodSignatureEnum.SIG_CLASS_TYVAR: {
int i2 = signature[indexIntoSignatures];
indexIntoSignatures++;
return classTyVars.Item(i2);
}
case (MethodSignatureEnum)125:
return GetTypeManager().GetVoid();
default: {
AggregateSymbol optPredefAgg = GetOptPredefAgg((PredefinedType)methodSignatureEnum);
if (optPredefAgg != null) {
CType[] array = new CType[optPredefAgg.GetTypeVars().size];
for (int i = 0; i < optPredefAgg.GetTypeVars().size; i++) {
array[i] = LoadTypeFromSignature(signature, ref indexIntoSignatures, classTyVars);
if (array[i] == null)
return null;
}
AggregateType aggregate = GetTypeManager().GetAggregate(optPredefAgg, getBSymmgr().AllocParams(optPredefAgg.GetTypeVars().size, array));
if (aggregate.isPredefType(PredefinedType.PT_G_OPTIONAL))
return GetTypeManager().GetNubFromNullable(aggregate);
return aggregate;
}
return null;
}
}
}
private TypeArray LoadTypeArrayFromSignature(int[] signature, ref int indexIntoSignatures, TypeArray classTyVars)
{
int num = signature[indexIntoSignatures];
indexIntoSignatures++;
CType[] array = new CType[num];
for (int i = 0; i < num; i++) {
array[i] = LoadTypeFromSignature(signature, ref indexIntoSignatures, classTyVars);
if (array[i] == null)
return null;
}
return getBSymmgr().AllocParams(num, array);
}
public PredefinedMembers(SymbolLoader loader)
{
_loader = loader;
_methods = new MethodSymbol[109];
_properties = new PropertySymbol[3];
}
public PropertySymbol GetProperty(PREDEFPROP property)
{
PropertySymbol propertySymbol = EnsureProperty(property);
if (propertySymbol == null)
ReportError(property);
return propertySymbol;
}
public MethodSymbol GetMethod(PREDEFMETH method)
{
MethodSymbol methodSymbol = EnsureMethod(method);
if (methodSymbol == null)
ReportError(method);
return methodSymbol;
}
public MethodSymbol GetOptionalMethod(PREDEFMETH method)
{
return EnsureMethod(method);
}
private MethodSymbol EnsureMethod(PREDEFMETH method)
{
RETAILVERIFY(method > PREDEFMETH.PM_FIRST && method < PREDEFMETH.PM_COUNT);
if (_methods[(int)method] == null)
_methods[(int)method] = LoadMethod(method);
return _methods[(int)method];
}
private MethodSymbol LoadMethod(AggregateSymbol type, int[] signature, int cMethodTyVars, Name methodName, ACCESS methodAccess, bool isStatic, bool isVirtual)
{
if (type == null)
return null;
TypeArray typeVarsAll = type.GetTypeVarsAll();
int indexIntoSignatures = 0;
CType cType = LoadTypeFromSignature(signature, ref indexIntoSignatures, typeVarsAll);
if (cType == null)
return null;
TypeArray typeArray = LoadTypeArrayFromSignature(signature, ref indexIntoSignatures, typeVarsAll);
if (typeArray == null)
return null;
TypeArray stdMethTyVarArray = GetTypeManager().GetStdMethTyVarArray(cMethodTyVars);
MethodSymbol methodSymbol = LookupMethodWhileLoading(type, cMethodTyVars, methodName, methodAccess, isStatic, isVirtual, cType, typeArray);
if (methodSymbol == null) {
RuntimeBinderSymbolTable.AddPredefinedMethodToSymbolTable(type, methodName);
methodSymbol = LookupMethodWhileLoading(type, cMethodTyVars, methodName, methodAccess, isStatic, isVirtual, cType, typeArray);
}
return methodSymbol;
}
private MethodSymbol LookupMethodWhileLoading(AggregateSymbol type, int cMethodTyVars, Name methodName, ACCESS methodAccess, bool isStatic, bool isVirtual, CType returnType, TypeArray argumentTypes)
{
for (Symbol symbol = GetSymbolLoader().LookupAggMember(methodName, type, symbmask_t.MASK_ALL); symbol != null; symbol = GetSymbolLoader().LookupNextSym(symbol, type, symbmask_t.MASK_ALL)) {
if (symbol.IsMethodSymbol()) {
MethodSymbol methodSymbol = symbol.AsMethodSymbol();
if ((methodSymbol.GetAccess() == methodAccess || methodAccess == ACCESS.ACC_UNKNOWN) && methodSymbol.isStatic == isStatic && methodSymbol.isVirtual == isVirtual && methodSymbol.typeVars.size == cMethodTyVars && GetTypeManager().SubstEqualTypes(methodSymbol.RetType, returnType, null, methodSymbol.typeVars, SubstTypeFlags.DenormMeth) && GetTypeManager().SubstEqualTypeArrays(methodSymbol.Params, argumentTypes, null, methodSymbol.typeVars, SubstTypeFlags.DenormMeth) && !methodSymbol.getBogus())
return methodSymbol;
}
}
return null;
}
private MethodSymbol LoadMethod(PREDEFMETH method)
{
return LoadMethod(GetMethParent(method), GetMethSignature(method), GetMethTyVars(method), GetMethName(method), GetMethAccess(method), IsMethStatic(method), IsMethVirtual(method));
}
private void ReportError(PREDEFMETH method)
{
ReportError(GetMethPredefType(method), GetMethPredefName(method));
}
private void ReportError(PredefinedType type, PredefinedName name)
{
GetErrorContext().Error(ErrorCode.ERR_MissingPredefinedMember, PredefinedTypes.GetFullName(type), GetPredefName(name));
}
private static PredefinedName GetPropPredefName(PREDEFPROP property)
{
return GetPropInfo(property).name;
}
private static PREDEFMETH GetPropGetter(PREDEFPROP property)
{
return GetPropInfo(property).getter;
}
private static PredefinedType GetPropPredefType(PREDEFPROP property)
{
return GetMethInfo(GetPropGetter(property)).type;
}
private static PREDEFMETH GetPropSetter(PREDEFPROP property)
{
PREDEFMETH setter = GetPropInfo(property).setter;
return GetPropInfo(property).setter;
}
private void ReportError(PREDEFPROP property)
{
ReportError(GetPropPredefType(property), GetPropPredefName(property));
}
public static PredefinedPropertyInfo GetPropInfo(PREDEFPROP property)
{
RETAILVERIFY(property > PREDEFPROP.PP_FIRST && property < PREDEFPROP.PP_COUNT);
RETAILVERIFY(s_predefinedProperties[(int)property].property == property);
return s_predefinedProperties[(int)property];
}
public static PredefinedMethodInfo GetMethInfo(PREDEFMETH method)
{
RETAILVERIFY(method > PREDEFMETH.PM_FIRST && method < PREDEFMETH.PM_COUNT);
RETAILVERIFY(s_predefinedMethods[(int)method].method == method);
return s_predefinedMethods[(int)method];
}
private static PredefinedName GetMethPredefName(PREDEFMETH method)
{
return GetMethInfo(method).name;
}
private static PredefinedType GetMethPredefType(PREDEFMETH method)
{
return GetMethInfo(method).type;
}
private static bool IsMethStatic(PREDEFMETH method)
{
return GetMethInfo(method).callingConvention == MethodCallingConventionEnum.Static;
}
private static bool IsMethVirtual(PREDEFMETH method)
{
return GetMethInfo(method).callingConvention == MethodCallingConventionEnum.Virtual;
}
private static ACCESS GetMethAccess(PREDEFMETH method)
{
return GetMethInfo(method).access;
}
private static int GetMethTyVars(PREDEFMETH method)
{
return GetMethInfo(method).cTypeVars;
}
private static int[] GetMethSignature(PREDEFMETH method)
{
return GetMethInfo(method).signature;
}
}
}