Skip to content

Commit

Permalink
Fix: type aliases cannot be accessed through a namespace in compound …
Browse files Browse the repository at this point in the history
…literals
  • Loading branch information
positively-charged committed May 3, 2017
1 parent 39ce3f4 commit 9af2ba3
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 0 deletions.
10 changes: 10 additions & 0 deletions src/parse/dec.c
Original file line number Diff line number Diff line change
Expand Up @@ -1736,6 +1736,16 @@ bool p_is_paren_type( struct parse* parse ) {
}
}
break;
case TK_ID:
case TK_UPMOST:
case TK_NAMESPACE:
{
struct parsertk_iter iter;
p_init_parsertk_iter( parse, &iter );
p_next_tk( parse, &iter );
return p_peek_type_path_from_iter( parse, &iter );
}
break;
default:
break;
}
Expand Down
29 changes: 29 additions & 0 deletions src/parse/library.c
Original file line number Diff line number Diff line change
Expand Up @@ -490,6 +490,35 @@ bool p_peek_type_path( struct parse* parse ) {
}
}

bool p_peek_type_path_from_iter( struct parse* parse,
struct parsertk_iter* iter ) {
if ( iter->token->type == TK_TYPENAME ) {
return true;
}
else if (
iter->token->type == TK_ID ||
iter->token->type == TK_UPMOST ||
iter->token->type == TK_NAMESPACE ) {
p_next_tk( parse, iter );
while ( iter->token->type == TK_DOT ) {
p_next_tk( parse, iter );
if ( iter->token->type == TK_TYPENAME ) {
return true;
}
else if ( iter->token->type == TK_ID ) {
p_next_tk( parse, iter );
}
else {
break;
}
}
return false;
}
else {
return false;
}
}

struct path* p_read_type_path( struct parse* parse ) {
if ( parse->tk == TK_TYPENAME ) {
struct path* path = alloc_path( parse->tk_pos );
Expand Down
2 changes: 2 additions & 0 deletions src/parse/phase.h
Original file line number Diff line number Diff line change
Expand Up @@ -554,5 +554,7 @@ void p_init_paren_reading( struct parse* parse,
struct paren_reading* reading );
void p_read_paren_type( struct parse* parse, struct paren_reading* reading );
void p_add_altern_file_name( struct parse* parse, const char* name, int line );
bool p_peek_type_path_from_iter( struct parse* parse,
struct parsertk_iter* iter );

#endif

0 comments on commit 9af2ba3

Please sign in to comment.