Remove FunctionDefinition's default constructor (#735)

This opens up a path for switching `int line_num` to a `Location loc`, which I want to do for tracking filenames of code. But I don't think we should have a default constructor on `Location` to avoid mistakes, and switching FunctionDefinition to an arena alloc seems more consistent anyways.
This commit is contained in:
Jon Meow
2021-08-12 09:52:32 -07:00
committed by GitHub
parent aebfa7dac9
commit d3c7ca3131
5 changed files with 20 additions and 19 deletions
+7 -7
View File
@@ -93,8 +93,8 @@ void Carbon::Parser::error(const location_type&, const std::string& message) {
%token <std::string> string_literal
%type <std::string> designator
%type <const Declaration*> declaration
%type <FunctionDefinition> function_declaration
%type <FunctionDefinition> function_definition
%type <const FunctionDefinition*> function_declaration
%type <const FunctionDefinition*> function_definition
%type <std::list<const Declaration*>> declaration_list
%type <const Statement*> statement
%type <const Statement*> if_statement
@@ -509,7 +509,7 @@ deduced_params:
function_definition:
FN identifier deduced_params maybe_empty_tuple_pattern return_type block
{
$$ = FunctionDefinition(
$$ = global_arena->New<FunctionDefinition>(
yylineno, $2, $3, $4,
global_arena->New<ExpressionPattern>($5.first),
$5.second, $6);
@@ -518,7 +518,7 @@ function_definition:
{
// The return type is not considered "omitted" because it's automatic from
// the expression.
$$ = FunctionDefinition(
$$ = global_arena->New<FunctionDefinition>(
yylineno, $2, $3, $4,
global_arena->New<AutoPattern>(yylineno), true,
global_arena->New<Return>(yylineno, $6, true));
@@ -527,7 +527,7 @@ function_definition:
function_declaration:
FN identifier deduced_params maybe_empty_tuple_pattern return_type ";"
{
$$ = FunctionDefinition(
$$ = global_arena->New<FunctionDefinition>(
yylineno, $2, $3, $4,
global_arena->New<ExpressionPattern>($5.first),
$5.second, nullptr); }
@@ -566,9 +566,9 @@ alternative_list:
;
declaration:
function_definition
{ $$ = global_arena->New<FunctionDeclaration>(std::move($1)); }
{ $$ = global_arena->New<FunctionDeclaration>($1); }
| function_declaration
{ $$ = global_arena->New<FunctionDeclaration>(std::move($1)); }
{ $$ = global_arena->New<FunctionDeclaration>($1); }
| STRUCT identifier "{" member_list "}"
{
$$ = global_arena->New<StructDeclaration>(yylineno, $2, $4);
@@ -26,11 +26,13 @@ static void AddIntrinsics(std::list<const Declaration*>* fs) {
global_arena->New<IntrinsicExpression>(
IntrinsicExpression::IntrinsicKind::Print),
false);
auto* print = global_arena->New<FunctionDeclaration>(FunctionDefinition(
-1, "Print", std::vector<GenericBinding>(),
global_arena->New<TuplePattern>(-1, print_fields),
global_arena->New<ExpressionPattern>(global_arena->New<TupleLiteral>(-1)),
/*is_omitted_return_type=*/false, print_return));
auto* print = global_arena->New<FunctionDeclaration>(
global_arena->New<FunctionDefinition>(
-1, "Print", std::vector<GenericBinding>(),
global_arena->New<TuplePattern>(-1, print_fields),
global_arena->New<ExpressionPattern>(
global_arena->New<TupleLiteral>(-1)),
/*is_omitted_return_type=*/false, print_return));
fs->insert(fs->begin(), print);
}