Răsfoiți Sursa

[parser] give => lower precedence than ?:

closes #10455
Simon Krajewski 3 ani în urmă
părinte
comite
697abe95e7
2 a modificat fișierele cu 11 adăugiri și 3 ștergeri
  1. 3 3
      src/syntax/parser.ml
  2. 8 0
      tests/unit/src/unit/issues/Issue10455.hx

+ 3 - 3
src/syntax/parser.ml

@@ -274,8 +274,8 @@ let precedence op =
 	| OpArrow -> 10, right
 	| OpAssign | OpAssignOp _ -> 11, right
 
-let is_not_assign = function
-	| OpAssign | OpAssignOp _ -> false
+let is_higher_than_ternary = function
+	| OpAssign | OpAssignOp _ | OpArrow -> false
 	| _ -> true
 
 let swap op1 op2 =
@@ -288,7 +288,7 @@ let rec make_binop op e ((v,p2) as e2) =
 	| EBinop (_op,_e,_e2) when swap op _op ->
 		let _e = make_binop op e _e in
 		EBinop (_op,_e,_e2) , punion (pos _e) (pos _e2)
-	| ETernary (e1,e2,e3) when is_not_assign op ->
+	| ETernary (e1,e2,e3) when is_higher_than_ternary op ->
 		let e = make_binop op e e1 in
 		ETernary (e,e2,e3) , punion (pos e) (pos e3)
 	| _ ->

+ 8 - 0
tests/unit/src/unit/issues/Issue10455.hx

@@ -0,0 +1,8 @@
+package unit.issues;
+
+class Issue10455 extends Test {
+	function test() {
+		var a = [0 => true ? 1 : 0];
+		eq(1, a[0]);
+	}
+}