aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBruce Yinhe <[email protected]>2014-07-15 15:38:27 +0200
committerBruce Yinhe <[email protected]>2014-07-15 15:38:27 +0200
commit172e812c491680fbb175f56f7604d4098cdc9de4 (patch)
tree9e27ba7be46d58144961148b606328a27deee354
parent218037f874b296eec9452a4195c5f2cef0329d06 (diff)
parent8517d458420fcf9381c81337b3e4f232273082e4 (diff)
downloadotp-172e812c491680fbb175f56f7604d4098cdc9de4.tar.gz
otp-172e812c491680fbb175f56f7604d4098cdc9de4.tar.bz2
otp-172e812c491680fbb175f56f7604d4098cdc9de4.zip
Merge branch 'nox/maps-shell-expansion' into maint
OTP-12063 * nox/maps-shell-expansion: Expand shell functions in map expressions
-rw-r--r--lib/stdlib/src/shell.erl8
-rw-r--r--lib/stdlib/test/shell_SUITE.erl5
2 files changed, 13 insertions, 0 deletions
diff --git a/lib/stdlib/src/shell.erl b/lib/stdlib/src/shell.erl
index 3b90542452..679c13f0cf 100644
--- a/lib/stdlib/src/shell.erl
+++ b/lib/stdlib/src/shell.erl
@@ -371,6 +371,14 @@ expand_expr({bc,L,E,Qs}, C) ->
{bc,L,expand_expr(E, C),expand_quals(Qs, C)};
expand_expr({tuple,L,Elts}, C) ->
{tuple,L,expand_exprs(Elts, C)};
+expand_expr({map,L,Es}, C) ->
+ {map,L,expand_exprs(Es, C)};
+expand_expr({map,L,Arg,Es}, C) ->
+ {map,L,expand_expr(Arg, C),expand_exprs(Es, C)};
+expand_expr({map_field_assoc,L,K,V}, C) ->
+ {map_field_assoc,L,expand_expr(K, C),expand_expr(V, C)};
+expand_expr({map_field_exact,L,K,V}, C) ->
+ {map_field_exact,L,expand_expr(K, C),expand_expr(V, C)};
expand_expr({record_index,L,Name,F}, C) ->
{record_index,L,Name,expand_expr(F, C)};
expand_expr({record,L,Name,Is}, C) ->
diff --git a/lib/stdlib/test/shell_SUITE.erl b/lib/stdlib/test/shell_SUITE.erl
index e016432f4d..f841e2c4a6 100644
--- a/lib/stdlib/test/shell_SUITE.erl
+++ b/lib/stdlib/test/shell_SUITE.erl
@@ -2532,6 +2532,11 @@ otp_6554(Config) when is_list(Config) ->
"\n end.\nok.\n" =
t(<<"begin F = fun() -> foo end, 1 end. B = F(). C = 17. b().">>),
+ ?line "3: command not found" = comm_err(<<"#{v(3) => v}.">>),
+ ?line "3: command not found" = comm_err(<<"#{k => v(3)}.">>),
+ ?line "3: command not found" = comm_err(<<"#{v(3) := v}.">>),
+ ?line "3: command not found" = comm_err(<<"#{k := v(3)}.">>),
+ ?line "3: command not found" = comm_err(<<"(v(3))#{}.">>),
%% Tests I'd like to do: (you should try them manually)
%% "catch spawn_link(fun() -> timer:sleep(1000), exit(foo) end)."
%% "** exception error: foo" should be output after 1 second