Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:25
erlang
3391-sys_core_fold-Fix-rewriting-complex-dynami...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 3391-sys_core_fold-Fix-rewriting-complex-dynamic-keys-on-.patch of Package erlang
From 2e444a4b52512d607c4098964090655cfae49602 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20H=C3=B6gberg?= <john@erlang.org> Date: Wed, 15 Mar 2023 11:05:27 +0100 Subject: [PATCH] sys_core_fold: Fix rewriting complex dynamic keys on maps:get/3 --- lib/compiler/src/sys_core_fold.erl | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/compiler/src/sys_core_fold.erl b/lib/compiler/src/sys_core_fold.erl index 4d2e618821..024b2d5f2a 100644 --- a/lib/compiler/src/sys_core_fold.erl +++ b/lib/compiler/src/sys_core_fold.erl @@ -808,8 +808,8 @@ call(#c_call{args=As0}=Call0, #c_literal{val=M}=M0, #c_literal{val=N}=N0, Sub) - Core -> expr(Core, Sub) end end; - #c_case{}=Case -> - Case; + #c_let{}=Let -> + Let; #c_literal{}=Lit -> Lit end; @@ -821,9 +821,10 @@ call(#c_call{args=As0}=Call, M, N, Sub) -> %% slightly at the cost of making tracing and stack traces incorrect. simplify_call(Call, maps, get, [Key, Map]) -> rewrite_call(Call, erlang, map_get, [Key, Map]); -simplify_call(#c_call{anno=Anno0}, maps, get, [Key, Map, Default]) -> +simplify_call(#c_call{anno=Anno0}, maps, get, [Key0, Map, Default]) -> Anno = [compiler_generated | Anno0], + Key = make_var(Anno), Value = make_var(Anno), Fail = make_var(Anno), Raise = #c_primop{name=#c_literal{val=match_fail}, @@ -845,7 +846,8 @@ simplify_call(#c_call{anno=Anno0}, maps, get, [Key, Map, Default]) -> pats=[Fail], guard=#c_literal{val=true}, body=Raise}], - #c_case{anno=Anno,arg=Map,clauses=Cs}; + + cerl:ann_c_let(Anno, [Key], Key0, #c_case{anno=Anno,arg=Map,clauses=Cs}); simplify_call(Call, maps, is_key, [Key, Map]) -> rewrite_call(Call, erlang, is_map_key, [Key, Map]); simplify_call(_Call, maps, new, []) -> -- 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