File 3144-cover-Support-map-comprehensions.patch of Package erlang
From e387cc21d7f251678b18332e2e605d650fde2c56 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org>
Date: Mon, 6 Feb 2023 10:34:05 +0100
Subject: [PATCH] cover: Support map comprehensions
---
lib/tools/src/cover.erl | 13 +++++++++++++
lib/tools/test/cover_SUITE.erl | 19 +++++++++++++++++++
2 files changed, 32 insertions(+)
diff --git a/lib/tools/src/cover.erl b/lib/tools/src/cover.erl
index 1f7a518dfe..802e54c869 100644
--- a/lib/tools/src/cover.erl
+++ b/lib/tools/src/cover.erl
@@ -1865,6 +1865,10 @@ expand({bc,Anno,Expr,Qs}, Vs, N) ->
{ExpandedExpr,N2} = expand(Expr, Vs, N),
{ExpandedQs,N3} = expand_qualifiers(Qs, Vs, N2),
{{bc,Anno,ExpandedExpr,ExpandedQs},N3};
+expand({mc,Anno,Expr,Qs}, Vs, N) ->
+ {ExpandedExpr,N2} = expand(Expr, Vs, N),
+ {ExpandedQs,N3} = expand_qualifiers(Qs, Vs, N2),
+ {{mc,Anno,ExpandedExpr,ExpandedQs},N3};
expand({op,_Anno,'andalso',ExprL,ExprR}, Vs, N) ->
{ExpandedExprL,N2} = expand(ExprL, Vs, N),
{ExpandedExprR,N3} = expand(ExprR, Vs, N2),
@@ -2239,6 +2243,11 @@ munge_expr({bc,Anno,Expr,Qs}, Vars) ->
{MungedExpr,Vars2} = munge_expr(?BLOCK1(Expr), Vars),
{MungedQs, Vars3} = munge_qualifiers(Qs, Vars2),
{{bc,Anno,MungedExpr,MungedQs}, Vars3};
+munge_expr({mc,Anno,{map_field_assoc,FAnno,K,V},Qs}, Vars) ->
+ Expr = {map_field_assoc,FAnno,?BLOCK1(K),?BLOCK1(V)},
+ {MungedExpr,Vars2} = munge_expr(Expr, Vars),
+ {MungedQs, Vars3} = munge_qualifiers(Qs, Vars2),
+ {{mc,Anno,MungedExpr,MungedQs}, Vars3};
munge_expr({block,Anno,Body}, Vars) ->
{MungedBody, Vars2} = munge_body(Body, Vars),
{{block,Anno,MungedBody}, Vars2};
@@ -2311,6 +2320,10 @@ munge_qs([{b_generate,Anno,Pattern,Expr}|Qs], Vars, MQs) ->
A = element(2, Expr),
{MExpr, Vars2} = munge_expr(Expr, Vars),
munge_qs1(Qs, A, {b_generate,Anno,Pattern,MExpr}, Vars, Vars2, MQs);
+munge_qs([{m_generate,Anno,Pattern,Expr}|Qs], Vars, MQs) ->
+ A = element(2, Expr),
+ {MExpr, Vars2} = munge_expr(Expr, Vars),
+ munge_qs1(Qs, A, {m_generate,Anno,Pattern,MExpr}, Vars, Vars2, MQs);
munge_qs([Expr|Qs], Vars, MQs) ->
A = element(2, Expr),
{MungedExpr, Vars2} = munge_expr(Expr, Vars),
diff --git a/lib/tools/test/cover_SUITE.erl b/lib/tools/test/cover_SUITE.erl
index 9977fa8763..f98b066678 100644
--- a/lib/tools/test/cover_SUITE.erl
+++ b/lib/tools/test/cover_SUITE.erl
@@ -1522,6 +1522,25 @@ comprehension_8188(Cf) ->
" <<_>> <= << 1, 2 >>,\n" % 2
" true >>.\n" % 4
"two() -> 2">>, Cf), % 1
+
+ [{{t,1},1},
+ {{t,2},2},
+ {{t,3},2},
+ {{t,5},1},
+ {{t,8},3},
+ {{t,9},2},
+ {{t,10},1}] =
+ analyse_expr(<<"#{\n" %1
+ " K + 1 =>\n" %2
+ "X * 2 ||\n" %2
+ " K := X <-\n"
+ " #{1 => 1,\n" %1
+ " 2 => two(),\n"
+ " 3 => 3},\n"
+ " X > 1,\n" %3
+ " true}. \n" %2
+ " two() -> 2">>, Cf), %1
+
ok.
eep37(Config) when is_list(Config) ->
--
2.35.3