Просмотр исходного кода

Use more specific node kinds for literals. (#3419)

Sounding out the approach, to make it clearer what a literal node
corresponds to.
Jon Ross-Perkins 2 лет назад
Родитель
Сommit
a204689893
100 измененных файлов с 439 добавлено и 359 удалено
  1. 87 71
      toolchain/check/handle_literal.cpp
  2. 5 1
      toolchain/check/node_stack.h
  3. 53 11
      toolchain/parse/handle_expr.cpp
  4. 36 18
      toolchain/parse/node_kind.def
  5. 1 1
      toolchain/parse/testdata/array/fail_require_close_bracket.carbon
  6. 1 1
      toolchain/parse/testdata/array/fail_require_semi.carbon
  7. 2 2
      toolchain/parse/testdata/array/with_length.carbon
  8. 1 1
      toolchain/parse/testdata/array/without_length.carbon
  9. 6 6
      toolchain/parse/testdata/basics/builtin_types.carbon
  10. 16 16
      toolchain/parse/testdata/basics/numeric_literals.carbon
  11. 2 2
      toolchain/parse/testdata/basics/parens.carbon
  12. 3 3
      toolchain/parse/testdata/class/fn_definitions.carbon
  13. 1 1
      toolchain/parse/testdata/class/var.carbon
  14. 1 1
      toolchain/parse/testdata/for/fail_colon_instead_of_in.carbon
  15. 1 1
      toolchain/parse/testdata/for/fail_missing_in.carbon
  16. 1 1
      toolchain/parse/testdata/for/fail_returned_var.carbon
  17. 2 2
      toolchain/parse/testdata/for/nested.carbon
  18. 1 1
      toolchain/parse/testdata/for/simple.carbon
  19. 1 1
      toolchain/parse/testdata/function/declaration/addr.carbon
  20. 2 2
      toolchain/parse/testdata/function/declaration/implicit_params.carbon
  21. 2 2
      toolchain/parse/testdata/function/declaration/params.carbon
  22. 1 1
      toolchain/parse/testdata/function/declaration/with_return_type.carbon
  23. 2 2
      toolchain/parse/testdata/function/definition/with_params.carbon
  24. 2 2
      toolchain/parse/testdata/function/definition/with_return_type.carbon
  25. 2 2
      toolchain/parse/testdata/generics/deduced_params/fail_no_parens.carbon
  26. 2 2
      toolchain/parse/testdata/generics/deduced_params/one.carbon
  27. 2 2
      toolchain/parse/testdata/generics/deduced_params/one_suffix_comma.carbon
  28. 12 12
      toolchain/parse/testdata/generics/deduced_params/six.carbon
  29. 4 4
      toolchain/parse/testdata/generics/deduced_params/two.carbon
  30. 4 4
      toolchain/parse/testdata/generics/deduced_params/two_suffix_comma.carbon
  31. 1 1
      toolchain/parse/testdata/generics/generic_params/basic.carbon
  32. 1 1
      toolchain/parse/testdata/generics/generic_params/template.carbon
  33. 1 1
      toolchain/parse/testdata/generics/generic_params/template_addr.carbon
  34. 2 2
      toolchain/parse/testdata/generics/params/one.carbon
  35. 2 2
      toolchain/parse/testdata/generics/params/one_suffix_comma.carbon
  36. 12 12
      toolchain/parse/testdata/generics/params/six.carbon
  37. 4 4
      toolchain/parse/testdata/generics/params/two.carbon
  38. 4 4
      toolchain/parse/testdata/generics/params/two_suffix_comma.carbon
  39. 4 4
      toolchain/parse/testdata/if_expression/basic.carbon
  40. 1 1
      toolchain/parse/testdata/if_expression/fail_condition_missing.carbon
  41. 3 3
      toolchain/parse/testdata/if_expression/fail_else_expr_missing.carbon
  42. 3 3
      toolchain/parse/testdata/if_expression/fail_else_missing.carbon
  43. 2 2
      toolchain/parse/testdata/if_expression/fail_then_expr_missing.carbon
  44. 2 2
      toolchain/parse/testdata/if_expression/fail_then_missing.carbon
  45. 1 1
      toolchain/parse/testdata/if_expression/fail_top_level_if.carbon
  46. 5 5
      toolchain/parse/testdata/if_expression/in_type.carbon
  47. 2 2
      toolchain/parse/testdata/if_expression/precedence.carbon
  48. 2 2
      toolchain/parse/testdata/index/assign_to_var.carbon
  49. 1 1
      toolchain/parse/testdata/index/fail_empty_expr.carbon
  50. 2 2
      toolchain/parse/testdata/index/fail_malformed_expr.carbon
  51. 1 1
      toolchain/parse/testdata/let/fail_bad_name.carbon
  52. 1 1
      toolchain/parse/testdata/let/fail_missing_type.carbon
  53. 2 2
      toolchain/parse/testdata/let/fail_missing_value.carbon
  54. 4 4
      toolchain/parse/testdata/let/let.carbon
  55. 4 4
      toolchain/parse/testdata/operators/assign.carbon
  56. 3 3
      toolchain/parse/testdata/operators/fail_chained_assign.carbon
  57. 1 1
      toolchain/parse/testdata/operators/fail_infix_uneven_space_after.carbon
  58. 3 3
      toolchain/parse/testdata/operators/fail_invalid_infix.carbon
  59. 2 2
      toolchain/parse/testdata/operators/fail_postincrement.carbon
  60. 9 9
      toolchain/parse/testdata/operators/fail_precedence_as.carbon
  61. 3 3
      toolchain/parse/testdata/operators/fail_precedence_assign.carbon
  62. 1 1
      toolchain/parse/testdata/operators/fail_precedence_star_minus.carbon
  63. 1 1
      toolchain/parse/testdata/operators/fail_precedence_star_star.carbon
  64. 1 1
      toolchain/parse/testdata/operators/fail_star_star_no_space.carbon
  65. 1 1
      toolchain/parse/testdata/operators/fixity_in_call.carbon
  66. 2 2
      toolchain/parse/testdata/operators/fixity_in_params.carbon
  67. 3 3
      toolchain/parse/testdata/operators/fixity_in_var.carbon
  68. 1 1
      toolchain/parse/testdata/operators/infix.carbon
  69. 1 1
      toolchain/parse/testdata/operators/infix_no_space.carbon
  70. 2 2
      toolchain/parse/testdata/operators/infix_with_paren_after.carbon
  71. 2 2
      toolchain/parse/testdata/operators/infix_with_paren_before.carbon
  72. 2 2
      toolchain/parse/testdata/operators/postfix.carbon
  73. 1 1
      toolchain/parse/testdata/operators/postfix_repeat.carbon
  74. 2 2
      toolchain/parse/testdata/operators/postfix_space_after_op.carbon
  75. 11 11
      toolchain/parse/testdata/operators/precedence_as.carbon
  76. 8 8
      toolchain/parse/testdata/operators/precedence_assign.carbon
  77. 1 1
      toolchain/parse/testdata/operators/precedence_unary.carbon
  78. 3 3
      toolchain/parse/testdata/operators/prefix.carbon
  79. 1 1
      toolchain/parse/testdata/operators/prefix_no_space.carbon
  80. 1 1
      toolchain/parse/testdata/operators/recover_infix_uneven_space_before.carbon
  81. 2 2
      toolchain/parse/testdata/operators/recover_postfix_space.carbon
  82. 3 3
      toolchain/parse/testdata/operators/recover_postfix_space_before_comma.carbon
  83. 2 2
      toolchain/parse/testdata/operators/recover_postfix_space_in_call.carbon
  84. 2 2
      toolchain/parse/testdata/operators/recover_postfix_space_surrounding.carbon
  85. 1 1
      toolchain/parse/testdata/operators/recover_prefix_repeat.carbon
  86. 1 1
      toolchain/parse/testdata/operators/recover_prefix_space.carbon
  87. 1 1
      toolchain/parse/testdata/operators/recover_prefix_uneven_space_with_assign.carbon
  88. 3 3
      toolchain/parse/testdata/pointer/const_pointer.carbon
  89. 9 9
      toolchain/parse/testdata/pointer/fail_pointer_type_in_expression.carbon
  90. 6 6
      toolchain/parse/testdata/pointer/pointer_type.carbon
  91. 5 5
      toolchain/parse/testdata/pointer/pointer_value.carbon
  92. 1 1
      toolchain/parse/testdata/return/fail_returned_no_var.carbon
  93. 3 3
      toolchain/parse/testdata/return/returned_var.carbon
  94. 1 1
      toolchain/parse/testdata/struct/fail_comma_repeat_in_type.carbon
  95. 1 1
      toolchain/parse/testdata/struct/fail_comma_repeat_in_value.carbon
  96. 2 2
      toolchain/parse/testdata/struct/fail_dot_string_colon.carbon
  97. 2 2
      toolchain/parse/testdata/struct/fail_dot_string_equals.carbon
  98. 2 2
      toolchain/parse/testdata/struct/fail_extra_token_in_type.carbon
  99. 2 2
      toolchain/parse/testdata/struct/fail_extra_token_in_value.carbon
  100. 1 1
      toolchain/parse/testdata/struct/fail_mix_type_and_value.carbon

+ 87 - 71
toolchain/check/handle_literal.cpp

@@ -6,80 +6,96 @@
 
 namespace Carbon::Check {
 
-auto HandleLiteral(Context& context, Parse::Node parse_node) -> bool {
-  auto token = context.parse_tree().node_token(parse_node);
-  switch (auto token_kind = context.tokens().GetKind(token)) {
-    case Lex::TokenKind::False:
-    case Lex::TokenKind::True: {
-      context.AddInstAndPush(
-          parse_node,
-          SemIR::BoolLiteral{
-              parse_node, context.GetBuiltinType(SemIR::BuiltinKind::BoolType),
-              token_kind == Lex::TokenKind::True ? SemIR::BoolValue::True
-                                                 : SemIR::BoolValue::False});
-      break;
-    }
-    case Lex::TokenKind::IntegerLiteral: {
-      context.AddInstAndPush(
-          parse_node,
-          SemIR::IntegerLiteral{
-              parse_node,
-              context.GetBuiltinType(SemIR::BuiltinKind::IntegerType),
-              context.tokens().GetIntegerLiteral(token)});
-      break;
-    }
-    case Lex::TokenKind::RealLiteral: {
-      context.AddInstAndPush(
-          parse_node,
-          SemIR::RealLiteral{
-              parse_node,
-              context.GetBuiltinType(SemIR::BuiltinKind::FloatingPointType),
-              context.tokens().GetRealLiteral(token)});
-      break;
-    }
-    case Lex::TokenKind::StringLiteral: {
-      auto id = context.tokens().GetStringLiteral(token);
-      context.AddInstAndPush(
+auto HandleBoolLiteralFalse(Context& context, Parse::Node parse_node) -> bool {
+  context.AddInstAndPush(
+      parse_node,
+      SemIR::BoolLiteral{parse_node,
+                         context.GetBuiltinType(SemIR::BuiltinKind::BoolType),
+                         SemIR::BoolValue::False});
+  return true;
+}
+
+auto HandleBoolLiteralTrue(Context& context, Parse::Node parse_node) -> bool {
+  context.AddInstAndPush(
+      parse_node,
+      SemIR::BoolLiteral{parse_node,
+                         context.GetBuiltinType(SemIR::BuiltinKind::BoolType),
+                         SemIR::BoolValue::True});
+  return true;
+}
+
+auto HandleIntegerLiteral(Context& context, Parse::Node parse_node) -> bool {
+  context.AddInstAndPush(
+      parse_node,
+      SemIR::IntegerLiteral{
+          parse_node, context.GetBuiltinType(SemIR::BuiltinKind::IntegerType),
+          context.tokens().GetIntegerLiteral(
+              context.parse_tree().node_token(parse_node))});
+  return true;
+}
+
+auto HandleFloatingPointLiteral(Context& context, Parse::Node parse_node)
+    -> bool {
+  context.AddInstAndPush(
+      parse_node,
+      SemIR::RealLiteral{
           parse_node,
-          SemIR::StringLiteral{
-              parse_node,
-              context.GetBuiltinType(SemIR::BuiltinKind::StringType), id});
-      break;
-    }
-    case Lex::TokenKind::Type: {
-      context.node_stack().Push(parse_node, SemIR::InstId::BuiltinTypeType);
-      break;
-    }
-    case Lex::TokenKind::Bool: {
-      context.node_stack().Push(parse_node, SemIR::InstId::BuiltinBoolType);
-      break;
-    }
-    case Lex::TokenKind::IntegerTypeLiteral: {
-      auto text = context.tokens().GetTokenText(token);
-      if (text != "i32") {
-        return context.TODO(parse_node, "Currently only i32 is allowed");
-      }
-      context.node_stack().Push(parse_node, SemIR::InstId::BuiltinIntegerType);
-      break;
-    }
-    case Lex::TokenKind::FloatingPointTypeLiteral: {
-      auto text = context.tokens().GetTokenText(token);
-      if (text != "f64") {
-        return context.TODO(parse_node, "Currently only f64 is allowed");
-      }
-      context.node_stack().Push(parse_node,
-                                SemIR::InstId::BuiltinFloatingPointType);
-      break;
-    }
-    case Lex::TokenKind::StringTypeLiteral: {
-      context.node_stack().Push(parse_node, SemIR::InstId::BuiltinStringType);
-      break;
-    }
-    default: {
-      return context.TODO(parse_node, llvm::formatv("Handle {0}", token_kind));
-    }
+          context.GetBuiltinType(SemIR::BuiltinKind::FloatingPointType),
+          context.tokens().GetRealLiteral(
+              context.parse_tree().node_token(parse_node))});
+  return true;
+}
+
+auto HandleStringLiteral(Context& context, Parse::Node parse_node) -> bool {
+  context.AddInstAndPush(
+      parse_node,
+      SemIR::StringLiteral{
+          parse_node, context.GetBuiltinType(SemIR::BuiltinKind::StringType),
+          context.tokens().GetStringLiteral(
+              context.parse_tree().node_token(parse_node))});
+  return true;
+}
+
+auto HandleBoolTypeLiteral(Context& context, Parse::Node parse_node) -> bool {
+  context.node_stack().Push(parse_node, SemIR::InstId::BuiltinBoolType);
+  return true;
+}
+
+auto HandleIntegerTypeLiteral(Context& context, Parse::Node parse_node)
+    -> bool {
+  auto text = context.tokens().GetTokenText(
+      context.parse_tree().node_token(parse_node));
+  if (text != "i32") {
+    return context.TODO(parse_node, "Currently only i32 is allowed");
+  }
+  context.node_stack().Push(parse_node, SemIR::InstId::BuiltinIntegerType);
+  return true;
+}
+
+auto HandleUnsignedIntegerTypeLiteral(Context& context, Parse::Node parse_node)
+    -> bool {
+  return context.TODO(parse_node, "Need to support unsigned type literals");
+}
+
+auto HandleFloatingPointTypeLiteral(Context& context, Parse::Node parse_node)
+    -> bool {
+  auto text = context.tokens().GetTokenText(
+      context.parse_tree().node_token(parse_node));
+  if (text != "f64") {
+    return context.TODO(parse_node, "Currently only f64 is allowed");
   }
+  context.node_stack().Push(parse_node,
+                            SemIR::InstId::BuiltinFloatingPointType);
+  return true;
+}
+
+auto HandleStringTypeLiteral(Context& context, Parse::Node parse_node) -> bool {
+  context.node_stack().Push(parse_node, SemIR::InstId::BuiltinStringType);
+  return true;
+}
 
+auto HandleTypeTypeLiteral(Context& context, Parse::Node parse_node) -> bool {
+  context.node_stack().Push(parse_node, SemIR::InstId::BuiltinTypeType);
   return true;
 }
 

+ 5 - 1
toolchain/check/node_stack.h

@@ -298,7 +298,6 @@ class NodeStack {
       case Parse::NodeKind::IfExprElse:
       case Parse::NodeKind::IndexExpr:
       case Parse::NodeKind::InfixOperator:
-      case Parse::NodeKind::Literal:
       case Parse::NodeKind::MemberAccessExpr:
       case Parse::NodeKind::NameExpr:
       case Parse::NodeKind::ParenExpr:
@@ -314,6 +313,11 @@ class NodeStack {
       case Parse::NodeKind::StructFieldType:
       case Parse::NodeKind::StructTypeLiteral:
       case Parse::NodeKind::TupleLiteral:
+// Use x-macros to handle literal cases.
+#define CARBON_PARSE_NODE_KIND(...)
+#define CARBON_PARSE_NODE_KIND_TOKEN_LITERAL(Name, ...) \
+  case Parse::NodeKind::Name:
+#include "toolchain/parse/node_kind.def"
         return IdKind::InstId;
       case Parse::NodeKind::IfCondition:
       case Parse::NodeKind::IfExprIf:

+ 53 - 11
toolchain/parse/handle_expr.cpp

@@ -77,18 +77,60 @@ auto HandleExprInPostfix(Context& context) -> void {
       context.PushState(state);
       break;
     }
-    case Lex::TokenKind::False:
-    case Lex::TokenKind::True:
-    case Lex::TokenKind::IntegerLiteral:
-    case Lex::TokenKind::RealLiteral:
-    case Lex::TokenKind::StringLiteral:
-    case Lex::TokenKind::Bool:
-    case Lex::TokenKind::IntegerTypeLiteral:
-    case Lex::TokenKind::UnsignedIntegerTypeLiteral:
-    case Lex::TokenKind::FloatingPointTypeLiteral:
-    case Lex::TokenKind::StringTypeLiteral:
+    case Lex::TokenKind::False: {
+      context.AddLeafNode(NodeKind::BoolLiteralFalse, context.Consume());
+      context.PushState(state);
+      break;
+    }
+    case Lex::TokenKind::True: {
+      context.AddLeafNode(NodeKind::BoolLiteralTrue, context.Consume());
+      context.PushState(state);
+      break;
+    }
+    case Lex::TokenKind::IntegerLiteral: {
+      context.AddLeafNode(NodeKind::IntegerLiteral, context.Consume());
+      context.PushState(state);
+      break;
+    }
+    case Lex::TokenKind::RealLiteral: {
+      context.AddLeafNode(NodeKind::FloatingPointLiteral, context.Consume());
+      context.PushState(state);
+      break;
+    }
+    case Lex::TokenKind::StringLiteral: {
+      context.AddLeafNode(NodeKind::StringLiteral, context.Consume());
+      context.PushState(state);
+      break;
+    }
+    case Lex::TokenKind::Bool: {
+      context.AddLeafNode(NodeKind::BoolTypeLiteral, context.Consume());
+      context.PushState(state);
+      break;
+    }
+    case Lex::TokenKind::IntegerTypeLiteral: {
+      context.AddLeafNode(NodeKind::IntegerTypeLiteral, context.Consume());
+      context.PushState(state);
+      break;
+    }
+    case Lex::TokenKind::UnsignedIntegerTypeLiteral: {
+      context.AddLeafNode(NodeKind::UnsignedIntegerTypeLiteral,
+                          context.Consume());
+      context.PushState(state);
+      break;
+    }
+    case Lex::TokenKind::FloatingPointTypeLiteral: {
+      context.AddLeafNode(NodeKind::FloatingPointTypeLiteral,
+                          context.Consume());
+      context.PushState(state);
+      break;
+    }
+    case Lex::TokenKind::StringTypeLiteral: {
+      context.AddLeafNode(NodeKind::StringTypeLiteral, context.Consume());
+      context.PushState(state);
+      break;
+    }
     case Lex::TokenKind::Type: {
-      context.AddLeafNode(NodeKind::Literal, context.Consume());
+      context.AddLeafNode(NodeKind::TypeTypeLiteral, context.Consume());
       context.PushState(state);
       break;
     }

+ 36 - 18
toolchain/parse/node_kind.def

@@ -17,6 +17,9 @@
 //   - CARBON_PARSE_NODE_KIND_CHILD_COUNT(Name, ChildCount, LexTokenKinds)
 //     Defines a parse node with a set number of children, often 0. This count
 //     must be correct even when the node contains errors.
+//   - CARBON_PARSE_NODE_KIND_TOKEN_LITERAL(Name, Token)
+//     Defines a parse node that corresponds to a token that is a single-token
+//     literal. The token is wrapped for LexTokenKinds.
 //
 //   In both cases, LexTokenKinds says which Lex::TokenKind values that this
 //   parse node can correspond to, and is a sequence of:
@@ -47,6 +50,16 @@
   CARBON_PARSE_NODE_KIND(Name)
 #endif
 
+// This is expected to be used with something like:
+//
+//   // Use x-macros to handle literal cases.
+//   #define CARBON_PARSE_NODE_KIND(...)
+//   #define CARBON_PARSE_NODE_KIND_TOKEN_LITERAL(Name, ...) <code>
+#ifndef CARBON_PARSE_NODE_KIND_TOKEN_LITERAL
+#define CARBON_PARSE_NODE_KIND_TOKEN_LITERAL(Name, LexTokenKinds) \
+  CARBON_PARSE_NODE_KIND_CHILD_COUNT(Name, 0, LexTokenKinds)
+#endif
+
 // The start of the file.
 CARBON_PARSE_NODE_KIND_CHILD_COUNT(FileStart, 0, CARBON_TOKEN(StartOfFile))
 
@@ -187,15 +200,13 @@ CARBON_PARSE_NODE_KIND_BRACKET(FunctionDecl, FunctionIntroducer,
 //
 // Exprs and ParamListComma may repeat with ParamListComma as a
 // separator.
-CARBON_PARSE_NODE_KIND_CHILD_COUNT(ParamListStart, 0,
-                                   CARBON_TOKEN(OpenParen))
+CARBON_PARSE_NODE_KIND_CHILD_COUNT(ParamListStart, 0, CARBON_TOKEN(OpenParen))
 CARBON_PARSE_NODE_KIND_CHILD_COUNT(ImplicitParamListStart, 0,
                                    CARBON_TOKEN(OpenSquareBracket))
 CARBON_PARSE_NODE_KIND_CHILD_COUNT(ParamListComma, 0, CARBON_TOKEN(Comma))
 CARBON_PARSE_NODE_KIND_BRACKET(ParamList, ParamListStart,
                                CARBON_TOKEN(CloseParen))
-CARBON_PARSE_NODE_KIND_BRACKET(ImplicitParamList,
-                               ImplicitParamListStart,
+CARBON_PARSE_NODE_KIND_BRACKET(ImplicitParamList, ImplicitParamListStart,
                                CARBON_TOKEN(CloseSquareBracket))
 
 // An array type, such as  `[i32; 3]` or `[i32;]`:
@@ -413,21 +424,27 @@ CARBON_PARSE_NODE_KIND_CHILD_COUNT(MemberAccessExpr, 2, CARBON_TOKEN(Period))
 CARBON_PARSE_NODE_KIND_CHILD_COUNT(PointerMemberAccessExpr, 2,
                                    CARBON_TOKEN(MinusGreater))
 
-// clang-format off
+// A value literal.
+CARBON_PARSE_NODE_KIND_TOKEN_LITERAL(BoolLiteralFalse, CARBON_TOKEN(False))
+CARBON_PARSE_NODE_KIND_TOKEN_LITERAL(BoolLiteralTrue, CARBON_TOKEN(True))
+CARBON_PARSE_NODE_KIND_TOKEN_LITERAL(IntegerLiteral,
+                                     CARBON_TOKEN(IntegerLiteral))
+CARBON_PARSE_NODE_KIND_TOKEN_LITERAL(FloatingPointLiteral, CARBON_TOKEN(RealLiteral))
+CARBON_PARSE_NODE_KIND_TOKEN_LITERAL(StringLiteral, CARBON_TOKEN(StringLiteral))
+
+// A type literal.
+CARBON_PARSE_NODE_KIND_TOKEN_LITERAL(BoolTypeLiteral, CARBON_TOKEN(Bool))
+CARBON_PARSE_NODE_KIND_TOKEN_LITERAL(IntegerTypeLiteral,
+                                     CARBON_TOKEN(IntegerTypeLiteral))
+CARBON_PARSE_NODE_KIND_TOKEN_LITERAL(UnsignedIntegerTypeLiteral,
+                                     CARBON_TOKEN(UnsignedIntegerTypeLiteral))
+CARBON_PARSE_NODE_KIND_TOKEN_LITERAL(FloatingPointTypeLiteral,
+                                     CARBON_TOKEN(FloatingPointTypeLiteral))
+CARBON_PARSE_NODE_KIND_TOKEN_LITERAL(StringTypeLiteral,
+                                     CARBON_TOKEN(StringTypeLiteral))
+CARBON_PARSE_NODE_KIND_TOKEN_LITERAL(TypeTypeLiteral, CARBON_TOKEN(Type))
 
-// A literal.
-CARBON_PARSE_NODE_KIND_CHILD_COUNT(Literal, 0,
-                                   CARBON_TOKEN(False)
-                                   CARBON_TOKEN(True)
-                                   CARBON_TOKEN(IntegerLiteral)
-                                   CARBON_TOKEN(RealLiteral)
-                                   CARBON_TOKEN(StringLiteral)
-                                   CARBON_TOKEN(Bool)
-                                   CARBON_TOKEN(IntegerTypeLiteral)
-                                   CARBON_TOKEN(UnsignedIntegerTypeLiteral)
-                                   CARBON_TOKEN(FloatingPointTypeLiteral)
-                                   CARBON_TOKEN(StringTypeLiteral)
-                                   CARBON_TOKEN(Type))
+// clang-format off
 
 // A prefix operator:
 //   _external_: expression
@@ -624,6 +641,7 @@ CARBON_PARSE_NODE_KIND_CHILD_COUNT(SelfTypeNameExpr, 0,
 #undef CARBON_PARSE_NODE_KIND
 #undef CARBON_PARSE_NODE_KIND_BRACKET
 #undef CARBON_PARSE_NODE_KIND_CHILD_COUNT
+#undef CARBON_PARSE_NODE_KIND_TOKEN_LITERAL
 #undef CARBON_TOKEN
 #undef CARBON_ANY_TOKEN
 #undef CARBON_IF_ERROR

+ 1 - 1
toolchain/parse/testdata/array/fail_require_close_bracket.carbon

@@ -25,7 +25,7 @@ var x: [i32;;
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'x'},
 // CHECK:STDOUT:             {kind: 'ArrayExprStart', text: '['},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'ArrayExprSemi', text: ';', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'InvalidParse', text: ';', has_error: yes},
 // CHECK:STDOUT:         {kind: 'ArrayExpr', text: ']', has_error: yes, subtree_size: 5},

+ 1 - 1
toolchain/parse/testdata/array/fail_require_semi.carbon

@@ -15,7 +15,7 @@ var x: [i32];
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'x'},
 // CHECK:STDOUT:             {kind: 'ArrayExprStart', text: '['},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'ArrayExprSemi', text: ']', has_error: yes, subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ArrayExpr', text: ']', has_error: yes, subtree_size: 4},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 6},

+ 2 - 2
toolchain/parse/testdata/array/with_length.carbon

@@ -12,9 +12,9 @@ var x: [i32; 10];
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'x'},
 // CHECK:STDOUT:             {kind: 'ArrayExprStart', text: '['},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'ArrayExprSemi', text: ';', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'Literal', text: '10'},
+// CHECK:STDOUT:           {kind: 'IntegerLiteral', text: '10'},
 // CHECK:STDOUT:         {kind: 'ArrayExpr', text: ']', subtree_size: 5},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 7},
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 9},

+ 1 - 1
toolchain/parse/testdata/array/without_length.carbon

@@ -12,7 +12,7 @@ var x: [i32;];
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'x'},
 // CHECK:STDOUT:             {kind: 'ArrayExprStart', text: '['},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'ArrayExprSemi', text: ';', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ArrayExpr', text: ']', subtree_size: 4},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 6},

+ 6 - 6
toolchain/parse/testdata/basics/builtin_types.carbon

@@ -13,24 +13,24 @@ var test_str: String = "Test";
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'test_i32'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:       {kind: 'Literal', text: '0'},
+// CHECK:STDOUT:       {kind: 'IntegerLiteral', text: '0'},
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 7},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'test_f64'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'f64'},
+// CHECK:STDOUT:         {kind: 'FloatingPointTypeLiteral', text: 'f64'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:       {kind: 'Literal', text: '0.1'},
+// CHECK:STDOUT:       {kind: 'FloatingPointLiteral', text: '0.1'},
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 7},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'test_str'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'String'},
+// CHECK:STDOUT:         {kind: 'StringTypeLiteral', text: 'String'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:       {kind: 'Literal', text: '"Test"'},
+// CHECK:STDOUT:       {kind: 'StringLiteral', text: '"Test"'},
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 7},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
 // CHECK:STDOUT:   ]

