summaryrefslogtreecommitdiff
path: root/src/ast/ast.hpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-09-27 15:58:17 +0800
committerJohn Hodge <tpg@mutabah.net>2016-09-27 15:58:17 +0800
commit7ecb789e0c19e636652866ba08328ba413afe302 (patch)
tree6c206108cf9029faa9b2354210d1048fdd1aabf0 /src/ast/ast.hpp
parent5fbfd267b54e243ebe2ad3820d75359d7ed95988 (diff)
downloadmrust-7ecb789e0c19e636652866ba08328ba413afe302.tar.gz
AST - Stub out extern and impl blocks as Item-s
Diffstat (limited to 'src/ast/ast.hpp')
-rw-r--r--src/ast/ast.hpp27
1 files changed, 26 insertions, 1 deletions
diff --git a/src/ast/ast.hpp b/src/ast/ast.hpp
index 1b5a04d0..3f43e32a 100644
--- a/src/ast/ast.hpp
+++ b/src/ast/ast.hpp
@@ -452,6 +452,26 @@ struct UseStmt
friend ::std::ostream& operator<<(::std::ostream& os, const UseStmt& x);
};
+class ExternBlock
+{
+ ::std::string m_abi;
+ ::std::vector< Named<Item>> m_items;
+public:
+ ExternBlock(::std::string abi):
+ m_abi( mv$(abi) )
+ {}
+
+ const ::std::string& abi() const { return m_abi; }
+
+ void add_fcn(Named<Item> named_item);
+
+ // NOTE: Only Function and Static are valid.
+ ::std::vector<Named<Item>>& items() { return m_items; }
+ const ::std::vector<Named<Item>>& items() const { return m_items; }
+
+ ExternBlock clone() const;
+};
+
/// Representation of a parsed (and being converted) function
class Module
{
@@ -564,12 +584,17 @@ private:
void resolve_macro_import(const Crate& crate, const ::std::string& modname, const ::std::string& macro_name);
};
-
TAGGED_UNION_EX(Item, (), None,
(
(None, struct {} ),
(MacroInv, MacroInvocation),
(Use, UseStmt),
+
+ // Nameless items
+ (ExternBlock, ExternBlock),
+ (Impl, Impl),
+ (NegImpl, ImplDef),
+
(Module, Module),
(Crate, struct {
::std::string name;