1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
4 
5 using System.Diagnostics;
6 using Microsoft.CSharp.RuntimeBinder.Errors;
7 using Microsoft.CSharp.RuntimeBinder.Syntax;
8 
9 namespace Microsoft.CSharp.RuntimeBinder.Semantics
10 {
11     // enum identifying all predefined methods used in the C# compiler
12     //
13     // Naming convention is PREDEFMETH.PM_ <Predefined CType> _ < Predefined Name of Method>
14     // if methods can only be disambiguated by signature, then follow the
15     // above with _ <argument types>
16     //
17     // Keep this list sorted by containing type and name.
18     internal enum PREDEFMETH
19     {
20         PM_DECIMAL_OPDECREMENT,
21         PM_DECIMAL_OPINCREMENT,
22         PM_DECIMAL_OPUNARYMINUS,
23 
24         PM_DELEGATE_COMBINE,
25         PM_DELEGATE_OPEQUALITY,
26         PM_DELEGATE_OPINEQUALITY,
27         PM_DELEGATE_REMOVE,
28 
29         PM_EXPRESSION_ADD,
30         PM_EXPRESSION_ADD_USER_DEFINED,
31         PM_EXPRESSION_ADDCHECKED,
32         PM_EXPRESSION_ADDCHECKED_USER_DEFINED,
33         PM_EXPRESSION_AND,
34         PM_EXPRESSION_AND_USER_DEFINED,
35         PM_EXPRESSION_ANDALSO,
36         PM_EXPRESSION_ANDALSO_USER_DEFINED,
37         PM_EXPRESSION_ARRAYINDEX,
38         PM_EXPRESSION_ARRAYINDEX2,
39         PM_EXPRESSION_ASSIGN,
40 
41         PM_EXPRESSION_CONSTANT_OBJECT_TYPE,
42         PM_EXPRESSION_CONVERT,
43         PM_EXPRESSION_CONVERT_USER_DEFINED,
44         PM_EXPRESSION_CONVERTCHECKED,
45         PM_EXPRESSION_CONVERTCHECKED_USER_DEFINED,
46         PM_EXPRESSION_DIVIDE,
47         PM_EXPRESSION_DIVIDE_USER_DEFINED,
48 
49         PM_EXPRESSION_EQUAL,
50         PM_EXPRESSION_EQUAL_USER_DEFINED,
51         PM_EXPRESSION_EXCLUSIVEOR,
52         PM_EXPRESSION_EXCLUSIVEOR_USER_DEFINED,
53         PM_EXPRESSION_FIELD,
54         PM_EXPRESSION_GREATERTHAN,
55         PM_EXPRESSION_GREATERTHAN_USER_DEFINED,
56         PM_EXPRESSION_GREATERTHANOREQUAL,
57         PM_EXPRESSION_GREATERTHANOREQUAL_USER_DEFINED,
58         PM_EXPRESSION_LAMBDA,
59 
60         PM_EXPRESSION_LEFTSHIFT,
61         PM_EXPRESSION_LEFTSHIFT_USER_DEFINED,
62         PM_EXPRESSION_LESSTHAN,
63         PM_EXPRESSION_LESSTHAN_USER_DEFINED,
64         PM_EXPRESSION_LESSTHANOREQUAL,
65         PM_EXPRESSION_LESSTHANOREQUAL_USER_DEFINED,
66         PM_EXPRESSION_MODULO,
67         PM_EXPRESSION_MODULO_USER_DEFINED,
68         PM_EXPRESSION_MULTIPLY,
69         PM_EXPRESSION_MULTIPLY_USER_DEFINED,
70         PM_EXPRESSION_MULTIPLYCHECKED,
71         PM_EXPRESSION_MULTIPLYCHECKED_USER_DEFINED,
72         PM_EXPRESSION_NOTEQUAL,
73         PM_EXPRESSION_NOTEQUAL_USER_DEFINED,
74         PM_EXPRESSION_OR,
75         PM_EXPRESSION_OR_USER_DEFINED,
76         PM_EXPRESSION_ORELSE,
77         PM_EXPRESSION_ORELSE_USER_DEFINED,
78         PM_EXPRESSION_PARAMETER,
79         PM_EXPRESSION_RIGHTSHIFT,
80         PM_EXPRESSION_RIGHTSHIFT_USER_DEFINED,
81         PM_EXPRESSION_SUBTRACT,
82         PM_EXPRESSION_SUBTRACT_USER_DEFINED,
83         PM_EXPRESSION_SUBTRACTCHECKED,
84         PM_EXPRESSION_SUBTRACTCHECKED_USER_DEFINED,
85         PM_EXPRESSION_UNARYPLUS_USER_DEFINED,
86         PM_EXPRESSION_NEGATE,
87         PM_EXPRESSION_NEGATE_USER_DEFINED,
88         PM_EXPRESSION_NEGATECHECKED,
89         PM_EXPRESSION_NEGATECHECKED_USER_DEFINED,
90         PM_EXPRESSION_CALL,
91         PM_EXPRESSION_NEW,
92         PM_EXPRESSION_NEW_TYPE,
93         PM_EXPRESSION_QUOTE,
94 
95         PM_EXPRESSION_NOT,
96         PM_EXPRESSION_NOT_USER_DEFINED,
97 
98 
99         PM_EXPRESSION_NEWARRAYINIT,
100         PM_EXPRESSION_PROPERTY,
101 
102 
103         PM_EXPRESSION_INVOKE,
104 
105         PM_G_OPTIONAL_CTOR,
106         PM_G_OPTIONAL_GETVALUE,
107 
108         PM_STRING_CONCAT_OBJECT_2,
109         PM_STRING_CONCAT_OBJECT_3,
110         PM_STRING_CONCAT_STRING_2,
111         PM_STRING_OPEQUALITY,
112         PM_STRING_OPINEQUALITY,
113 
114         PM_COUNT
115     }
116 
117     // enum identifying all predefined properties used in the C# compiler
118     // Naming convention is PREDEFMETH.PM_ <Predefined CType> _ < Predefined Name of Property>
119     // Keep this list sorted by containing type and name.
120     internal enum PREDEFPROP
121     {
122         PP_G_OPTIONAL_VALUE,
123         PP_COUNT,
124     };
125 
126     internal enum MethodCallingConventionEnum
127     {
128         Static,
129         Virtual,
130         Instance
131     }
132     // Enum used to encode a method signature
133     // A signature is encoded as a sequence of int values.
134     // The grammar for signatures is:
135     //
136     //  signature
137     //      return_type count_of_parameters parameter_types
138     //
139     //  type
140     //      any predefined type (ex: PredefinedType.PT_OBJECT, PredefinedType.PT_VOID)  type_args
141     //      MethodSignatureEnum.SIG_CLASS_TYVAR  index_of_class_tyvar
142     //      MethodSignatureEnum.SIG_METH_TYVAR  index_of_method_tyvar
143     //      MethodSignatureEnum.SIG_SZ_ARRAY type
144     //      MethodSignatureEnum.SIG_REF type
145     //      MethodSignatureEnum.SIG_OUT type
146     //
147     internal enum MethodSignatureEnum
148     {
149         // Values 0 to PredefinedType.PT_VOID are reserved for predefined types in signatures
150         // start next value at PredefinedType.PT_VOID + 1,
151         SIG_CLASS_TYVAR = (int)PredefinedType.PT_VOID + 1,          // next element in signature is index of class tyvar
152         SIG_METH_TYVAR,                         // next element in signature is index of method tyvar
153         SIG_SZ_ARRAY                            // must be followed by signature type of array elements
154     }
155 
156     // A description of a method the compiler uses while compiling.
157     internal sealed class PredefinedMethodInfo
158     {
159         public PREDEFMETH method;
160         public PredefinedType type;
161         public PredefinedName name;
162         public MethodCallingConventionEnum callingConvention;
163         public ACCESS access;          // ACCESS.ACC_UNKNOWN means any accessibility is ok
164         public int cTypeVars;
165         public int[] signature;       // Size 8. expand this if a new method has a signature which doesn't fit in the current space
166 
PredefinedMethodInfo(PREDEFMETH method, PredefinedType type, PredefinedName name, MethodCallingConventionEnum callingConvention, ACCESS access, int cTypeVars, int[] signature)167         public PredefinedMethodInfo(PREDEFMETH method, PredefinedType type, PredefinedName name, MethodCallingConventionEnum callingConvention, ACCESS access, int cTypeVars, int[] signature)
168         {
169             this.method = method;
170             this.type = type;
171             this.name = name;
172             this.callingConvention = callingConvention;
173             this.access = access;
174             this.cTypeVars = cTypeVars;
175             this.signature = signature;
176         }
177     }
178 
179 
180     // A description of a method the compiler uses while compiling.
181     internal sealed class PredefinedPropertyInfo
182     {
183         public PREDEFPROP property;
184         public PredefinedName name;
185         public PREDEFMETH getter;
186 
PredefinedPropertyInfo(PREDEFPROP property, PredefinedName name, PREDEFMETH getter)187         public PredefinedPropertyInfo(PREDEFPROP property, PredefinedName name, PREDEFMETH getter)
188         {
189             this.property = property;
190             this.name = name;
191             this.getter = getter;
192         }
193     };
194 
195     // Loads and caches predefined members.
196     // Also finds constructors on delegate types.
197     internal sealed class PredefinedMembers
198     {
199         private readonly SymbolLoader _loader;
200         internal SymbolTable RuntimeBinderSymbolTable;
201         private readonly MethodSymbol[] _methods = new MethodSymbol[(int)PREDEFMETH.PM_COUNT];
202         private readonly PropertySymbol[] _properties = new PropertySymbol[(int)PREDEFPROP.PP_COUNT];
203 
GetMethName(PREDEFMETH method)204         private Name GetMethName(PREDEFMETH method)
205         {
206             return GetPredefName(GetMethPredefName(method));
207         }
208 
GetMethParent(PREDEFMETH method)209         private AggregateSymbol GetMethParent(PREDEFMETH method)
210         {
211             return GetPredefAgg(GetMethPredefType(method));
212         }
213 
LoadProperty(PREDEFPROP property)214         private PropertySymbol LoadProperty(PREDEFPROP property)
215         {
216             return LoadProperty(
217                         property,
218                         GetPropName(property),
219                         GetPropGetter(property));
220         }
221 
GetPropName(PREDEFPROP property)222         private Name GetPropName(PREDEFPROP property)
223         {
224             return GetPredefName(GetPropPredefName(property));
225         }
LoadProperty( PREDEFPROP predefProp, Name propertyName, PREDEFMETH propertyGetter)226         private PropertySymbol LoadProperty(
227             PREDEFPROP predefProp,
228             Name propertyName,
229             PREDEFMETH propertyGetter)
230         {
231             Debug.Assert(propertyName != null);
232             Debug.Assert(propertyGetter >= 0 && propertyGetter < PREDEFMETH.PM_COUNT);
233 
234             RuntimeBinderSymbolTable.AddPredefinedPropertyToSymbolTable(
235                 GetPredefAgg(GetPropPredefType(predefProp)), propertyName);
236             MethodSymbol getter = GetMethod(propertyGetter);
237 
238             getter.SetMethKind(MethodKindEnum.PropAccessor);
239             PropertySymbol property = getter.getProperty();
240             Debug.Assert(property != null);
241             return property;
242         }
243 
GetSymbolLoader()244         private SymbolLoader GetSymbolLoader()
245         {
246             Debug.Assert(_loader != null);
247 
248             return _loader;
249         }
GetErrorContext()250         private ErrorHandling GetErrorContext()
251         {
252             return GetSymbolLoader().GetErrorContext();
253         }
GetTypeManager()254         private TypeManager GetTypeManager()
255         {
256             return GetSymbolLoader().GetTypeManager();
257         }
getBSymmgr()258         private BSYMMGR getBSymmgr()
259         {
260             return GetSymbolLoader().getBSymmgr();
261         }
262 
GetPredefName(PredefinedName pn)263         private Name GetPredefName(PredefinedName pn)
264         {
265             return NameManager.GetPredefinedName(pn);
266         }
GetPredefAgg(PredefinedType pt)267         private AggregateSymbol GetPredefAgg(PredefinedType pt)
268         {
269             return GetSymbolLoader().GetPredefAgg(pt);
270         }
271 
LoadTypeFromSignature(int[] signature, ref int indexIntoSignatures, TypeArray classTyVars)272         private CType LoadTypeFromSignature(int[] signature, ref int indexIntoSignatures, TypeArray classTyVars)
273         {
274             Debug.Assert(signature != null);
275 
276             MethodSignatureEnum current = (MethodSignatureEnum)signature[indexIntoSignatures];
277             indexIntoSignatures++;
278 
279             switch (current)
280             {
281                 case MethodSignatureEnum.SIG_SZ_ARRAY:
282                     return GetTypeManager()
283                         .GetArray(LoadTypeFromSignature(signature, ref indexIntoSignatures, classTyVars), 1, true);
284 
285                 case MethodSignatureEnum.SIG_METH_TYVAR:
286                     return GetTypeManager().GetStdMethTypeVar(signature[indexIntoSignatures++]);
287 
288                 case MethodSignatureEnum.SIG_CLASS_TYVAR:
289                     return classTyVars[signature[indexIntoSignatures++]];
290 
291                 case (MethodSignatureEnum)PredefinedType.PT_VOID:
292                     return GetTypeManager().GetVoid();
293 
294                 default:
295                     Debug.Assert(current >= 0 && (int)current < (int)PredefinedType.PT_COUNT);
296                     AggregateSymbol agg = GetPredefAgg((PredefinedType)current);
297                     int typeCount = agg.GetTypeVars().Count;
298                     if (typeCount == 0)
299                     {
300                         return GetTypeManager().GetAggregate(agg, BSYMMGR.EmptyTypeArray());
301                     }
302 
303                     CType[] typeArgs = new CType[typeCount];
304                     for (int iTypeArg = 0; iTypeArg < typeArgs.Length; iTypeArg++)
305                     {
306                         typeArgs[iTypeArg] = LoadTypeFromSignature(signature, ref indexIntoSignatures, classTyVars);
307                     }
308 
309                     return GetTypeManager().GetAggregate(agg, getBSymmgr().AllocParams(typeArgs));
310             }
311         }
312 
LoadTypeArrayFromSignature(int[] signature, ref int indexIntoSignatures, TypeArray classTyVars)313         private TypeArray LoadTypeArrayFromSignature(int[] signature, ref int indexIntoSignatures, TypeArray classTyVars)
314         {
315             Debug.Assert(signature != null);
316 
317             int count = signature[indexIntoSignatures];
318             indexIntoSignatures++;
319 
320             Debug.Assert(count >= 0);
321 
322             CType[] ptypes = new CType[count];
323             for (int i = 0; i < ptypes.Length; i++)
324             {
325                 ptypes[i] = LoadTypeFromSignature(signature, ref indexIntoSignatures, classTyVars);
326             }
327 
328             return getBSymmgr().AllocParams(count, ptypes);
329         }
330 
PredefinedMembers(SymbolLoader loader)331         public PredefinedMembers(SymbolLoader loader)
332         {
333             _loader = loader;
334             Debug.Assert(_loader != null);
335 
336             _methods = new MethodSymbol[(int)PREDEFMETH.PM_COUNT];
337             _properties = new PropertySymbol[(int)PREDEFPROP.PP_COUNT];
338 
339 #if DEBUG
340             // validate the tables
341             for (int i = 0; i < (int)PREDEFMETH.PM_COUNT; i++)
342             {
343                 Debug.Assert((int)GetMethInfo((PREDEFMETH)i).method == i);
344             }
345             for (int i = 0; i < (int)PREDEFPROP.PP_COUNT; i++)
346             {
347                 Debug.Assert((int)GetPropInfo((PREDEFPROP)i).property == i);
348             }
349 #endif
350         }
351 
GetProperty(PREDEFPROP property)352         public PropertySymbol GetProperty(PREDEFPROP property)
353         {
354             Debug.Assert(property >= 0 && property < PREDEFPROP.PP_COUNT);
355             return _properties[(int)property] ?? (_properties[(int)property] = LoadProperty(property));
356         }
357 
GetMethod(PREDEFMETH method)358         public MethodSymbol GetMethod(PREDEFMETH method)
359         {
360             Debug.Assert(method >= 0 && method < PREDEFMETH.PM_COUNT);
361             return _methods[(int)method] ?? (_methods[(int)method] = LoadMethod(method));
362         }
363 
LoadMethod( AggregateSymbol type, int[] signature, int cMethodTyVars, Name methodName, ACCESS methodAccess, bool isStatic, bool isVirtual )364         private MethodSymbol LoadMethod(
365                         AggregateSymbol type,
366                         int[] signature,
367                         int cMethodTyVars,
368                         Name methodName,
369                         ACCESS methodAccess,
370                         bool isStatic,
371                         bool isVirtual
372                         )
373         {
374             Debug.Assert(signature != null);
375             Debug.Assert(cMethodTyVars >= 0);
376             Debug.Assert(methodName != null);
377             Debug.Assert(type != null);
378             TypeArray classTyVars = type.GetTypeVarsAll();
379 
380             int index = 0;
381             CType returnType = LoadTypeFromSignature(signature, ref index, classTyVars);
382             Debug.Assert(returnType != null);
383 
384             TypeArray argumentTypes = LoadTypeArrayFromSignature(signature, ref index, classTyVars);
385             Debug.Assert(argumentTypes != null);
386 
387             MethodSymbol ret = LookupMethodWhileLoading(type, cMethodTyVars, methodName, methodAccess, isStatic, isVirtual, returnType, argumentTypes);
388 
389             if (ret == null)
390             {
391                 RuntimeBinderSymbolTable.AddPredefinedMethodToSymbolTable(type, methodName);
392                 ret = LookupMethodWhileLoading(type, cMethodTyVars, methodName, methodAccess, isStatic, isVirtual, returnType, argumentTypes);
393             }
394             return ret;
395         }
396 
LookupMethodWhileLoading(AggregateSymbol type, int cMethodTyVars, Name methodName, ACCESS methodAccess, bool isStatic, bool isVirtual, CType returnType, TypeArray argumentTypes)397         private MethodSymbol LookupMethodWhileLoading(AggregateSymbol type, int cMethodTyVars, Name methodName, ACCESS methodAccess, bool isStatic, bool isVirtual, CType returnType, TypeArray argumentTypes)
398         {
399             for (Symbol sym = GetSymbolLoader().LookupAggMember(methodName, type, symbmask_t.MASK_ALL);
400                  sym != null;
401                  sym = SymbolLoader.LookupNextSym(sym, type, symbmask_t.MASK_ALL))
402             {
403                 if (sym is MethodSymbol methsym)
404                 {
405                     if ((methsym.GetAccess() == methodAccess || methodAccess == ACCESS.ACC_UNKNOWN) &&
406                         methsym.isStatic == isStatic &&
407                         methsym.isVirtual == isVirtual &&
408                         methsym.typeVars.Count == cMethodTyVars &&
409                         GetTypeManager().SubstEqualTypes(methsym.RetType, returnType, null, methsym.typeVars, SubstTypeFlags.DenormMeth) &&
410                         GetTypeManager().SubstEqualTypeArrays(methsym.Params, argumentTypes, (TypeArray)null,
411                             methsym.typeVars, SubstTypeFlags.DenormMeth))
412                     {
413                         return methsym;
414                     }
415                 }
416             }
417             return null;
418         }
419 
LoadMethod(PREDEFMETH method)420         private MethodSymbol LoadMethod(PREDEFMETH method)
421         {
422             return LoadMethod(
423                         GetMethParent(method),
424                         GetMethSignature(method),
425                         GetMethTyVars(method),
426                         GetMethName(method),
427                         GetMethAccess(method),
428                         IsMethStatic(method),
429                         IsMethVirtual(method));
430         }
431 
GetPropPredefName(PREDEFPROP property)432         private static PredefinedName GetPropPredefName(PREDEFPROP property)
433         {
434             return GetPropInfo(property).name;
435         }
436 
GetPropGetter(PREDEFPROP property)437         private static PREDEFMETH GetPropGetter(PREDEFPROP property)
438         {
439             PREDEFMETH result = GetPropInfo(property).getter;
440 
441             // getters are MethodRequiredEnum.Required
442             Debug.Assert(result >= 0 && result < PREDEFMETH.PM_COUNT);
443 
444             return result;
445         }
446 
GetPropPredefType(PREDEFPROP property)447         private static PredefinedType GetPropPredefType(PREDEFPROP property)
448         {
449             return GetMethInfo(GetPropGetter(property)).type;
450         }
451 
452         // the list of predefined property definitions.
453         // This list must be in the same order as the PREDEFPROP enum.
454         private static readonly PredefinedPropertyInfo[] s_predefinedProperties = {
455             new PredefinedPropertyInfo(PREDEFPROP.PP_G_OPTIONAL_VALUE,  PredefinedName.PN_CAP_VALUE,    PREDEFMETH.PM_G_OPTIONAL_GETVALUE)
456         };
457 
GetPropInfo(PREDEFPROP property)458         private static PredefinedPropertyInfo GetPropInfo(PREDEFPROP property)
459         {
460             Debug.Assert(property >= 0 && property < PREDEFPROP.PP_COUNT);
461             Debug.Assert(s_predefinedProperties[(int)property].property == property);
462 
463             return s_predefinedProperties[(int)property];
464         }
465 
GetMethInfo(PREDEFMETH method)466         private static PredefinedMethodInfo GetMethInfo(PREDEFMETH method)
467         {
468             Debug.Assert(method >= 0 && method < PREDEFMETH.PM_COUNT);
469             Debug.Assert(s_predefinedMethods[(int)method].method == method);
470 
471             return s_predefinedMethods[(int)method];
472         }
473 
GetMethPredefName(PREDEFMETH method)474         private static PredefinedName GetMethPredefName(PREDEFMETH method)
475         {
476             return GetMethInfo(method).name;
477         }
478 
GetMethPredefType(PREDEFMETH method)479         private static PredefinedType GetMethPredefType(PREDEFMETH method)
480         {
481             return GetMethInfo(method).type;
482         }
483 
IsMethStatic(PREDEFMETH method)484         private static bool IsMethStatic(PREDEFMETH method)
485         {
486             return GetMethInfo(method).callingConvention == MethodCallingConventionEnum.Static;
487         }
488 
IsMethVirtual(PREDEFMETH method)489         private static bool IsMethVirtual(PREDEFMETH method)
490         {
491             return GetMethInfo(method).callingConvention == MethodCallingConventionEnum.Virtual;
492         }
493 
GetMethAccess(PREDEFMETH method)494         private static ACCESS GetMethAccess(PREDEFMETH method)
495         {
496             return GetMethInfo(method).access;
497         }
498 
GetMethTyVars(PREDEFMETH method)499         private static int GetMethTyVars(PREDEFMETH method)
500         {
501             return GetMethInfo(method).cTypeVars;
502         }
503 
GetMethSignature(PREDEFMETH method)504         private static int[] GetMethSignature(PREDEFMETH method)
505         {
506             return GetMethInfo(method).signature;
507         }
508 
509         // the list of predefined method definitions.
510         // This list must be in the same order as the PREDEFMETH enum.
511         private static readonly PredefinedMethodInfo[] s_predefinedMethods = new PredefinedMethodInfo[(int)PREDEFMETH.PM_COUNT] {
512             new PredefinedMethodInfo(   PREDEFMETH.PM_DECIMAL_OPDECREMENT,                             PredefinedType.PT_DECIMAL,             PredefinedName.PN_OPDECREMENT,             MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_DECIMAL, 1, (int)PredefinedType.PT_DECIMAL  }),
513             new PredefinedMethodInfo(   PREDEFMETH.PM_DECIMAL_OPINCREMENT,                             PredefinedType.PT_DECIMAL,             PredefinedName.PN_OPINCREMENT,             MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_DECIMAL, 1, (int)PredefinedType.PT_DECIMAL  }),
514             new PredefinedMethodInfo(   PREDEFMETH.PM_DECIMAL_OPUNARYMINUS,                            PredefinedType.PT_DECIMAL,             PredefinedName.PN_OPUNARYMINUS,            MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_DECIMAL, 1, (int)PredefinedType.PT_DECIMAL  }),
515             new PredefinedMethodInfo(   PREDEFMETH.PM_DELEGATE_COMBINE,                                PredefinedType.PT_DELEGATE,            PredefinedName.PN_COMBINE,                 MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_DELEGATE, 2, (int)PredefinedType.PT_DELEGATE, (int)PredefinedType.PT_DELEGATE  }),
516             new PredefinedMethodInfo(   PREDEFMETH.PM_DELEGATE_OPEQUALITY,                             PredefinedType.PT_DELEGATE,            PredefinedName.PN_OPEQUALITY,              MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BOOL, 2, (int)PredefinedType.PT_DELEGATE, (int)PredefinedType.PT_DELEGATE  }),
517             new PredefinedMethodInfo(   PREDEFMETH.PM_DELEGATE_OPINEQUALITY,                           PredefinedType.PT_DELEGATE,            PredefinedName.PN_OPINEQUALITY,            MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BOOL, 2, (int)PredefinedType.PT_DELEGATE, (int)PredefinedType.PT_DELEGATE  }),
518             new PredefinedMethodInfo(   PREDEFMETH.PM_DELEGATE_REMOVE,                                 PredefinedType.PT_DELEGATE,            PredefinedName.PN_REMOVE,                  MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_DELEGATE, 2, (int)PredefinedType.PT_DELEGATE, (int)PredefinedType.PT_DELEGATE  }),
519             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_ADD,                                  PredefinedType.PT_EXPRESSION,          PredefinedName.PN_ADD,                     MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION  }),
520             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_ADD_USER_DEFINED,                     PredefinedType.PT_EXPRESSION,          PredefinedName.PN_ADD,                     MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 3, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_METHODINFO }),
521             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_ADDCHECKED,                           PredefinedType.PT_EXPRESSION,          PredefinedName.PN_ADDCHECKED,              MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION  }),
522             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_ADDCHECKED_USER_DEFINED,              PredefinedType.PT_EXPRESSION,          PredefinedName.PN_ADDCHECKED,              MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 3, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_METHODINFO  }),
523             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_AND,                                  PredefinedType.PT_EXPRESSION,          PredefinedName.PN_AND,                     MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION  }),
524             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_AND_USER_DEFINED,                     PredefinedType.PT_EXPRESSION,          PredefinedName.PN_AND,                     MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 3, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_METHODINFO  }),
525             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_ANDALSO,                              PredefinedType.PT_EXPRESSION,          PredefinedName.PN_ANDALSO,                 MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION  }),
526             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_ANDALSO_USER_DEFINED,                 PredefinedType.PT_EXPRESSION,          PredefinedName.PN_ANDALSO,                 MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 3, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_METHODINFO  }),
527             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_ARRAYINDEX,                           PredefinedType.PT_EXPRESSION,          PredefinedName.PN_ARRAYINDEX,              MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION  }),
528             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_ARRAYINDEX2,                          PredefinedType.PT_EXPRESSION,          PredefinedName.PN_ARRAYINDEX,              MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_METHODCALLEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)MethodSignatureEnum.SIG_SZ_ARRAY, (int)PredefinedType.PT_EXPRESSION  }),
529             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_ASSIGN,                               PredefinedType.PT_EXPRESSION,          PredefinedName.PN_ASSIGN,                  MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION  }),
530             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_CONSTANT_OBJECT_TYPE,                 PredefinedType.PT_EXPRESSION,          PredefinedName.PN_CONSTANT,                MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_CONSTANTEXPRESSION, 2, (int)PredefinedType.PT_OBJECT, (int)PredefinedType.PT_TYPE  }),
531             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_CONVERT,                              PredefinedType.PT_EXPRESSION,          PredefinedName.PN_CONVERT,                 MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_UNARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_TYPE  }),
532             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_CONVERT_USER_DEFINED,                 PredefinedType.PT_EXPRESSION,          PredefinedName.PN_CONVERT,                 MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_UNARYEXPRESSION, 3, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_TYPE, (int)PredefinedType.PT_METHODINFO  }),
533             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_CONVERTCHECKED,                       PredefinedType.PT_EXPRESSION,          PredefinedName.PN_CONVERTCHECKED,          MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_UNARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_TYPE  }),
534             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_CONVERTCHECKED_USER_DEFINED,          PredefinedType.PT_EXPRESSION,          PredefinedName.PN_CONVERTCHECKED,          MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_UNARYEXPRESSION, 3, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_TYPE, (int)PredefinedType.PT_METHODINFO  }),
535             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_DIVIDE,                               PredefinedType.PT_EXPRESSION,          PredefinedName.PN_DIVIDE,                  MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION  }),
536             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_DIVIDE_USER_DEFINED,                  PredefinedType.PT_EXPRESSION,          PredefinedName.PN_DIVIDE,                  MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 3, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_METHODINFO  }),
537             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_EQUAL,                                PredefinedType.PT_EXPRESSION,          PredefinedName.PN_EQUAL,                   MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION  }),
538             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_EQUAL_USER_DEFINED,                   PredefinedType.PT_EXPRESSION,          PredefinedName.PN_EQUAL,                   MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 4, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_BOOL, (int)PredefinedType.PT_METHODINFO  }),
539             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_EXCLUSIVEOR,                          PredefinedType.PT_EXPRESSION,          PredefinedName.PN_EXCLUSIVEOR,             MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION  }),
540             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_EXCLUSIVEOR_USER_DEFINED,             PredefinedType.PT_EXPRESSION,          PredefinedName.PN_EXCLUSIVEOR,             MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 3, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_METHODINFO  }),
541             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_FIELD,                                PredefinedType.PT_EXPRESSION,          PredefinedName.PN_CAP_FIELD,               MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_MEMBEREXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_FIELDINFO  }),
542             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_GREATERTHAN,                          PredefinedType.PT_EXPRESSION,          PredefinedName.PN_GREATERTHAN,             MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION  }),
543             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_GREATERTHAN_USER_DEFINED,             PredefinedType.PT_EXPRESSION,          PredefinedName.PN_GREATERTHAN,             MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 4, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_BOOL, (int)PredefinedType.PT_METHODINFO  }),
544             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_GREATERTHANOREQUAL,                   PredefinedType.PT_EXPRESSION,          PredefinedName.PN_GREATERTHANOREQUAL,      MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION  }),
545             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_GREATERTHANOREQUAL_USER_DEFINED,      PredefinedType.PT_EXPRESSION,          PredefinedName.PN_GREATERTHANOREQUAL,      MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 4, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_BOOL, (int)PredefinedType.PT_METHODINFO  }),
546             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_LAMBDA,                               PredefinedType.PT_EXPRESSION,          PredefinedName.PN_LAMBDA,                  MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     1,  new int[] { (int)PredefinedType.PT_G_EXPRESSION, (int)MethodSignatureEnum.SIG_METH_TYVAR, 0, 2, (int)PredefinedType.PT_EXPRESSION, (int)MethodSignatureEnum.SIG_SZ_ARRAY, (int)PredefinedType.PT_PARAMETEREXPRESSION  }),
547             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_LEFTSHIFT,                            PredefinedType.PT_EXPRESSION,          PredefinedName.PN_LEFTSHIFT,               MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION }),
548             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_LEFTSHIFT_USER_DEFINED,               PredefinedType.PT_EXPRESSION,          PredefinedName.PN_LEFTSHIFT,               MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 3, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_METHODINFO }),
549             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_LESSTHAN,                             PredefinedType.PT_EXPRESSION,          PredefinedName.PN_LESSTHAN,                MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION  }),
550             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_LESSTHAN_USER_DEFINED,                PredefinedType.PT_EXPRESSION,          PredefinedName.PN_LESSTHAN,                MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 4, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_BOOL, (int)PredefinedType.PT_METHODINFO  }),
551             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_LESSTHANOREQUAL,                      PredefinedType.PT_EXPRESSION,          PredefinedName.PN_LESSTHANOREQUAL,         MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION  }),
552             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_LESSTHANOREQUAL_USER_DEFINED,         PredefinedType.PT_EXPRESSION,          PredefinedName.PN_LESSTHANOREQUAL,         MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 4, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_BOOL, (int)PredefinedType.PT_METHODINFO  }),
553             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_MODULO,                               PredefinedType.PT_EXPRESSION,          PredefinedName.PN_MODULO,                  MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION  }),
554             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_MODULO_USER_DEFINED,                  PredefinedType.PT_EXPRESSION,          PredefinedName.PN_MODULO,                  MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 3, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_METHODINFO  }),
555             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_MULTIPLY,                             PredefinedType.PT_EXPRESSION,          PredefinedName.PN_MULTIPLY,                MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION  }),
556             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_MULTIPLY_USER_DEFINED,                PredefinedType.PT_EXPRESSION,          PredefinedName.PN_MULTIPLY,                MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 3, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_METHODINFO  }),
557             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_MULTIPLYCHECKED,                      PredefinedType.PT_EXPRESSION,          PredefinedName.PN_MULTIPLYCHECKED,         MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION  }),
558             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_MULTIPLYCHECKED_USER_DEFINED,         PredefinedType.PT_EXPRESSION,          PredefinedName.PN_MULTIPLYCHECKED,         MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 3, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_METHODINFO  }),
559             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_NOTEQUAL,                             PredefinedType.PT_EXPRESSION,          PredefinedName.PN_NOTEQUAL,                MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION  }),
560             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_NOTEQUAL_USER_DEFINED,                PredefinedType.PT_EXPRESSION,          PredefinedName.PN_NOTEQUAL,                MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 4, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_BOOL, (int)PredefinedType.PT_METHODINFO  }),
561             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_OR,                                   PredefinedType.PT_EXPRESSION,          PredefinedName.PN_OR,                      MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION  }),
562             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_OR_USER_DEFINED,                      PredefinedType.PT_EXPRESSION,          PredefinedName.PN_OR,                      MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 3, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_METHODINFO  }),
563             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_ORELSE,                               PredefinedType.PT_EXPRESSION,          PredefinedName.PN_ORELSE,                  MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION  }),
564             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_ORELSE_USER_DEFINED,                  PredefinedType.PT_EXPRESSION,          PredefinedName.PN_ORELSE,                  MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 3, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_METHODINFO  }),
565             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_PARAMETER,                            PredefinedType.PT_EXPRESSION,          PredefinedName.PN_PARAMETER,               MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_PARAMETEREXPRESSION, 2, (int)PredefinedType.PT_TYPE, (int)PredefinedType.PT_STRING  }),
566             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_RIGHTSHIFT,                           PredefinedType.PT_EXPRESSION,          PredefinedName.PN_RIGHTSHIFT,              MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION  }),
567             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_RIGHTSHIFT_USER_DEFINED,              PredefinedType.PT_EXPRESSION,          PredefinedName.PN_RIGHTSHIFT,              MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 3, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_METHODINFO  }),
568             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_SUBTRACT,                             PredefinedType.PT_EXPRESSION,          PredefinedName.PN_SUBTRACT,                MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION  }),
569             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_SUBTRACT_USER_DEFINED,                PredefinedType.PT_EXPRESSION,          PredefinedName.PN_SUBTRACT,                MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 3, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_METHODINFO  }),
570             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_SUBTRACTCHECKED,                      PredefinedType.PT_EXPRESSION,          PredefinedName.PN_SUBTRACTCHECKED,         MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION  }),
571             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_SUBTRACTCHECKED_USER_DEFINED,         PredefinedType.PT_EXPRESSION,          PredefinedName.PN_SUBTRACTCHECKED,         MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BINARYEXPRESSION, 3, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_METHODINFO  }),
572             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_UNARYPLUS_USER_DEFINED,               PredefinedType.PT_EXPRESSION,          PredefinedName.PN_PLUS  ,                  MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_UNARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_METHODINFO  }),
573             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_NEGATE,                               PredefinedType.PT_EXPRESSION,          PredefinedName.PN_NEGATE,                  MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_UNARYEXPRESSION, 1, (int)PredefinedType.PT_EXPRESSION  }),
574             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_NEGATE_USER_DEFINED,                  PredefinedType.PT_EXPRESSION,          PredefinedName.PN_NEGATE,                  MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_UNARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_METHODINFO  }),
575             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_NEGATECHECKED,                        PredefinedType.PT_EXPRESSION,          PredefinedName.PN_NEGATECHECKED,           MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_UNARYEXPRESSION, 1, (int)PredefinedType.PT_EXPRESSION  }),
576             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_NEGATECHECKED_USER_DEFINED,           PredefinedType.PT_EXPRESSION,          PredefinedName.PN_NEGATECHECKED,           MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_UNARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_METHODINFO  }),
577             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_CALL,                                 PredefinedType.PT_EXPRESSION,          PredefinedName.PN_CALL,                    MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_METHODCALLEXPRESSION, 3, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_METHODINFO, (int)MethodSignatureEnum.SIG_SZ_ARRAY, (int)PredefinedType.PT_EXPRESSION  }),
578             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_NEW,                                  PredefinedType.PT_EXPRESSION,          PredefinedName.PN_NEW,                     MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_NEWEXPRESSION, 2, (int)PredefinedType.PT_CONSTRUCTORINFO, (int)MethodSignatureEnum.SIG_SZ_ARRAY, (int)PredefinedType.PT_EXPRESSION  }),
579             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_NEW_TYPE,                             PredefinedType.PT_EXPRESSION,          PredefinedName.PN_NEW,                     MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_NEWEXPRESSION, 1, (int)PredefinedType.PT_TYPE  }),
580             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_QUOTE,                                PredefinedType.PT_EXPRESSION,          PredefinedName.PN_QUOTE,                   MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_UNARYEXPRESSION, 1, (int)PredefinedType.PT_EXPRESSION  }),
581             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_NOT,                                  PredefinedType.PT_EXPRESSION,          PredefinedName.PN_NOT,                     MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_UNARYEXPRESSION, 1, (int)PredefinedType.PT_EXPRESSION }),
582             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_NOT_USER_DEFINED,                     PredefinedType.PT_EXPRESSION,          PredefinedName.PN_NOT,                     MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_UNARYEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_METHODINFO }),
583             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_NEWARRAYINIT,                         PredefinedType.PT_EXPRESSION,          PredefinedName.PN_NEWARRAYINIT,            MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_NEWARRAYEXPRESSION, 2, (int)PredefinedType.PT_TYPE, (int)MethodSignatureEnum.SIG_SZ_ARRAY, (int)PredefinedType.PT_EXPRESSION }),
584             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_PROPERTY,                             PredefinedType.PT_EXPRESSION,          PredefinedName.PN_EXPRESSION_PROPERTY,     MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_MEMBEREXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)PredefinedType.PT_PROPERTYINFO }),
585             new PredefinedMethodInfo(   PREDEFMETH.PM_EXPRESSION_INVOKE,                               PredefinedType.PT_EXPRESSION,          PredefinedName.PN_INVOKE,                  MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_INVOCATIONEXPRESSION, 2, (int)PredefinedType.PT_EXPRESSION, (int)MethodSignatureEnum.SIG_SZ_ARRAY, (int)PredefinedType.PT_EXPRESSION }),
586             new PredefinedMethodInfo(   PREDEFMETH.PM_G_OPTIONAL_CTOR,                                 PredefinedType.PT_G_OPTIONAL,          PredefinedName.PN_CTOR,                    MethodCallingConventionEnum.Instance,   ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_VOID, 1, (int)MethodSignatureEnum.SIG_CLASS_TYVAR, 0  }),
587             new PredefinedMethodInfo(   PREDEFMETH.PM_G_OPTIONAL_GETVALUE,                             PredefinedType.PT_G_OPTIONAL,          PredefinedName.PN_GETVALUE,                MethodCallingConventionEnum.Instance,   ACCESS.ACC_PUBLIC,     0,  new int[] { (int)MethodSignatureEnum.SIG_CLASS_TYVAR, 0, 0  }),
588             new PredefinedMethodInfo(   PREDEFMETH.PM_STRING_CONCAT_OBJECT_2,                          PredefinedType.PT_STRING,              PredefinedName.PN_CONCAT,                  MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_STRING, 2, (int)PredefinedType.PT_OBJECT, (int)PredefinedType.PT_OBJECT  }),
589             new PredefinedMethodInfo(   PREDEFMETH.PM_STRING_CONCAT_OBJECT_3,                          PredefinedType.PT_STRING,              PredefinedName.PN_CONCAT,                  MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_STRING, 3, (int)PredefinedType.PT_OBJECT, (int)PredefinedType.PT_OBJECT, (int)PredefinedType.PT_OBJECT  }),
590             new PredefinedMethodInfo(   PREDEFMETH.PM_STRING_CONCAT_STRING_2,                          PredefinedType.PT_STRING,              PredefinedName.PN_CONCAT,                  MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_STRING, 2, (int)PredefinedType.PT_STRING, (int)PredefinedType.PT_STRING  }),
591             new PredefinedMethodInfo(   PREDEFMETH.PM_STRING_OPEQUALITY,                               PredefinedType.PT_STRING,              PredefinedName.PN_OPEQUALITY,              MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BOOL, 2, (int)PredefinedType.PT_STRING, (int)PredefinedType.PT_STRING  }),
592             new PredefinedMethodInfo(   PREDEFMETH.PM_STRING_OPINEQUALITY,                             PredefinedType.PT_STRING,              PredefinedName.PN_OPINEQUALITY,            MethodCallingConventionEnum.Static,     ACCESS.ACC_PUBLIC,     0,  new int[] { (int)PredefinedType.PT_BOOL, 2, (int)PredefinedType.PT_STRING, (int)PredefinedType.PT_STRING  }),
593         };
594     }
595 }
596