Main.hx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import cs.Constraints;
  2. import haxe.Constraints.Constructible;
  3. @:classCode("
  4. public static void testClass<T>(T t) where T : class {}
  5. public static void testStruct<T>(T t) where T : struct {}
  6. public static void testConstructible<T>(T t) where T : new() {}
  7. public static void testConstructibleClass<T>(T t) where T : class, new() {}
  8. ")
  9. class TestCs {
  10. extern public static function testClass<T:CsClass>(t:T):Void;
  11. extern public static function testStruct<T:CsStruct>(t:T):Void;
  12. extern public static function testConstructible<T:Constructible<()->Void>>(t:T):Void;
  13. extern public static function testConstructibleClass<T:Constructible<()->Void> & CsClass>(t:T):Void;
  14. }
  15. @:nativeGen
  16. class Main {
  17. public static function main() {
  18. testClass(new Array<String>());
  19. TestCs.testClass(new Class_(new Array<String>()).value);
  20. testStruct(42);
  21. TestCs.testStruct(new Struct(42).value);
  22. testConstructible(new haxe.Serializer());
  23. TestCs.testConstructible(new Constructible_(new haxe.Serializer()).value);
  24. testConstructibleClass(new haxe.Serializer());
  25. TestCs.testConstructibleClass(new ConstructibleClass(new haxe.Serializer()).value);
  26. }
  27. static function testClass<T:CsClass>(value:T) TestCs.testClass(value);
  28. static function testStruct<T:CsStruct>(value:T) TestCs.testStruct(value);
  29. static function testConstructible<T:Constructible<()->Void>>(value:T) TestCs.testConstructible(value);
  30. static function testConstructibleClass<T:Constructible<()->Void> & CsClass>(value:T) TestCs.testConstructibleClass(value);
  31. }
  32. @:nativeGen
  33. class Class_<T:CsClass> {
  34. public var value:T;
  35. public function new(value:T) this.value = value;
  36. }
  37. @:nativeGen
  38. class Struct<T:CsStruct> {
  39. public var value:T;
  40. public function new(value:T) this.value = value;
  41. }
  42. @:nativeGen
  43. class Constructible_<T:Constructible<()->Void>> {
  44. public var value:T;
  45. public function new(value:T) this.value = value;
  46. }
  47. @:nativeGen
  48. class ConstructibleClass<T:Constructible<()->Void> & CsClass> {
  49. public var value:T;
  50. public function new(value:T) this.value = value;
  51. }
  52. @:nativeGen
  53. class StructT<T, T1:T & CsStruct> {}
  54. #if (cs_ver >= "7.3")
  55. @:nativeGen
  56. class Unmanaged<T:CsUnmanaged> {}
  57. @:nativeGen
  58. class UnmanagedClass<T:CsUnmanaged & CsClass> {}
  59. #end