2
0
Эх сурвалжийг харах

reverted r3427 : explicitely passing null will still use default param value

Nicolas Cannasse 15 жил өмнө
parent
commit
f7493f7e2a

+ 1 - 5
codegen.ml

@@ -1049,11 +1049,7 @@ let rec is_volatile t =
 
 
 let set_default ctx a c t p =
 let set_default ctx a c t p =
 	let ve = mk (TLocal a) t p in
 	let ve = mk (TLocal a) t p in
-	let cond =  match ctx.platform with
-		| Js -> TCall (mk (TLocal "__js__") t_dynamic p,[mk (TConst (TString (a ^ "=== undefined"))) ctx.basic.tstring p])
-		| Flash -> TCall (mk (TLocal "__physeq__") t_dynamic p,[ve;mk (TCall (mk (TLocal "__undefined__") t_dynamic p,[])) t_dynamic p])
-		| _ -> TBinop (OpEq,ve,mk (TConst TNull) t p)
-	in
+	let cond =  TBinop (OpEq,ve,mk (TConst TNull) t p) in
 	mk (TIf (mk cond ctx.basic.tbool p, mk (TBinop (OpAssign,ve,mk (TConst c) t p)) t p,None)) ctx.basic.tvoid p
 	mk (TIf (mk cond ctx.basic.tbool p, mk (TBinop (OpAssign,ve,mk (TConst c) t p)) t p,None)) ctx.basic.tvoid p
 
 
 let bytes_serialize data =
 let bytes_serialize data =

+ 0 - 1
doc/CHANGES.txt

@@ -16,7 +16,6 @@
 	         (this can be disabled with -D dontWaitStage)
 	         (this can be disabled with -D dontWaitStage)
 	all : added haxe.Timer.measure
 	all : added haxe.Timer.measure
 	all : added Lambda.indexOf and Lambda.concat
 	all : added Lambda.indexOf and Lambda.concat
-	js, flash8: changed behavior when explicitely using 'null' for optional param with default value
 	all : no longer allow inline vars as metadata values
 	all : no longer allow inline vars as metadata values
 	neko : added getFieldsNames to neko.db.ResultSet (supported in Neko 1.8.2 mysql driver)
 	neko : added getFieldsNames to neko.db.ResultSet (supported in Neko 1.8.2 mysql driver)
 	all : added --macros and haxe.macro.Compiler
 	all : added --macros and haxe.macro.Compiler

+ 6 - 1
tests/unit/TestMisc.hx

@@ -158,7 +158,12 @@ class TestMisc extends Test {
 		eq( opt1("str").x, null );
 		eq( opt1("str").x, null );
 		eq( opt1("str").y, "str" );
 		eq( opt1("str").y, "str" );
 		eq( opt1(66,"hello").x, 66 );
 		eq( opt1(66,"hello").x, 66 );
-		eq( opt1(66,"hello").y, "hello" );
+		eq( opt1(66, "hello").y, "hello" );
+		
+		#if !flash9
+		eq( opt2(null, null).x, 5 );
+		#end
+		eq( opt2(0, null).y, "hello" );
 
 
 		eq( opt2().x, 5 );
 		eq( opt2().x, 5 );
 		eq( opt2().y, "hello" );
 		eq( opt2().y, "hello" );

+ 2 - 7
typer.ml

@@ -128,14 +128,9 @@ let unify_call_params ctx name el args p inline =
 	let arg_error ul name opt p =
 	let arg_error ul name opt p =
 		raise (Error (Stack (Unify ul,Custom ("For " ^ (if opt then "optional " else "") ^ "function argument '" ^ name ^ "'")), p))
 		raise (Error (Stack (Unify ul,Custom ("For " ^ (if opt then "optional " else "") ^ "function argument '" ^ name ^ "'")), p))
 	in
 	in
-	let enull = (match ctx.com.platform with
-		| Js -> TLocal "undefined"
-		| Flash -> TLocal "__undefined__"
-		| _ -> TConst TNull
-	) in
 	let rec no_opt = function
 	let rec no_opt = function
 		| [] -> []
 		| [] -> []
-		| (e,true) :: l when e.eexpr == enull -> no_opt l
+		| ({ eexpr = TConst TNull },true) :: l -> no_opt l
 		| l -> List.map fst l
 		| l -> List.map fst l
 	in
 	in
 	let rec default_value t =
 	let rec default_value t =
@@ -158,7 +153,7 @@ let unify_call_params ctx name el args p inline =
 			let e = type_expr ctx infos true in
 			let e = type_expr ctx infos true in
 			(e, true)
 			(e, true)
 		else
 		else
-			(mk enull t p, true)
+			(null t p, true)
 	in
 	in
 	let rec loop acc l l2 skip =
 	let rec loop acc l l2 skip =
 		match l , l2 with
 		match l , l2 with