浏览代码

Replace the NodeKind StructFieldUnknown with InvalidParse. (#3482)

StructFieldUnknown was used previously for invalid parses. But we have
added other, more common ways of talking about those; so this is
removing the special-case.
Jon Ross-Perkins 2 年之前
父节点
当前提交
6cc5dc7736

+ 0 - 5
toolchain/check/handle_struct.cpp

@@ -30,11 +30,6 @@ auto HandleStructFieldType(Context& context, Parse::NodeId parse_node) -> bool {
   return true;
 }
 
-auto HandleStructFieldUnknown(Context& context, Parse::NodeId parse_node)
-    -> bool {
-  return context.TODO(parse_node, "HandleStructFieldUnknown");
-}
-
 auto HandleStructFieldValue(Context& context, Parse::NodeId parse_node)
     -> bool {
   auto value_inst_id = context.node_stack().PopExpr();

+ 2 - 2
toolchain/parse/handle_brace_expr.cpp

@@ -147,7 +147,7 @@ static auto HandleBraceExprParamFinish(Context& context, NodeKind node_kind,
   auto state = context.PopState();
 
   if (state.has_error) {
-    context.AddLeafNode(NodeKind::StructFieldUnknown, state.token,
+    context.AddLeafNode(NodeKind::InvalidParse, state.token,
                         /*has_error=*/true);
   } else {
     context.AddNode(node_kind, state.token, state.subtree_start,
@@ -172,7 +172,7 @@ auto HandleBraceExprParamFinishAsValue(Context& context) -> void {
 }
 
 auto HandleBraceExprParamFinishAsUnknown(Context& context) -> void {
-  HandleBraceExprParamFinish(context, NodeKind::StructFieldUnknown,
+  HandleBraceExprParamFinish(context, NodeKind::InvalidParse,
                              State::BraceExprParamAsUnknown);
 }
 

+ 1 - 3
toolchain/parse/node_kind.def

@@ -613,7 +613,7 @@ CARBON_PARSE_NODE_KIND_CHILD_COUNT(IfExprElse, 3,
 // may repeat with StructComma as a separator.
 //
 // When a valid StructFieldType or StructFieldValue cannot be formed, elements
-// may be replaced by StructFieldUnknown, which may have a preceding sibling
+// may be replaced by InvalidParse, which may have a preceding sibling
 // StructFieldDesignator if one was successfully parsed.
 CARBON_PARSE_NODE_KIND_CHILD_COUNT(StructLiteralOrStructTypeLiteralStart, 0,
                                    CARBON_TOKEN(OpenCurlyBrace))
@@ -621,8 +621,6 @@ CARBON_PARSE_NODE_KIND_CHILD_COUNT(StructFieldDesignator, 1,
                                    CARBON_TOKEN(Period))
 CARBON_PARSE_NODE_KIND_CHILD_COUNT(StructFieldValue, 2, CARBON_TOKEN(Equal))
 CARBON_PARSE_NODE_KIND_CHILD_COUNT(StructFieldType, 2, CARBON_TOKEN(Colon))
-CARBON_PARSE_NODE_KIND_CHILD_COUNT(StructFieldUnknown, 0,
-                                   CARBON_IF_ERROR(CARBON_ANY_TOKEN))
 CARBON_PARSE_NODE_KIND_CHILD_COUNT(StructComma, 0, CARBON_TOKEN(Comma))
 CARBON_PARSE_NODE_KIND_BRACKET(StructLiteral,
                                StructLiteralOrStructTypeLiteralStart,

+ 1 - 1
toolchain/parse/testdata/struct/fail_comma_only.carbon

@@ -15,7 +15,7 @@ var x: {,} = {};
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'x'},
 // CHECK:STDOUT:           {kind: 'StructLiteralOrStructTypeLiteralStart', text: '{'},
-// CHECK:STDOUT:           {kind: 'StructFieldUnknown', text: ',', has_error: yes},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: ',', has_error: yes},
 // CHECK:STDOUT:           {kind: 'StructComma', text: ','},
 // CHECK:STDOUT:         {kind: 'StructLiteral', text: '}', subtree_size: 4},
 // CHECK:STDOUT:       {kind: 'BindingPattern', text: ':', subtree_size: 6},

+ 1 - 1
toolchain/parse/testdata/struct/fail_comma_repeat_in_type.carbon

@@ -20,7 +20,7 @@ var x: {.a: i32,,} = {};
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'StructFieldType', text: ':', subtree_size: 4},
 // CHECK:STDOUT:           {kind: 'StructComma', text: ','},
-// CHECK:STDOUT:           {kind: 'StructFieldUnknown', text: ',', has_error: yes},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: ',', has_error: yes},
 // CHECK:STDOUT:           {kind: 'StructComma', text: ','},
 // CHECK:STDOUT:         {kind: 'StructTypeLiteral', text: '}', subtree_size: 9},
 // CHECK:STDOUT:       {kind: 'BindingPattern', text: ':', subtree_size: 11},

+ 1 - 1
toolchain/parse/testdata/struct/fail_comma_repeat_in_value.carbon

@@ -20,7 +20,7 @@ var x: {.a = 0,,} = {};
 // CHECK:STDOUT:             {kind: 'IntLiteral', text: '0'},
 // CHECK:STDOUT:           {kind: 'StructFieldValue', text: '=', subtree_size: 4},
 // CHECK:STDOUT:           {kind: 'StructComma', text: ','},
-// CHECK:STDOUT:           {kind: 'StructFieldUnknown', text: ',', has_error: yes},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: ',', has_error: yes},
 // CHECK:STDOUT:           {kind: 'StructComma', text: ','},
 // CHECK:STDOUT:         {kind: 'StructLiteral', text: '}', subtree_size: 9},
 // CHECK:STDOUT:       {kind: 'BindingPattern', text: ':', subtree_size: 11},

+ 1 - 1
toolchain/parse/testdata/struct/fail_dot_only.carbon

@@ -17,7 +17,7 @@ var x: {.} = {};
 // CHECK:STDOUT:           {kind: 'StructLiteralOrStructTypeLiteralStart', text: '{'},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: '}', has_error: yes},
 // CHECK:STDOUT:           {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'StructFieldUnknown', text: '.', has_error: yes},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: '.', has_error: yes},
 // CHECK:STDOUT:         {kind: 'StructLiteral', text: '}', subtree_size: 5},
 // CHECK:STDOUT:       {kind: 'BindingPattern', text: ':', subtree_size: 7},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},

+ 1 - 1
toolchain/parse/testdata/struct/fail_dot_string_colon.carbon

@@ -18,7 +18,7 @@ var x: {."hello": i32, .y: i32} = {};
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: '"hello"', has_error: yes},
 // CHECK:STDOUT:           {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
-// CHECK:STDOUT:           {kind: 'StructFieldUnknown', text: ':', has_error: yes},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: ':', has_error: yes},
 // CHECK:STDOUT:           {kind: 'StructComma', text: ','},
 // CHECK:STDOUT:               {kind: 'IdentifierName', text: 'y'},
 // CHECK:STDOUT:             {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},

+ 1 - 1
toolchain/parse/testdata/struct/fail_dot_string_equals.carbon

@@ -18,7 +18,7 @@ var x: {."hello" = 0, .y = 4} = {};
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: '"hello"', has_error: yes},
 // CHECK:STDOUT:           {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
 // CHECK:STDOUT:           {kind: 'IntLiteral', text: '0'},
-// CHECK:STDOUT:           {kind: 'StructFieldUnknown', text: '=', has_error: yes},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: '=', has_error: yes},
 // CHECK:STDOUT:           {kind: 'StructComma', text: ','},
 // CHECK:STDOUT:               {kind: 'IdentifierName', text: 'y'},
 // CHECK:STDOUT:             {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},

+ 1 - 1
toolchain/parse/testdata/struct/fail_identifier_colon.carbon

@@ -15,7 +15,7 @@ var x: {a:} = {};
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'x'},
 // CHECK:STDOUT:           {kind: 'StructLiteralOrStructTypeLiteralStart', text: '{'},
-// CHECK:STDOUT:           {kind: 'StructFieldUnknown', text: 'a', has_error: yes},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: 'a', has_error: yes},
 // CHECK:STDOUT:         {kind: 'StructLiteral', text: '}', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'BindingPattern', text: ':', subtree_size: 5},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},

+ 1 - 1
toolchain/parse/testdata/struct/fail_identifier_equals.carbon

@@ -15,7 +15,7 @@ var x: {a=} = {};
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'x'},
 // CHECK:STDOUT:           {kind: 'StructLiteralOrStructTypeLiteralStart', text: '{'},
-// CHECK:STDOUT:           {kind: 'StructFieldUnknown', text: 'a', has_error: yes},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: 'a', has_error: yes},
 // CHECK:STDOUT:         {kind: 'StructLiteral', text: '}', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'BindingPattern', text: ':', subtree_size: 5},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},

+ 1 - 1
toolchain/parse/testdata/struct/fail_identifier_only.carbon

@@ -15,7 +15,7 @@ var x: {a} = {};
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'x'},
 // CHECK:STDOUT:           {kind: 'StructLiteralOrStructTypeLiteralStart', text: '{'},
-// CHECK:STDOUT:           {kind: 'StructFieldUnknown', text: 'a', has_error: yes},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: 'a', has_error: yes},
 // CHECK:STDOUT:         {kind: 'StructLiteral', text: '}', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'BindingPattern', text: ':', subtree_size: 5},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},

+ 1 - 1
toolchain/parse/testdata/struct/fail_missing_type.carbon

@@ -18,7 +18,7 @@ var x: {.a:} = {};
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:           {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
 // CHECK:STDOUT:           {kind: 'InvalidParse', text: '}', has_error: yes},
-// CHECK:STDOUT:           {kind: 'StructFieldUnknown', text: ':', has_error: yes},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: ':', has_error: yes},
 // CHECK:STDOUT:         {kind: 'StructTypeLiteral', text: '}', subtree_size: 6},
 // CHECK:STDOUT:       {kind: 'BindingPattern', text: ':', subtree_size: 8},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},

+ 1 - 1
toolchain/parse/testdata/struct/fail_missing_value.carbon

@@ -18,7 +18,7 @@ var x: {.a=} = {};
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:           {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
 // CHECK:STDOUT:           {kind: 'InvalidParse', text: '}', has_error: yes},
-// CHECK:STDOUT:           {kind: 'StructFieldUnknown', text: '=', has_error: yes},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: '=', has_error: yes},
 // CHECK:STDOUT:         {kind: 'StructLiteral', text: '}', subtree_size: 6},
 // CHECK:STDOUT:       {kind: 'BindingPattern', text: ':', subtree_size: 8},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},

+ 1 - 1
toolchain/parse/testdata/struct/fail_mix_type_and_value.carbon

@@ -22,7 +22,7 @@ var x: {.a: i32, .b = 0} = {};
 // CHECK:STDOUT:           {kind: 'StructComma', text: ','},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:           {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'StructFieldUnknown', text: '.', has_error: yes},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: '.', has_error: yes},
 // CHECK:STDOUT:         {kind: 'StructTypeLiteral', text: '}', subtree_size: 10},
 // CHECK:STDOUT:       {kind: 'BindingPattern', text: ':', subtree_size: 12},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},

+ 1 - 1
toolchain/parse/testdata/struct/fail_mix_value_and_type.carbon

@@ -20,7 +20,7 @@ var x: {.a = 0, b: i32} = {};
 // CHECK:STDOUT:             {kind: 'IntLiteral', text: '0'},
 // CHECK:STDOUT:           {kind: 'StructFieldValue', text: '=', subtree_size: 4},
 // CHECK:STDOUT:           {kind: 'StructComma', text: ','},
-// CHECK:STDOUT:           {kind: 'StructFieldUnknown', text: 'b', has_error: yes},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: 'b', has_error: yes},
 // CHECK:STDOUT:         {kind: 'StructLiteral', text: '}', subtree_size: 8},
 // CHECK:STDOUT:       {kind: 'BindingPattern', text: ':', subtree_size: 10},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},

+ 4 - 4
toolchain/parse/testdata/struct/fail_mix_with_unknown.carbon

@@ -36,11 +36,11 @@ var x: i32 = {.a: i32, .b, .c = 1};
 // CHECK:STDOUT:         {kind: 'StructComma', text: ','},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:         {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
-// CHECK:STDOUT:         {kind: 'StructFieldUnknown', text: '.', has_error: yes},
+// CHECK:STDOUT:         {kind: 'InvalidParse', text: '.', has_error: yes},
 // CHECK:STDOUT:         {kind: 'StructComma', text: ','},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'c'},
 // CHECK:STDOUT:         {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
-// CHECK:STDOUT:         {kind: 'StructFieldUnknown', text: '.', has_error: yes},
+// CHECK:STDOUT:         {kind: 'InvalidParse', text: '.', has_error: yes},
 // CHECK:STDOUT:       {kind: 'StructLiteral', text: '}', subtree_size: 14},
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 20},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
@@ -56,11 +56,11 @@ var x: i32 = {.a: i32, .b, .c = 1};
 // CHECK:STDOUT:         {kind: 'StructComma', text: ','},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:         {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
-// CHECK:STDOUT:         {kind: 'StructFieldUnknown', text: '.', has_error: yes},
+// CHECK:STDOUT:         {kind: 'InvalidParse', text: '.', has_error: yes},
 // CHECK:STDOUT:         {kind: 'StructComma', text: ','},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'c'},
 // CHECK:STDOUT:         {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
-// CHECK:STDOUT:         {kind: 'StructFieldUnknown', text: '.', has_error: yes},
+// CHECK:STDOUT:         {kind: 'InvalidParse', text: '.', has_error: yes},
 // CHECK:STDOUT:       {kind: 'StructTypeLiteral', text: '}', subtree_size: 14},
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 20},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},

+ 1 - 1
toolchain/parse/testdata/struct/fail_no_colon_or_equals.carbon

@@ -17,7 +17,7 @@ var x: {.a} = {};
 // CHECK:STDOUT:           {kind: 'StructLiteralOrStructTypeLiteralStart', text: '{'},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:           {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'StructFieldUnknown', text: '.', has_error: yes},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: '.', has_error: yes},
 // CHECK:STDOUT:         {kind: 'StructLiteral', text: '}', subtree_size: 5},
 // CHECK:STDOUT:       {kind: 'BindingPattern', text: ':', subtree_size: 7},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},

+ 1 - 1
toolchain/parse/testdata/struct/fail_type_no_designator.carbon

@@ -15,7 +15,7 @@ var x: {i32} = {};
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'x'},
 // CHECK:STDOUT:           {kind: 'StructLiteralOrStructTypeLiteralStart', text: '{'},
-// CHECK:STDOUT:           {kind: 'StructFieldUnknown', text: 'i32', has_error: yes},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: 'i32', has_error: yes},
 // CHECK:STDOUT:         {kind: 'StructLiteral', text: '}', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'BindingPattern', text: ':', subtree_size: 5},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},