Add support for return; (#678)

This creates a ReturnExpression. A separate change should enforce that an implicit return of `()` is only allowed in functions that have an implicit return type of `()`, and I think the structure taken here should ease that.
This commit is contained in:
Jon Meow
2021-08-02 16:30:08 -07:00
committed by GitHub
parent b1993a6cd0
commit 6ae9cc3cf8
16 changed files with 114 additions and 33 deletions
@@ -25,12 +25,14 @@ struct FunctionDefinition {
FunctionDefinition(int line_num, std::string name,
std::vector<GenericBinding> deduced_params,
const TuplePattern* param_pattern,
const Pattern* return_type, const Statement* body)
const Pattern* return_type, bool is_omitted_return_type,
const Statement* body)
: line_num(line_num),
name(std::move(name)),
deduced_parameters(deduced_params),
param_pattern(param_pattern),
return_type(return_type),
is_omitted_return_type(is_omitted_return_type),
body(body) {}
void Print(llvm::raw_ostream& out) const { PrintDepth(-1, out); }
@@ -42,6 +44,7 @@ struct FunctionDefinition {
std::vector<GenericBinding> deduced_parameters;
const TuplePattern* param_pattern;
const Pattern* return_type;
bool is_omitted_return_type;
const Statement* body;
};