mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Convert Statement to use Ptr (#788)
Note this makes a few cases where the Statement was optional explicit (Block, If, Sequence). I do add a few CHECKs around where statements were optional and assumed but unverified. I switch TypeCheckStmt to not take an optional Statement because I think it makes the call sites clearer in behavior. It's also a smaller change than the converse, because taking an optional Statement means the returned statement would also need to be optional. Arguably a wrapper for optional statements could be added, but this still seems cleaner to me, and there aren't that many cases of an optional statement. Co-authored-by: Geoff Romer <gromer@google.com>
This commit is contained in:
committed by
GitHub
co-authored by
Geoff Romer
parent
ed2d171703
commit
36ed79dc25
@@ -121,7 +121,8 @@ class IntValue : public Value {
|
||||
// A function value.
|
||||
class FunctionValue : public Value {
|
||||
public:
|
||||
FunctionValue(std::string name, const Value* param, const Statement* body)
|
||||
FunctionValue(std::string name, const Value* param,
|
||||
std::optional<Ptr<const Statement>> body)
|
||||
: Value(Kind::FunctionValue),
|
||||
name(std::move(name)),
|
||||
param(param),
|
||||
@@ -133,12 +134,12 @@ class FunctionValue : public Value {
|
||||
|
||||
auto Name() const -> const std::string& { return name; }
|
||||
auto Param() const -> const Value* { return param; }
|
||||
auto Body() const -> const Statement* { return body; }
|
||||
auto Body() const -> std::optional<Ptr<const Statement>> { return body; }
|
||||
|
||||
private:
|
||||
std::string name;
|
||||
const Value* param;
|
||||
const Statement* body;
|
||||
std::optional<Ptr<const Statement>> body;
|
||||
};
|
||||
|
||||
// A pointer value.
|
||||
|
||||
Reference in New Issue
Block a user