| ... | @@ -2750,12 +2750,19 @@ static AstNode *ast_parse_container_decl_auto(ParseContext *pc) { | ... | @@ -2750,12 +2750,19 @@ static AstNode *ast_parse_container_decl_auto(ParseContext *pc) { |
| 2750 | } | 2750 | } |
| 2751 | | 2751 | |
| 2752 | // ContainerDeclType | 2752 | // ContainerDeclType |
| 2753 | // <- (KEYWORD_struct / KEYWORD_enum) (LPAREN Expr RPAREN)? | 2753 | // <- KEYWORD_struct |
| | 2754 | // / KEYWORD_enum (LPAREN Expr RPAREN)? |
| 2754 | // / KEYWORD_union (LPAREN (KEYWORD_enum (LPAREN Expr RPAREN)? / Expr) RPAREN)? | 2755 | // / KEYWORD_union (LPAREN (KEYWORD_enum (LPAREN Expr RPAREN)? / Expr) RPAREN)? |
| 2755 | static AstNode *ast_parse_container_decl_type(ParseContext *pc) { | 2756 | static AstNode *ast_parse_container_decl_type(ParseContext *pc) { |
| 2756 | Token *first = eat_token_if(pc, TokenIdKeywordStruct); | 2757 | Token *first = eat_token_if(pc, TokenIdKeywordStruct); |
| 2757 | if (first == nullptr) | 2758 | if (first != nullptr) { |
| 2758 | first = eat_token_if(pc, TokenIdKeywordEnum); | 2759 | AstNode *res = ast_create_node(pc, NodeTypeContainerDecl, first); |
| | 2760 | res->data.container_decl.init_arg_expr = nullptr; |
| | 2761 | res->data.container_decl.kind = ContainerKindStruct; |
| | 2762 | return res; |
| | 2763 | } |
| | 2764 | |
| | 2765 | first = eat_token_if(pc, TokenIdKeywordEnum); |
| 2759 | if (first != nullptr) { | 2766 | if (first != nullptr) { |
| 2760 | AstNode *init_arg_expr = nullptr; | 2767 | AstNode *init_arg_expr = nullptr; |
| 2761 | if (eat_token_if(pc, TokenIdLParen) != nullptr) { | 2768 | if (eat_token_if(pc, TokenIdLParen) != nullptr) { |
| ... | @@ -2764,9 +2771,7 @@ static AstNode *ast_parse_container_decl_type(ParseContext *pc) { | ... | @@ -2764,9 +2771,7 @@ static AstNode *ast_parse_container_decl_type(ParseContext *pc) { |
| 2764 | } | 2771 | } |
| 2765 | AstNode *res = ast_create_node(pc, NodeTypeContainerDecl, first); | 2772 | AstNode *res = ast_create_node(pc, NodeTypeContainerDecl, first); |
| 2766 | res->data.container_decl.init_arg_expr = init_arg_expr; | 2773 | res->data.container_decl.init_arg_expr = init_arg_expr; |
| 2767 | res->data.container_decl.kind = first->id == TokenIdKeywordStruct | 2774 | res->data.container_decl.kind = ContainerKindEnum; |
| 2768 | ? ContainerKindStruct | | |
| 2769 | : ContainerKindEnum; | | |
| 2770 | return res; | 2775 | return res; |
| 2771 | } | 2776 | } |
| 2772 | | 2777 | |