diff options
author | John Hodge <tpg@ucc.asn.au> | 2019-01-21 08:16:22 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2019-01-21 08:16:22 +0800 |
commit | d1ea840742dac3d3af66667508c8a841a6c6ca70 (patch) | |
tree | 55ab13c70683ec4ae1f15cdbc644ded1e29994ca /src/parse/root.cpp | |
parent | 048666d6415bf8dfff11ddbf287fc488833ab609 (diff) | |
download | mrust-d1ea840742dac3d3af66667508c8a841a6c6ca70.tar.gz |
Parse (partial) - `extern { type Foo; }`, very rough
Diffstat (limited to 'src/parse/root.cpp')
-rw-r--r-- | src/parse/root.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/parse/root.cpp b/src/parse/root.cpp index 4d9c96e0..a58e05d5 100644 --- a/src/parse/root.cpp +++ b/src/parse/root.cpp @@ -1325,8 +1325,19 @@ AST::ExternBlock Parse_ExternBlock(TokenStream& lex, ::std::string abi, ::AST::A i.span = lex.end_span(ps); rv.add_item( AST::Named<AST::Item> { mv$(name), mv$(i), is_public } ); break; } + case TOK_RWORD_TYPE: { + GET_CHECK_TOK(tok, lex, TOK_IDENT); + auto name = mv$(tok.str()); + GET_CHECK_TOK(tok, lex, TOK_SEMICOLON); + auto sp = lex.end_span(ps); + //TODO(sp, "Extern type"); + auto i = ::AST::Item(::AST::TypeAlias( ::AST::GenericParams(), ::TypeRef(sp) )); + i.attrs = mv$(meta_items); + i.span = mv$(sp); + rv.add_item( AST::Named<AST::Item> { mv$(name), mv$(i), is_public } ); + break; } default: - throw ParseError::Unexpected(lex, tok, {TOK_RWORD_FN, TOK_RWORD_STATIC}); + throw ParseError::Unexpected(lex, tok, {TOK_RWORD_FN, TOK_RWORD_STATIC, TOK_RWORD_TYPE}); } } |