Allow open switch-enum in 5 places

This commit is contained in:
Robert Hensing 2023-04-03 18:15:12 +02:00
parent 3dac4c7874
commit 9470ee877d
4 changed files with 21 additions and 0 deletions

View file

@ -239,6 +239,9 @@ std::string_view showType(ValueType type)
std::string showType(const Value & v) std::string showType(const Value & v)
{ {
// Allow selecting a subset of enum values
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wswitch-enum"
switch (v.internalType) { switch (v.internalType) {
case tString: return v.string.context ? "a string with context" : "a string"; case tString: return v.string.context ? "a string with context" : "a string";
case tPrimOp: case tPrimOp:
@ -252,16 +255,21 @@ std::string showType(const Value & v)
default: default:
return std::string(showType(v.type())); return std::string(showType(v.type()));
} }
#pragma GCC diagnostic pop
} }
PosIdx Value::determinePos(const PosIdx pos) const PosIdx Value::determinePos(const PosIdx pos) const
{ {
// Allow selecting a subset of enum values
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wswitch-enum"
switch (internalType) { switch (internalType) {
case tAttrs: return attrs->pos; case tAttrs: return attrs->pos;
case tLambda: return lambda.fun->pos; case tLambda: return lambda.fun->pos;
case tApp: return app.left->determinePos(pos); case tApp: return app.left->determinePos(pos);
default: return pos; default: return pos;
} }
#pragma GCC diagnostic pop
} }
bool Value::isTrivial() const bool Value::isTrivial() const

View file

@ -125,6 +125,9 @@ static FlakeInput parseFlakeInput(EvalState & state,
follows.insert(follows.begin(), lockRootPath.begin(), lockRootPath.end()); follows.insert(follows.begin(), lockRootPath.begin(), lockRootPath.end());
input.follows = follows; input.follows = follows;
} else { } else {
// Allow selecting a subset of enum values
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wswitch-enum"
switch (attr.value->type()) { switch (attr.value->type()) {
case nString: case nString:
attrs.emplace(state.symbols[attr.name], attr.value->string.s); attrs.emplace(state.symbols[attr.name], attr.value->string.s);
@ -139,6 +142,7 @@ static FlakeInput parseFlakeInput(EvalState & state,
throw TypeError("flake input attribute '%s' is %s while a string, Boolean, or integer is expected", throw TypeError("flake input attribute '%s' is %s while a string, Boolean, or integer is expected",
state.symbols[attr.name], showType(*attr.value)); state.symbols[attr.name], showType(*attr.value));
} }
#pragma GCC diagnostic pop
} }
} catch (Error & e) { } catch (Error & e) {
e.addTrace( e.addTrace(

View file

@ -577,6 +577,9 @@ struct CompareValues
return v1->integer < v2->fpoint; return v1->integer < v2->fpoint;
if (v1->type() != v2->type()) if (v1->type() != v2->type())
state.error("cannot compare %s with %s", showType(*v1), showType(*v2)).debugThrow<EvalError>(); state.error("cannot compare %s with %s", showType(*v1), showType(*v2)).debugThrow<EvalError>();
// Allow selecting a subset of enum values
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wswitch-enum"
switch (v1->type()) { switch (v1->type()) {
case nInt: case nInt:
return v1->integer < v2->integer; return v1->integer < v2->integer;
@ -599,6 +602,7 @@ struct CompareValues
} }
default: default:
state.error("cannot compare %s with %s; values of that type are incomparable", showType(*v1), showType(*v2)).debugThrow<EvalError>(); state.error("cannot compare %s with %s; values of that type are incomparable", showType(*v1), showType(*v2)).debugThrow<EvalError>();
#pragma GCC diagnostic pop
} }
} catch (Error & e) { } catch (Error & e) {
if (!errorCtx.empty()) if (!errorCtx.empty())

View file

@ -407,6 +407,10 @@ struct curlFileTransfer : public FileTransfer
err = Misc; err = Misc;
} else { } else {
// Don't bother retrying on certain cURL errors either // Don't bother retrying on certain cURL errors either
// Allow selecting a subset of enum values
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wswitch-enum"
switch (code) { switch (code) {
case CURLE_FAILED_INIT: case CURLE_FAILED_INIT:
case CURLE_URL_MALFORMAT: case CURLE_URL_MALFORMAT:
@ -427,6 +431,7 @@ struct curlFileTransfer : public FileTransfer
default: // Shut up warnings default: // Shut up warnings
break; break;
} }
#pragma GCC diagnostic pop
} }
attempt++; attempt++;