Parcourir la source

Lua: Add coroutine extern

Justin Donaldson il y a 10 ans
Parent
commit
1a366c6782
1 fichiers modifiés avec 46 ajouts et 0 suppressions
  1. 46 0
      std/lua/Coroutine.hx

+ 46 - 0
std/lua/Coroutine.hx

@@ -0,0 +1,46 @@
+package lua;
+
+/**
+  Externs for native Lua threads.
+ **/
+@:native("_G.coroutine")
+extern class Coroutine {
+	@:overload(function<A,B,C,D,E>(f : A->B->C->D->E->Void) : CoroutineInstance5<A,B,C,D,E> {})
+	@:overload(function<A,B,C,D>(f   : A->B->C->D->Void)    : CoroutineInstance4<A,B,C,D>   {})
+	@:overload(function<A,B,C>(f     : A->B->C->Void)       : CoroutineInstance3<A,B,C>     {})
+	@:overload(function<A,B>(f       : A->B->Void)          : CoroutineInstance2<A,B>       {})
+	@:overload(function<A>(f         : A->Void)             : CoroutineInstance1<A>         {})
+	@:overload(function(f            : Void->Void)             : CoroutineInstance0         {})
+	public static function create(f : haxe.Constraints.Function) : CoroutineInstance;
+
+	@:overload(function<A,B,C,D,E>(c : CoroutineInstance5<A,B,C,D,E>, arg1 : A, arg2: B, arg3: C, arg4: C, arg5: C) : Void {})
+	@:overload(function<A,B,C,D>(c   : CoroutineInstance4<A,B,C,D>, arg1: A, arg2: B, arg3: C, arg4: C) : Void             {})
+	@:overload(function<A,B,C>(c     : CoroutineInstance3<A,B,C>, arg1: A, arg2: B, arg3: C) : Void                        {})
+	@:overload(function<A,B>(c       : CoroutineInstance2<A,B>, arg1: A, arg2: B) : Void                                   {})
+	@:overload(function<A>(c         : CoroutineInstance1<A>, arg1: A) : Void                                              {})
+	@:overload(function(c            : CoroutineInstance0) : Void                                                          {})
+	public static function resume(c : CoroutineInstance, ?arg1:Dynamic, ?arg2:Dynamic, ?arg3:Dynamic, ?arg4:Dynamic, ?arg5:Dynamic) : Void;
+
+	@:overload(function<A,B,C,D,E>(c         : CoroutineInstance5<A,B,C,D,E>) : Void {})
+	@:overload(function<A,B,C,D>(c           : CoroutineInstance4<A,B,C,D>)   : Void {})
+	@:overload(function<A,B,C>(c             : CoroutineInstance3<A,B,C>)     : Void {})
+	@:overload(function<A,B>(c               : CoroutineInstance2<A,B>)       : Void {})
+	@:overload(function<A>(c                 : CoroutineInstance1<A>)         : Void {})
+	@:overload(function(c                    : CoroutineInstance0)            : Void {})
+	public static function yield(c : CoroutineInstance) : Void;
+}
+
+typedef CoroutineInstance             = {}
+typedef CoroutineInstance0            = {}
+typedef CoroutineInstance1<A>         = {}
+typedef CoroutineInstance2<A,B>       = {}
+typedef CoroutineInstance3<A,B,C>     = {}
+typedef CoroutineInstance4<A,B,C,D>   = {}
+typedef CoroutineInstance5<A,B,C,D,E> = {}
+
+@:enum
+abstract ThreadState(String) {
+	var Suspended = "suspended";
+	var Running   = "running";
+	var Dead      = "dead";
+}