Files
carbon-lang/toolchain/sem_ir/node.cpp
T
Jon Ross-Perkins 1c748c0f14 Split semantics into check and sem_ir directories (#3176)
Continuing along with #3070. Note this is just a file rename, with BUILD
edits; every file previously in semantics/ should show as moved (except
maybe BUILDs, which split).
2023-08-31 19:54:32 +00:00

41 lines
1.2 KiB
C++

// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
// Exceptions. See /LICENSE for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#include "toolchain/sem_ir/node.h"
namespace Carbon::SemIR {
static auto PrintArgs(llvm::raw_ostream& /*out*/,
const Node::NoArgs /*no_args*/) -> void {}
template <typename T>
static auto PrintArgs(llvm::raw_ostream& out, T arg) -> void {
out << ", arg0: " << arg;
}
template <typename T0, typename T1>
static auto PrintArgs(llvm::raw_ostream& out, std::pair<T0, T1> args) -> void {
PrintArgs(out, args.first);
out << ", arg1: " << args.second;
}
auto Node::Print(llvm::raw_ostream& out) const -> void {
out << "{kind: " << kind_;
// clang warns on unhandled enum values; clang-tidy is incorrect here.
// NOLINTNEXTLINE(bugprone-switch-missing-default-case)
switch (kind_) {
#define CARBON_SEMANTICS_NODE_KIND(Name) \
case NodeKind::Name: \
PrintArgs(out, GetAs##Name()); \
break;
#include "toolchain/sem_ir/node_kind.def"
}
if (type_id_.is_valid()) {
out << ", type: " << type_id_;
}
out << "}";
}
} // namespace Carbon::SemIR