Sfoglia il codice sorgente

[cs] Do not let empty var names to be generated

When generating a delegate conversion function. Closes #6039
Caue Waneck 7 anni fa
parent
commit
fde7eccab3

+ 6 - 1
src/codegen/gencommon/closuresToClass.ml

@@ -111,7 +111,12 @@ let funct gen t = match follow (run_follow gen t) with
 
 let mk_conversion_fun gen e =
 	let args, ret = funct gen e.etype in
-	let tf_args = List.map (fun (n,o,t) -> alloc_var n t,None) args in
+	let i = ref 0 in
+	let tf_args = List.map (fun (n,o,t) ->
+		let n = if n = "" then ("arg" ^ string_of_int(!i)) else n in
+		incr i;
+		alloc_var n t,None) args
+	in
 	let block, local = match e.eexpr with
 		| TLocal v ->
 			v.v_capture <- true;

+ 31 - 0
tests/unit/src/unit/issues/Issue6039.hx

@@ -0,0 +1,31 @@
+package unit.issues;
+#if cs
+import cs.system.Action_1;
+#end
+
+class Issue6039 extends Test
+{
+  public function test()
+  {
+#if cs
+    var myStr = null;
+    var c:Callback = function(str) myStr = str;
+    c.invokeIt('test');
+    this.eq(myStr, 'test');
+#end
+  }
+}
+
+#if cs
+@:keep
+private abstract Callback(cs.system.Action_1<String>) from Action_1<String> to Action_1<String>{
+	function new(f)
+		this = f;
+
+	public function invokeIt(data:String):Void
+		this.Invoke(data);
+
+	@:from static function fromHaxeFunc(foo:String->Void):Callback
+		return new Callback(new Action_1<String>(foo));
+}
+#end