浏览代码

do not check initialization state of compiler-generated variables (closes #5290)

Simon Krajewski 9 年之前
父节点
当前提交
9b3c0046cd
共有 3 个文件被更改,包括 20 次插入0 次删除
  1. 2 0
      src/optimization/filters.ml
  2. 1 0
      src/optimization/optimizer.ml
  3. 17 0
      tests/unit/src/unit/issues/Issue5290.hx

+ 2 - 0
src/optimization/filters.ml

@@ -117,6 +117,8 @@ let check_local_vars_init e =
 		| TVar (v,eo) ->
 			begin
 				match eo with
+				| None when Meta.has Meta.CompilerGenerated v.v_meta ->
+					()
 				| None ->
 					declared := v.v_id :: !declared;
 					vars := PMap.add v.v_id false !vars

+ 1 - 0
src/optimization/optimizer.ml

@@ -1437,6 +1437,7 @@ let inline_constructors ctx e =
 	let add_field_var v s t =
 		let ii = IntMap.find v.v_id !vars in
 		let v' = alloc_var (Printf.sprintf "%s_%s" v.v_name s) t v.v_pos in
+		v'.v_meta <- (Meta.CompilerGenerated,[],v.v_pos) :: v'.v_meta;
 		ii.ii_fields <- PMap.add s v' ii.ii_fields;
 		v'
 	in

+ 17 - 0
tests/unit/src/unit/issues/Issue5290.hx

@@ -0,0 +1,17 @@
+package unit.issues;
+
+class Issue5290 extends unit.Test {
+	function test() {
+		var options = createFromPrototype({month: 0});
+		eq(2016, options.year);
+	}
+
+	public static inline function createFromPrototype(
+		options: { ?year: Int, ?month: Int })  {
+
+		if(null == options.year)
+			options.year = 2016;
+
+		return options;
+	}
+}