Bladeren bron

[swf] fix #9678 and add test (#9679)

* [swf] generate * type when Void ends up being used as value (see #9678)

* add test (closes #9678)

* disable #9678 test for C++ for now
Dan Korostelev 5 jaren geleden
bovenliggende
commit
3ce45be54b
2 gewijzigde bestanden met toevoegingen van 24 en 1 verwijderingen
  1. 1 1
      src/generators/genswf9.ml
  2. 23 0
      tests/unit/src/unit/issues/Issue9678.hx

+ 1 - 1
src/generators/genswf9.ml

@@ -247,7 +247,7 @@ let rec type_id ctx t =
 
 let type_opt ctx t =
 	match follow_basic t with
-	| TDynamic _ | TMono _ -> None
+	| TDynamic _ | TMono _ | TAbstract ({a_path = [],"Void"},_) -> None
 	| _ -> Some (type_id ctx t)
 
 let type_void ctx t =

+ 23 - 0
tests/unit/src/unit/issues/Issue9678.hx

@@ -0,0 +1,23 @@
+package unit.issues;
+
+class Issue9678 extends unit.Test {
+	#if !cpp
+	function test() {
+		var called = 0;
+		function returnVoid() {
+			called++;
+		}
+		new C(42).next(returnVoid).handle(_ -> called++);
+		eq(2, called);
+	}
+
+	@:keep static function explicitVoidArg(arg:Void) {}
+	#end
+}
+
+private class C<T> {
+	final v:T;
+	public function new(v:T) this.v = v;
+	public function next<S>(f:()->S):C<S> return new C(f());
+	public function handle(cb:T->Void) {cb(v);}
+}