+ 16 - 16
toolchain/parse/testdata/basics/numeric_literals.carbon

@@ -36,48 +36,48 @@ fn F() {
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'Name', text: 'ints'},
 // CHECK:STDOUT:               {kind: 'ArrayExprStart', text: '['},
-// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:               {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:             {kind: 'ArrayExprSemi', text: ';', subtree_size: 3},
-// CHECK:STDOUT:             {kind: 'Literal', text: '5'},
+// CHECK:STDOUT:             {kind: 'IntegerLiteral', text: '5'},
 // CHECK:STDOUT:           {kind: 'ArrayExpr', text: ']', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 7},
 // CHECK:STDOUT:         {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:           {kind: 'ParenExprOrTupleLiteralStart', text: '('},
-// CHECK:STDOUT:           {kind: 'Literal', text: '8'},
+// CHECK:STDOUT:           {kind: 'IntegerLiteral', text: '8'},
 // CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
-// CHECK:STDOUT:           {kind: 'Literal', text: '9'},
+// CHECK:STDOUT:           {kind: 'IntegerLiteral', text: '9'},
 // CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
-// CHECK:STDOUT:           {kind: 'Literal', text: '0x8'},
+// CHECK:STDOUT:           {kind: 'IntegerLiteral', text: '0x8'},
 // CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
