From d1ea840742dac3d3af66667508c8a841a6c6ca70 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Mon, 21 Jan 2019 08:16:22 +0800 Subject: Parse (partial) - `extern { type Foo; }`, very rough --- src/parse/root.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'src/parse/root.cpp') 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 { 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 { 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}); } } -- cgit v1.2.3