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:
Geoff Romer
2021-07-07 11:32:33 -07:00
committed by GitHub
parent 7218e8a69e
commit a80ce2c566
9 changed files with 846 additions and 786 deletions
@@ -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
+47 -32
View File
@@ -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: