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