Skip to content

Commit

Permalink
[macro] Don't choke on namePos for reification pattern matching (#11671)
Browse files Browse the repository at this point in the history
* [macro] Don't choke on namePos for reification pattern matching

* [tests] Add test for 11670

* Do it like in #11433
  • Loading branch information
kLabz committed Jun 28, 2024
1 parent dffc733 commit e17d099
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 1 deletion.
7 changes: 6 additions & 1 deletion src/typing/matcher.ml
Original file line number Diff line number Diff line change
Expand Up @@ -480,9 +480,14 @@ module Pattern = struct
let is_matchable cf =
match cf.cf_kind with Method _ -> false | _ -> true
in
(* TODO: This needs a better check, but it's not obvious how to approach this. See #11433 *)
let is_probably_pos cf = match cf.cf_name with
| "pos" | "posPath" | "namePos" -> true
| _ -> false
in
let patterns,fields = List.fold_left (fun (patterns,fields) (cf,t) ->
try
if pctx.in_reification && cf.cf_name = "pos" then raise Not_found;
if pctx.in_reification && is_probably_pos cf then raise Not_found;
let e1 = Expr.field_assoc cf.cf_name fl in
make pctx false t e1 :: patterns,cf.cf_name :: fields
with Not_found ->
Expand Down
16 changes: 16 additions & 0 deletions tests/misc/projects/Issue11670/Main.hx
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
class Main {
static function main() {
test(var foo:String);
}

static macro function test(e) {
switch e {
// Unrecognized pattern: untyped $__mk_pos__("Test.hx", 145, 150)
case macro var $name:$ct:
case _:
}

return macro {};
}
}

1 change: 1 addition & 0 deletions tests/misc/projects/Issue11670/compile.hxml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
-main Main
Empty file.

0 comments on commit e17d099

Please sign in to comment.