Use llvm::ListSeparator for simpler separators (#671)

I was looking for something like this, I think it's a straightforward simplification for code. Internally, it handles skipping the separator on the first print.

See the bottom of: https://llvm.org/doxygen/StringExtras_8h_source.html
This commit is contained in:
Jon Meow
2021-07-23 08:39:58 -07:00
committed by GitHub
parent f35cda7a99
commit edbc3f7716
5 changed files with 23 additions and 32 deletions
@@ -18,6 +18,7 @@
#include "executable_semantics/interpreter/action.h"
#include "executable_semantics/interpreter/frame.h"
#include "executable_semantics/interpreter/stack.h"
#include "llvm/ADT/StringExtras.h"
namespace Carbon {
@@ -31,10 +32,10 @@ void Step();
//
void PrintEnv(Env values, llvm::raw_ostream& out) {
llvm::ListSeparator sep;
for (const auto& [name, address] : values) {
out << name << ": ";
out << sep << name << ": ";
state->heap.PrintAddress(address, out);
out << ", ";
}
}
@@ -43,13 +44,9 @@ void PrintEnv(Env values, llvm::raw_ostream& out) {
//
void PrintStack(const Stack<Frame*>& ls, llvm::raw_ostream& out) {
auto it = ls.begin();
while (it != ls.end()) {
out << **it;
++it;
if (it != ls.end()) {
out << " :: ";
}
llvm::ListSeparator sep(" :: ");
for (const auto& frame : ls) {
out << sep << *frame;
}
}