PageRenderTime 51ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/Languages/IronPython/IronPythonTest/BinderTest.cs

http://github.com/IronLanguages/main
C# | 973 lines | 669 code | 231 blank | 73 comment | 7 complexity | 71de14ff851f131a7605ce5b98bc5404 MD5 | raw file
Possible License(s): CPL-1.0, BSD-3-Clause, ISC, GPL-2.0, MPL-2.0-no-copyleft-exception
  1. /* ****************************************************************************
  2. *
  3. * Copyright (c) Microsoft Corporation.
  4. *
  5. * This source code is subject to terms and conditions of the Apache License, Version 2.0. A
  6. * copy of the license can be found in the License.html file at the root of this distribution. If
  7. * you cannot locate the Apache License, Version 2.0, please send an email to
  8. * ironpy@microsoft.com. By using this source code in any fashion, you are agreeing to be bound
  9. * by the terms of the Apache License, Version 2.0.
  10. *
  11. * You must not remove this notice, or any other, from this software.
  12. *
  13. *
  14. * ***************************************************************************/
  15. using System;
  16. using System.Collections;
  17. using System.Collections.Generic;
  18. using System.Runtime.InteropServices;
  19. #if CLR2
  20. using Microsoft.Scripting.Math;
  21. #else
  22. using System.Numerics;
  23. #endif
  24. namespace IronPythonTest.BinderTest {
  25. public interface I { }
  26. public class C1 : I { }
  27. public class C2 : C1 { }
  28. public class C3 { } // no relationship with others
  29. public struct S1 : I { }
  30. public abstract class A { }
  31. public class C6 : A { }
  32. public enum E1 { A, B, C }
  33. public enum E2 : ushort { A, B, C }
  34. public class Flag {
  35. public static int Value;
  36. public static bool BValue;
  37. }
  38. /// <summary>
  39. /// all methods here have no overloads.
  40. ///
  41. /// !!! Adding methods to this class could cause "many" updates in test_methodbinder1.py !!!
  42. /// you can always add other non-overload related methods to COtherConcern/GOtherConcern`1
  43. ///
  44. /// </summary>
  45. public class CNoOverloads {
  46. // no args
  47. public void M100() { Flag.Value = 100; }
  48. //
  49. // primitive types:
  50. //
  51. // 1. python native
  52. public void M201(Int32 arg) { Flag.Value = 201; } // int
  53. public void M202(Double arg) { Flag.Value = 202; } // float
  54. public void M203(BigInteger arg) { Flag.Value = 203; } // long
  55. public void M204(Boolean arg) { Flag.BValue = arg; Flag.Value = 204; } // bool
  56. public void M205(String arg) { Flag.Value = 205; } // str
  57. // 2. not python native
  58. // 2.1 -- signed
  59. public void M301(SByte arg) { Flag.Value = 301; }
  60. public void M302(Int16 arg) { Flag.Value = 302; }
  61. public void M303(Int64 arg) { Flag.Value = 303; }
  62. public void M304(Single arg) { Flag.Value = 304; }
  63. // 2.2 -- unsigned
  64. public void M310(Byte arg) { Flag.Value = 310; }
  65. public void M311(UInt16 arg) { Flag.Value = 311; }
  66. public void M312(UInt32 arg) { Flag.Value = 312; }
  67. public void M313(UInt64 arg) { Flag.Value = 313; }
  68. // 2.3 -- special
  69. public void M320(Char arg) { Flag.Value = 320; }
  70. public void M321(Decimal arg) { Flag.Value = 321; }
  71. //
  72. // Reference type or value type
  73. //
  74. public void M400(object arg) { Flag.Value = 400; } // object
  75. public void M401(I arg) { Flag.Value = 401; }
  76. public void M402(C1 arg) { Flag.Value = 402; }
  77. public void M403(C2 arg) { Flag.Value = 403; }
  78. public void M404(S1 arg) { Flag.Value = 404; }
  79. public void M410(A arg) { Flag.Value = 410; }
  80. public void M411(C6 arg) { Flag.Value = 411; }
  81. public void M450(E1 arg) { Flag.Value = 450; }
  82. public void M451(E2 arg) { Flag.Value = 451; }
  83. //
  84. // array
  85. //
  86. public void M500(Int32[] arg) { Flag.Value = 500; }
  87. public void M510(I[] arg) { Flag.Value = 510; }
  88. //
  89. // params array
  90. //
  91. public void M600(params Int32[] arg) { Flag.Value = 600; }
  92. public void M610(params I[] arg) { Flag.Value = 610; }
  93. public void M611(params S1[] arg) { Flag.Value = 611; }
  94. public void M620(Int32 arg, params Int32[] arg2) { Flag.Value = 620; }
  95. public void M630(I arg, params I[] arg2) { Flag.Value = 630; }
  96. //
  97. // collections/generics
  98. //
  99. public void M650(IList<int> arg) { Flag.Value = 650; }
  100. public void M651(Array arg) { Flag.Value = 651; }
  101. public void M652(IEnumerable<int> arg) { Flag.Value = 652; }
  102. public void M653(IEnumerator<int> arg) { Flag.Value = 653; }
  103. // Nullable
  104. public void M680(Int32? arg) { Flag.Value = 680; }
  105. // ByRef, Out
  106. public void M700(ref Int32 arg) { arg = 1; Flag.Value = 700; }
  107. public void M701(out Int32 arg) { arg = 2; Flag.Value = 701; }
  108. // Default Value
  109. public void M710([DefaultParameterValue(10)] Int32 arg) { Flag.Value = 710; }
  110. public void M715(Int32 arg, [DefaultParameterValue(10)] Int32 arg2) { Flag.Value = 715; }
  111. }
  112. /// <summary>
  113. /// Other concerns when there is no overloads
  114. /// </summary>
  115. public class COtherConcern {
  116. // static
  117. public static void M100() { Flag.Value = 100; }
  118. public static void M101(COtherConcern arg) { Flag.Value = 101; }
  119. public void M102(COtherConcern arg) { Flag.Value = 102; }
  120. // generic method
  121. public void M200<T>(T arg) { Flag.Value = 200; }
  122. // out on non-byref
  123. public void M222([Out] int arg) { Flag.Value = 222; }
  124. // what does means when passing in None
  125. public void M300(params C1[] args) {
  126. Flag.BValue = (args == null);
  127. Flag.Value = 300;
  128. }
  129. // ref, out ...
  130. public void M400(ref Int32 arg1, out Int32 arg2, Int32 arg3) { arg1 = arg2 = arg3; }
  131. public void M401(ref Int32 arg1, Int32 arg3, out Int32 arg2) { arg1 = arg2 = arg3; }
  132. public void M402(Int32 arg3, ref Int32 arg1, out Int32 arg2) { arg1 = arg2 = arg3; }
  133. // default value does get used
  134. public void M450([DefaultParameterValue(80)] Int32 arg) { Flag.Value = arg; }
  135. // 8 args
  136. public void M500(Int32 arg1, Int32 arg2, Int32 arg3, Int32 arg4, Int32 arg5, Int32 arg6, Int32 arg7, Int32 arg8) {
  137. Flag.Value = 500;
  138. }
  139. // this is supported
  140. public void M550(IDictionary<int, int> arg) { Flag.Value = 550; }
  141. // not supported (or partially)
  142. #if !SILVERLIGHT
  143. public void M600(Hashtable arg) { Flag.Value = 600; }
  144. public void M601(ArrayList arg) { Flag.Value = 601; }
  145. #else
  146. public void M600(Dictionary<object, object> arg) { Flag.Value = 600; }
  147. public void M601(List<object> arg) { Flag.Value = 601; }
  148. #endif
  149. public void M602(List<int> arg) { Flag.Value = 602; }
  150. // iterator support ??
  151. public void M620(IEnumerable arg) { IEnumerator ienum = arg.GetEnumerator(); int i = 0; while (ienum.MoveNext()) i++; Flag.Value = i; }
  152. public void M621(IEnumerator arg) { int i = 0; while (arg.MoveNext()) i++; Flag.Value = i; }
  153. public void M622(IList arg) { Flag.Value = arg.Count; }
  154. public void M630(IEnumerable<Char> arg) { IEnumerator ienum = arg.GetEnumerator(); int i = 0; while (ienum.MoveNext()) i++; Flag.Value = i; }
  155. public void M631(IEnumerator<Char> arg) { int i = 0; while (arg.MoveNext()) i++; Flag.Value = i; }
  156. public void M632(IList<Char> arg) { Flag.Value = arg.Count; }
  157. public void M640(IEnumerable<Int32> arg) { IEnumerator ienum = arg.GetEnumerator(); int i = 0; while (ienum.MoveNext()) i++; Flag.Value = i; }
  158. public void M641(IEnumerator<Int32> arg) { int i = 0; while (arg.MoveNext()) i++; Flag.Value = i; }
  159. public void M642(IList<Int32> arg) { Flag.Value = arg.Count; }
  160. // delegate
  161. public void M700(Delegate arg) {
  162. IntIntDelegate d = (IntIntDelegate)arg;
  163. Flag.Value = d(10);
  164. }
  165. public void M701(IntIntDelegate d) { Flag.Value = d(10); }
  166. // byte array
  167. public void M702(ref Byte[] arg) { arg = new Byte[0]; Flag.Value = 702; }
  168. public int M703(ref Byte[] arg) { arg = new Byte[0]; Flag.Value = 703; return 42; }
  169. public int M704(Byte[] inp, ref Byte[] arg) { arg = inp; Flag.Value = 704; return 42; }
  170. // keywords
  171. public void M800(Int32 arg1, object arg2, ref string arg3) { arg3 = arg3.ToUpper(); }
  172. // more ref/out
  173. public void M850(ref S1 arg) { arg = new S1(); }
  174. public void M851(ref C1 arg) { arg = new C1(); }
  175. public void M852(out S1 arg) { arg = new S1(); }
  176. public void M853(out C1 arg) { arg = new C1(); }
  177. public void M854(ref Boolean arg) { Flag.Value = 854; }
  178. public void M855(out Boolean arg) { Flag.Value = 855; arg = true; }
  179. public void M860(ref Int32 arg1, Int32 arg2, out Int32 arg3) { arg3 = arg1 + arg2; arg1 = 100; }
  180. }
  181. public struct SOtherConcern {
  182. private short _p100;
  183. public short P100 {
  184. get {
  185. return _p100;
  186. }
  187. set {
  188. _p100 = value;
  189. }
  190. }
  191. }
  192. public class GOtherConcern<T> {
  193. public void M100(T arg) { Flag.Value = 100; }
  194. }
  195. public class COtherOverloadConcern {
  196. // one is private
  197. #pragma warning disable 169 // unusued method...
  198. void M100(Int32 arg) { Flag.Value = 100; }
  199. #pragma warning restore 169
  200. public void M100(object arg) { Flag.Value = 200; }
  201. // static / instance
  202. public void M110(COtherOverloadConcern arg1, Int32 arg2) { Flag.Value = 110; }
  203. public static void M110(Int32 arg) { Flag.Value = 210; }
  204. // static / instance 2
  205. public void M111(Int32 arg2) { Flag.Value = 111; }
  206. public static COtherOverloadConcern M111(COtherOverloadConcern arg1, Int32 arg) { Flag.Value = 211; return null; }
  207. // statics
  208. public static void M120(COtherOverloadConcern arg1, Int32 arg2) { Flag.Value = 120; }
  209. public static void M120(Int32 arg) { Flag.Value = 220; }
  210. // generics
  211. public void M130(Int32 arg) { Flag.Value = 130; }
  212. public void M130<T>(T arg) { Flag.Value = 230; }
  213. // narrowing levels and __int__ conversion:
  214. // If 2 instances of a Python subclass of C3 that implements __int__ are passed as arguments this
  215. // the first overload should be preferred.
  216. public void M140(C3 a, int b) { Flag.Value = 140; }
  217. public void M140(int a, int b) { Flag.Value = 240; }
  218. }
  219. public interface I1 { void M(); }
  220. public interface I2 { void M(); }
  221. public interface I3<T> { void M(); }
  222. public interface I4 { void M(int arg); }
  223. public class CInheritMany1 : I1 {
  224. void I1.M() { Flag.Value = 100; }
  225. }
  226. public class CInheritMany2 : I1 {
  227. void I1.M() { Flag.Value = 200; }
  228. public void M() { Flag.Value = 201; }
  229. }
  230. public class CInheritMany3 : I2, I1 {
  231. void I1.M() { Flag.Value = 300; }
  232. void I2.M() { Flag.Value = 301; }
  233. }
  234. public class CInheritMany4 : I3<object> {
  235. void I3<object>.M() { Flag.Value = 400; }
  236. public void M() { Flag.Value = 401; }
  237. }
  238. public class CInheritMany5 : I1, I2, I3<object> {
  239. void I1.M() { Flag.Value = 500; }
  240. void I2.M() { Flag.Value = 501; }
  241. void I3<object>.M() { Flag.Value = 502; }
  242. public void M() { Flag.Value = 503; }
  243. }
  244. public class CInheritMany6<T> : I3<T> {
  245. void I3<T>.M() { Flag.Value = 600; }
  246. public void M() { Flag.Value = 601; }
  247. }
  248. public class CInheritMany7<T> : I3<T> {
  249. void I3<T>.M() { Flag.Value = 700; }
  250. }
  251. public class CInheritMany8 : I1, I4 {
  252. void I1.M() { Flag.Value = 800; }
  253. void I4.M(int arg) { Flag.Value = 801; }
  254. }
  255. public class COverloads_ClrReference {
  256. public void M100(Object arg) { Flag.Value = 100; }
  257. public void M100(ref Object arg) { arg = typeof(string); Flag.Value = 200; }
  258. public void M101(Boolean arg) { Flag.Value = 101; }
  259. public void M101(ref Boolean arg) { arg = true; Flag.Value = 201; }
  260. public void M102(ref Int32 arg) { arg = 100; Flag.Value = 102; }
  261. public void M102(ref Boolean arg) { arg = true; Flag.Value = 202; }
  262. public void M103(ref Int32 arg) { arg = 100; Flag.Value = 103; }
  263. public void M103(ref Byte arg) { arg = 10; Flag.Value = 203; }
  264. public void M104(ref Int32 arg) { arg = 100; Flag.Value = 104; }
  265. public void M104(ref Object arg) { arg = typeof(int); Flag.Value = 204; }
  266. public void M105(ref Boolean arg) { arg = true; Flag.Value = 105; }
  267. public void M105(ref Object arg) { arg = typeof(Type); Flag.Value = 205; }
  268. public void M106(ref C1 arg) { arg = new C1(); Flag.Value = 106; }
  269. public void M106(ref C2 arg) { arg = new C2(); Flag.Value = 206; }
  270. public void M107(ref C1 arg) { arg = new C1(); Flag.Value = 107; }
  271. public void M107(ref object arg) { arg = typeof(C1); Flag.Value = 207; }
  272. }
  273. public class COverloads_NoArgNecessary {
  274. #region generated codes
  275. public void M100() { Flag.Value = 100; }
  276. public void M100(out Int32 arg) { arg = 1; Flag.Value = 200; }
  277. public void M101() { Flag.Value = 101; }
  278. public void M101([DefaultParameterValue(1)] Int32 arg) { Flag.Value = 201; }
  279. public void M102() { Flag.Value = 102; }
  280. public void M102(params Int32[] arg) { Flag.Value = 202; }
  281. public void M103(out Int32 arg) { arg = 1; Flag.Value = 103; }
  282. public void M103([DefaultParameterValue(1)] Int32 arg) { Flag.Value = 203; }
  283. public void M104(out Int32 arg) { arg = 1; Flag.Value = 104; }
  284. public void M104(params Int32[] arg) { Flag.Value = 204; }
  285. public void M105([DefaultParameterValue(1)] Int32 arg) { Flag.Value = 105; }
  286. public void M105(params Int32[] arg) { Flag.Value = 205; }
  287. public void M106(Int32 arg) { Flag.Value = 106; }
  288. public void M106(params Int32[] arg) { Flag.Value = 206; }
  289. #endregion
  290. }
  291. public class COverloads_OneArg_NormalArg {
  292. #region generated codes
  293. public void M100(Int32 arg) { Flag.Value = 100; }
  294. public void M100(ref Int32 arg) { Flag.Value = 200; }
  295. public void M101(Int32 arg) { Flag.Value = 101; }
  296. public void M101(Int32? arg) { Flag.Value = 201; }
  297. public void M102(Int32 arg) { Flag.Value = 102; }
  298. public void M102(Int32 arg1, Int32 arg2) { Flag.Value = 202; }
  299. public void M103(Int32 arg) { Flag.Value = 103; }
  300. public void M103(Int32 arg1, out Int32 arg) { arg = 1; Flag.Value = 203; }
  301. public void M104(Int32 arg) { Flag.Value = 104; }
  302. public void M104(ref Int32 arg1, out Int32 arg) { arg = 1; Flag.Value = 204; }
  303. public void M105(Int32 arg) { Flag.Value = 105; }
  304. public void M105(out Int32 arg, Int32 arg2) { arg = 1; Flag.Value = 205; }
  305. public void M106(Int32 arg) { Flag.Value = 106; }
  306. public void M106(out Int32 arg, ref Int32 arg2) { arg = 1; Flag.Value = 206; }
  307. public void M107(Int32 arg) { Flag.Value = 107; }
  308. public void M107(Int32 arg, [DefaultParameterValue(1)] Int32 arg2) { Flag.Value = 207; }
  309. public void M108(Int32 arg) { Flag.Value = 108; }
  310. public void M108(Int32 arg, params Int32[] arg2) { Flag.Value = 208; }
  311. public void M109(Int32 arg) { Flag.Value = 109; }
  312. public void M109(Int32 arg, Int32[] arg2) { Flag.Value = 209; }
  313. #endregion
  314. }
  315. public class COverloads_OneArg_RefArg {
  316. #region generated codes
  317. public void M100(ref Int32 arg) { Flag.Value = 100; }
  318. public void M100(Int32? arg) { Flag.Value = 200; }
  319. public void M101(ref Int32 arg) { Flag.Value = 101; }
  320. public void M101(Int32 arg1, Int32 arg2) { Flag.Value = 201; }
  321. public void M102(ref Int32 arg) { Flag.Value = 102; }
  322. public void M102(Int32 arg1, out Int32 arg) { arg = 1; Flag.Value = 202; }
  323. public void M103(ref Int32 arg) { Flag.Value = 103; }
  324. public void M103(ref Int32 arg1, out Int32 arg) { arg = 1; Flag.Value = 203; }
  325. public void M104(ref Int32 arg) { Flag.Value = 104; }
  326. public void M104(out Int32 arg, Int32 arg2) { arg = 1; Flag.Value = 204; }
  327. public void M105(ref Int32 arg) { Flag.Value = 105; }
  328. public void M105(out Int32 arg, ref Int32 arg2) { arg = 1; Flag.Value = 205; }
  329. public void M106(ref Int32 arg) { Flag.Value = 106; }
  330. public void M106(Int32 arg, [DefaultParameterValue(1)] Int32 arg2) { Flag.Value = 206; }
  331. public void M107(ref Int32 arg) { Flag.Value = 107; }
  332. public void M107(Int32 arg, params Int32[] arg2) { Flag.Value = 207; }
  333. public void M108(ref Int32 arg) { Flag.Value = 108; }
  334. public void M108(Int32 arg, Int32[] arg2) { Flag.Value = 208; }
  335. #endregion
  336. }
  337. public class COverloads_OneArg_NullableArg {
  338. #region generated codes
  339. public void M100(Int32? arg) { Flag.Value = 100; }
  340. public void M100(Int32 arg1, Int32 arg2) { Flag.Value = 200; }
  341. public void M101(Int32? arg) { Flag.Value = 101; }
  342. public void M101(Int32 arg1, out Int32 arg) { arg = 1; Flag.Value = 201; }
  343. public void M102(Int32? arg) { Flag.Value = 102; }
  344. public void M102(ref Int32 arg1, out Int32 arg) { arg = 1; Flag.Value = 202; }
  345. public void M103(Int32? arg) { Flag.Value = 103; }
  346. public void M103(out Int32 arg, Int32 arg2) { arg = 1; Flag.Value = 203; }
  347. public void M104(Int32? arg) { Flag.Value = 104; }
  348. public void M104(out Int32 arg, ref Int32 arg2) { arg = 1; Flag.Value = 204; }
  349. public void M105(Int32? arg) { Flag.Value = 105; }
  350. public void M105(Int32 arg, [DefaultParameterValue(1)] Int32 arg2) { Flag.Value = 205; }
  351. public void M106(Int32? arg) { Flag.Value = 106; }
  352. public void M106(Int32 arg, params Int32[] arg2) { Flag.Value = 206; }
  353. public void M107(Int32? arg) { Flag.Value = 107; }
  354. public void M107(Int32 arg, Int32[] arg2) { Flag.Value = 207; }
  355. #endregion
  356. }
  357. public class COverloads_OneArg_TwoArgs {
  358. #region generated codes
  359. public void M100(Int32 arg1, Int32 arg2) { Flag.Value = 100; }
  360. public void M100(Int32 arg1, out Int32 arg) { arg = 1; Flag.Value = 200; }
  361. public void M101(Int32 arg1, Int32 arg2) { Flag.Value = 101; }
  362. public void M101(ref Int32 arg1, out Int32 arg) { arg = 1; Flag.Value = 201; }
  363. public void M102(Int32 arg1, Int32 arg2) { Flag.Value = 102; }
  364. public void M102(out Int32 arg, Int32 arg2) { arg = 1; Flag.Value = 202; }
  365. public void M103(Int32 arg1, Int32 arg2) { Flag.Value = 103; }
  366. public void M103(out Int32 arg, ref Int32 arg2) { arg = 1; Flag.Value = 203; }
  367. public void M104(Int32 arg1, Int32 arg2) { Flag.Value = 104; }
  368. public void M104(Int32 arg, params Int32[] arg2) { Flag.Value = 204; }
  369. public void M105(Int32 arg1, Int32 arg2) { Flag.Value = 105; }
  370. public void M105(Int32 arg, Int32[] arg2) { Flag.Value = 205; }
  371. #endregion
  372. }
  373. public class COverloads_OneArg_NormalOut {
  374. #region generated codes
  375. public void M100(Int32 arg1, out Int32 arg) { arg = 1; Flag.Value = 100; }
  376. public void M100(ref Int32 arg1, out Int32 arg) { arg = 1; Flag.Value = 200; }
  377. public void M101(Int32 arg1, out Int32 arg) { arg = 1; Flag.Value = 101; }
  378. public void M101(out Int32 arg, Int32 arg2) { arg = 1; Flag.Value = 201; }
  379. public void M102(Int32 arg1, out Int32 arg) { arg = 1; Flag.Value = 102; }
  380. public void M102(out Int32 arg, ref Int32 arg2) { arg = 1; Flag.Value = 202; }
  381. public void M103(Int32 arg1, out Int32 arg) { arg = 1; Flag.Value = 103; }
  382. public void M103(Int32 arg, [DefaultParameterValue(1)] Int32 arg2) { Flag.Value = 203; }
  383. public void M104(Int32 arg1, out Int32 arg) { arg = 1; Flag.Value = 104; }
  384. public void M104(Int32 arg, params Int32[] arg2) { Flag.Value = 204; }
  385. public void M105(Int32 arg1, out Int32 arg) { arg = 1; Flag.Value = 105; }
  386. public void M105(Int32 arg, Int32[] arg2) { Flag.Value = 205; }
  387. #endregion
  388. }
  389. public class COverloads_OneArg_RefOut {
  390. #region generated codes
  391. public void M100(ref Int32 arg1, out Int32 arg) { arg = 1; Flag.Value = 100; }
  392. public void M100(out Int32 arg, Int32 arg2) { arg = 1; Flag.Value = 200; }
  393. public void M101(ref Int32 arg1, out Int32 arg) { arg = 1; Flag.Value = 101; }
  394. public void M101(Int32 arg, [DefaultParameterValue(1)] Int32 arg2) { Flag.Value = 201; }
  395. public void M102(ref Int32 arg1, out Int32 arg) { arg = 1; Flag.Value = 102; }
  396. public void M102(Int32 arg, params Int32[] arg2) { Flag.Value = 202; }
  397. public void M103(ref Int32 arg1, out Int32 arg) { arg = 1; Flag.Value = 103; }
  398. public void M103(Int32 arg, Int32[] arg2) { Flag.Value = 203; }
  399. #endregion
  400. }
  401. public class COverloads_OneArg_OutNormal {
  402. #region generated codes
  403. public void M100(out Int32 arg, Int32 arg2) { arg = 1; Flag.Value = 100; }
  404. public void M100(out Int32 arg, ref Int32 arg2) { arg = 1; Flag.Value = 200; }
  405. public void M101(out Int32 arg, Int32 arg2) { arg = 1; Flag.Value = 101; }
  406. public void M101(Int32 arg, [DefaultParameterValue(1)] Int32 arg2) { Flag.Value = 201; }
  407. public void M102(out Int32 arg, Int32 arg2) { arg = 1; Flag.Value = 102; }
  408. public void M102(Int32 arg, params Int32[] arg2) { Flag.Value = 202; }
  409. public void M103(out Int32 arg, Int32 arg2) { arg = 1; Flag.Value = 103; }
  410. public void M103(Int32 arg, Int32[] arg2) { Flag.Value = 203; }
  411. #endregion
  412. }
  413. public class COverloads_OneArg_OutRef {
  414. #region generated codes
  415. public void M100(out Int32 arg, ref Int32 arg2) { arg = 1; Flag.Value = 100; }
  416. public void M100(Int32 arg, [DefaultParameterValue(1)] Int32 arg2) { Flag.Value = 200; }
  417. public void M101(out Int32 arg, ref Int32 arg2) { arg = 1; Flag.Value = 101; }
  418. public void M101(Int32 arg, params Int32[] arg2) { Flag.Value = 201; }
  419. public void M102(out Int32 arg, ref Int32 arg2) { arg = 1; Flag.Value = 102; }
  420. public void M102(Int32 arg, Int32[] arg2) { Flag.Value = 202; }
  421. #endregion
  422. }
  423. public class COverloads_OneArg_NormalDefault {
  424. #region generated codes
  425. public void M100(Int32 arg, [DefaultParameterValue(1)] Int32 arg2) { Flag.Value = 100; }
  426. public void M100(Int32 arg, params Int32[] arg2) { Flag.Value = 200; }
  427. public void M101(Int32 arg, [DefaultParameterValue(1)] Int32 arg2) { Flag.Value = 101; }
  428. public void M101(Int32 arg, Int32[] arg2) { Flag.Value = 201; }
  429. #endregion
  430. }
  431. public class COverloads_String {
  432. #region generated codes
  433. public void M100(String arg) { Flag.Value = 100; }
  434. public void M100(Char arg) { Flag.Value = 200; }
  435. public void M101(Object arg) { Flag.Value = 101; }
  436. public void M101(Char arg) { Flag.Value = 201; }
  437. public void M102(Object arg) { Flag.Value = 102; }
  438. public void M102(String arg) { Flag.Value = 202; }
  439. #endregion
  440. }
  441. public class COverloads_Enum {
  442. #region generated codes
  443. public void M100(E1 arg) { Flag.Value = 100; }
  444. public void M100(Int32 arg) { Flag.Value = 200; }
  445. public void M101(E2 arg) { Flag.Value = 101; }
  446. public void M101(UInt16 arg) { Flag.Value = 201; }
  447. #endregion
  448. }
  449. public class COverloads_UserDefined {
  450. #region generated codes
  451. public void M100(I arg) { Flag.Value = 100; }
  452. public void M100(C1 arg) { Flag.Value = 200; }
  453. public void M101(I arg) { Flag.Value = 101; }
  454. public void M101(C2 arg) { Flag.Value = 201; }
  455. public void M102(I arg) { Flag.Value = 102; }
  456. public void M102(Int32 arg) { Flag.Value = 202; }
  457. public void M103(I arg) { Flag.Value = 103; }
  458. public void M103(Object arg) { Flag.Value = 203; }
  459. public void M104(C1 arg) { Flag.Value = 104; }
  460. public void M104(C2 arg) { Flag.Value = 204; }
  461. public void M105(A arg) { Flag.Value = 105; }
  462. public void M105(C6 arg) { Flag.Value = 205; }
  463. #endregion
  464. }
  465. #region generated codes
  466. public class COverloads_Base_Number {
  467. public void M100(Int32 arg) { Flag.Value = 100; }
  468. public void M101(Int32 arg) { Flag.Value = 101; }
  469. public void M102(Int32 arg) { Flag.Value = 102; }
  470. public void M103(Int32 arg) { Flag.Value = 103; }
  471. public void M104(Byte arg) { Flag.Value = 104; }
  472. public void M105(Double arg) { Flag.Value = 105; }
  473. public void M106(Object arg) { Flag.Value = 106; }
  474. }
  475. public class COverloads_Derived_Number : COverloads_Base_Number {
  476. public void M100(Byte arg) { Flag.Value = 200; }
  477. public void M101(Double arg) { Flag.Value = 201; }
  478. public void M102(Object arg) { Flag.Value = 202; }
  479. public void M103(Int32? arg) { Flag.Value = 203; }
  480. public void M104(Int32 arg) { Flag.Value = 204; }
  481. public void M105(Int32 arg) { Flag.Value = 205; }
  482. public void M106(Int32 arg) { Flag.Value = 206; }
  483. }
  484. #endregion
  485. public class COverloads_Collections {
  486. #region generated codes
  487. public void M100(IList<int> arg) { Flag.Value = 100; }
  488. public void M100(IList<object> arg) { Flag.Value = 200; }
  489. public void M101(Array arg) { Flag.Value = 101; }
  490. public void M101(Int32[] arg) { Flag.Value = 201; }
  491. public void M102(IList<int> arg) { Flag.Value = 102; }
  492. public void M102(Int32[] arg) { Flag.Value = 202; }
  493. public void M103(IEnumerable<int> arg) { Flag.Value = 103; }
  494. public void M103(IList<int> arg) { Flag.Value = 203; }
  495. public void M104(IEnumerable<int> arg) { Flag.Value = 104; }
  496. public void M104(Int32[] arg) { Flag.Value = 204; }
  497. #endregion
  498. }
  499. public class COverloads_Boolean {
  500. #region generated codes
  501. public void M100(Boolean arg) { Flag.Value = 100; }
  502. public void M100(Char arg) { Flag.Value = 200; }
  503. public void M101(Boolean arg) { Flag.Value = 101; }
  504. public void M101(Byte arg) { Flag.Value = 201; }
  505. public void M102(Boolean arg) { Flag.Value = 102; }
  506. public void M102(SByte arg) { Flag.Value = 202; }
  507. public void M103(Boolean arg) { Flag.Value = 103; }
  508. public void M103(UInt16 arg) { Flag.Value = 203; }
  509. public void M104(Boolean arg) { Flag.Value = 104; }
  510. public void M104(Int16 arg) { Flag.Value = 204; }
  511. public void M105(Boolean arg) { Flag.Value = 105; }
  512. public void M105(UInt32 arg) { Flag.Value = 205; }
  513. public void M106(Boolean arg) { Flag.Value = 106; }
  514. public void M106(Int32 arg) { Flag.Value = 206; }
  515. public void M107(Boolean arg) { Flag.Value = 107; }
  516. public void M107(UInt64 arg) { Flag.Value = 207; }
  517. public void M108(Boolean arg) { Flag.Value = 108; }
  518. public void M108(Int64 arg) { Flag.Value = 208; }
  519. public void M109(Boolean arg) { Flag.Value = 109; }
  520. public void M109(Decimal arg) { Flag.Value = 209; }
  521. public void M110(Boolean arg) { Flag.Value = 110; }
  522. public void M110(Single arg) { Flag.Value = 210; }
  523. public void M111(Boolean arg) { Flag.Value = 111; }
  524. public void M111(Double arg) { Flag.Value = 211; }
  525. public void M112(Boolean arg) { Flag.Value = 112; }
  526. public void M112(Object arg) { Flag.Value = 212; }
  527. #endregion
  528. }
  529. public class COverloads_Byte {
  530. #region generated codes
  531. public void M100(Byte arg) { Flag.Value = 100; }
  532. public void M100(Boolean arg) { Flag.Value = 200; }
  533. public void M101(Byte arg) { Flag.Value = 101; }
  534. public void M101(Char arg) { Flag.Value = 201; }
  535. public void M102(Byte arg) { Flag.Value = 102; }
  536. public void M102(SByte arg) { Flag.Value = 202; }
  537. public void M103(Byte arg) { Flag.Value = 103; }
  538. public void M103(UInt16 arg) { Flag.Value = 203; }
  539. public void M104(Byte arg) { Flag.Value = 104; }
  540. public void M104(Int16 arg) { Flag.Value = 204; }
  541. public void M105(Byte arg) { Flag.Value = 105; }
  542. public void M105(UInt32 arg) { Flag.Value = 205; }
  543. public void M106(Byte arg) { Flag.Value = 106; }
  544. public void M106(Int32 arg) { Flag.Value = 206; }
  545. public void M107(Byte arg) { Flag.Value = 107; }
  546. public void M107(UInt64 arg) { Flag.Value = 207; }
  547. public void M108(Byte arg) { Flag.Value = 108; }
  548. public void M108(Int64 arg) { Flag.Value = 208; }
  549. public void M109(Byte arg) { Flag.Value = 109; }
  550. public void M109(Decimal arg) { Flag.Value = 209; }
  551. public void M110(Byte arg) { Flag.Value = 110; }
  552. public void M110(Single arg) { Flag.Value = 210; }
  553. public void M111(Byte arg) { Flag.Value = 111; }
  554. public void M111(Double arg) { Flag.Value = 211; }
  555. public void M112(Byte arg) { Flag.Value = 112; }
  556. public void M112(Object arg) { Flag.Value = 212; }
  557. #endregion
  558. }
  559. public class COverloads_Int16 {
  560. #region generated codes
  561. public void M100(Int16 arg) { Flag.Value = 100; }
  562. public void M100(Boolean arg) { Flag.Value = 200; }
  563. public void M101(Int16 arg) { Flag.Value = 101; }
  564. public void M101(Char arg) { Flag.Value = 201; }
  565. public void M102(Int16 arg) { Flag.Value = 102; }
  566. public void M102(Byte arg) { Flag.Value = 202; }
  567. public void M103(Int16 arg) { Flag.Value = 103; }
  568. public void M103(SByte arg) { Flag.Value = 203; }
  569. public void M104(Int16 arg) { Flag.Value = 104; }
  570. public void M104(UInt16 arg) { Flag.Value = 204; }
  571. public void M105(Int16 arg) { Flag.Value = 105; }
  572. public void M105(UInt32 arg) { Flag.Value = 205; }
  573. public void M106(Int16 arg) { Flag.Value = 106; }
  574. public void M106(Int32 arg) { Flag.Value = 206; }
  575. public void M107(Int16 arg) { Flag.Value = 107; }
  576. public void M107(UInt64 arg) { Flag.Value = 207; }
  577. public void M108(Int16 arg) { Flag.Value = 108; }
  578. public void M108(Int64 arg) { Flag.Value = 208; }
  579. public void M109(Int16 arg) { Flag.Value = 109; }
  580. public void M109(Decimal arg) { Flag.Value = 209; }
  581. public void M110(Int16 arg) { Flag.Value = 110; }
  582. public void M110(Single arg) { Flag.Value = 210; }
  583. public void M111(Int16 arg) { Flag.Value = 111; }
  584. public void M111(Double arg) { Flag.Value = 211; }
  585. public void M112(Int16 arg) { Flag.Value = 112; }
  586. public void M112(Object arg) { Flag.Value = 212; }
  587. #endregion
  588. }
  589. public class COverloads_Int32 {
  590. #region generated codes
  591. public void M100(Int32 arg) { Flag.Value = 100; }
  592. public void M100(Boolean arg) { Flag.Value = 200; }
  593. public void M101(Int32 arg) { Flag.Value = 101; }
  594. public void M101(Char arg) { Flag.Value = 201; }
  595. public void M102(Int32 arg) { Flag.Value = 102; }
  596. public void M102(Byte arg) { Flag.Value = 202; }
  597. public void M103(Int32 arg) { Flag.Value = 103; }
  598. public void M103(SByte arg) { Flag.Value = 203; }
  599. public void M104(Int32 arg) { Flag.Value = 104; }
  600. public void M104(UInt16 arg) { Flag.Value = 204; }
  601. public void M105(Int32 arg) { Flag.Value = 105; }
  602. public void M105(Int16 arg) { Flag.Value = 205; }
  603. public void M106(Int32 arg) { Flag.Value = 106; }
  604. public void M106(UInt32 arg) { Flag.Value = 206; }
  605. public void M107(Int32 arg) { Flag.Value = 107; }
  606. public void M107(UInt64 arg) { Flag.Value = 207; }
  607. public void M108(Int32 arg) { Flag.Value = 108; }
  608. public void M108(Int64 arg) { Flag.Value = 208; }
  609. public void M109(Int32 arg) { Flag.Value = 109; }
  610. public void M109(Decimal arg) { Flag.Value = 209; }
  611. public void M110(Int32 arg) { Flag.Value = 110; }
  612. public void M110(Single arg) { Flag.Value = 210; }
  613. public void M111(Int32 arg) { Flag.Value = 111; }
  614. public void M111(Double arg) { Flag.Value = 211; }
  615. public void M112(Int32 arg) { Flag.Value = 112; }
  616. public void M112(Object arg) { Flag.Value = 212; }
  617. #endregion
  618. }
  619. public class COverloads_Double {
  620. #region generated codes
  621. public void M100(Double arg) { Flag.Value = 100; }
  622. public void M100(Boolean arg) { Flag.Value = 200; }
  623. public void M101(Double arg) { Flag.Value = 101; }
  624. public void M101(Char arg) { Flag.Value = 201; }
  625. public void M102(Double arg) { Flag.Value = 102; }
  626. public void M102(Byte arg) { Flag.Value = 202; }
  627. public void M103(Double arg) { Flag.Value = 103; }
  628. public void M103(SByte arg) { Flag.Value = 203; }
  629. public void M104(Double arg) { Flag.Value = 104; }
  630. public void M104(UInt16 arg) { Flag.Value = 204; }
  631. public void M105(Double arg) { Flag.Value = 105; }
  632. public void M105(Int16 arg) { Flag.Value = 205; }
  633. public void M106(Double arg) { Flag.Value = 106; }
  634. public void M106(UInt32 arg) { Flag.Value = 206; }
  635. public void M107(Double arg) { Flag.Value = 107; }
  636. public void M107(Int32 arg) { Flag.Value = 207; }
  637. public void M108(Double arg) { Flag.Value = 108; }
  638. public void M108(UInt64 arg) { Flag.Value = 208; }
  639. public void M109(Double arg) { Flag.Value = 109; }
  640. public void M109(Int64 arg) { Flag.Value = 209; }
  641. public void M110(Double arg) { Flag.Value = 110; }
  642. public void M110(Decimal arg) { Flag.Value = 210; }
  643. public void M111(Double arg) { Flag.Value = 111; }
  644. public void M111(Single arg) { Flag.Value = 211; }
  645. public void M112(Double arg) { Flag.Value = 112; }
  646. public void M112(Object arg) { Flag.Value = 212; }
  647. #endregion
  648. }
  649. public class PublicEventArgs : EventArgs { }
  650. class PrivateEventArgs : PublicEventArgs { }
  651. public delegate IPublicInterface PublicDelegateType(IPublicInterface sender, PublicEventArgs args);
  652. // Private class
  653. class PrivateClass : IPublicInterface {
  654. public IPublicInterface Hello {
  655. get { return this; }
  656. set { }
  657. }
  658. public void Foo(IPublicInterface f) {
  659. }
  660. public IPublicInterface RetInterface() {
  661. return this;
  662. }
  663. public event PublicDelegateType MyEvent;
  664. public IPublicInterface FireEvent(PublicEventArgs args) {
  665. return MyEvent(this, args);
  666. }
  667. public PublicEventArgs GetEventArgs() {
  668. return new PrivateEventArgs();
  669. }
  670. }
  671. // Public Interface
  672. public interface IPublicInterface {
  673. IPublicInterface Hello { get; set; }
  674. void Foo(IPublicInterface f);
  675. IPublicInterface RetInterface();
  676. event PublicDelegateType MyEvent;
  677. IPublicInterface FireEvent(PublicEventArgs args);
  678. PublicEventArgs GetEventArgs();
  679. }
  680. // Access the private class via the public interface
  681. public class InterfaceOnlyTest {
  682. public static IPublicInterface PrivateClass {
  683. get {
  684. return new PrivateClass();
  685. }
  686. }
  687. }
  688. public class KeywordBase {
  689. public object SomeField;
  690. public object SomeProperty {
  691. get {
  692. return SomeField;
  693. }
  694. set {
  695. SomeField = value;
  696. }
  697. }
  698. }
  699. public class KeywordDerived : KeywordBase {
  700. public new string SomeField;
  701. public new string SomeProperty {
  702. get {
  703. return SomeField;
  704. }
  705. set {
  706. SomeField = value;
  707. }
  708. }
  709. }
  710. public class GenericOnlyConflict<T> { }
  711. public class GenericOnlyConflict<T1, T2> { }
  712. class BaseClassNoInterface {
  713. #region I1 Members
  714. public void M() {
  715. InterfaceTestHelper.Flag = true;
  716. }
  717. #endregion
  718. }
  719. class DerivedClassWithInterface : BaseClassNoInterface, I1 {
  720. }
  721. abstract class AbstractClassWithInterface : I1 {
  722. #region I1 Members
  723. public abstract void M();
  724. #endregion
  725. }
  726. class DerivedClassWithInterfaceImpl : AbstractClassWithInterface {
  727. #region I1 Members
  728. public override void M() {
  729. InterfaceTestHelper.Flag = true;
  730. }
  731. #endregion
  732. }
  733. public class InterfaceTestHelper {
  734. public static bool Flag = false;
  735. public static object GetObject() { return new DerivedClassWithInterface(); }
  736. public static object GetObject2() { return new DerivedClassWithInterfaceImpl(); }
  737. }
  738. public struct ValueTypeWithFields {
  739. public int X;
  740. public long Y;
  741. }
  742. }