diff options
| author | John Hodge <tpg@mutabah.net> | 2016-09-28 10:35:32 +0800 |
|---|---|---|
| committer | John Hodge <tpg@mutabah.net> | 2016-09-28 10:35:32 +0800 |
| commit | e7bae8f3f2188c6b04e4f4d62e898275f072a6e3 (patch) | |
| tree | d3bb27250ec99c65389da6a0852bf4fe3e2395c0 /src/parse | |
| parent | 9ba41a54e44ae2f107a8646364353b06a7776bb5 (diff) | |
| download | mrust-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.hpp | 2 | ||||
| -rw-r--r-- | src/parse/expr.cpp | 6 | ||||
| -rw-r--r-- | src/parse/root.cpp | 1 |
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; }
|
