mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 21:27:52 -04:00
Increment enum entry values if no value's supplied (#385)
This commit is contained in:
parent
fa122356ec
commit
54ccc9db97
|
@ -126,10 +126,17 @@ EnumType* parse_defenum(const goos::Object& defenum, TypeSystem* ts) {
|
||||||
}
|
}
|
||||||
|
|
||||||
auto type = ts->lookup_type(base_type);
|
auto type = ts->lookup_type(base_type);
|
||||||
|
s64 highest = -1;
|
||||||
while (!iter->is_empty_list()) {
|
while (!iter->is_empty_list()) {
|
||||||
auto field = car(iter);
|
auto field = car(iter);
|
||||||
auto entry_name = symbol_string(car(&field));
|
auto entry_name = symbol_string(car(&field));
|
||||||
|
|
||||||
|
if (entries.find(entry_name) != entries.end()) {
|
||||||
|
throw std::runtime_error(fmt::format("Entry {} appears multiple times.", entry_name));
|
||||||
|
}
|
||||||
|
|
||||||
auto rest = cdr(&field);
|
auto rest = cdr(&field);
|
||||||
|
if (!rest->is_empty_list()) {
|
||||||
auto& value = car(rest);
|
auto& value = car(rest);
|
||||||
if (!value.is_int()) {
|
if (!value.is_int()) {
|
||||||
fmt::print("Expected integer for enum value, got {}\n", value.print());
|
fmt::print("Expected integer for enum value, got {}\n", value.print());
|
||||||
|
@ -140,16 +147,21 @@ EnumType* parse_defenum(const goos::Object& defenum, TypeSystem* ts) {
|
||||||
fmt::print("Integer {} does not fit inside a {}\n", entry_val, type->get_name());
|
fmt::print("Integer {} does not fit inside a {}\n", entry_val, type->get_name());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!entries.size()) {
|
||||||
|
highest = entry_val;
|
||||||
|
}
|
||||||
|
highest = std::max(highest, entry_val);
|
||||||
|
|
||||||
rest = cdr(rest);
|
rest = cdr(rest);
|
||||||
if (!rest->is_empty_list()) {
|
if (!rest->is_empty_list()) {
|
||||||
fmt::print("Got too many items in defenum {} entry {}\n", name, entry_name);
|
fmt::print("Got too many items in defenum {} entry {}\n", name, entry_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entries.find(entry_name) != entries.end()) {
|
entries[entry_name] = entry_val;
|
||||||
throw std::runtime_error(fmt::format("Entry {} appears multiple times.", entry_name));
|
} else {
|
||||||
|
entries[entry_name] = ++highest;
|
||||||
}
|
}
|
||||||
|
|
||||||
entries[entry_name] = entry_val;
|
|
||||||
iter = cdr(iter);
|
iter = cdr(iter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue