Stop using std::pair in the implementation of tuples (#479)

This commit is contained in:
Geoff Romer
2021-04-26 11:43:06 -07:00
committed by GitHub
parent 3ff01fa60d
commit 1933cfeeeb
10 changed files with 127 additions and 139 deletions
+7 -9
View File
@@ -143,8 +143,7 @@ auto MakeGetField(int line_num, const Expression* exp, std::string field)
return e;
}
auto MakeTuple(int line_num,
std::vector<std::pair<std::string, const Expression*>>* args)
auto MakeTuple(int line_num, std::vector<FieldInitializer>* args)
-> const Expression* {
auto* e = new Expression();
e->line_num = line_num;
@@ -152,14 +151,14 @@ auto MakeTuple(int line_num,
int i = 0;
bool seen_named_member = false;
for (auto& arg : *args) {
if (arg.first == "") {
if (arg.name == "") {
if (seen_named_member) {
std::cerr << line_num
<< ": positional members must come before named members"
<< std::endl;
exit(-1);
}
arg.first = std::to_string(i);
arg.name = std::to_string(i);
++i;
} else {
seen_named_member = true;
@@ -176,7 +175,7 @@ auto MakeUnit(int line_num) -> const Expression* {
auto* unit = new Expression();
unit->line_num = line_num;
unit->tag = ExpressionKind::Tuple;
auto* args = new std::vector<std::pair<std::string, const Expression*>>();
auto* args = new std::vector<FieldInitializer>();
unit->u.tuple.fields = args;
return unit;
}
@@ -217,15 +216,14 @@ static void PrintOp(Operator op) {
}
}
static void PrintFields(
std::vector<std::pair<std::string, const Expression*>>* fields) {
static void PrintFields(std::vector<FieldInitializer>* fields) {
int i = 0;
for (auto iter = fields->begin(); iter != fields->end(); ++iter, ++i) {
if (i != 0) {
std::cout << ", ";
}
std::cout << iter->first << " = ";
PrintExp(iter->second);
std::cout << iter->name << " = ";
PrintExp(iter->expression);
}
}