diff options
author | John Hodge <tpg@mutabah.net> | 2016-11-26 13:14:59 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-11-26 13:14:59 +0800 |
commit | bd83f011a8fddb5f21433584a55c2bc2f5f3983c (patch) | |
tree | b5cb43b9559d3425d4935e3b5f18fd1230750ad5 /src/expand/rustc_diagnostics.cpp | |
parent | 2fc13a07c606005ab9e89ba85cd347e622a76a15 (diff) | |
download | mrust-bd83f011a8fddb5f21433584a55c2bc2f5f3983c.tar.gz |
Expand - Emit rustc diagnostics arrays (empty)
Diffstat (limited to 'src/expand/rustc_diagnostics.cpp')
-rw-r--r-- | src/expand/rustc_diagnostics.cpp | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/src/expand/rustc_diagnostics.cpp b/src/expand/rustc_diagnostics.cpp index 2deaa9a3..917a5e4d 100644 --- a/src/expand/rustc_diagnostics.cpp +++ b/src/expand/rustc_diagnostics.cpp @@ -6,6 +6,7 @@ * - Stubbed handling for __register_diagnostic and __diagnostic_used */ #include <synext.hpp> +#include <parse/parseerror.hpp> // For GET_CHECK_TOK #include <parse/common.hpp> // TokenTree etc #include <parse/ttstream.hpp> @@ -30,7 +31,40 @@ class CExpanderBuildDiagnosticArray: { ::std::unique_ptr<TokenStream> expand(const Span& sp, const AST::Crate& crate, const ::std::string& ident, const TokenTree& tt, AST::Module& mod) override { - return box$( TTStreamO(TokenTree()) ); + if( ident != "" ) + ERROR(sp, E0000, "__build_diagnostic_array! doesn't take an ident"); + auto lex = TTStream(tt); + + Token tok; + + GET_CHECK_TOK(tok, lex, TOK_IDENT); + //auto crate_name = mv$(tok.str()); + GET_CHECK_TOK(tok, lex, TOK_COMMA); + GET_CHECK_TOK(tok, lex, TOK_IDENT); + auto item_name = mv$(tok.str()); + GET_CHECK_TOK(tok, lex, TOK_EOF); + + ::std::vector<TokenTree> toks; + toks.push_back( TOK_RWORD_STATIC ); + toks.push_back( Token(TOK_IDENT, item_name) ); + // : [(&'static str, &'static str); 0] + toks.push_back( TOK_COLON ); + toks.push_back( TOK_SQUARE_OPEN ); + toks.push_back( TOK_PAREN_OPEN ); + toks.push_back( TOK_AMP ); toks.push_back( Token(TOK_LIFETIME, "static") ); toks.push_back( Token(TOK_IDENT, "str") ); + toks.push_back( TOK_COMMA ); + toks.push_back( TOK_AMP ); toks.push_back( Token(TOK_LIFETIME, "static") ); toks.push_back( Token(TOK_IDENT, "str") ); + toks.push_back( TOK_PAREN_CLOSE ); + toks.push_back( TOK_SEMICOLON ); + toks.push_back( Token(static_cast<uint64_t>(0), CORETYPE_UINT) ); + toks.push_back( TOK_SQUARE_CLOSE ); + // = []; + toks.push_back( TOK_EQUAL ); + toks.push_back( TOK_SQUARE_OPEN ); + toks.push_back( TOK_SQUARE_CLOSE ); + toks.push_back( TOK_SEMICOLON ); + + return box$( TTStreamO(TokenTree( lex.getHygiene(), mv$(toks) )) ); } }; |