summaryrefslogtreecommitdiff
path: root/src/parse
diff options
context:
space:
mode:
Diffstat (limited to 'src/parse')
-rw-r--r--src/parse/common.hpp4
-rw-r--r--src/parse/expr.cpp10
-rw-r--r--src/parse/root.cpp25
3 files changed, 14 insertions, 25 deletions
diff --git a/src/parse/common.hpp b/src/parse/common.hpp
index ed052a33..57d11bf6 100644
--- a/src/parse/common.hpp
+++ b/src/parse/common.hpp
@@ -51,8 +51,8 @@ extern void Parse_Impl(TokenStream& lex, AST::Module& mod, AST::MetaItems attrs,
extern MacroRules Parse_MacroRules(TokenStream& lex);
extern void Parse_ExternCrate(TokenStream& lex, AST::Module& mod, AST::MetaItems meta_items);
-extern void Parse_Mod_Item(TokenStream& lex, LList<AST::Module*>& modstack, bool file_controls_dir, const ::std::string& file_path, AST::Module& mod, bool is_public, AST::MetaItems meta_items);
-extern void Parse_ModRoot_Items(TokenStream& lex, AST::Module& mod, LList<AST::Module*>& modstack, bool file_controls_dir, const ::std::string& path);
+extern void Parse_Mod_Item(TokenStream& lex, bool file_controls_dir, const ::std::string& file_path, AST::Module& mod, bool is_public, AST::MetaItems meta_items);
+extern void Parse_ModRoot_Items(TokenStream& lex, AST::Module& mod, bool file_controls_dir, const ::std::string& path);
extern AST::Function Parse_FunctionDef(TokenStream& lex, ::std::string abi, AST::MetaItems attrs, bool allow_self, bool can_be_prototype);
diff --git a/src/parse/expr.cpp b/src/parse/expr.cpp
index 11818a45..b1cc25ce 100644
--- a/src/parse/expr.cpp
+++ b/src/parse/expr.cpp
@@ -56,11 +56,6 @@ ExprNodeP Parse_ExprBlockNode(TokenStream& lex)
::std::unique_ptr<AST::Module> local_mod( new AST::Module("") );
bool keep_mod = false;
- const LList<AST::Module*>* prev_modstack = Macro_GetModule();
- LList<AST::Module*> modstack(prev_modstack, local_mod.get());
- Macro_SetModule(modstack);
-
-
GET_CHECK_TOK(tok, lex, TOK_BRACE_OPEN);
while( GET_TOK(tok, lex) != TOK_BRACE_CLOSE )
@@ -95,7 +90,7 @@ ExprNodeP Parse_ExprBlockNode(TokenStream& lex)
case TOK_RWORD_MOD:
lex.putback(tok);
keep_mod = true;
- Parse_Mod_Item(lex, modstack, false,"!", *local_mod, false, mv$(item_attrs));
+ Parse_Mod_Item(lex, false,"!", *local_mod, false, mv$(item_attrs));
break;
// 'unsafe' - Check if the next token isn't a `{`, if so it's an item. Otherwise, fall through
case TOK_RWORD_UNSAFE:
@@ -103,7 +98,7 @@ ExprNodeP Parse_ExprBlockNode(TokenStream& lex)
{
lex.putback(tok);
keep_mod = true;
- Parse_Mod_Item(lex, modstack, false,"!", *local_mod, false, mv$(item_attrs));
+ Parse_Mod_Item(lex, false,"!", *local_mod, false, mv$(item_attrs));
break;
}
// fall
@@ -132,7 +127,6 @@ ExprNodeP Parse_ExprBlockNode(TokenStream& lex)
}
}
- Macro_SetModule( *prev_modstack );
if( !keep_mod ) {
local_mod.reset();
}
diff --git a/src/parse/root.cpp b/src/parse/root.cpp
index 0860a008..1ba68aca 100644
--- a/src/parse/root.cpp
+++ b/src/parse/root.cpp
@@ -24,7 +24,7 @@
}
AST::MetaItem Parse_MetaItem(TokenStream& lex);
-void Parse_ModRoot(TokenStream& lex, AST::Module& mod, AST::MetaItems& mod_attrs, LList<AST::Module*> *prev_modstack, bool file_controls_dir, const ::std::string& path);
+void Parse_ModRoot(TokenStream& lex, AST::Module& mod, AST::MetaItems& mod_attrs, bool file_controls_dir, const ::std::string& path);
::std::vector< ::std::string> Parse_HRB(TokenStream& lex)
{
@@ -1269,7 +1269,7 @@ void Parse_ExternCrate(TokenStream& lex, AST::Module& mod, AST::MetaItems meta_i
//}
}
-void Parse_Mod_Item(TokenStream& lex, LList<AST::Module*>& modstack, bool file_controls_dir, const ::std::string& file_path, AST::Module& mod, bool is_public, AST::MetaItems meta_items)
+void Parse_Mod_Item(TokenStream& lex, bool file_controls_dir, const ::std::string& file_path, AST::Module& mod, bool is_public, AST::MetaItems meta_items)
{
//TRACE_FUNCTION;
Token tok;
@@ -1514,7 +1514,7 @@ void Parse_Mod_Item(TokenStream& lex, LList<AST::Module*>& modstack, bool file_c
switch( GET_TOK(tok, lex) )
{
case TOK_BRACE_OPEN: {
- Parse_ModRoot(lex, submod, meta_items, &modstack, sub_file_controls_dir, sub_path+"/");
+ Parse_ModRoot(lex, submod, meta_items, sub_file_controls_dir, sub_path+"/");
GET_CHECK_TOK(tok, lex, TOK_BRACE_CLOSE);
break; }
case TOK_SEMICOLON:
@@ -1540,14 +1540,14 @@ void Parse_Mod_Item(TokenStream& lex, LList<AST::Module*>& modstack, bool file_c
{
// Load from dir
Lexer sub_lex(newpath_dir + "mod.rs");
- Parse_ModRoot(sub_lex, submod, meta_items, &modstack, sub_file_controls_dir, newpath_dir);
+ Parse_ModRoot(sub_lex, submod, meta_items, sub_file_controls_dir, newpath_dir);
GET_CHECK_TOK(tok, sub_lex, TOK_EOF);
}
else if( ifs_file.is_open() )
{
// Load from file
Lexer sub_lex(newpath_file);
- Parse_ModRoot(sub_lex, submod, meta_items, &modstack, sub_file_controls_dir, newpath_file);
+ Parse_ModRoot(sub_lex, submod, meta_items, sub_file_controls_dir, newpath_file);
GET_CHECK_TOK(tok, sub_lex, TOK_EOF);
}
else
@@ -1562,7 +1562,6 @@ void Parse_Mod_Item(TokenStream& lex, LList<AST::Module*>& modstack, bool file_c
}
submod.prescan();
mod.add_submod(is_public, ::std::move(submod), mv$(meta_items));
- Macro_SetModule(modstack);
break; }
default:
@@ -1570,7 +1569,7 @@ void Parse_Mod_Item(TokenStream& lex, LList<AST::Module*>& modstack, bool file_c
}
}
-void Parse_ModRoot_Items(TokenStream& lex, AST::Module& mod, LList<AST::Module*>& modstack, bool file_controls_dir, const ::std::string& path)
+void Parse_ModRoot_Items(TokenStream& lex, AST::Module& mod, bool file_controls_dir, const ::std::string& path)
{
Token tok;
@@ -1623,15 +1622,13 @@ void Parse_ModRoot_Items(TokenStream& lex, AST::Module& mod, LList<AST::Module*>
lex.putback(tok);
}
- Parse_Mod_Item(lex, modstack, file_controls_dir,path, mod, is_public, mv$(meta_items));
+ Parse_Mod_Item(lex, file_controls_dir,path, mod, is_public, mv$(meta_items));
}
}
-void Parse_ModRoot(TokenStream& lex, AST::Module& mod, AST::MetaItems& mod_attrs, LList<AST::Module*> *prev_modstack, bool file_controls_dir, const ::std::string& path)
+void Parse_ModRoot(TokenStream& lex, AST::Module& mod, AST::MetaItems& mod_attrs, bool file_controls_dir, const ::std::string& path)
{
TRACE_FUNCTION;
- LList<AST::Module*> modstack(prev_modstack, &mod);
- Macro_SetModule(modstack);
Token tok;
@@ -1645,9 +1642,7 @@ void Parse_ModRoot(TokenStream& lex, AST::Module& mod, AST::MetaItems& mod_attrs
}
lex.putback(tok);
- // TODO: Iterate attributes, and check for handlers on each
-
- Parse_ModRoot_Items(lex, mod, modstack, file_controls_dir, path);
+ Parse_ModRoot_Items(lex, mod, file_controls_dir, path);
}
AST::Crate Parse_Crate(::std::string mainfile)
@@ -1661,7 +1656,7 @@ AST::Crate Parse_Crate(::std::string mainfile)
AST::Crate crate;
- Parse_ModRoot(lex, crate.root_module(), crate.m_attrs, NULL, true, mainpath);
+ Parse_ModRoot(lex, crate.root_module(), crate.m_attrs, true, mainpath);
return crate;
}