-// CHECK:STDOUT:           {kind: 'Literal', text: '0b1000'},
+// CHECK:STDOUT:           {kind: 'IntegerLiteral', text: '0b1000'},
 // CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
-// CHECK:STDOUT:           {kind: 'Literal', text: '39999999999999999993'},
+// CHECK:STDOUT:           {kind: 'IntegerLiteral', text: '39999999999999999993'},
 // CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
 // CHECK:STDOUT:         {kind: 'TupleLiteral', text: ')', subtree_size: 12},
 // CHECK:STDOUT:       {kind: 'VariableDecl', text: ';', subtree_size: 22},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'Name', text: 'floats'},
 // CHECK:STDOUT:               {kind: 'ArrayExprStart', text: '['},
-// CHECK:STDOUT:               {kind: 'Literal', text: 'f64'},
+// CHECK:STDOUT:               {kind: 'FloatingPointTypeLiteral', text: 'f64'},
 // CHECK:STDOUT:             {kind: 'ArrayExprSemi', text: ';', subtree_size: 3},
-// CHECK:STDOUT:             {kind: 'Literal', text: '7'},
+// CHECK:STDOUT:             {kind: 'IntegerLiteral', text: '7'},
 // CHECK:STDOUT:           {kind: 'ArrayExpr', text: ']', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 7},
 // CHECK:STDOUT:         {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:           {kind: 'ParenExprOrTupleLiteralStart', text: '('},
-// CHECK:STDOUT:           {kind: 'Literal', text: '0.9'},
+// CHECK:STDOUT:           {kind: 'FloatingPointLiteral', text: '0.9'},
 // CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
-// CHECK:STDOUT:           {kind: 'Literal', text: '8.0'},
+// CHECK:STDOUT:           {kind: 'FloatingPointLiteral', text: '8.0'},
 // CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
-// CHECK:STDOUT:           {kind: 'Literal', text: '80.0'},
+// CHECK:STDOUT:           {kind: 'FloatingPointLiteral', text: '80.0'},
 // CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
-// CHECK:STDOUT:           {kind: 'Literal', text: '1.0e7'},
+// CHECK:STDOUT:           {kind: 'FloatingPointLiteral', text: '1.0e7'},
 // CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
-// CHECK:STDOUT:           {kind: 'Literal', text: '1.0e8'},
+// CHECK:STDOUT:           {kind: 'FloatingPointLiteral', text: '1.0e8'},
 // CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
-// CHECK:STDOUT:           {kind: 'Literal', text: '1.0e-8'},
+// CHECK:STDOUT:           {kind: 'FloatingPointLiteral', text: '1.0e-8'},
 // CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
-// CHECK:STDOUT:           {kind: 'Literal', text: '39999999999999999993.0e39999999999999999993'},
+// CHECK:STDOUT:           {kind: 'FloatingPointLiteral', text: '39999999999999999993.0e39999999999999999993'},
 // CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
 // CHECK:STDOUT:         {kind: 'TupleLiteral', text: ')', subtree_size: 16},
 // CHECK:STDOUT:       {kind: 'VariableDecl', text: ';', subtree_size: 26},

+ 2 - 2
toolchain/parse/testdata/basics/parens.carbon

