diff options
author | Björn Gustavsson <[email protected]> | 2012-05-16 10:50:30 +0200 |
---|---|---|
committer | Björn-Egil Dahlberg <[email protected]> | 2014-01-28 15:56:25 +0100 |
commit | 64ee859fc4c17259ab95192abf7493fed8f2b0ac (patch) | |
tree | 8506892a03635fa44f523f4daf470c4845e63e77 /lib/compiler/src/sys_core_dsetel.erl | |
parent | d3ece60d52880fb273da3c4aa07655a0eeddeafb (diff) | |
download | otp-64ee859fc4c17259ab95192abf7493fed8f2b0ac.tar.gz otp-64ee859fc4c17259ab95192abf7493fed8f2b0ac.tar.bz2 otp-64ee859fc4c17259ab95192abf7493fed8f2b0ac.zip |
Implement support for maps in the compiler
To make it possible to build the entire OTP system, also define
dummys for the instructions in ops.tab.
Diffstat (limited to 'lib/compiler/src/sys_core_dsetel.erl')
-rw-r--r-- | lib/compiler/src/sys_core_dsetel.erl | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/compiler/src/sys_core_dsetel.erl b/lib/compiler/src/sys_core_dsetel.erl index f6696992b9..c7c8343c35 100644 --- a/lib/compiler/src/sys_core_dsetel.erl +++ b/lib/compiler/src/sys_core_dsetel.erl @@ -102,6 +102,13 @@ visit(Env, #c_literal{}=R) -> visit(Env0, #c_tuple{es=Es0}=R) -> {Es1,Env1} = visit_list(Env0, Es0), {R#c_tuple{es=Es1}, Env1}; +visit(Env0, #c_map{es=Es0}=R) -> + {Es1,Env1} = visit_list(Env0, Es0), + {R#c_map{es=Es1}, Env1}; +visit(Env0, #c_map_pair{key=K0,val=V0}=R) -> + {K,Env1} = visit(Env0, K0), + {V,Env2} = visit(Env1, V0), + {R#c_map_pair{key=K,val=V}, Env2}; visit(Env0, #c_cons{hd=H0,tl=T0}=R) -> {H1,Env1} = visit(Env0, H0), {T1,Env2} = visit(Env1, T0), @@ -212,6 +219,11 @@ visit_pat(Env0, #c_var{name=V}, Vs) -> {[V|Vs], dict:store(V, 0, Env0)}; visit_pat(Env0, #c_tuple{es=Es}, Vs) -> visit_pats(Es, Env0, Vs); +visit_pat(Env0, #c_map{es=Es}, Vs) -> + visit_pats(Es, Env0, Vs); +visit_pat(Env0, #c_map_pair{key=V,val=K}, Vs0) -> + {Vs1, Env1} = visit_pat(Env0, V, Vs0), + visit_pat(Env1, K, Vs1); visit_pat(Env0, #c_cons{hd=H,tl=T}, Vs0) -> {Vs1, Env1} = visit_pat(Env0, H, Vs0), visit_pat(Env1, T, Vs1); |