about summary refs log tree commit diff
path: root/third_party/nix/src/libexpr
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/nix/src/libexpr')
-rw-r--r--third_party/nix/src/libexpr/common-eval-args.cc32
-rw-r--r--third_party/nix/src/libexpr/common-eval-args.hh4
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);