From 81e442958526671f894a97c83aaae6ba982a6cc0 Mon Sep 17 00:00:00 2001 From: Gaith Hallak Date: Thu, 19 Aug 2021 17:09:21 +0300 Subject: [PATCH] Add using namespace parts to scanner and parser --- src/aeso_parser.erl | 17 ++++++++++++----- src/aeso_scan.erl | 2 +- src/aeso_syntax.erl | 3 ++- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/aeso_parser.erl b/src/aeso_parser.erl index b5fd8b9..80002ca 100644 --- a/src/aeso_parser.erl +++ b/src/aeso_parser.erl @@ -137,12 +137,19 @@ fundef_or_decl() -> fundef()]). using() -> - ?RULE(keyword(using), con(), optional({keyword(as), con()}), using(get_ann(_1), _2, _3)). + Alias = {keyword(as), con()}, + For = ?RULE(keyword(for), bracket_list(id()), {for, _2}), + Hiding = ?RULE(keyword(hiding), bracket_list(id()), {hiding, _2}), + ?RULE(keyword(using), con(), optional(Alias), optional(choice(For, Hiding)), using(get_ann(_1), _2, _3, _4)). -using(Ann, Con, none) -> - {using, Ann, Con, none}; -using(Ann, Con, {ok, {_, Alias}}) -> - {using, Ann, Con, Alias}. +using(Ann, Con, none, none) -> + {using, Ann, Con, none, none}; +using(Ann, Con, {ok, {_, Alias}}, none) -> + {using, Ann, Con, Alias, none}; +using(Ann, Con, none, {ok, List}) -> + {using, Ann, Con, none, List}; +using(Ann, Con, {ok, {_, Alias}}, {ok, List}) -> + {using, Ann, Con, Alias, List}. pragma() -> Op = choice([token(T) || T <- ['<', '=<', '==', '>=', '>']]), diff --git a/src/aeso_scan.erl b/src/aeso_scan.erl index ec47e4f..4587efa 100644 --- a/src/aeso_scan.erl +++ b/src/aeso_scan.erl @@ -45,7 +45,7 @@ lexer() -> Keywords = ["contract", "include", "let", "switch", "type", "record", "datatype", "if", "elif", "else", "function", "stateful", "payable", "true", "false", "mod", "public", "entrypoint", "private", "indexed", "namespace", - "interface", "main", "using", "as" + "interface", "main", "using", "as", "for", "hiding" ], KW = string:join(Keywords, "|"), diff --git a/src/aeso_syntax.erl b/src/aeso_syntax.erl index 5fb02bb..8148a1a 100644 --- a/src/aeso_syntax.erl +++ b/src/aeso_syntax.erl @@ -36,6 +36,7 @@ -type tvar() :: {tvar, ann(), name()}. -type namespace_alias() :: none | con(). +-type namespace_parts() :: none | {for, [id()]} | {hiding, [id()]}. -type decl() :: {contract_main, ann(), con(), [decl()]} | {contract_child, ann(), con(), [decl()]} @@ -46,7 +47,7 @@ | {type_def, ann(), id(), [tvar()], typedef()} | {fun_clauses, ann(), id(), type(), [letfun() | fundecl()]} | {block, ann(), [decl()]} - | {using, ann(), con(), namespace_alias()} + | {using, ann(), con(), namespace_alias(), namespace_parts()} | fundecl() | letfun() | letval(). % Only for error msgs