From 3e511bbd5af436e1c757ee68f8af409c0e66ed43 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sun, 3 Sep 2017 21:42:01 +0800 Subject: Parse - Fix incorrect pub(in) --- src/parse/root.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/parse/root.cpp b/src/parse/root.cpp index eb009622..406217f2 100644 --- a/src/parse/root.cpp +++ b/src/parse/root.cpp @@ -52,8 +52,22 @@ bool Parse_Publicity(TokenStream& lex, bool allow_restricted=true) if( LOOK_AHEAD(lex) == TOK_RWORD_PUB ) { GET_TOK(tok, lex); - if( allow_restricted && LOOK_AHEAD(lex) == TOK_PAREN_OPEN ) + if( LOOK_AHEAD(lex) == TOK_PAREN_OPEN ) { + // HACK: tuple structs have a parsing ambiguity around `pub (self::Type,)` + if( !allow_restricted ) + { + if( lex.lookahead(1) == TOK_RWORD_IN ) + ; + else if( lex.lookahead(1) == TOK_RWORD_CRATE && lex.lookahead(2) == TOK_PAREN_CLOSE ) + ; + else if( lex.lookahead(1) == TOK_RWORD_SUPER && lex.lookahead(2) == TOK_PAREN_CLOSE ) + ; + else if( lex.lookahead(1) == TOK_RWORD_SELF && lex.lookahead(2) == TOK_PAREN_CLOSE ) + ; + else + return true; + } auto path = AST::Path("", {}); // Restricted publicity. GET_TOK(tok, lex); // '(' @@ -80,7 +94,8 @@ bool Parse_Publicity(TokenStream& lex, bool allow_restricted=true) break; GET_TOK(tok, lex); GET_CHECK_TOK(tok, lex, TOK_IDENT); - case TOK_IDENT: + case TOK_RWORD_IN: + GET_CHECK_TOK(tok, lex, TOK_IDENT); path.nodes().push_back( AST::PathNode(tok.str()) ); while( LOOK_AHEAD(lex) == TOK_DOUBLE_COLON ) { -- cgit v1.2.3