Remove the builtin empty tuple value (not type). (#2850)

We do use the empty tuple type for function returns, so I don't want to get rid of it, but the value is unused. With this change, builtins are all types. Long-term the empty tuple value should have a representation similar to structs; just a tuple value that's empty, not a built-in.
This commit is contained in:
Jon Ross-Perkins
2023-05-26 11:07:35 -07:00
committed by GitHub
parent 76151d1fff
commit 709412ca97
6 changed files with 26 additions and 43 deletions
+9 -3
View File
@@ -17,9 +17,15 @@ auto SemanticsIR::MakeBuiltinIR() -> SemanticsIR {
SemanticsIR semantics(/*builtin_ir=*/nullptr);
semantics.nodes_.reserve(SemanticsBuiltinKind::ValidCount);
#define CARBON_SEMANTICS_BUILTIN_KIND(Name, Type, ...) \
semantics.nodes_.push_back(SemanticsNode::Builtin::Make( \
SemanticsBuiltinKind::Name, SemanticsNodeId::Builtin##Type));
// InvalidType uses a self-referential type so that it's not accidentally
// treated as a normal type. Every other builtin is a type, including the
// self-referential TypeType.
#define CARBON_SEMANTICS_BUILTIN_KIND(Name, ...) \
semantics.nodes_.push_back(SemanticsNode::Builtin::Make( \
SemanticsBuiltinKind::Name, \
SemanticsBuiltinKind::Name == SemanticsBuiltinKind::InvalidType \
? SemanticsNodeId::BuiltinInvalidType \
: SemanticsNodeId::BuiltinTypeType));
#include "toolchain/semantics/semantics_builtin_kind.def"
CARBON_CHECK(semantics.node_blocks_.size() == 1)