summaryrefslogtreecommitdiff
path: root/src/parse
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-09-28 10:35:32 +0800
committerJohn Hodge <tpg@mutabah.net>2016-09-28 10:35:32 +0800
commite7bae8f3f2188c6b04e4f4d62e898275f072a6e3 (patch)
treed3bb27250ec99c65389da6a0852bf4fe3e2395c0 /src/parse
parent9ba41a54e44ae2f107a8646364353b06a7776bb5 (diff)
downloadmrust-e7bae8f3f2188c6b04e4f4d62e898275f072a6e3.tar.gz
AST - Make anon modules `shared_ptr`s to handle case where a block is depeted
Diffstat (limited to 'src/parse')
-rw-r--r--src/parse/common.hpp2
-rw-r--r--src/parse/expr.cpp6
-rw-r--r--src/parse/root.cpp1
3 files changed, 4 insertions, 5 deletions
diff --git a/src/parse/common.hpp b/src/parse/common.hpp
index c883c493..54f9eb16 100644
--- a/src/parse/common.hpp
+++ b/src/parse/common.hpp
@@ -56,7 +56,7 @@ extern AST::ExprNodeP Parse_Expr0(TokenStream& lex);
extern AST::ExprNodeP Parse_ExprVal(TokenStream& lex);
extern AST::ExprNodeP Parse_ExprBlockNode(TokenStream& lex, bool is_unsafe=false);
extern AST::ExprNodeP Parse_ExprBlockLine(TokenStream& lex, bool *add_silence);
-extern AST::ExprNodeP Parse_ExprBlockLine_WithItems(TokenStream& lex, ::std::unique_ptr<AST::Module>& local_mod, bool& add_silence_if_end);
+extern AST::ExprNodeP Parse_ExprBlockLine_WithItems(TokenStream& lex, ::std::shared_ptr<AST::Module>& local_mod, bool& add_silence_if_end);
extern AST::ExprNodeP Parse_Stmt(TokenStream& lex);
diff --git a/src/parse/expr.cpp b/src/parse/expr.cpp
index 774d7acc..a01bc26b 100644
--- a/src/parse/expr.cpp
+++ b/src/parse/expr.cpp
@@ -24,7 +24,7 @@ static inline ExprNodeP mk_exprnodep(const TokenStream& lex, AST::ExprNode* en){
#define NEWNODE(type, ...) mk_exprnodep(lex, new type(__VA_ARGS__))
//ExprNodeP Parse_ExprBlockNode(TokenStream& lex, bool is_unsafe=false); // common.hpp
-//ExprNodeP Parse_ExprBlockLine_WithItems(TokenStream& lex, ::std::unique_ptr<AST::Module>& local_mod, bool& add_silence_if_end);
+//ExprNodeP Parse_ExprBlockLine_WithItems(TokenStream& lex, ::std::shared_ptr<AST::Module>& local_mod, bool& add_silence_if_end);
//ExprNodeP Parse_ExprBlockLine(TokenStream& lex, bool *add_silence);
ExprNodeP Parse_ExprBlockLine_Stmt(TokenStream& lex, bool *add_silence);
//ExprNodeP Parse_Stmt(TokenStream& lex); // common.hpp
@@ -55,7 +55,7 @@ ExprNodeP Parse_ExprBlockNode(TokenStream& lex, bool is_unsafe/*=false*/)
bool yields_final_value = true;
::std::vector<ExprNodeP> nodes;
- ::std::unique_ptr<AST::Module> local_mod;
+ ::std::shared_ptr<AST::Module> local_mod;
GET_CHECK_TOK(tok, lex, TOK_BRACE_OPEN);
@@ -97,7 +97,7 @@ ExprNodeP Parse_ExprBlockNode(TokenStream& lex, bool is_unsafe/*=false*/)
/// Parse a single line in a block, handling items added to the local module
///
/// - If an item was parsed, this returns an empty ExprNodeP
-ExprNodeP Parse_ExprBlockLine_WithItems(TokenStream& lex, ::std::unique_ptr<AST::Module>& local_mod, bool& add_silence_if_end)
+ExprNodeP Parse_ExprBlockLine_WithItems(TokenStream& lex, ::std::shared_ptr<AST::Module>& local_mod, bool& add_silence_if_end)
{
Token tok;
diff --git a/src/parse/root.cpp b/src/parse/root.cpp
index ff792788..2e776332 100644
--- a/src/parse/root.cpp
+++ b/src/parse/root.cpp
@@ -1657,7 +1657,6 @@ void Parse_Use(TokenStream& lex, ::std::function<void(AST::UseStmt, ::std::strin
default:
throw ParseError::Generic("Expected { or ; after module name");
}
- submod.prescan();
item_name = mv$(name);
item_data = ::AST::Item( mv$(submod) );
break; }