Rename Ptr<T> to Nonnull<T*> (#832)

Note that ptr.h also includes an enable_if change, to help avoid https://bugs.llvm.org/show_bug.cgi?id=51881
This commit is contained in:
Jon Meow
2021-09-16 19:22:57 -07:00
committed by GitHub
parent 5e66248db0
commit 56dc4ae375
35 changed files with 584 additions and 535 deletions
+49 -45
View File
@@ -38,7 +38,7 @@
// thus available to its methods.
// "inout" parameters passed to both the parser and the lexer.
%param {Ptr<Arena> arena}
%param {Nonnull<Arena*> arena}
%param {yyscan_t yyscanner}
%param {ParseAndLexContext& context}
@@ -98,43 +98,43 @@
%type <std::vector<LibraryName>> import_directives
%type <std::string> optional_library_path
%type <bool> api_or_impl
%type <BisonWrap<Ptr<const Declaration>>> declaration
%type <BisonWrap<Ptr<const FunctionDefinition>>> function_declaration
%type <BisonWrap<Ptr<const FunctionDefinition>>> function_definition
%type <std::vector<Ptr<const Declaration>>> declaration_list
%type <BisonWrap<Ptr<const Statement>>> statement
%type <BisonWrap<Ptr<const Statement>>> if_statement
%type <std::optional<Ptr<const Statement>>> optional_else
%type <BisonWrap<std::pair<Ptr<const Expression>, bool>>> return_expression
%type <BisonWrap<Ptr<const Statement>>> block
%type <std::optional<Ptr<const Statement>>> statement_list
%type <BisonWrap<Ptr<const Expression>>> expression
%type <BisonWrap<Nonnull<const Declaration*>>> declaration
%type <BisonWrap<Nonnull<const FunctionDefinition*>>> function_declaration
%type <BisonWrap<Nonnull<const FunctionDefinition*>>> function_definition
%type <std::vector<Nonnull<const Declaration*>>> declaration_list
%type <BisonWrap<Nonnull<const Statement*>>> statement
%type <BisonWrap<Nonnull<const Statement*>>> if_statement
%type <std::optional<Nonnull<const Statement*>>> optional_else
%type <BisonWrap<std::pair<Nonnull<const Expression*>, bool>>> return_expression
%type <BisonWrap<Nonnull<const Statement*>>> block
%type <std::optional<Nonnull<const Statement*>>> statement_list
%type <BisonWrap<Nonnull<const Expression*>>> expression
%type <BisonWrap<GenericBinding>> generic_binding
%type <std::vector<GenericBinding>> deduced_params
%type <std::vector<GenericBinding>> deduced_param_list
%type <BisonWrap<Ptr<const Pattern>>> pattern
%type <BisonWrap<Ptr<const Pattern>>> non_expression_pattern
%type <BisonWrap<std::pair<Ptr<const Expression>, bool>>> return_type
%type <BisonWrap<Ptr<const Expression>>> paren_expression
%type <BisonWrap<Ptr<const Expression>>> tuple
%type <BisonWrap<Nonnull<const Pattern*>>> pattern
%type <BisonWrap<Nonnull<const Pattern*>>> non_expression_pattern
%type <BisonWrap<std::pair<Nonnull<const Expression*>, bool>>> return_type
%type <BisonWrap<Nonnull<const Expression*>>> paren_expression
%type <BisonWrap<Nonnull<const Expression*>>> tuple
%type <std::optional<std::string>> binding_lhs
%type <BisonWrap<Ptr<const BindingPattern>>> variable_declaration
%type <BisonWrap<Ptr<Member>>> member
%type <std::vector<Ptr<Member>>> member_list
%type <BisonWrap<Nonnull<const BindingPattern*>>> variable_declaration
%type <BisonWrap<Nonnull<Member*>>> member
%type <std::vector<Nonnull<Member*>>> member_list
%type <BisonWrap<ParenContents<Expression>::Element>> paren_expression_element
%type <ParenContents<Expression>> paren_expression_base
%type <ParenContents<Expression>> paren_expression_contents
%type <BisonWrap<Ptr<const Pattern>>> paren_pattern
%type <BisonWrap<Ptr<const TuplePattern>>> tuple_pattern
%type <BisonWrap<Ptr<const TuplePattern>>> maybe_empty_tuple_pattern
%type <BisonWrap<Nonnull<const Pattern*>>> paren_pattern
%type <BisonWrap<Nonnull<const TuplePattern*>>> tuple_pattern
%type <BisonWrap<Nonnull<const TuplePattern*>>> maybe_empty_tuple_pattern
%type <ParenContents<Pattern>> paren_pattern_base
%type <BisonWrap<ParenContents<Pattern>::Element>> paren_pattern_element
%type <ParenContents<Pattern>> paren_pattern_contents
%type <BisonWrap<std::pair<std::string, Ptr<const Expression>>>> alternative
%type <std::vector<std::pair<std::string, Ptr<const Expression>>>> alternative_list
%type <std::vector<std::pair<std::string, Ptr<const Expression>>>> alternative_list_contents
%type <BisonWrap<std::pair<Ptr<const Pattern>, Ptr<const Statement>>>> clause
%type <std::vector<std::pair<Ptr<const Pattern>, Ptr<const Statement>>>> clause_list
%type <BisonWrap<std::pair<std::string, Nonnull<const Expression*>>>> alternative
%type <std::vector<std::pair<std::string, Nonnull<const Expression*>>>> alternative_list
%type <std::vector<std::pair<std::string, Nonnull<const Expression*>>>> alternative_list_contents
%type <BisonWrap<std::pair<Nonnull<const Pattern*>, Nonnull<const Statement*>>>> clause
%type <std::vector<std::pair<Nonnull<const Pattern*>, Nonnull<const Statement*>>>> clause_list
%token
// Most tokens have their spelling defined in lexer.lpp.
@@ -303,61 +303,61 @@ expression:
{
$$ = arena->New<PrimitiveOperatorExpression>(
context.SourceLoc(), Operator::Eq,
std::vector<Ptr<const Expression>>({$1, $3}));
std::vector<Nonnull<const Expression*>>({$1, $3}));
}
| expression PLUS expression
{
$$ = arena->New<PrimitiveOperatorExpression>(
context.SourceLoc(), Operator::Add,
std::vector<Ptr<const Expression>>({$1, $3}));
std::vector<Nonnull<const Expression*>>({$1, $3}));
}
| expression MINUS expression
{
$$ = arena->New<PrimitiveOperatorExpression>(
context.SourceLoc(), Operator::Sub,
std::vector<Ptr<const Expression>>({$1, $3}));
std::vector<Nonnull<const Expression*>>({$1, $3}));
}
| expression BINARY_STAR expression
{
$$ = arena->New<PrimitiveOperatorExpression>(
context.SourceLoc(), Operator::Mul,
std::vector<Ptr<const Expression>>({$1, $3}));
std::vector<Nonnull<const Expression*>>({$1, $3}));
}
| expression AND expression
{
$$ = arena->New<PrimitiveOperatorExpression>(
context.SourceLoc(), Operator::And,
std::vector<Ptr<const Expression>>({$1, $3}));
std::vector<Nonnull<const Expression*>>({$1, $3}));
}
| expression OR expression
{
$$ = arena->New<PrimitiveOperatorExpression>(
context.SourceLoc(), Operator::Or,
std::vector<Ptr<const Expression>>({$1, $3}));
std::vector<Nonnull<const Expression*>>({$1, $3}));
}
| NOT expression
{
$$ = arena->New<PrimitiveOperatorExpression>(
context.SourceLoc(), Operator::Not,
std::vector<Ptr<const Expression>>({$2}));
std::vector<Nonnull<const Expression*>>({$2}));
}
| MINUS expression %prec UNARY_MINUS
{
$$ = arena->New<PrimitiveOperatorExpression>(
context.SourceLoc(), Operator::Neg,
std::vector<Ptr<const Expression>>({$2}));
std::vector<Nonnull<const Expression*>>({$2}));
}
| PREFIX_STAR expression
{
$$ = arena->New<PrimitiveOperatorExpression>(
context.SourceLoc(), Operator::Deref,
std::vector<Ptr<const Expression>>({$2}));
std::vector<Nonnull<const Expression*>>({$2}));
}
| UNARY_STAR expression %prec PREFIX_STAR
{
$$ = arena->New<PrimitiveOperatorExpression>(
context.SourceLoc(), Operator::Deref,
std::vector<Ptr<const Expression>>({$2}));
std::vector<Nonnull<const Expression*>>({$2}));
}
| expression tuple
{ $$ = arena->New<CallExpression>(context.SourceLoc(), $1, $2); }
@@ -365,13 +365,13 @@ expression:
{
$$ = arena->New<PrimitiveOperatorExpression>(
context.SourceLoc(), Operator::Ptr,
std::vector<Ptr<const Expression>>({$1}));
std::vector<Nonnull<const Expression*>>({$1}));
}
| expression UNARY_STAR
{
$$ = arena->New<PrimitiveOperatorExpression>(
context.SourceLoc(), Operator::Ptr,
std::vector<Ptr<const Expression>>({$1}));
std::vector<Nonnull<const Expression*>>({$1}));
}
| FNTY tuple return_type
{
@@ -502,13 +502,17 @@ maybe_empty_tuple_pattern:
;
clause:
CASE pattern DOUBLE_ARROW statement
{ $$ = std::pair<Ptr<const Pattern>, Ptr<const Statement>>($2, $4); }
{
$$ =
std::pair<Nonnull<const Pattern*>, Nonnull<const Statement*>>($2, $4);
}
| DEFAULT DOUBLE_ARROW statement
{
auto vp = arena -> New<BindingPattern>(
context.SourceLoc(), std::nullopt,
arena->New<AutoPattern>(context.SourceLoc()));
$$ = std::pair<Ptr<const Pattern>, Ptr<const Statement>>(vp, $3);
$$ =
std::pair<Nonnull<const Pattern*>, Nonnull<const Statement*>>(vp, $3);
}
;
clause_list:
@@ -656,10 +660,10 @@ member_list:
;
alternative:
identifier tuple
{ $$ = std::pair<std::string, Ptr<const Expression>>($1, $2); }
{ $$ = std::pair<std::string, Nonnull<const Expression*>>($1, $2); }
| identifier
{
$$ = std::pair<std::string, Ptr<const Expression>>(
$$ = std::pair<std::string, Nonnull<const Expression*>>(
$1, arena->New<TupleLiteral>(context.SourceLoc()));
}
;
@@ -698,7 +702,7 @@ declaration_list:
| declaration_list declaration
{
$$ = $1;
$$.push_back(Ptr<const Declaration>($2));
$$.push_back(Nonnull<const Declaration*>($2));
}
;
%%