瀏覽代碼

[matcher] fix extractor pattern offsets (closes #6548)

Simon Krajewski 8 年之前
父節點
當前提交
b500635a8c
共有 2 個文件被更改,包括 17 次插入2 次删除
  1. 2 2
      src/typing/matcher.ml
  2. 15 0
      tests/unit/src/unit/issues/Issue6548.hx

+ 2 - 2
src/typing/matcher.ml

@@ -1075,9 +1075,9 @@ module Compile = struct
 				let e1 = loop e1 in
 				let bindings = List.map (fun v -> v,subject.epos,subject) vars @ bindings in
 				begin try
-					let v,_,_,left,right = List.find (fun (_,_,e2,_,_) -> Texpr.equal e1 e2) ex_bindings in
+					let v,_,_,left2,right2 = List.find (fun (_,_,e2,_,_) -> Texpr.equal e1 e2) ex_bindings in
 					let ev = mk (TLocal v) v.v_type e1.epos in
-					let patterns = make_offset_list (left + 1) (right - 1) pat pat_any @ patterns in
+					let patterns = make_offset_list (left2 + 1) (right2 - 1) pat pat_any @ patterns in
 					(left + 1, right - 1,ev :: subjects,((case,bindings,patterns) :: cases),ex_bindings)
 				with Not_found ->
 					let v = alloc_var "_hx_tmp" e1.etype e1.epos in

+ 15 - 0
tests/unit/src/unit/issues/Issue6548.hx

@@ -0,0 +1,15 @@
+package unit.issues;
+
+class Issue6548 extends unit.Test {
+
+	static function obj(_) return { pos: 12 };
+
+	function test() {
+		switch 1 {
+			case _ * 2 => 2:
+			case _ * 2 => 3:
+			case obj(_) => { pos: pos }:
+			case _:
+		}
+	}
+}