From 7705138ab2156a98f26d1cb163782ad19ce0a192 Mon Sep 17 00:00:00 2001 From: Ulf Norell Date: Tue, 27 Aug 2019 13:59:36 +0200 Subject: [PATCH] auto-import ListInternal when using list comprehensions or [a..b] --- src/aeso_parser.erl | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/aeso_parser.erl b/src/aeso_parser.erl index 191369c..f0f2078 100644 --- a/src/aeso_parser.erl +++ b/src/aeso_parser.erl @@ -551,7 +551,10 @@ bad_expr_err(Reason, E) -> %% -- Helper functions ------------------------------------------------------- expand_includes(AST, Included, Opts) -> - expand_includes(AST, Included, [], Opts). + Ann = [{origin, system}], + AST1 = [ {include, Ann, {string, Ann, File}} + || File <- lists:usort(auto_imports(AST)) ] ++ AST, + expand_includes(AST1, Included, [], Opts). expand_includes([], _Included, Acc, _Opts) -> {ok, lists:reverse(Acc)}; @@ -611,3 +614,11 @@ hash_include(File, Code) when is_binary(File) -> hash_include(binary_to_list(File), Code); hash_include(File, Code) when is_list(File) -> {filename:basename(File), crypto:hash(sha256, Code)}. + +auto_imports({comprehension_bind, _, _}) -> [<<"ListInternal.aes">>]; +auto_imports({'..', _}) -> [<<"ListInternal.aes">>]; +auto_imports(L) when is_list(L) -> + lists:flatmap(fun auto_imports/1, L); +auto_imports(T) when is_tuple(T) -> + auto_imports(tuple_to_list(T)); +auto_imports(_) -> [].