MyClass.hx 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. package unit;
  2. using MyClass.UsingBase;
  3. using MyClass.UsingChild1;
  4. using MyClass.UsingChild2;
  5. class MyClass {
  6. #if as3 public #end var val : Int;
  7. public var ref : MyClass;
  8. public var intValue : Int;
  9. public var stringValue : String;
  10. public function new(v) {
  11. val = v;
  12. intValue = 55;
  13. }
  14. public function get() {
  15. return val;
  16. }
  17. @:keep public function set(v) {
  18. val = v;
  19. }
  20. public function add(x,y) {
  21. return val + x + y;
  22. }
  23. }
  24. class MyParent {
  25. public function new() { }
  26. function a() return 11;
  27. function b() return 20;
  28. }
  29. class MyDynamicChildWithToString extends MyParent implements Dynamic
  30. {
  31. public function toString()
  32. {
  33. return "Custom toString";
  34. }
  35. }
  36. class MyDynamicChildWithoutToString extends MyParent implements Dynamic
  37. {
  38. }
  39. class MyChild1 extends MyParent {
  40. public override function a() { return 12; }
  41. override function b() return 21;
  42. function c() return 19;
  43. }
  44. #if !as3
  45. class MyChild2 extends MyParent {
  46. public function test1(mc1:MyChild1) return mc1.b();
  47. }
  48. #end
  49. interface I1 { }
  50. class Base { public var s:String; public function new() { } }
  51. class Child1 extends Base { public function new() { super(); } }
  52. class Child2 extends Base implements I1 { public function new() { super(); } }
  53. class Child2_1 extends Child2 { public function new() { super(); } }
  54. class Unrelated implements I1 { public var s:String; public var t:Int; public function new() { } }
  55. interface I2 extends I1 { }
  56. class ClassI2 implements I2 { public function new() { } }
  57. class CI1 extends Base implements I1 { public function new() { super(); } }
  58. class CI2 extends Base implements I1 { public function new() { super(); } }
  59. class CII1 extends CI1 { public function new() { super(); } }
  60. class CII2 extends CI2 { public function new() { super(); } }
  61. class PClassBase<T> { public function new() { } }
  62. class PClass1<T> extends PClassBase<Float> { public function new() { super(); } }
  63. class PClass2<T> extends PClassBase<T> { public function new(t:T) { super(); } }
  64. interface CovI {
  65. public function covariant():Base;
  66. }
  67. interface CovI2 extends CovI {
  68. public function covariant():Child2;
  69. }
  70. class Cov1 {
  71. public function new() { }
  72. public function covariant():Base { return new Base(); }
  73. }
  74. class Cov2 extends Cov1 implements CovI {
  75. public function new() { super(); }
  76. public override function covariant():Child1 { return new Child1(); }
  77. }
  78. class Cov3 implements CovI2
  79. {
  80. public function new() { }
  81. public function covariant():Child2_1 { return new Child2_1(); }
  82. }
  83. class Ctrv1 {
  84. public function new() { }
  85. public function contravariant(arg:Child1) { }
  86. }
  87. class Ctrv2 extends Ctrv1 {
  88. public function new() { super(); }
  89. public override function contravariant(arg:Base) { }
  90. }
  91. class InitBase {
  92. public var i = 2;
  93. public var s = "foo";
  94. public var b = true;
  95. public var t = String;
  96. static public inline var si = 2;
  97. static public inline var sop = 2 + 5 * 5;
  98. static public inline var st = String;
  99. static public inline var sp = (2 * 3);
  100. static public inline var sinline = DateTools.minutes(1);
  101. public function new() { }
  102. }
  103. class InitChild extends InitBase { }
  104. class InitChildWithCtor extends InitBase {
  105. public function new(_) {
  106. super();
  107. }
  108. }
  109. class InitWithoutCtor {
  110. public var i = 2;
  111. }
  112. class InitProperties {
  113. public var accNull(default, null):Int = 3;
  114. public var accDefault(default, default):Int = 3;
  115. public var accFunc(default, set_accFunc):Int = 3;
  116. public var accNever(default, never):Int = 3;
  117. public var accDynamic(default, dynamic):Int = 3;
  118. function set_accFunc(v) return throw "setter was called";
  119. function set_accDynamic(v) return throw "setter was called";
  120. public function new() { }
  121. }
  122. class ParamConstraintsClass {
  123. public function new() { }
  124. static public function staticSingle< A:Base > (a:A):A { return a; }
  125. public function memberSingle< A:Base > (a:A):A { return a; }
  126. public function memberMultiple < A:(Base, I1) > (a:A):A { return a; }
  127. public function memberComplex < A:I1, B:List<A> > (a:A, b:B) { return b; }
  128. public function memberBasic < A:String, B:Array<A> > (a:A, b:B) { return b[0]; }
  129. public function memberAnon < A:( { x : Int }, { y : Float } ) > (v:A) { return v.x + v.y; }
  130. #if !(java || cs) //this is a known bug caused by issue #915
  131. @:overload(function< A, B:Array<A> > (a:A, b:B):Void { } )
  132. public function memberOverload < A, B > (a:String, b:String) { }
  133. #end
  134. }
  135. class ParamConstraintsClass2<T> {
  136. public function new() { }
  137. public function bind(t:T) { }
  138. public function check<A:Array<T>>(a:A) { }
  139. }
  140. class UsingBase {
  141. static function privFunc(s:String) return s.toUpperCase();
  142. static public function pupFunc(s:String) return s.toUpperCase();
  143. }
  144. class UsingChild1 extends UsingBase {
  145. static public function test() {
  146. return "foo".pupFunc() + "foo".privFunc() + "FOO".siblingFunc();
  147. }
  148. static function siblingFunc(s:String) return s.toLowerCase();
  149. }
  150. class UsingChild2 extends UsingBase {
  151. static public function test() {
  152. #if !macro
  153. TestType.typeError("foo".siblingFunc());
  154. #end
  155. return "foo".siblingFunc();
  156. }
  157. static public function siblingFunc(s:String) return s.toUpperCase();
  158. }
  159. class UsingUnrelated {
  160. static public function test() {
  161. #if !macro
  162. TestType.typeError("foo".privFunc());
  163. TestType.typeError("foo".siblingFunc());
  164. #end
  165. return "foo".pupFunc() + "foo".siblingFunc();
  166. }
  167. }
  168. @:keep class VarProps {
  169. static var SX(get, set) : Int;
  170. @:isVar static var SY(get, set) : Int;
  171. static function get_SX() {
  172. return 1;
  173. }
  174. static function set_SX(v) {
  175. return v;
  176. }
  177. static function get_SY() {
  178. return SY;
  179. }
  180. static function set_SY(v) {
  181. SY = v;
  182. return v;
  183. }
  184. public var x(get, set) : Int;
  185. @:isVar public var y(get, set) : Int;
  186. public var z(default, set) : Int;
  187. public function new() {
  188. x = 1;
  189. y = 2;
  190. z = 3;
  191. }
  192. function get_x() {
  193. return 1;
  194. }
  195. function set_x(v) {
  196. return v;
  197. }
  198. function get_y() {
  199. return y;
  200. }
  201. function set_y(v) {
  202. y = v;
  203. return v;
  204. }
  205. function set_z(v) {
  206. z = v + 1;
  207. return z;
  208. }
  209. }
  210. class BaseSuperProp {
  211. public var prop(get, set):Int;
  212. public var fProp(get, null):Int->String;
  213. public function new() {
  214. }
  215. function get_prop() return 1;
  216. function set_prop(v) return v;
  217. function get_fProp() return function(i:Int) return "test" +i;
  218. }
  219. class ChildSuperProp extends BaseSuperProp {
  220. public override function get_prop() return super.prop + 1;
  221. public override function set_prop(v) return (super.prop = v) + 1;
  222. public override function get_fProp() {
  223. var s = super.fProp(0);
  224. return function(i:Int) return s + i;
  225. }
  226. public function test() {
  227. return super.fProp(2);
  228. }
  229. }
  230. class InlineCastA {
  231. function self() : InlineCastA {
  232. return this;
  233. }
  234. }
  235. class InlineCastB extends InlineCastA {
  236. public function new() { }
  237. public inline function test() : InlineCastB {
  238. #if as3
  239. return cast (self(), InlineCastB);
  240. #else
  241. return cast self();
  242. #end
  243. }
  244. public function quote() {
  245. return "I am the greatest.";
  246. }
  247. }