Sfoglia il codice sorgente

[js] fixed rest args after optional args (closes #10018)

Aleksandr Kuzmenko 4 anni fa
parent
commit
fa40b8bb42
2 ha cambiato i file con 13 aggiunte e 1 eliminazioni
  1. 1 1
      src/generators/genjs.ml
  2. 12 0
      tests/unit/src/unit/issues/Issue10018.hx

+ 1 - 1
src/generators/genjs.ml

@@ -338,7 +338,7 @@ let rec concat ctx s f = function
 *)
 let declare_rest_args_legacy com offset rest_arg =
 	let i = string_of_int offset in
-	let new_array = mk (TIdent ("new Array($l-"^ i ^")")) t_dynamic rest_arg.v_pos
+	let new_array = mk (TIdent ("new Array($l>" ^ i ^ "?$l-"^ i ^":0)")) t_dynamic rest_arg.v_pos
 	and populate = mk (TIdent ("for(var $i=" ^ i ^ ";$i<$l;++$i){" ^ (ident rest_arg.v_name) ^ "[$i-" ^ i ^ "]=arguments[$i];}")) com.basic.tvoid rest_arg.v_pos
 	in
 	[

+ 12 - 0
tests/unit/src/unit/issues/Issue10018.hx

@@ -0,0 +1,12 @@
+package unit.issues;
+
+class Issue10018 extends unit.Test {
+	function test() {
+		eq(0, rest());
+	}
+
+	@:pure(false)
+	function rest(?arg, ...args:Int):Int {
+		return args.length;
+	}
+}