Skip to content

Commit 9d0e235

Browse files
committed
libstd: Check for bitfield enum fields in is_valid_enum
1 parent a0973fa commit 9d0e235

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

lib/source/pl/lib/std/core.cpp

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,21 @@ namespace pl::lib::libstd::core {
155155
runtime.addFunction(nsStdCore, "is_valid_enum", FunctionParameterCount::exactly(1), [](Evaluator *, auto params) -> std::optional<Token::Literal> {
156156
auto pattern = params[0].toPattern();
157157

158-
if (auto enumPattern = dynamic_cast<ptrn::PatternEnum*>(pattern.get()); enumPattern != nullptr) {
159-
auto value = enumPattern->getValue().toUnsigned();
160-
for (auto &[name, entry] : enumPattern->getEnumValues()) {
158+
auto enumValues = [&] -> std::map<std::string, ptrn::PatternEnum::EnumValue> const* {
159+
if (auto enumPattern = dynamic_cast<ptrn::PatternEnum*>(pattern.get()); enumPattern != nullptr) {
160+
return &enumPattern->getEnumValues();
161+
}
162+
163+
if (auto bitfieldEnumPattern = dynamic_cast<ptrn::PatternBitfieldFieldEnum*>(pattern.get()); bitfieldEnumPattern != nullptr) {
164+
return &bitfieldEnumPattern->getEnumValues();
165+
}
166+
167+
return nullptr;
168+
}();
169+
170+
if (enumValues != nullptr) {
171+
auto value = pattern->getValue().toUnsigned();
172+
for (auto &[name, entry] : *enumValues) {
161173
auto min = entry.min.toUnsigned();
162174
auto max = entry.max.toUnsigned();
163175

0 commit comments

Comments
 (0)