Quellcode durchsuchen

[parser] patch EField positions in reification (closes #6423)

Simon Krajewski vor 8 Jahren
Ursprung
Commit
f13e696d8d
2 geänderte Dateien mit 21 neuen und 0 gelöschten Zeilen
  1. 1 0
      src/syntax/parser.mly
  2. 20 0
      tests/display/src/cases/Issue6423.hx

+ 1 - 0
src/syntax/parser.mly

@@ -382,6 +382,7 @@ let reify in_macro =
 		| EBinop (op,e1,e2) ->
 			expr "EBinop" [to_binop op p; loop e1; loop e2]
 		| EField (e,s) ->
+			let p = {p with pmin = p.pmax - String.length s} in
 			expr "EField" [loop e; to_string s p]
 		| EParenthesis e ->
 			expr "EParenthesis" [loop e]

+ 20 - 0
tests/display/src/cases/Issue6423.hx

@@ -0,0 +1,20 @@
+package cases;
+
+class Issue6423 extends DisplayTestCase {
+	/**
+	class Main {
+		static function main() {}
+
+		macro function foo(expr:haxe.macro.Expr, field:String) {
+			switch (expr) {
+				case macro $expr.{-1-}$fie{-2-}ld{-3-}:
+					expr;
+			}
+		}
+	}
+	**/
+	function test() {
+		eq(range(1, 3), position(pos(2)));
+		eq("String", type(pos(2)));
+	}
+}