snix/third_party/nix/src/libexpr/common-eval-args.hh
Griffin Smith 3bada1d41e refactor(tvix): Clean up MixEvalArgs internals
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>
2020-08-28 01:18:19 +00:00

26 lines
448 B
C++

#pragma once
#include "libutil/args.hh"
namespace nix {
class Store;
class EvalState;
class Bindings;
enum ArgType { kArgTypeString, kArgTypeExpr };
struct MixEvalArgs : virtual Args {
MixEvalArgs();
std::unique_ptr<Bindings> getAutoArgs(EvalState& state);
Strings searchPath;
private:
std::map<std::string, std::pair<ArgType, std::string>> auto_args_;
};
Path lookupFileArg(EvalState& state, std::string s);
} // namespace nix