about summary refs log tree commit diff
path: root/third_party/nix/src/libexpr/common-eval-args.hh
diff options
context:
space:
mode:
authorGriffin Smith <grfn@gws.fyi>2020-08-27T15·28-0400
committerglittershark <grfn@gws.fyi>2020-08-28T01·18+0000
commit3bada1d41eed3bd8c72d6811147cd100fcb585ca (patch)
treea9374045cf235c25f910ed3df696cf484f0a8fdc /third_party/nix/src/libexpr/common-eval-args.hh
parent4ff9d5dee86999b559da4b515ec12533787dc564 (diff)
refactor(tvix): Clean up MixEvalArgs internals r/1726
Previously, MixEvalArgs (a generic data type used to handle --arg,
--argstr, and -I arguments to `nix-build`, `nix eval`, etc.) was storing
the difference between --arg and --argstr by prepending a single
character (either 'E' or 'S') to the value of the arg. This is messy and
un-type-safe, so this commit refactors that to use a proper enum and a
std::pair, which allows us to add a switch and get totality checking.
yay, types!

Change-Id: I883f8db3136d05dda190fac0a1b494386c2ff87b
Reviewed-on: https://cl.tvl.fyi/c/depot/+/1862
Tested-by: BuildkiteCI
Reviewed-by: tazjin <mail@tazj.in>
Diffstat (limited to 'third_party/nix/src/libexpr/common-eval-args.hh')
-rw-r--r--third_party/nix/src/libexpr/common-eval-args.hh4
1 files changed, 3 insertions, 1 deletions
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);