summaryrefslogtreecommitdiff
path: root/src/include/synext.hpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-06-08 12:37:51 +0800
committerJohn Hodge <tpg@mutabah.net>2016-06-08 12:37:51 +0800
commit40071822728499b9028400ddac3cd32fb884b2a0 (patch)
treebeabbf632622601b307beb8308f1098e9da91a15 /src/include/synext.hpp
parentd91e9415d3a3cd4c9cc5bfcee548d6b3b98867f5 (diff)
downloadmrust-40071822728499b9028400ddac3cd32fb884b2a0.tar.gz
Expand format_args! - Parse and (partially) emit
Diffstat (limited to 'src/include/synext.hpp')
-rw-r--r--src/include/synext.hpp90
1 files changed, 3 insertions, 87 deletions
diff --git a/src/include/synext.hpp b/src/include/synext.hpp
index ae1c14f6..76b41996 100644
--- a/src/include/synext.hpp
+++ b/src/include/synext.hpp
@@ -4,93 +4,9 @@
#ifndef _SYNEXT_HPP_
#define _SYNEXT_HPP_
-#include "../ast/item.hpp"
-#include <span.hpp>
-
-class TypeRef;
-namespace AST {
- class Crate;
- class MetaItem;
- class Path;
-
- struct StructItem;
- struct TupleItem;
- struct EnumVariant;
-
- class Module;
- class Item;
-
- class Expr;
- class ExprNode;
- struct ExprNode_Match_Arm;
-
- class MacroInvocation;
-
- class ImplDef;
-}
-class TokenTree;
-class TokenStream;
-
-
-#include "../common.hpp" // for mv$ and other things
-#include <string>
-#include <memory>
-
-enum class AttrStage
-{
- EarlyPre,
- EarlyPost,
- LatePre,
- LatePost,
-};
-
-class ExpandDecorator
-{
- void unexpected(const Span& sp, const AST::MetaItem& mi, const char* loc_str) const;
-public:
- virtual AttrStage stage() const = 0;
-
- virtual void handle(const Span& sp, const AST::MetaItem& mi, AST::Crate& crate) const { unexpected(sp, mi, "crate"); }
- virtual void handle(const Span& sp, const AST::MetaItem& mi, AST::Crate& crate, AST::MacroInvocation& mac) const { unexpected(sp, mi, "macro invocation"); }
- virtual void handle(const Span& sp, const AST::MetaItem& mi, AST::Crate& crate, const AST::Path& path, AST::Module& mod, AST::Item&i) const { unexpected(sp, mi, "item"); }
- // NOTE: To delete, set the type to `_`
- virtual void handle(const Span& sp, const AST::MetaItem& mi, AST::Crate& crate, const AST::Module& mod, AST::ImplDef& impl) const { unexpected(sp, mi, "impl"); }
- // NOTE: To delete, clear the name
- virtual void handle(const Span& sp, const AST::MetaItem& mi, AST::Crate& crate, ::AST::StructItem& si) const { unexpected(sp, mi, "struct item"); }
- // NOTE: To delete, make the type invalid
- virtual void handle(const Span& sp, const AST::MetaItem& mi, AST::Crate& crate, ::AST::TupleItem& si) const { unexpected(sp, mi, "tuple item"); }
- // NOTE: To delete, clear the name
- virtual void handle(const Span& sp, const AST::MetaItem& mi, AST::Crate& crate, ::AST::EnumVariant& ev) const { unexpected(sp, mi, "enum variant"); }
-
- virtual void handle(const Span& sp, const AST::MetaItem& mi, AST::Crate& crate, ::std::unique_ptr<AST::ExprNode>& expr) const { unexpected(sp, mi, "expression"); }
- // NOTE: To delete, clear the patterns vector
- virtual void handle(const Span& sp, const AST::MetaItem& mi, AST::Crate& crate, ::AST::ExprNode_Match_Arm& expr) const { unexpected(sp, mi, "match arm"); }
-};
-
-class ExpandProcMacro
-{
-public:
- virtual bool expand_early() const = 0;
-
- virtual ::std::unique_ptr<TokenStream> expand(const Span& sp, const AST::Crate& crate, const ::std::string& ident, const TokenTree& tt, AST::Module& mod) = 0;
-};
-
-#define STATIC_DECORATOR(ident, _handler_class) \
- struct register_##_handler_class##_c {\
- register_##_handler_class##_c() {\
- Register_Synext_Decorator( ident, ::std::unique_ptr<ExpandDecorator>(new _handler_class()) ); \
- } \
- } s_register_##_handler_class;
-#define STATIC_MACRO(ident, _handler_class) \
- struct register_##_handler_class##_c {\
- register_##_handler_class##_c() {\
- Register_Synext_Macro( ident, ::std::unique_ptr<ExpandProcMacro>(new _handler_class()) ); \
- } \
- } s_register_##_handler_class;
-
-extern void Register_Synext_Decorator(::std::string name, ::std::unique_ptr<ExpandDecorator> handler);
-extern void Register_Synext_Macro(::std::string name, ::std::unique_ptr<ExpandProcMacro> handler);
-
+#include "../common.hpp" // for LList
+#include "synext_decorator.hpp"
+#include "synext_macro.hpp"
extern void Expand_Expr(bool is_early, ::AST::Crate& crate, LList<const AST::Module*> modstack, ::std::unique_ptr<AST::ExprNode>& node);