@@ -15,10 +15,10 @@ fn F(n: i32) -> i32 {
 // CHECK:STDOUT:         {kind: 'Name', text: 'F'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:             {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 5},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 10},
 // CHECK:STDOUT:         {kind: 'ReturnStatementStart', text: 'return'},

+ 3 - 3
toolchain/parse/testdata/class/fn_definitions.carbon

@@ -29,7 +29,7 @@ class Foo {
 // CHECK:STDOUT:             {kind: 'StructLiteralOrStructTypeLiteralStart', text: '{'},
 // CHECK:STDOUT:                 {kind: 'Name', text: 'x'},
 // CHECK:STDOUT:               {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
-// CHECK:STDOUT:               {kind: 'Literal', text: '0'},
+// CHECK:STDOUT:               {kind: 'IntegerLiteral', text: '0'},
 // CHECK:STDOUT:             {kind: 'StructFieldValue', text: '=', subtree_size: 4},
 // CHECK:STDOUT:           {kind: 'StructLiteral', text: '}', subtree_size: 6},
 // CHECK:STDOUT:         {kind: 'ReturnStatement', text: ';', subtree_size: 8},
@@ -43,7 +43,7 @@ class Foo {
 // CHECK:STDOUT:           {kind: 'ImplicitParamList', text: ']', subtree_size: 5},
 // CHECK:STDOUT:             {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:           {kind: 'ParamList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:         {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 12},
 // CHECK:STDOUT:           {kind: 'ReturnStatementStart', text: 'return'},
@@ -67,7 +67,7 @@ class Foo {
 // CHECK:STDOUT:               {kind: 'SelfValueNameExpr', text: 'self'},
 // CHECK:STDOUT:               {kind: 'Name', text: 'x'},
 // CHECK:STDOUT:             {kind: 'PointerMemberAccessExpr', text: '->', subtree_size: 3},
-// CHECK:STDOUT:             {kind: 'Literal', text: '1'},
+// CHECK:STDOUT:             {kind: 'IntegerLiteral', text: '1'},
 // CHECK:STDOUT:           {kind: 'InfixOperator', text: '=', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'ExprStatement', text: ';', subtree_size: 6},
 // CHECK:STDOUT:       {kind: 'FunctionDefinition', text: '}', subtree_size: 19},

+ 1 - 1
toolchain/parse/testdata/class/var.carbon

@@ -16,7 +16,7 @@ class Foo {
 // CHECK:STDOUT:       {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'Name', text: 'x'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableDecl', text: ';', subtree_size: 5},
 // CHECK:STDOUT:     {kind: 'ClassDefinition', text: '}', subtree_size: 9},

+ 1 - 1
toolchain/parse/testdata/for/fail_colon_instead_of_in.carbon

@@ -24,7 +24,7 @@ fn foo() {
 // CHECK:STDOUT:           {kind: 'ForHeaderStart', text: '('},
 // CHECK:STDOUT:             {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:               {kind: 'Name', text: 'x'},
-// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:               {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:             {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ForIn', text: ':', has_error: yes, subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'NameExpr', text: 'y'},

+ 1 - 1
toolchain/parse/testdata/for/fail_missing_in.carbon

@@ -24,7 +24,7 @@ fn foo() {
 // CHECK:STDOUT:           {kind: 'ForHeaderStart', text: '('},
 // CHECK:STDOUT:             {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:               {kind: 'Name', text: 'x'},
-// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:               {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:             {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ForIn', text: 'var', has_error: yes, subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'NameExpr', text: 'y'},

+ 1 - 1
toolchain/parse/testdata/for/fail_returned_var.carbon

@@ -21,7 +21,7 @@ fn foo() -> i32 {
 // CHECK:STDOUT:         {kind: 'Name', text: 'foo'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7},
 // CHECK:STDOUT:           {kind: 'ForHeaderStart', text: '('},

+ 2 - 2
toolchain/parse/testdata/for/nested.carbon

@@ -23,7 +23,7 @@ fn foo() {
 // CHECK:STDOUT:           {kind: 'ForHeaderStart', text: '('},
 // CHECK:STDOUT:             {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:               {kind: 'Name', text: 'y'},
-// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:               {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:             {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ForIn', text: 'in', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'NameExpr', text: 'x'},
@@ -32,7 +32,7 @@ fn foo() {
 // CHECK:STDOUT:               {kind: 'ForHeaderStart', text: '('},
 // CHECK:STDOUT:                 {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:                   {kind: 'Name', text: 'z'},
-// CHECK:STDOUT:                   {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:                   {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:                 {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:               {kind: 'ForIn', text: 'in', subtree_size: 5},
 // CHECK:STDOUT:               {kind: 'NameExpr', text: 'y'},

+ 1 - 1
toolchain/parse/testdata/for/simple.carbon

@@ -21,7 +21,7 @@ fn foo() {
 // CHECK:STDOUT:           {kind: 'ForHeaderStart', text: '('},
 // CHECK:STDOUT:             {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:               {kind: 'Name', text: 'x'},
-// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:               {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:             {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ForIn', text: 'in', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'NameExpr', text: 'y'},

+ 1 - 1
toolchain/parse/testdata/function/declaration/addr.carbon

@@ -13,7 +13,7 @@ fn foo(addr a: i32*);
 // CHECK:STDOUT:       {kind: 'Name', text: 'foo'},
 // CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:             {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:               {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:             {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 4},
 // CHECK:STDOUT:         {kind: 'Address', text: 'addr', subtree_size: 5},

+ 2 - 2
toolchain/parse/testdata/function/declaration/implicit_params.carbon

@@ -13,11 +13,11 @@ fn foo[a: i32, b: i32]();
 // CHECK:STDOUT:       {kind: 'Name', text: 'foo'},
 // CHECK:STDOUT:         {kind: 'ImplicitParamListStart', text: '['},
 // CHECK:STDOUT:           {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'ImplicitParamList', text: ']', subtree_size: 9},
 // CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},

+ 2 - 2
toolchain/parse/testdata/function/declaration/params.carbon

@@ -13,11 +13,11 @@ fn foo(a: i32, b: i32);
 // CHECK:STDOUT:       {kind: 'Name', text: 'foo'},
 // CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:           {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 9},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 12},

+ 1 - 1
toolchain/parse/testdata/function/declaration/with_return_type.carbon

@@ -13,7 +13,7 @@ fn foo() -> u32;
 // CHECK:STDOUT:       {kind: 'Name', text: 'foo'},
 // CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'u32'},
+// CHECK:STDOUT:         {kind: 'UnsignedIntegerTypeLiteral', text: 'u32'},
 // CHECK:STDOUT:       {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 7},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},

+ 2 - 2
toolchain/parse/testdata/function/definition/with_params.carbon

@@ -15,11 +15,11 @@ fn foo(bar: i64, baz: i64) {
 // CHECK:STDOUT:         {kind: 'Name', text: 'foo'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:             {kind: 'Name', text: 'bar'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i64'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i64'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'Name', text: 'baz'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i64'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i64'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 9},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 12},

+ 2 - 2
toolchain/parse/testdata/function/definition/with_return_type.carbon

@@ -15,11 +15,11 @@ fn foo() -> f64 {
 // CHECK:STDOUT:         {kind: 'Name', text: 'foo'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'f64'},
+// CHECK:STDOUT:           {kind: 'FloatingPointTypeLiteral', text: 'f64'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7},
 // CHECK:STDOUT:         {kind: 'ReturnStatementStart', text: 'return'},
-// CHECK:STDOUT:         {kind: 'Literal', text: '42'},
+// CHECK:STDOUT:         {kind: 'IntegerLiteral', text: '42'},
 // CHECK:STDOUT:       {kind: 'ReturnStatement', text: ';', subtree_size: 3},
 // CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 11},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},

+ 2 - 2
toolchain/parse/testdata/generics/deduced_params/fail_no_parens.carbon

@@ -36,7 +36,7 @@ interface Bar[a: i32] {}
 // CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
 // CHECK:STDOUT:         {kind: 'ImplicitParamListStart', text: '['},
 // CHECK:STDOUT:           {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'ImplicitParamList', text: ']', subtree_size: 5},
 // CHECK:STDOUT:     {kind: 'ClassDecl', text: ';', has_error: yes, subtree_size: 8},
@@ -49,7 +49,7 @@ interface Bar[a: i32] {}
 // CHECK:STDOUT:       {kind: 'Name', text: 'Bar'},
 // CHECK:STDOUT:         {kind: 'ImplicitParamListStart', text: '['},
 // CHECK:STDOUT:           {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'ImplicitParamList', text: ']', subtree_size: 5},
 // CHECK:STDOUT:     {kind: 'InterfaceDecl', text: 'interface', has_error: yes, subtree_size: 8},

+ 2 - 2
toolchain/parse/testdata/generics/deduced_params/one.carbon

@@ -15,7 +15,7 @@ interface Bar[a: i32]() {}
 // CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
 // CHECK:STDOUT:         {kind: 'ImplicitParamListStart', text: '['},
 // CHECK:STDOUT:           {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'ImplicitParamList', text: ']', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
@@ -25,7 +25,7 @@ interface Bar[a: i32]() {}
 // CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
 // CHECK:STDOUT:           {kind: 'ImplicitParamListStart', text: '['},
 // CHECK:STDOUT:             {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ImplicitParamList', text: ']', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},

+ 2 - 2
toolchain/parse/testdata/generics/deduced_params/one_suffix_comma.carbon

@@ -15,7 +15,7 @@ interface Bar[a: i32,]() {}
 // CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
 // CHECK:STDOUT:         {kind: 'ImplicitParamListStart', text: '['},
 // CHECK:STDOUT:           {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:       {kind: 'ImplicitParamList', text: ']', subtree_size: 6},
@@ -26,7 +26,7 @@ interface Bar[a: i32,]() {}
 // CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
 // CHECK:STDOUT:           {kind: 'ImplicitParamListStart', text: '['},
 // CHECK:STDOUT:             {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:         {kind: 'ImplicitParamList', text: ']', subtree_size: 6},

+ 12 - 12
toolchain/parse/testdata/generics/deduced_params/six.carbon

@@ -15,27 +15,27 @@ interface Bar[a: i32, b: i32, c: i32, d: i32, e: i32, f: i32]() {}
 // CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
 // CHECK:STDOUT:         {kind: 'ImplicitParamListStart', text: '['},
 // CHECK:STDOUT:           {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'Name', text: 'c'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'Name', text: 'd'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'Name', text: 'e'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'Name', text: 'f'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'ImplicitParamList', text: ']', subtree_size: 25},
 // CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
@@ -45,27 +45,27 @@ interface Bar[a: i32, b: i32, c: i32, d: i32, e: i32, f: i32]() {}
 // CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
 // CHECK:STDOUT:           {kind: 'ImplicitParamListStart', text: '['},
 // CHECK:STDOUT:             {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'Name', text: 'c'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'Name', text: 'd'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'Name', text: 'e'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'Name', text: 'f'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ImplicitParamList', text: ']', subtree_size: 25},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},

+ 4 - 4
toolchain/parse/testdata/generics/deduced_params/two.carbon

@@ -15,11 +15,11 @@ interface Bar[a: i32, b: i32]() {}
 // CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
 // CHECK:STDOUT:         {kind: 'ImplicitParamListStart', text: '['},
 // CHECK:STDOUT:           {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'ImplicitParamList', text: ']', subtree_size: 9},
 // CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
@@ -29,11 +29,11 @@ interface Bar[a: i32, b: i32]() {}
 // CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
 // CHECK:STDOUT:           {kind: 'ImplicitParamListStart', text: '['},
 // CHECK:STDOUT:             {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ImplicitParamList', text: ']', subtree_size: 9},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},

+ 4 - 4
toolchain/parse/testdata/generics/deduced_params/two_suffix_comma.carbon

@@ -15,11 +15,11 @@ interface Bar[a: i32, b: i32,]() {}
 // CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
 // CHECK:STDOUT:         {kind: 'ImplicitParamListStart', text: '['},
 // CHECK:STDOUT:           {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:       {kind: 'ImplicitParamList', text: ']', subtree_size: 10},
@@ -30,11 +30,11 @@ interface Bar[a: i32, b: i32,]() {}
 // CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
 // CHECK:STDOUT:           {kind: 'ImplicitParamListStart', text: '['},
 // CHECK:STDOUT:             {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:         {kind: 'ImplicitParamList', text: ']', subtree_size: 10},

+ 1 - 1
toolchain/parse/testdata/generics/generic_params/basic.carbon

@@ -13,7 +13,7 @@ fn foo(a:! i32);
 // CHECK:STDOUT:       {kind: 'Name', text: 'foo'},
 // CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:           {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'GenericPatternBinding', text: ':!', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 5},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 8},

+ 1 - 1
toolchain/parse/testdata/generics/generic_params/template.carbon

@@ -13,7 +13,7 @@ fn foo(template a:! i32);
 // CHECK:STDOUT:       {kind: 'Name', text: 'foo'},
 // CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:             {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'GenericPatternBinding', text: ':!', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'Template', text: 'template', subtree_size: 4},
 // CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 6},

+ 1 - 1
toolchain/parse/testdata/generics/generic_params/template_addr.carbon

@@ -13,7 +13,7 @@ fn foo(template addr a:! i32);
 // CHECK:STDOUT:       {kind: 'Name', text: 'foo'},
 // CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:               {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:               {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:             {kind: 'GenericPatternBinding', text: ':!', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'Address', text: 'addr', subtree_size: 4},
 // CHECK:STDOUT:         {kind: 'Template', text: 'template', subtree_size: 5},

+ 2 - 2
toolchain/parse/testdata/generics/params/one.carbon

@@ -15,7 +15,7 @@ interface Bar(a: i32) {}
 // CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
 // CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:           {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 5},
 // CHECK:STDOUT:     {kind: 'ClassDecl', text: ';', subtree_size: 8},
@@ -23,7 +23,7 @@ interface Bar(a: i32) {}
 // CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:             {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 5},
 // CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 8},

+ 2 - 2
toolchain/parse/testdata/generics/params/one_suffix_comma.carbon

@@ -15,7 +15,7 @@ interface Bar(a: i32,) {}
 // CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
 // CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:           {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 6},
@@ -24,7 +24,7 @@ interface Bar(a: i32,) {}
 // CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:             {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 6},

+ 12 - 12
toolchain/parse/testdata/generics/params/six.carbon

@@ -15,27 +15,27 @@ interface Bar(a: i32, b: i32, c: i32, d: i32, e: i32, f: i32) {}
 // CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
 // CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:           {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'Name', text: 'c'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'Name', text: 'd'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'Name', text: 'e'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'Name', text: 'f'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 25},
 // CHECK:STDOUT:     {kind: 'ClassDecl', text: ';', subtree_size: 28},
@@ -43,27 +43,27 @@ interface Bar(a: i32, b: i32, c: i32, d: i32, e: i32, f: i32) {}
 // CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:             {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'Name', text: 'c'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'Name', text: 'd'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'Name', text: 'e'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'Name', text: 'f'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 25},
 // CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 28},

+ 4 - 4
toolchain/parse/testdata/generics/params/two.carbon

@@ -15,11 +15,11 @@ interface Bar(a: i32, b: i32) {}
 // CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
 // CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:           {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 9},
 // CHECK:STDOUT:     {kind: 'ClassDecl', text: ';', subtree_size: 12},
@@ -27,11 +27,11 @@ interface Bar(a: i32, b: i32) {}
 // CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:             {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 9},
 // CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 12},

+ 4 - 4
toolchain/parse/testdata/generics/params/two_suffix_comma.carbon

@@ -15,11 +15,11 @@ interface Bar(a: i32, b: i32,) {}
 // CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
 // CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:           {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 10},
@@ -28,11 +28,11 @@ interface Bar(a: i32, b: i32,) {}
 // CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:             {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 10},

+ 4 - 4
toolchain/parse/testdata/if_expression/basic.carbon

@@ -15,18 +15,18 @@ fn F(b: bool, x: i32, y: i32) -> bool {
 // CHECK:STDOUT:         {kind: 'Name', text: 'F'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:             {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'bool'},
+// CHECK:STDOUT:             {kind: 'BoolTypeLiteral', text: 'bool'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'Name', text: 'x'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'Name', text: 'y'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 13},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'bool'},
+// CHECK:STDOUT:           {kind: 'BoolTypeLiteral', text: 'bool'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 18},
 // CHECK:STDOUT:         {kind: 'ReturnStatementStart', text: 'return'},

+ 1 - 1
toolchain/parse/testdata/if_expression/fail_condition_missing.carbon

@@ -21,7 +21,7 @@ fn F() {
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:             {kind: 'InvalidParse', text: ';', has_error: yes},

+ 3 - 3
toolchain/parse/testdata/if_expression/fail_else_expr_missing.carbon

@@ -21,12 +21,12 @@ fn F() {
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'true'},
+// CHECK:STDOUT:             {kind: 'BoolLiteralTrue', text: 'true'},
 // CHECK:STDOUT:           {kind: 'IfExprIf', text: 'if', subtree_size: 2},
-// CHECK:STDOUT:             {kind: 'Literal', text: '1'},
+// CHECK:STDOUT:             {kind: 'IntegerLiteral', text: '1'},
 // CHECK:STDOUT:           {kind: 'IfExprThen', text: 'then', subtree_size: 2},
 // CHECK:STDOUT:           {kind: 'InvalidParse', text: ';', has_error: yes},
 // CHECK:STDOUT:         {kind: 'IfExprElse', text: 'else', has_error: yes, subtree_size: 6},

+ 3 - 3
toolchain/parse/testdata/if_expression/fail_else_missing.carbon

@@ -21,12 +21,12 @@ fn F() {
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'true'},
+// CHECK:STDOUT:             {kind: 'BoolLiteralTrue', text: 'true'},
 // CHECK:STDOUT:           {kind: 'IfExprIf', text: 'if', subtree_size: 2},
-// CHECK:STDOUT:             {kind: 'Literal', text: '1'},
+// CHECK:STDOUT:             {kind: 'IntegerLiteral', text: '1'},
 // CHECK:STDOUT:           {kind: 'IfExprThen', text: 'then', subtree_size: 2},
 // CHECK:STDOUT:           {kind: 'InvalidParse', text: ';', has_error: yes},
 // CHECK:STDOUT:         {kind: 'IfExprElse', text: 'if', has_error: yes, subtree_size: 6},

+ 2 - 2
toolchain/parse/testdata/if_expression/fail_then_expr_missing.carbon

@@ -21,10 +21,10 @@ fn F() {
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'true'},
+// CHECK:STDOUT:             {kind: 'BoolLiteralTrue', text: 'true'},
 // CHECK:STDOUT:           {kind: 'IfExprIf', text: 'if', subtree_size: 2},
 // CHECK:STDOUT:             {kind: 'InvalidParse', text: ';', has_error: yes},
 // CHECK:STDOUT:           {kind: 'IfExprThen', text: 'then', has_error: yes, subtree_size: 2},

+ 2 - 2
toolchain/parse/testdata/if_expression/fail_then_missing.carbon

@@ -21,10 +21,10 @@ fn F() {
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'true'},
+// CHECK:STDOUT:             {kind: 'BoolLiteralTrue', text: 'true'},
 // CHECK:STDOUT:           {kind: 'IfExprIf', text: 'if', subtree_size: 2},
 // CHECK:STDOUT:           {kind: 'InvalidParse', text: ';', has_error: yes},
 // CHECK:STDOUT:           {kind: 'InvalidParse', text: ';', has_error: yes},

+ 1 - 1
toolchain/parse/testdata/if_expression/fail_top_level_if.carbon

@@ -26,7 +26,7 @@ fn F() {
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'IfConditionStart', text: 'if', has_error: yes},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'true'},
+// CHECK:STDOUT:           {kind: 'BoolLiteralTrue', text: 'true'},
 // CHECK:STDOUT:         {kind: 'IfCondition', text: 'if', has_error: yes, subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'CodeBlockStart', text: 'then', has_error: yes},
 // CHECK:STDOUT:             {kind: 'InvalidParse', text: 'then', has_error: yes},

+ 5 - 5
toolchain/parse/testdata/if_expression/in_type.carbon

@@ -15,24 +15,24 @@ fn F() -> if true then i32 else i32* {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'F'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:               {kind: 'Literal', text: 'true'},
+// CHECK:STDOUT:               {kind: 'BoolLiteralTrue', text: 'true'},
 // CHECK:STDOUT:             {kind: 'IfExprIf', text: 'if', subtree_size: 2},
-// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:               {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:             {kind: 'IfExprThen', text: 'then', subtree_size: 2},
-// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:               {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:             {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:           {kind: 'IfExprElse', text: 'else', subtree_size: 7},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 8},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 13},
 // CHECK:STDOUT:         {kind: 'ReturnStatementStart', text: 'return'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'true'},
+// CHECK:STDOUT:             {kind: 'BoolLiteralTrue', text: 'true'},
 // CHECK:STDOUT:           {kind: 'IfExprIf', text: 'if', subtree_size: 2},
 // CHECK:STDOUT:             {kind: 'NameExpr', text: 'n'},
 // CHECK:STDOUT:           {kind: 'IfExprThen', text: 'then', subtree_size: 2},

+ 2 - 2
toolchain/parse/testdata/if_expression/precedence.carbon

@@ -15,10 +15,10 @@ fn F(b: bool) -> bool {
 // CHECK:STDOUT:         {kind: 'Name', text: 'F'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:             {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'bool'},
+// CHECK:STDOUT:             {kind: 'BoolTypeLiteral', text: 'bool'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 5},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'bool'},
+// CHECK:STDOUT:           {kind: 'BoolTypeLiteral', text: 'bool'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 10},
 // CHECK:STDOUT:         {kind: 'ReturnStatementStart', text: 'return'},

+ 2 - 2
toolchain/parse/testdata/index/assign_to_var.carbon

@@ -11,12 +11,12 @@ var v: i32 = t[0];
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'v'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:           {kind: 'NameExpr', text: 't'},
 // CHECK:STDOUT:         {kind: 'IndexExprStart', text: '[', subtree_size: 2},
-// CHECK:STDOUT:         {kind: 'Literal', text: '0'},
+// CHECK:STDOUT:         {kind: 'IntegerLiteral', text: '0'},
 // CHECK:STDOUT:       {kind: 'IndexExpr', text: ']', subtree_size: 4},
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 10},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},

+ 1 - 1
toolchain/parse/testdata/index/fail_empty_expr.carbon

@@ -14,7 +14,7 @@ var v: i32 = t[];
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'v'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:           {kind: 'NameExpr', text: 't'},

+ 2 - 2
toolchain/parse/testdata/index/fail_malformed_expr.carbon

@@ -14,12 +14,12 @@ var v: i32 = t[0,];
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'v'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:           {kind: 'NameExpr', text: 't'},
 // CHECK:STDOUT:         {kind: 'IndexExprStart', text: '[', subtree_size: 2},
-// CHECK:STDOUT:         {kind: 'Literal', text: '0'},
+// CHECK:STDOUT:         {kind: 'IntegerLiteral', text: '0'},
 // CHECK:STDOUT:       {kind: 'IndexExpr', text: ']', has_error: yes, subtree_size: 4},
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 10},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},

+ 1 - 1
toolchain/parse/testdata/let/fail_bad_name.carbon

@@ -17,7 +17,7 @@ let ? = 4;
 // CHECK:STDOUT:         {kind: 'InvalidParse', text: '?', has_error: yes},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: '?', has_error: yes, subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'LetInitializer', text: '='},
-// CHECK:STDOUT:       {kind: 'Literal', text: '4'},
+// CHECK:STDOUT:       {kind: 'IntegerLiteral', text: '4'},
 // CHECK:STDOUT:     {kind: 'LetDecl', text: ';', subtree_size: 7},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
 // CHECK:STDOUT:   ]

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

@@ -17,7 +17,7 @@ let a = 4;
 // CHECK:STDOUT:         {kind: 'InvalidParse', text: '=', has_error: yes},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: 'a', has_error: yes, subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'LetInitializer', text: '='},
-// CHECK:STDOUT:       {kind: 'Literal', text: '4'},
+// CHECK:STDOUT:       {kind: 'IntegerLiteral', text: '4'},
 // CHECK:STDOUT:     {kind: 'LetDecl', text: ';', subtree_size: 7},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
 // CHECK:STDOUT:   ]

+ 2 - 2
toolchain/parse/testdata/let/fail_missing_value.carbon

@@ -21,7 +21,7 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'LetIntroducer', text: 'let'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:     {kind: 'LetDecl', text: ';', has_error: yes, subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
@@ -31,7 +31,7 @@ fn F() {
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'LetIntroducer', text: 'let'},
 // CHECK:STDOUT:           {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'LetDecl', text: ';', has_error: yes, subtree_size: 5},
 // CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 11},

+ 4 - 4
toolchain/parse/testdata/let/let.carbon

@@ -14,10 +14,10 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'LetIntroducer', text: 'let'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'v'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'LetInitializer', text: '='},
-// CHECK:STDOUT:       {kind: 'Literal', text: '0'},
+// CHECK:STDOUT:       {kind: 'IntegerLiteral', text: '0'},
 // CHECK:STDOUT:     {kind: 'LetDecl', text: ';', subtree_size: 7},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'F'},
@@ -26,10 +26,10 @@ fn F() {
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'LetIntroducer', text: 'let'},
 // CHECK:STDOUT:           {kind: 'Name', text: 's'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'String'},
+// CHECK:STDOUT:           {kind: 'StringTypeLiteral', text: 'String'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'LetInitializer', text: '='},
-// CHECK:STDOUT:         {kind: 'Literal', text: '"hello"'},
+// CHECK:STDOUT:         {kind: 'StringLiteral', text: '"hello"'},
 // CHECK:STDOUT:       {kind: 'LetDecl', text: ';', subtree_size: 7},
 // CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 13},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},

+ 4 - 4
toolchain/parse/testdata/operators/assign.carbon

@@ -32,17 +32,17 @@ fn F() {
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:         {kind: 'Literal', text: '0'},
+// CHECK:STDOUT:         {kind: 'IntegerLiteral', text: '0'},
 // CHECK:STDOUT:       {kind: 'VariableDecl', text: ';', subtree_size: 7},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:         {kind: 'Literal', text: '1'},
+// CHECK:STDOUT:         {kind: 'IntegerLiteral', text: '1'},
 // CHECK:STDOUT:       {kind: 'VariableDecl', text: ';', subtree_size: 7},
 // CHECK:STDOUT:           {kind: 'NameExpr', text: 'a'},
 // CHECK:STDOUT:           {kind: 'NameExpr', text: 'b'},

+ 3 - 3
toolchain/parse/testdata/operators/fail_chained_assign.carbon

@@ -25,18 +25,18 @@ fn F() {
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableDecl', text: ';', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableDecl', text: ';', subtree_size: 5},
 // CHECK:STDOUT:             {kind: 'NameExpr', text: 'a'},
 // CHECK:STDOUT:             {kind: 'NameExpr', text: 'b'},
 // CHECK:STDOUT:           {kind: 'InfixOperator', text: '=', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'Literal', text: '1'},
+// CHECK:STDOUT:           {kind: 'IntegerLiteral', text: '1'},
 // CHECK:STDOUT:         {kind: 'InfixOperator', text: '=', has_error: yes, subtree_size: 5},
 // CHECK:STDOUT:       {kind: 'ExprStatement', text: ';', subtree_size: 6},
 // CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 22},

+ 1 - 1
toolchain/parse/testdata/operators/fail_infix_uneven_space_after.carbon

@@ -16,7 +16,7 @@ var n: i8 = n* n;
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i8'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i8'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:         {kind: 'NameExpr', text: 'n'},

+ 3 - 3
toolchain/parse/testdata/operators/fail_invalid_infix.carbon

@@ -25,7 +25,7 @@ var c: i32 = == ;
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:         {kind: 'NameExpr', text: 'n'},
@@ -34,7 +34,7 @@ var c: i32 = == ;
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 9},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:         {kind: 'InvalidParse', text: '==', has_error: yes},
@@ -43,7 +43,7 @@ var c: i32 = == ;
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 9},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'c'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:         {kind: 'InvalidParse', text: '==', has_error: yes},

+ 2 - 2
toolchain/parse/testdata/operators/fail_postincrement.carbon

@@ -27,10 +27,10 @@ fn F() {
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:         {kind: 'Literal', text: '0'},
+// CHECK:STDOUT:         {kind: 'IntegerLiteral', text: '0'},
 // CHECK:STDOUT:       {kind: 'VariableDecl', text: ';', subtree_size: 7},
 // CHECK:STDOUT:         {kind: 'NameExpr', text: 'n'},
 // CHECK:STDOUT:       {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 2},

+ 9 - 9
toolchain/parse/testdata/operators/fail_precedence_as.carbon

@@ -29,25 +29,25 @@ fn F(n: i32) {
 // CHECK:STDOUT:         {kind: 'Name', text: 'F'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:             {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 5},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 8},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'true'},
+// CHECK:STDOUT:             {kind: 'BoolLiteralTrue', text: 'true'},
 // CHECK:STDOUT:           {kind: 'PrefixOperator', text: 'not', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'bool'},
+// CHECK:STDOUT:           {kind: 'BoolTypeLiteral', text: 'bool'},
 // CHECK:STDOUT:         {kind: 'InfixOperator', text: 'as', has_error: yes, subtree_size: 4},
 // CHECK:STDOUT:       {kind: 'ExprStatement', text: ';', subtree_size: 5},
-// CHECK:STDOUT:             {kind: 'Literal', text: '1'},
-// CHECK:STDOUT:             {kind: 'Literal', text: '1'},
+// CHECK:STDOUT:             {kind: 'IntegerLiteral', text: '1'},
+// CHECK:STDOUT:             {kind: 'IntegerLiteral', text: '1'},
 // CHECK:STDOUT:           {kind: 'InfixOperator', text: '+', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'InfixOperator', text: 'as', has_error: yes, subtree_size: 5},
 // CHECK:STDOUT:       {kind: 'ExprStatement', text: ';', subtree_size: 6},
-// CHECK:STDOUT:             {kind: 'Literal', text: '5'},
-// CHECK:STDOUT:             {kind: 'Literal', text: '2'},
+// CHECK:STDOUT:             {kind: 'IntegerLiteral', text: '5'},
+// CHECK:STDOUT:             {kind: 'IntegerLiteral', text: '2'},
 // CHECK:STDOUT:           {kind: 'InfixOperator', text: '%', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'InfixOperator', text: 'as', has_error: yes, subtree_size: 5},
 // CHECK:STDOUT:       {kind: 'ExprStatement', text: ';', subtree_size: 6},
 // CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 26},

+ 3 - 3
toolchain/parse/testdata/operators/fail_precedence_assign.carbon

@@ -39,17 +39,17 @@ fn F() {
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableDecl', text: ';', subtree_size: 5},
-// CHECK:STDOUT:           {kind: 'Literal', text: '1'},
+// CHECK:STDOUT:           {kind: 'IntegerLiteral', text: '1'},
 // CHECK:STDOUT:             {kind: 'ParenExprOrTupleLiteralStart', text: '('},
 // CHECK:STDOUT:             {kind: 'NameExpr', text: 'a'},
 // CHECK:STDOUT:           {kind: 'ParenExpr', text: ')', has_error: yes, subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'InfixOperator', text: '+', subtree_size: 5},
 // CHECK:STDOUT:       {kind: 'ExprStatement', text: ';', subtree_size: 6},
 // CHECK:STDOUT:           {kind: 'ParenExprOrTupleLiteralStart', text: '('},
-// CHECK:STDOUT:               {kind: 'Literal', text: 'true'},
+// CHECK:STDOUT:               {kind: 'BoolLiteralTrue', text: 'true'},
 // CHECK:STDOUT:             {kind: 'IfExprIf', text: 'if', subtree_size: 2},
 // CHECK:STDOUT:               {kind: 'NameExpr', text: 'a'},
 // CHECK:STDOUT:             {kind: 'IfExprThen', text: 'then', subtree_size: 2},

+ 1 - 1
toolchain/parse/testdata/operators/fail_precedence_star_minus.carbon

@@ -14,7 +14,7 @@ var n: i8 = n* -n;
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i8'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i8'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:           {kind: 'NameExpr', text: 'n'},

+ 1 - 1
toolchain/parse/testdata/operators/fail_precedence_star_star.carbon

@@ -14,7 +14,7 @@ var n: i8 = n* *p;
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i8'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i8'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:           {kind: 'NameExpr', text: 'n'},

+ 1 - 1
toolchain/parse/testdata/operators/fail_star_star_no_space.carbon

@@ -18,7 +18,7 @@ var n: i8 = n**p;
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i8'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i8'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:           {kind: 'NameExpr', text: 'n'},

+ 1 - 1
toolchain/parse/testdata/operators/fixity_in_call.carbon

@@ -18,7 +18,7 @@ fn F() {
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:             {kind: 'NameExpr', text: 'G'},
 // CHECK:STDOUT:           {kind: 'CallExprStart', text: '(', subtree_size: 2},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:           {kind: 'CallExprComma', text: ','},
 // CHECK:STDOUT:             {kind: 'NameExpr', text: 'n'},

+ 2 - 2
toolchain/parse/testdata/operators/fixity_in_params.carbon

@@ -14,12 +14,12 @@ fn F(p: i32*, n: i32) {
 // CHECK:STDOUT:         {kind: 'Name', text: 'F'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:             {kind: 'Name', text: 'p'},
-// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:               {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:             {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 4},
 // CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 10},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 13},

+ 3 - 3
toolchain/parse/testdata/operators/fixity_in_var.carbon

@@ -19,7 +19,7 @@ fn F() {
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'Name', text: 'q'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 4},
 // CHECK:STDOUT:         {kind: 'VariableInitializer', text: '='},
@@ -27,10 +27,10 @@ fn F() {
 // CHECK:STDOUT:       {kind: 'VariableDecl', text: ';', subtree_size: 8},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'Name', text: 't'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'type'},
+// CHECK:STDOUT:           {kind: 'TypeTypeLiteral', text: 'type'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'VariableDecl', text: ';', subtree_size: 8},
 // CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 22},

+ 1 - 1
toolchain/parse/testdata/operators/infix.carbon

@@ -11,7 +11,7 @@ var n: i8 = n * n;
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i8'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i8'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:         {kind: 'NameExpr', text: 'n'},

+ 1 - 1
toolchain/parse/testdata/operators/infix_no_space.carbon

@@ -11,7 +11,7 @@ var n: i8 = n*n;
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i8'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i8'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:         {kind: 'NameExpr', text: 'n'},

+ 2 - 2
toolchain/parse/testdata/operators/infix_with_paren_after.carbon

@@ -11,10 +11,10 @@ var n: i8 = 3*(n);
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i8'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i8'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:         {kind: 'Literal', text: '3'},
+// CHECK:STDOUT:         {kind: 'IntegerLiteral', text: '3'},
 // CHECK:STDOUT:           {kind: 'ParenExprOrTupleLiteralStart', text: '('},
 // CHECK:STDOUT:           {kind: 'NameExpr', text: 'n'},
 // CHECK:STDOUT:         {kind: 'ParenExpr', text: ')', subtree_size: 3},

+ 2 - 2
toolchain/parse/testdata/operators/infix_with_paren_before.carbon

@@ -11,13 +11,13 @@ var n: i8 = (n)*3;
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i8'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i8'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:           {kind: 'ParenExprOrTupleLiteralStart', text: '('},
 // CHECK:STDOUT:           {kind: 'NameExpr', text: 'n'},
 // CHECK:STDOUT:         {kind: 'ParenExpr', text: ')', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'Literal', text: '3'},
+// CHECK:STDOUT:         {kind: 'IntegerLiteral', text: '3'},
 // CHECK:STDOUT:       {kind: 'InfixOperator', text: '*', subtree_size: 5},
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 11},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},

+ 2 - 2
toolchain/parse/testdata/operators/postfix.carbon

@@ -11,10 +11,10 @@ var v: type = i8*;
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'v'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'type'},
+// CHECK:STDOUT:         {kind: 'TypeTypeLiteral', text: 'type'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i8'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i8'},
 // CHECK:STDOUT:       {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 8},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},

+ 1 - 1
toolchain/parse/testdata/operators/postfix_repeat.carbon

@@ -16,7 +16,7 @@ fn F() {
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:                 {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:                 {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:               {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:             {kind: 'PostfixOperator', text: '*', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'PostfixOperator', text: '*', subtree_size: 4},

+ 2 - 2
toolchain/parse/testdata/operators/postfix_space_after_op.carbon

@@ -11,10 +11,10 @@ var v: type = i8* ;
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'v'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'type'},
+// CHECK:STDOUT:         {kind: 'TypeTypeLiteral', text: 'type'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i8'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i8'},
 // CHECK:STDOUT:       {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 8},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},

+ 11 - 11
toolchain/parse/testdata/operators/precedence_as.carbon

@@ -20,38 +20,38 @@ fn F(n: i32) {
 // CHECK:STDOUT:         {kind: 'Name', text: 'F'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:             {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 5},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 8},
 // CHECK:STDOUT:             {kind: 'NameExpr', text: 'n'},
 // CHECK:STDOUT:           {kind: 'PrefixOperator', text: '-', subtree_size: 2},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PrefixOperator', text: 'const', subtree_size: 2},
 // CHECK:STDOUT:         {kind: 'InfixOperator', text: 'as', subtree_size: 5},
 // CHECK:STDOUT:       {kind: 'ExprStatement', text: ';', subtree_size: 6},
 // CHECK:STDOUT:             {kind: 'NameExpr', text: 'n'},
 // CHECK:STDOUT:           {kind: 'PrefixOperator', text: '&', subtree_size: 2},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:         {kind: 'InfixOperator', text: 'as', subtree_size: 5},
 // CHECK:STDOUT:       {kind: 'ExprStatement', text: ';', subtree_size: 6},
 // CHECK:STDOUT:           {kind: 'IfConditionStart', text: '('},
-// CHECK:STDOUT:                       {kind: 'Literal', text: '1'},
-// CHECK:STDOUT:                       {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:                       {kind: 'IntegerLiteral', text: '1'},
+// CHECK:STDOUT:                       {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:                     {kind: 'InfixOperator', text: 'as', subtree_size: 3},
-// CHECK:STDOUT:                       {kind: 'Literal', text: '2'},
-// CHECK:STDOUT:                       {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:                       {kind: 'IntegerLiteral', text: '2'},
+// CHECK:STDOUT:                       {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:                     {kind: 'InfixOperator', text: 'as', subtree_size: 3},
 // CHECK:STDOUT:                   {kind: 'InfixOperator', text: '<', subtree_size: 7},
 // CHECK:STDOUT:                 {kind: 'ShortCircuitOperand', text: 'and', subtree_size: 8},
-// CHECK:STDOUT:                   {kind: 'Literal', text: 'true'},
-// CHECK:STDOUT:                   {kind: 'Literal', text: 'bool'},
+// CHECK:STDOUT:                   {kind: 'BoolLiteralTrue', text: 'true'},
+// CHECK:STDOUT:                   {kind: 'BoolTypeLiteral', text: 'bool'},
 // CHECK:STDOUT:                 {kind: 'InfixOperator', text: 'as', subtree_size: 3},
 // CHECK:STDOUT:               {kind: 'InfixOperator', text: 'and', subtree_size: 12},
 // CHECK:STDOUT:             {kind: 'ShortCircuitOperand', text: 'and', subtree_size: 13},
-// CHECK:STDOUT:               {kind: 'Literal', text: 'false'},
-// CHECK:STDOUT:               {kind: 'Literal', text: 'bool'},
+// CHECK:STDOUT:               {kind: 'BoolLiteralFalse', text: 'false'},
+// CHECK:STDOUT:               {kind: 'BoolTypeLiteral', text: 'bool'},
 // CHECK:STDOUT:             {kind: 'InfixOperator', text: 'as', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'InfixOperator', text: 'and', subtree_size: 17},
 // CHECK:STDOUT:         {kind: 'IfCondition', text: ')', subtree_size: 19},

+ 8 - 8
toolchain/parse/testdata/operators/precedence_assign.carbon

@@ -20,23 +20,23 @@ fn F(c: bool) {
 // CHECK:STDOUT:         {kind: 'Name', text: 'F'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:             {kind: 'Name', text: 'c'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'bool'},
+// CHECK:STDOUT:             {kind: 'BoolTypeLiteral', text: 'bool'},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 5},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 8},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableDecl', text: ';', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableDecl', text: ';', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'Name', text: 'p'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 4},
 // CHECK:STDOUT:       {kind: 'VariableDecl', text: ';', subtree_size: 6},
@@ -44,9 +44,9 @@ fn F(c: bool) {
 // CHECK:STDOUT:           {kind: 'PrefixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:               {kind: 'NameExpr', text: 'c'},
 // CHECK:STDOUT:             {kind: 'IfExprIf', text: 'if', subtree_size: 2},
-// CHECK:STDOUT:               {kind: 'Literal', text: '1'},
+// CHECK:STDOUT:               {kind: 'IntegerLiteral', text: '1'},
 // CHECK:STDOUT:             {kind: 'IfExprThen', text: 'then', subtree_size: 2},
-// CHECK:STDOUT:             {kind: 'Literal', text: '2'},
+// CHECK:STDOUT:             {kind: 'IntegerLiteral', text: '2'},
 // CHECK:STDOUT:           {kind: 'IfExprElse', text: 'else', subtree_size: 6},
 // CHECK:STDOUT:         {kind: 'InfixOperator', text: '=', subtree_size: 9},
 // CHECK:STDOUT:       {kind: 'ExprStatement', text: ';', subtree_size: 10},
@@ -60,9 +60,9 @@ fn F(c: bool) {
 // CHECK:STDOUT:           {kind: 'ParenExpr', text: ')', subtree_size: 8},
 // CHECK:STDOUT:               {kind: 'NameExpr', text: 'c'},
 // CHECK:STDOUT:             {kind: 'IfExprIf', text: 'if', subtree_size: 2},
-// CHECK:STDOUT:               {kind: 'Literal', text: '1'},
+// CHECK:STDOUT:               {kind: 'IntegerLiteral', text: '1'},
 // CHECK:STDOUT:             {kind: 'IfExprThen', text: 'then', subtree_size: 2},
-// CHECK:STDOUT:             {kind: 'Literal', text: '2'},
+// CHECK:STDOUT:             {kind: 'IntegerLiteral', text: '2'},
 // CHECK:STDOUT:           {kind: 'IfExprElse', text: 'else', subtree_size: 6},
 // CHECK:STDOUT:         {kind: 'InfixOperator', text: '+=', subtree_size: 15},
 // CHECK:STDOUT:       {kind: 'ExprStatement', text: ';', subtree_size: 16},

+ 1 - 1
toolchain/parse/testdata/operators/precedence_unary.carbon

@@ -20,7 +20,7 @@ fn F(p: i32*) {
 // CHECK:STDOUT:         {kind: 'Name', text: 'F'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:             {kind: 'Name', text: 'p'},
-// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:               {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:             {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 4},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 6},

+ 3 - 3
toolchain/parse/testdata/operators/prefix.carbon

@@ -12,7 +12,7 @@ var b: bool = not true;
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i8'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i8'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:         {kind: 'NameExpr', text: 'n'},
@@ -20,10 +20,10 @@ var b: bool = not true;
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 8},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'bool'},
+// CHECK:STDOUT:         {kind: 'BoolTypeLiteral', text: 'bool'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'true'},
+// CHECK:STDOUT:         {kind: 'BoolLiteralTrue', text: 'true'},
 // CHECK:STDOUT:       {kind: 'PrefixOperator', text: 'not', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 8},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},

+ 1 - 1
toolchain/parse/testdata/operators/prefix_no_space.carbon

@@ -12,7 +12,7 @@ var n: i8 =-n;
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i8'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i8'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:         {kind: 'NameExpr', text: 'n'},

+ 1 - 1
toolchain/parse/testdata/operators/recover_infix_uneven_space_before.carbon

@@ -14,7 +14,7 @@ var n: i8 = n *n;
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i8'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i8'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:         {kind: 'NameExpr', text: 'n'},

+ 2 - 2
toolchain/parse/testdata/operators/recover_postfix_space.carbon

@@ -14,10 +14,10 @@ var v: type = i8 *;
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'v'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'type'},
+// CHECK:STDOUT:         {kind: 'TypeTypeLiteral', text: 'type'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i8'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i8'},
 // CHECK:STDOUT:       {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 8},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},

+ 3 - 3
toolchain/parse/testdata/operators/recover_postfix_space_before_comma.carbon

@@ -14,15 +14,15 @@ var n: i8 = F(i8 *, 0);
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i8'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i8'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:           {kind: 'NameExpr', text: 'F'},
 // CHECK:STDOUT:         {kind: 'CallExprStart', text: '(', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i8'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i8'},
 // CHECK:STDOUT:         {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:         {kind: 'CallExprComma', text: ','},
-// CHECK:STDOUT:         {kind: 'Literal', text: '0'},
+// CHECK:STDOUT:         {kind: 'IntegerLiteral', text: '0'},
 // CHECK:STDOUT:       {kind: 'CallExpr', text: ')', subtree_size: 7},
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 13},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},

+ 2 - 2
toolchain/parse/testdata/operators/recover_postfix_space_in_call.carbon

@@ -14,12 +14,12 @@ var n: i8 = F(i8 *);
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i8'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i8'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:           {kind: 'NameExpr', text: 'F'},
 // CHECK:STDOUT:         {kind: 'CallExprStart', text: '(', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i8'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i8'},
 // CHECK:STDOUT:         {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'CallExpr', text: ')', subtree_size: 5},
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 11},

+ 2 - 2
toolchain/parse/testdata/operators/recover_postfix_space_surrounding.carbon

@@ -14,10 +14,10 @@ var v: type = i8 * ;
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'v'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'type'},
+// CHECK:STDOUT:         {kind: 'TypeTypeLiteral', text: 'type'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i8'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i8'},
 // CHECK:STDOUT:       {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 8},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},

+ 1 - 1
toolchain/parse/testdata/operators/recover_prefix_repeat.carbon

@@ -17,7 +17,7 @@ fn F() -> const const i32* {
 // CHECK:STDOUT:         {kind: 'Name', text: 'F'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:                 {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:                 {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:               {kind: 'PrefixOperator', text: 'const', subtree_size: 2},
 // CHECK:STDOUT:             {kind: 'PrefixOperator', text: 'const', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'PostfixOperator', text: '*', subtree_size: 4},

+ 1 - 1
toolchain/parse/testdata/operators/recover_prefix_space.carbon

@@ -14,7 +14,7 @@ var n: i8 = - n;
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i8'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i8'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:         {kind: 'NameExpr', text: 'n'},

+ 1 - 1
toolchain/parse/testdata/operators/recover_prefix_uneven_space_with_assign.carbon

@@ -14,7 +14,7 @@ var n: i8 =- n;
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i8'},
+// CHECK:STDOUT:         {kind: 'IntegerTypeLiteral', text: 'i8'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
 // CHECK:STDOUT:         {kind: 'NameExpr', text: 'n'},

+ 3 - 3
toolchain/parse/testdata/pointer/const_pointer.carbon

@@ -15,7 +15,7 @@ fn C() -> const (i32*) { return C(); }
 // CHECK:STDOUT:         {kind: 'Name', text: 'A'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:               {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:             {kind: 'PrefixOperator', text: 'const', subtree_size: 2},
 // CHECK:STDOUT:           {kind: 'PostfixOperator', text: '*', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 4},
@@ -31,7 +31,7 @@ fn C() -> const (i32*) { return C(); }
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
 // CHECK:STDOUT:               {kind: 'ParenExprOrTupleLiteralStart', text: '('},
-// CHECK:STDOUT:                 {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:                 {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:               {kind: 'PrefixOperator', text: 'const', subtree_size: 2},
 // CHECK:STDOUT:             {kind: 'ParenExpr', text: ')', subtree_size: 4},
 // CHECK:STDOUT:           {kind: 'PostfixOperator', text: '*', subtree_size: 5},
@@ -48,7 +48,7 @@ fn C() -> const (i32*) { return C(); }
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
 // CHECK:STDOUT:               {kind: 'ParenExprOrTupleLiteralStart', text: '('},
-// CHECK:STDOUT:                 {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:                 {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:               {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:             {kind: 'ParenExpr', text: ')', subtree_size: 4},
 // CHECK:STDOUT:           {kind: 'PrefixOperator', text: 'const', subtree_size: 5},

+ 9 - 9
toolchain/parse/testdata/pointer/fail_pointer_type_in_expression.carbon

@@ -39,15 +39,15 @@ fn H() -> i32 {
 // CHECK:STDOUT:         {kind: 'Name', text: 'F'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7},
 // CHECK:STDOUT:         {kind: 'ReturnStatementStart', text: 'return'},
-// CHECK:STDOUT:               {kind: 'Literal', text: '3'},
-// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:               {kind: 'IntegerLiteral', text: '3'},
+// CHECK:STDOUT:               {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:             {kind: 'InfixOperator', text: '*', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'PostfixOperator', text: '*', has_error: yes, subtree_size: 4},
-// CHECK:STDOUT:           {kind: 'Literal', text: '4'},
+// CHECK:STDOUT:           {kind: 'IntegerLiteral', text: '4'},
 // CHECK:STDOUT:         {kind: 'InfixOperator', text: '*', has_error: yes, subtree_size: 6},
 // CHECK:STDOUT:       {kind: 'ReturnStatement', text: ';', subtree_size: 8},
 // CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 16},
@@ -55,13 +55,13 @@ fn H() -> i32 {
 // CHECK:STDOUT:         {kind: 'Name', text: 'G'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7},
 // CHECK:STDOUT:         {kind: 'ReturnStatementStart', text: 'return'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PostfixOperator', text: '*', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'Literal', text: '4'},
+// CHECK:STDOUT:           {kind: 'IntegerLiteral', text: '4'},
 // CHECK:STDOUT:         {kind: 'InfixOperator', text: '+', has_error: yes, subtree_size: 4},
 // CHECK:STDOUT:       {kind: 'ReturnStatement', text: ';', subtree_size: 6},
 // CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 14},
@@ -69,11 +69,11 @@ fn H() -> i32 {
 // CHECK:STDOUT:         {kind: 'Name', text: 'H'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7},
 // CHECK:STDOUT:         {kind: 'ReturnStatementStart', text: 'return'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PrefixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:         {kind: 'PostfixOperator', text: '*', has_error: yes, subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'ReturnStatement', text: ';', subtree_size: 5},

+ 6 - 6
toolchain/parse/testdata/pointer/pointer_type.carbon

@@ -17,11 +17,11 @@ var T: type = if true then i32* else f64*;
 // CHECK:STDOUT:         {kind: 'Name', text: 'F'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:             {kind: 'Name', text: 'p'},
-// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:               {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:             {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 4},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 6},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 12},
@@ -31,15 +31,15 @@ var T: type = if true then i32* else f64*;
 // CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 16},
 // CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'Name', text: 'T'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'type'},
+// CHECK:STDOUT:         {kind: 'TypeTypeLiteral', text: 'type'},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'true'},
+// CHECK:STDOUT:           {kind: 'BoolLiteralTrue', text: 'true'},
 // CHECK:STDOUT:         {kind: 'IfExprIf', text: 'if', subtree_size: 2},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:         {kind: 'IfExprThen', text: 'then', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'f64'},
+// CHECK:STDOUT:           {kind: 'FloatingPointTypeLiteral', text: 'f64'},
 // CHECK:STDOUT:         {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'IfExprElse', text: 'else', subtree_size: 8},
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 14},

+ 5 - 5
toolchain/parse/testdata/pointer/pointer_value.carbon

@@ -18,19 +18,19 @@ fn F() -> i32 {
 // CHECK:STDOUT:         {kind: 'Name', text: 'F'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:         {kind: 'Literal', text: '0'},
+// CHECK:STDOUT:         {kind: 'IntegerLiteral', text: '0'},
 // CHECK:STDOUT:       {kind: 'VariableDecl', text: ';', subtree_size: 7},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'Name', text: 'p'},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 4},
 // CHECK:STDOUT:         {kind: 'VariableInitializer', text: '='},
@@ -39,7 +39,7 @@ fn F() -> i32 {
 // CHECK:STDOUT:       {kind: 'VariableDecl', text: ';', subtree_size: 9},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'Name', text: 'q'},
-// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:               {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:             {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:           {kind: 'PostfixOperator', text: '*', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 5},

+ 1 - 1
toolchain/parse/testdata/return/fail_returned_no_var.carbon

@@ -18,7 +18,7 @@ fn F() -> String {
 // CHECK:STDOUT:         {kind: 'Name', text: 'F'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'String'},
+// CHECK:STDOUT:           {kind: 'StringTypeLiteral', text: 'String'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7},
 // CHECK:STDOUT:       {kind: 'EmptyDecl', text: ';', has_error: yes},

+ 3 - 3
toolchain/parse/testdata/return/returned_var.carbon

@@ -16,16 +16,16 @@ fn F() -> String {
 // CHECK:STDOUT:         {kind: 'Name', text: 'F'},
 // CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
 // CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'String'},
+// CHECK:STDOUT:           {kind: 'StringTypeLiteral', text: 'String'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:         {kind: 'ReturnedModifier', text: 'returned'},
 // CHECK:STDOUT:           {kind: 'Name', text: 's'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'String'},
+// CHECK:STDOUT:           {kind: 'StringTypeLiteral', text: 'String'},
 // CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:         {kind: 'Literal', text: '"hello"'},
+// CHECK:STDOUT:         {kind: 'StringLiteral', text: '"hello"'},
 // CHECK:STDOUT:       {kind: 'VariableDecl', text: ';', subtree_size: 8},
 // CHECK:STDOUT:         {kind: 'ReturnStatementStart', text: 'return'},
 // CHECK:STDOUT:         {kind: 'ReturnVarModifier', text: 'var'},

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

@@ -17,7 +17,7 @@ var x: {.a: i32,,} = {};
 // CHECK:STDOUT:           {kind: 'StructLiteralOrStructTypeLiteralStart', text: '{'},
 // CHECK:STDOUT:               {kind: 'Name', text: 'a'},
 // CHECK:STDOUT:             {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'StructFieldType', text: ':', subtree_size: 4},
 // CHECK:STDOUT:           {kind: 'StructComma', text: ','},
 // CHECK:STDOUT:           {kind: 'StructFieldUnknown', text: ',', has_error: yes},

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

@@ -17,7 +17,7 @@ var x: {.a = 0,,} = {};
 // CHECK:STDOUT:           {kind: 'StructLiteralOrStructTypeLiteralStart', text: '{'},
 // CHECK:STDOUT:               {kind: 'Name', text: 'a'},
 // CHECK:STDOUT:             {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
-// CHECK:STDOUT:             {kind: 'Literal', text: '0'},
+// CHECK:STDOUT:             {kind: 'IntegerLiteral', text: '0'},
 // CHECK:STDOUT:           {kind: 'StructFieldValue', text: '=', subtree_size: 4},
 // CHECK:STDOUT:           {kind: 'StructComma', text: ','},
 // CHECK:STDOUT:           {kind: 'StructFieldUnknown', text: ',', has_error: yes},

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

@@ -17,12 +17,12 @@ var x: {."hello": i32, .y: i32} = {};
 // CHECK:STDOUT:           {kind: 'StructLiteralOrStructTypeLiteralStart', text: '{'},
 // CHECK:STDOUT:             {kind: 'Name', text: '"hello"', has_error: yes},
 // CHECK:STDOUT:           {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'StructFieldUnknown', text: ':', has_error: yes},
 // CHECK:STDOUT:           {kind: 'StructComma', text: ','},
 // CHECK:STDOUT:               {kind: 'Name', text: 'y'},
 // CHECK:STDOUT:             {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'StructFieldType', text: ':', subtree_size: 4},
 // CHECK:STDOUT:         {kind: 'StructTypeLiteral', text: '}', subtree_size: 11},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 13},

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

@@ -17,12 +17,12 @@ var x: {."hello" = 0, .y = 4} = {};
 // CHECK:STDOUT:           {kind: 'StructLiteralOrStructTypeLiteralStart', text: '{'},
 // CHECK:STDOUT:             {kind: 'Name', text: '"hello"', has_error: yes},
 // CHECK:STDOUT:           {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'Literal', text: '0'},
+// CHECK:STDOUT:           {kind: 'IntegerLiteral', text: '0'},
 // CHECK:STDOUT:           {kind: 'StructFieldUnknown', text: '=', has_error: yes},
 // CHECK:STDOUT:           {kind: 'StructComma', text: ','},
 // CHECK:STDOUT:               {kind: 'Name', text: 'y'},
 // CHECK:STDOUT:             {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
-// CHECK:STDOUT:             {kind: 'Literal', text: '4'},
+// CHECK:STDOUT:             {kind: 'IntegerLiteral', text: '4'},
 // CHECK:STDOUT:           {kind: 'StructFieldValue', text: '=', subtree_size: 4},
 // CHECK:STDOUT:         {kind: 'StructLiteral', text: '}', subtree_size: 11},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 13},

+ 2 - 2
toolchain/parse/testdata/struct/fail_extra_token_in_type.carbon

@@ -17,7 +17,7 @@ var x: {.a: i32 banana} = {.a = 0};
 // CHECK:STDOUT:           {kind: 'StructLiteralOrStructTypeLiteralStart', text: '{'},
 // CHECK:STDOUT:               {kind: 'Name', text: 'a'},
 // CHECK:STDOUT:             {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'StructFieldType', text: ':', subtree_size: 4},
 // CHECK:STDOUT:         {kind: 'StructTypeLiteral', text: '}', has_error: yes, subtree_size: 6},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 8},
@@ -25,7 +25,7 @@ var x: {.a: i32 banana} = {.a = 0};
 // CHECK:STDOUT:         {kind: 'StructLiteralOrStructTypeLiteralStart', text: '{'},
 // CHECK:STDOUT:             {kind: 'Name', text: 'a'},
 // CHECK:STDOUT:           {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'Literal', text: '0'},
+// CHECK:STDOUT:           {kind: 'IntegerLiteral', text: '0'},
 // CHECK:STDOUT:         {kind: 'StructFieldValue', text: '=', subtree_size: 4},
 // CHECK:STDOUT:       {kind: 'StructLiteral', text: '}', subtree_size: 6},
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 17},

+ 2 - 2
toolchain/parse/testdata/struct/fail_extra_token_in_value.carbon

@@ -17,7 +17,7 @@ var x: {.a: i32} = {.a = 0 banana};
 // CHECK:STDOUT:           {kind: 'StructLiteralOrStructTypeLiteralStart', text: '{'},
 // CHECK:STDOUT:               {kind: 'Name', text: 'a'},
 // CHECK:STDOUT:             {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'StructFieldType', text: ':', subtree_size: 4},
 // CHECK:STDOUT:         {kind: 'StructTypeLiteral', text: '}', subtree_size: 6},
 // CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 8},
@@ -25,7 +25,7 @@ var x: {.a: i32} = {.a = 0 banana};
 // CHECK:STDOUT:         {kind: 'StructLiteralOrStructTypeLiteralStart', text: '{'},
 // CHECK:STDOUT:             {kind: 'Name', text: 'a'},
 // CHECK:STDOUT:           {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'Literal', text: '0'},
+// CHECK:STDOUT:           {kind: 'IntegerLiteral', text: '0'},
 // CHECK:STDOUT:         {kind: 'StructFieldValue', text: '=', subtree_size: 4},
 // CHECK:STDOUT:       {kind: 'StructLiteral', text: '}', has_error: yes, subtree_size: 6},
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 17},

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

@@ -17,7 +17,7 @@ var x: {.a: i32, .b = 0} = {};
 // CHECK:STDOUT:           {kind: 'StructLiteralOrStructTypeLiteralStart', text: '{'},
 // CHECK:STDOUT:               {kind: 'Name', text: 'a'},
 // CHECK:STDOUT:             {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
-// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IntegerTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'StructFieldType', text: ':', subtree_size: 4},
 // CHECK:STDOUT:           {kind: 'StructComma', text: ','},
 // CHECK:STDOUT:             {kind: 'Name', text: 'b'},

Некоторые файлы не были показаны из-за большого количества измененных файлов