mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-04 12:51:05 +01:00
Consistent naming for Expression and Value. (#621)
- `Kind` enumerator names always match the corresponding factory function, accessor, and type names (if any). - All abbreviations in those names are expanded. - Those names always have a suffix to disambiguate expressions from values. `VarTV` is excluded from these changes because there's a pending PR to remove it.
This commit is contained in:
@@ -16,7 +16,7 @@ const Expression* ParenContents::AsExpression(int line_number) const {
|
||||
}
|
||||
|
||||
const Expression* ParenContents::AsTuple(int line_number) const {
|
||||
return Expression::MakeTuple(line_number, fields_);
|
||||
return Expression::MakeTupleLiteral(line_number, fields_);
|
||||
}
|
||||
|
||||
} // namespace Carbon
|
||||
|
||||
@@ -13,16 +13,16 @@ TEST(ParenContentsTest, EmptyAsExpression) {
|
||||
ParenContents contents;
|
||||
const Expression* expression = contents.AsExpression(/*line_num=*/1);
|
||||
EXPECT_EQ(expression->line_num, 1);
|
||||
ASSERT_EQ(expression->tag(), ExpressionKind::Tuple);
|
||||
EXPECT_EQ(expression->GetTuple().fields.size(), 0);
|
||||
ASSERT_EQ(expression->tag(), ExpressionKind::TupleLiteral);
|
||||
EXPECT_EQ(expression->GetTupleLiteral().fields.size(), 0);
|
||||
}
|
||||
|
||||
TEST(ParenContentsTest, EmptyAsTuple) {
|
||||
ParenContents contents;
|
||||
const Expression* tuple = contents.AsTuple(/*line_num=*/1);
|
||||
EXPECT_EQ(tuple->line_num, 1);
|
||||
ASSERT_EQ(tuple->tag(), ExpressionKind::Tuple);
|
||||
EXPECT_EQ(tuple->GetTuple().fields.size(), 0);
|
||||
ASSERT_EQ(tuple->tag(), ExpressionKind::TupleLiteral);
|
||||
EXPECT_EQ(tuple->GetTupleLiteral().fields.size(), 0);
|
||||
}
|
||||
|
||||
TEST(ParenContentsTest, UnaryNoCommaAsExpression) {
|
||||
@@ -33,81 +33,81 @@ TEST(ParenContentsTest, UnaryNoCommaAsExpression) {
|
||||
// )
|
||||
// ```
|
||||
ParenContents contents(
|
||||
{{.expression = Expression::MakeInt(/*line_num=*/2, 42)}},
|
||||
{{.expression = Expression::MakeIntLiteral(/*line_num=*/2, 42)}},
|
||||
ParenContents::HasTrailingComma::No);
|
||||
|
||||
const Expression* expression = contents.AsExpression(/*line_num=*/1);
|
||||
EXPECT_EQ(expression->line_num, 2);
|
||||
ASSERT_EQ(expression->tag(), ExpressionKind::Integer);
|
||||
ASSERT_EQ(expression->tag(), ExpressionKind::IntLiteral);
|
||||
}
|
||||
|
||||
TEST(ParenContentsTest, UnaryNoCommaAsTuple) {
|
||||
ParenContents contents(
|
||||
{{.expression = Expression::MakeInt(/*line_num=*/2, 42)}},
|
||||
{{.expression = Expression::MakeIntLiteral(/*line_num=*/2, 42)}},
|
||||
ParenContents::HasTrailingComma::No);
|
||||
|
||||
const Expression* tuple = contents.AsTuple(/*line_num=*/1);
|
||||
EXPECT_EQ(tuple->line_num, 1);
|
||||
ASSERT_EQ(tuple->tag(), ExpressionKind::Tuple);
|
||||
std::vector<FieldInitializer> fields = tuple->GetTuple().fields;
|
||||
ASSERT_EQ(tuple->tag(), ExpressionKind::TupleLiteral);
|
||||
std::vector<FieldInitializer> fields = tuple->GetTupleLiteral().fields;
|
||||
ASSERT_EQ(fields.size(), 1);
|
||||
EXPECT_EQ(fields[0].expression->tag(), ExpressionKind::Integer);
|
||||
EXPECT_EQ(fields[0].expression->tag(), ExpressionKind::IntLiteral);
|
||||
}
|
||||
|
||||
TEST(ParenContentsTest, UnaryWithCommaAsExpression) {
|
||||
ParenContents contents(
|
||||
{{.expression = Expression::MakeInt(/*line_num=*/2, 42)}},
|
||||
{{.expression = Expression::MakeIntLiteral(/*line_num=*/2, 42)}},
|
||||
ParenContents::HasTrailingComma::Yes);
|
||||
|
||||
const Expression* expression = contents.AsExpression(/*line_num=*/1);
|
||||
EXPECT_EQ(expression->line_num, 1);
|
||||
ASSERT_EQ(expression->tag(), ExpressionKind::Tuple);
|
||||
std::vector<FieldInitializer> fields = expression->GetTuple().fields;
|
||||
ASSERT_EQ(expression->tag(), ExpressionKind::TupleLiteral);
|
||||
std::vector<FieldInitializer> fields = expression->GetTupleLiteral().fields;
|
||||
ASSERT_EQ(fields.size(), 1);
|
||||
EXPECT_EQ(fields[0].expression->tag(), ExpressionKind::Integer);
|
||||
EXPECT_EQ(fields[0].expression->tag(), ExpressionKind::IntLiteral);
|
||||
}
|
||||
|
||||
TEST(ParenContentsTest, UnaryWithCommaAsTuple) {
|
||||
ParenContents contents(
|
||||
{{.expression = Expression::MakeInt(/*line_num=*/2, 42)}},
|
||||
{{.expression = Expression::MakeIntLiteral(/*line_num=*/2, 42)}},
|
||||
ParenContents::HasTrailingComma::Yes);
|
||||
|
||||
const Expression* tuple = contents.AsTuple(/*line_num=*/1);
|
||||
EXPECT_EQ(tuple->line_num, 1);
|
||||
ASSERT_EQ(tuple->tag(), ExpressionKind::Tuple);
|
||||
std::vector<FieldInitializer> fields = tuple->GetTuple().fields;
|
||||
ASSERT_EQ(tuple->tag(), ExpressionKind::TupleLiteral);
|
||||
std::vector<FieldInitializer> fields = tuple->GetTupleLiteral().fields;
|
||||
ASSERT_EQ(fields.size(), 1);
|
||||
EXPECT_EQ(fields[0].expression->tag(), ExpressionKind::Integer);
|
||||
EXPECT_EQ(fields[0].expression->tag(), ExpressionKind::IntLiteral);
|
||||
}
|
||||
|
||||
TEST(ParenContentsTest, BinaryAsExpression) {
|
||||
ParenContents contents(
|
||||
{{.expression = Expression::MakeInt(/*line_num=*/2, 42)},
|
||||
{.expression = Expression::MakeInt(/*line_num=*/3, 42)}},
|
||||
{{.expression = Expression::MakeIntLiteral(/*line_num=*/2, 42)},
|
||||
{.expression = Expression::MakeIntLiteral(/*line_num=*/3, 42)}},
|
||||
ParenContents::HasTrailingComma::Yes);
|
||||
|
||||
const Expression* expression = contents.AsExpression(/*line_num=*/1);
|
||||
EXPECT_EQ(expression->line_num, 1);
|
||||
ASSERT_EQ(expression->tag(), ExpressionKind::Tuple);
|
||||
std::vector<FieldInitializer> fields = expression->GetTuple().fields;
|
||||
ASSERT_EQ(expression->tag(), ExpressionKind::TupleLiteral);
|
||||
std::vector<FieldInitializer> fields = expression->GetTupleLiteral().fields;
|
||||
ASSERT_EQ(fields.size(), 2);
|
||||
EXPECT_EQ(fields[0].expression->tag(), ExpressionKind::Integer);
|
||||
EXPECT_EQ(fields[1].expression->tag(), ExpressionKind::Integer);
|
||||
EXPECT_EQ(fields[0].expression->tag(), ExpressionKind::IntLiteral);
|
||||
EXPECT_EQ(fields[1].expression->tag(), ExpressionKind::IntLiteral);
|
||||
}
|
||||
|
||||
TEST(ParenContentsTest, BinaryAsTuple) {
|
||||
ParenContents contents(
|
||||
{{.expression = Expression::MakeInt(/*line_num=*/2, 42)},
|
||||
{.expression = Expression::MakeInt(/*line_num=*/3, 42)}},
|
||||
{{.expression = Expression::MakeIntLiteral(/*line_num=*/2, 42)},
|
||||
{.expression = Expression::MakeIntLiteral(/*line_num=*/3, 42)}},
|
||||
ParenContents::HasTrailingComma::Yes);
|
||||
|
||||
const Expression* tuple = contents.AsTuple(/*line_num=*/1);
|
||||
EXPECT_EQ(tuple->line_num, 1);
|
||||
ASSERT_EQ(tuple->tag(), ExpressionKind::Tuple);
|
||||
std::vector<FieldInitializer> fields = tuple->GetTuple().fields;
|
||||
ASSERT_EQ(tuple->tag(), ExpressionKind::TupleLiteral);
|
||||
std::vector<FieldInitializer> fields = tuple->GetTupleLiteral().fields;
|
||||
ASSERT_EQ(fields.size(), 2);
|
||||
EXPECT_EQ(fields[0].expression->tag(), ExpressionKind::Integer);
|
||||
EXPECT_EQ(fields[1].expression->tag(), ExpressionKind::Integer);
|
||||
EXPECT_EQ(fields[0].expression->tag(), ExpressionKind::IntLiteral);
|
||||
EXPECT_EQ(fields[1].expression->tag(), ExpressionKind::IntLiteral);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -201,58 +201,72 @@ pattern:
|
||||
;
|
||||
expression:
|
||||
identifier
|
||||
{ $$ = Carbon::Expression::MakeVar(yylineno, $1); }
|
||||
{ $$ = Carbon::Expression::MakeIdentifierExpression(yylineno, $1); }
|
||||
| expression designator
|
||||
{ $$ = Carbon::Expression::MakeGetField(yylineno, $1, $2); }
|
||||
{ $$ = Carbon::Expression::MakeFieldAccessExpression(yylineno, $1, $2); }
|
||||
| expression "[" expression "]"
|
||||
{ $$ = Carbon::Expression::MakeIndex(yylineno, $1, $3); }
|
||||
{ $$ = Carbon::Expression::MakeIndexExpression(yylineno, $1, $3); }
|
||||
| identifier ":" expression
|
||||
{ $$ = Carbon::Expression::MakeVarPat(yylineno, $1, $3); }
|
||||
{
|
||||
$$ = Carbon::Expression::MakePatternVariableExpression(yylineno, $1, $3);
|
||||
}
|
||||
| integer_literal
|
||||
{ $$ = Carbon::Expression::MakeInt(yylineno, $1); }
|
||||
{ $$ = Carbon::Expression::MakeIntLiteral(yylineno, $1); }
|
||||
| TRUE
|
||||
{ $$ = Carbon::Expression::MakeBool(yylineno, true); }
|
||||
{ $$ = Carbon::Expression::MakeBoolLiteral(yylineno, true); }
|
||||
| FALSE
|
||||
{ $$ = Carbon::Expression::MakeBool(yylineno, false); }
|
||||
{ $$ = Carbon::Expression::MakeBoolLiteral(yylineno, false); }
|
||||
| INT
|
||||
{ $$ = Carbon::Expression::MakeIntType(yylineno); }
|
||||
{ $$ = Carbon::Expression::MakeIntTypeLiteral(yylineno); }
|
||||
| BOOL
|
||||
{ $$ = Carbon::Expression::MakeBoolType(yylineno); }
|
||||
{ $$ = Carbon::Expression::MakeBoolTypeLiteral(yylineno); }
|
||||
| TYPE
|
||||
{ $$ = Carbon::Expression::MakeTypeType(yylineno); }
|
||||
{ $$ = Carbon::Expression::MakeTypeTypeLiteral(yylineno); }
|
||||
| AUTO
|
||||
{ $$ = Carbon::Expression::MakeAutoType(yylineno); }
|
||||
{ $$ = Carbon::Expression::MakeAutoTypeLiteral(yylineno); }
|
||||
| CONTINUATION_TYPE
|
||||
{ $$ = Carbon::Expression::MakeContinuationType(yylineno); }
|
||||
{ $$ = Carbon::Expression::MakeContinuationTypeLiteral(yylineno); }
|
||||
| paren_expression { $$ = $1; }
|
||||
| expression EQUAL_EQUAL expression
|
||||
{ $$ = Carbon::Expression::MakeOp(yylineno, Carbon::Operator::Eq, {$1, $3}); }
|
||||
{ $$ = Carbon::Expression::MakePrimitiveOperatorExpression(
|
||||
yylineno, Carbon::Operator::Eq, {$1, $3}); }
|
||||
| expression "+" expression
|
||||
{ $$ = Carbon::Expression::MakeOp(yylineno, Carbon::Operator::Add, {$1, $3}); }
|
||||
{ $$ = Carbon::Expression::MakePrimitiveOperatorExpression(
|
||||
yylineno, Carbon::Operator::Add, {$1, $3}); }
|
||||
| expression "-" expression
|
||||
{ $$ = Carbon::Expression::MakeOp(yylineno, Carbon::Operator::Sub, {$1, $3}); }
|
||||
{ $$ = Carbon::Expression::MakePrimitiveOperatorExpression(
|
||||
yylineno, Carbon::Operator::Sub, {$1, $3}); }
|
||||
| expression BINARY_STAR expression
|
||||
{ $$ = Carbon::Expression::MakeOp(yylineno, Carbon::Operator::Mul, {$1, $3}); }
|
||||
{ $$ = Carbon::Expression::MakePrimitiveOperatorExpression(
|
||||
yylineno, Carbon::Operator::Mul, {$1, $3}); }
|
||||
| expression AND expression
|
||||
{ $$ = Carbon::Expression::MakeOp(yylineno, Carbon::Operator::And, {$1, $3}); }
|
||||
{ $$ = Carbon::Expression::MakePrimitiveOperatorExpression(
|
||||
yylineno, Carbon::Operator::And, {$1, $3}); }
|
||||
| expression OR expression
|
||||
{ $$ = Carbon::Expression::MakeOp(yylineno, Carbon::Operator::Or, {$1, $3}); }
|
||||
{ $$ = Carbon::Expression::MakePrimitiveOperatorExpression(
|
||||
yylineno, Carbon::Operator::Or, {$1, $3}); }
|
||||
| NOT expression
|
||||
{ $$ = Carbon::Expression::MakeOp(yylineno, Carbon::Operator::Not, {$2}); }
|
||||
{ $$ = Carbon::Expression::MakePrimitiveOperatorExpression(
|
||||
yylineno, Carbon::Operator::Not, {$2}); }
|
||||
| "-" expression %prec UNARY_MINUS
|
||||
{ $$ = Carbon::Expression::MakeOp(yylineno, Carbon::Operator::Neg, {$2}); }
|
||||
{ $$ = Carbon::Expression::MakePrimitiveOperatorExpression(
|
||||
yylineno, Carbon::Operator::Neg, {$2}); }
|
||||
| PREFIX_STAR expression
|
||||
{ $$ = Carbon::Expression::MakeOp(yylineno, Carbon::Operator::Deref, {$2}); }
|
||||
{ $$ = Carbon::Expression::MakePrimitiveOperatorExpression(
|
||||
yylineno, Carbon::Operator::Deref, {$2}); }
|
||||
| UNARY_STAR expression %prec PREFIX_STAR
|
||||
{ $$ = Carbon::Expression::MakeOp(yylineno, Carbon::Operator::Deref, {$2}); }
|
||||
{ $$ = Carbon::Expression::MakePrimitiveOperatorExpression(
|
||||
yylineno, Carbon::Operator::Deref, {$2}); }
|
||||
| expression tuple
|
||||
{ $$ = Carbon::Expression::MakeCall(yylineno, $1, $2); }
|
||||
{ $$ = Carbon::Expression::MakeCallExpression(yylineno, $1, $2); }
|
||||
| expression POSTFIX_STAR
|
||||
{ $$ = Carbon::Expression::MakeOp(yylineno, Carbon::Operator::Ptr, {$1}); }
|
||||
{ $$ = Carbon::Expression::MakePrimitiveOperatorExpression(
|
||||
yylineno, Carbon::Operator::Ptr, {$1}); }
|
||||
| expression UNARY_STAR
|
||||
{ $$ = Carbon::Expression::MakeOp(yylineno, Carbon::Operator::Ptr, {$1}); }
|
||||
{ $$ = Carbon::Expression::MakePrimitiveOperatorExpression(
|
||||
yylineno, Carbon::Operator::Ptr, {$1}); }
|
||||
| FNTY tuple return_type
|
||||
{ $$ = Carbon::Expression::MakeFunType(yylineno, $2, $3); }
|
||||
{ $$ = Carbon::Expression::MakeFunctionTypeLiteral(yylineno, $2, $3); }
|
||||
;
|
||||
designator: "." identifier { $$ = $2; }
|
||||
;
|
||||
@@ -296,8 +310,8 @@ clause:
|
||||
{ $$ = new std::pair<const Carbon::Expression*, const Carbon::Statement*>($2, $4); }
|
||||
| DEFAULT DBLARROW statement
|
||||
{
|
||||
auto vp = Carbon::Expression::MakeVarPat(yylineno, "_",
|
||||
Carbon::Expression::MakeAutoType(yylineno));
|
||||
auto vp = Carbon::Expression::MakePatternVariableExpression(
|
||||
yylineno, "_", Carbon::Expression::MakeAutoTypeLiteral(yylineno));
|
||||
$$ = new std::pair<const Carbon::Expression*, const Carbon::Statement*>(vp, $3);
|
||||
}
|
||||
;
|
||||
@@ -350,7 +364,7 @@ statement_list:
|
||||
;
|
||||
return_type:
|
||||
// Empty
|
||||
{ $$ = Carbon::Expression::MakeTuple(yylineno, {}); }
|
||||
{ $$ = Carbon::Expression::MakeTupleLiteral(yylineno, {}); }
|
||||
| ARROW expression %prec FNARROW
|
||||
{ $$ = $2; }
|
||||
;
|
||||
@@ -359,8 +373,9 @@ function_definition:
|
||||
{ $$ = MakeFunDef(yylineno, $2, $4, $3, $6); }
|
||||
| FN identifier tuple DBLARROW expression ";"
|
||||
{
|
||||
$$ = Carbon::MakeFunDef(yylineno, $2, Carbon::Expression::MakeAutoType(yylineno), $3,
|
||||
Carbon::Statement::MakeReturn(yylineno, $5));
|
||||
$$ = Carbon::MakeFunDef(yylineno, $2,
|
||||
Carbon::Expression::MakeAutoTypeLiteral(yylineno),
|
||||
$3, Carbon::Statement::MakeReturn(yylineno, $5));
|
||||
}
|
||||
;
|
||||
function_declaration:
|
||||
@@ -385,7 +400,7 @@ alternative:
|
||||
| identifier
|
||||
{
|
||||
$$ = std::pair<std::string, const Carbon::Expression*>(
|
||||
$1, Carbon::Expression::MakeTuple(yylineno, {}));
|
||||
$1, Carbon::Expression::MakeTupleLiteral(yylineno, {}));
|
||||
}
|
||||
;
|
||||
alternative_list:
|
||||
|
||||
Reference in New Issue
Block a user