Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:25
erlang
2135-erl_pp-Handle-map-comprehensions.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 2135-erl_pp-Handle-map-comprehensions.patch of Package erlang
From 9a20ba5ecdea21b1a00a5b8b6ca3bec49721885d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org> Date: Thu, 19 Jan 2023 12:31:37 +0100 Subject: [PATCH 05/12] erl_pp: Handle map comprehensions --- lib/stdlib/src/erl_pp.erl | 13 +++++++++---- lib/stdlib/test/erl_pp_SUITE.erl | 25 +++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/lib/stdlib/src/erl_pp.erl b/lib/stdlib/src/erl_pp.erl index 191aa75698..d7e80f71bb 100644 --- a/lib/stdlib/src/erl_pp.erl +++ b/lib/stdlib/src/erl_pp.erl @@ -580,12 +580,13 @@ lexpr({cons,_,H,T}, _, Opts) -> lexpr({lc,_,E,Qs}, _Prec, Opts) -> Lcl = {list,[{step,[lexpr(E, Opts),leaf(" ||")],lc_quals(Qs, Opts)}]}, {list,[{seq,$[,[],[[]],[{force_nl,leaf(" "),[Lcl]}]},$]]}; - %% {list,[{step,$[,Lcl},$]]}; lexpr({bc,_,E,Qs}, _Prec, Opts) -> P = max_prec(), Lcl = {list,[{step,[lexpr(E, P, Opts),leaf(" ||")],lc_quals(Qs, Opts)}]}, {list,[{seq,'<<',[],[[]],[{force_nl,leaf(" "),[Lcl]}]},'>>']}; - %% {list,[{step,'<<',Lcl},'>>']}; +lexpr({mc,_,E,Qs}, _Prec, Opts) -> + Lcl = {list,[{step,[map_field(E, Opts),leaf(" ||")],lc_quals(Qs, Opts)}]}, + {list,[{seq,'#{',[],[[]],[{force_nl,leaf(" "),[Lcl]}]},$}]}; lexpr({tuple,_,Elts}, _, Opts) -> tuple(Elts, Opts); lexpr({record_index, _, Name, F}, Prec, Opts) -> @@ -956,6 +957,9 @@ clauses(Type, Opts, Cs) -> lc_quals(Qs, Opts) -> {prefer_nl,[$,],lexprs(Qs, fun lc_qual/2, Opts)}. +lc_qual({m_generate,_,Pat,E}, Opts) -> + Pl = map_field(Pat, Opts), + {list,[{step,[Pl,leaf(" <-")],lexpr(E, 0, Opts)}]}; lc_qual({b_generate,_,Pat,E}, Opts) -> Pl = lexpr(Pat, 0, Opts), {list,[{step,[Pl,leaf(" <=")],lexpr(E, 0, Opts)}]}; @@ -1367,7 +1371,7 @@ wordtable() -> L = [begin {leaf,Sz,S} = leaf(W), {S,Sz} end || W <- [" ->"," =","<<",">>","[]","after","begin","case","catch", "end","fun","if","of","receive","try","when"," ::","..", - " |","maybe","else"]], + " |","maybe","else","#{"]], list_to_tuple(L). word(' ->', WT) -> element(1, WT); @@ -1390,7 +1394,8 @@ word(' ::', WT) -> element(17, WT); word('..', WT) -> element(18, WT); word(' |', WT) -> element(19, WT); word('maybe', WT) -> element(20, WT); -word('else', WT) -> element(21, WT). +word('else', WT) -> element(21, WT); +word('#{', WT) -> element(22, WT). %% Make up an unique variable name for Name that won't clash with any %% name in Used. We first try by converting the name to uppercase and diff --git a/lib/stdlib/test/erl_pp_SUITE.erl b/lib/stdlib/test/erl_pp_SUITE.erl index c8c1a206ca..fa12f07fd2 100644 --- a/lib/stdlib/test/erl_pp_SUITE.erl +++ b/lib/stdlib/test/erl_pp_SUITE.erl @@ -56,7 +56,7 @@ otp_10302/1, otp_10820/1, otp_11100/1, otp_11861/1, pr_1014/1, otp_13662/1, otp_14285/1, otp_15592/1, otp_15751/1, otp_15755/1, otp_16435/1, gh_5093/1, - eep49/1]). + eep49/1, eep58/1]). %% Internal export. -export([ehook/6]). @@ -88,7 +88,7 @@ groups() -> otp_8473, otp_8522, otp_8567, otp_8664, otp_9147, otp_10302, otp_10820, otp_11100, otp_11861, pr_1014, otp_13662, otp_14285, otp_15592, otp_15751, otp_15755, otp_16435, - gh_5093, eep49]}]. + gh_5093, eep49, eep58]}]. init_per_suite(Config) -> Config. @@ -1393,6 +1393,27 @@ eep49(_Config) -> " end.\n"), ok. +eep58(_Config) -> + assert_same("lc_map(Map) ->\n" + " [ \n" + " {K, V} ||\n" + " K := V <- Map\n" + " ].\n"), + + assert_same("bc_map(Map) ->\n" + " << \n" + " <<K:32,V:32>> ||\n" + " K := V <- Map\n" + " >>.\n"), + + assert_same("mc(Map) ->\n" + " #{ \n" + " K => V + 1 ||\n" + " K := V <- Map\n" + " }.\n"), + + ok. + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% compile(Config, Tests) -> -- 2.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor