diff options
Diffstat (limited to 'third_party/nix/src/libexpr')
-rw-r--r-- | third_party/nix/src/libexpr/common-eval-args.cc | 32 | ||||
-rw-r--r-- | third_party/nix/src/libexpr/common-eval-args.hh | 4 |
2 files changed, 23 insertions, 13 deletions
diff --git a/third_party/nix/src/libexpr/common-eval-args.cc b/third_party/nix/src/libexpr/common-eval-args.cc index e36457f4f8ff..f63d3f8276ec 100644 --- a/third_party/nix/src/libexpr/common-eval-args.cc +++ b/third_party/nix/src/libexpr/common-eval-args.cc @@ -12,15 +12,17 @@ MixEvalArgs::MixEvalArgs() { .longName("arg") .description("argument to be passed to Nix functions") .labels({"name", "expr"}) - .handler( - [&](std::vector<std::string> ss) { autoArgs[ss[0]] = 'E' + ss[1]; }); + .handler([&](std::vector<std::string> ss) { + auto_args_[ss[0]] = std::make_pair(kArgTypeExpr, ss[1]); + }); mkFlag() .longName("argstr") .description("string-valued argument to be passed to Nix functions") .labels({"name", "string"}) - .handler( - [&](std::vector<std::string> ss) { autoArgs[ss[0]] = 'S' + ss[1]; }); + .handler([&](std::vector<std::string> ss) { + auto_args_[ss[0]] = std::make_pair(kArgTypeString, ss[1]); + }); mkFlag() .shortName('I') @@ -33,16 +35,22 @@ MixEvalArgs::MixEvalArgs() { } std::unique_ptr<Bindings> MixEvalArgs::getAutoArgs(EvalState& state) { - auto res = Bindings::New(autoArgs.size()); - for (auto& i : autoArgs) { + auto res = Bindings::New(auto_args_.size()); + for (auto& [arg, arg_value] : auto_args_) { Value* v = state.allocValue(); - if (i.second[0] == 'E') { - state.mkThunk_(*v, state.parseExprFromString(std::string(i.second, 1), - absPath("."))); - } else { - mkString(*v, std::string(i.second, 1)); + switch (arg_value.first) { + case kArgTypeExpr: { + state.mkThunk_( + *v, state.parseExprFromString(arg_value.second, absPath("."))); + break; + } + case kArgTypeString: { + mkString(*v, arg_value.second); + break; + } } - res->push_back(Attr(state.symbols.Create(i.first), v)); + + res->push_back(Attr(state.symbols.Create(arg), v)); } return res; } diff --git a/third_party/nix/src/libexpr/common-eval-args.hh b/third_party/nix/src/libexpr/common-eval-args.hh index 9b0a77c6f7cd..5e0e8af79cbe 100644 --- a/third_party/nix/src/libexpr/common-eval-args.hh +++ b/third_party/nix/src/libexpr/common-eval-args.hh @@ -8,6 +8,8 @@ class Store; class EvalState; class Bindings; +enum ArgType { kArgTypeString, kArgTypeExpr }; + struct MixEvalArgs : virtual Args { MixEvalArgs(); @@ -16,7 +18,7 @@ struct MixEvalArgs : virtual Args { Strings searchPath; private: - std::map<std::string, std::string> autoArgs; + std::map<std::string, std::pair<ArgType, std::string>> auto_args_; }; Path lookupFileArg(EvalState& state, std::string s); |