feat(3p/nix): remove External values feature
External values are only useful when using the plugin framework, which we are not interested in carrying forward.
Reverts commit 320659b0cd
Change-Id: Ib4929c349bbb33f16224fc674e94c7b7d5953c6a
Reviewed-on: https://cl.tvl.fyi/c/depot/+/1505
Tested-by: BuildkiteCI
Reviewed-by: glittershark <grfn@gws.fyi>
Reviewed-by: tazjin <mail@tazj.in>
This commit is contained in:
parent
770034042a
commit
64f6bb6951
5 changed files with 10 additions and 113 deletions
45
third_party/nix/src/libexpr/eval.cc
vendored
45
third_party/nix/src/libexpr/eval.cc
vendored
|
@ -119,14 +119,12 @@ static void printValue(std::ostream& str, std::set<const Value*>& active,
|
|||
case tPrimOpApp:
|
||||
str << "<PRIMOP-APP>";
|
||||
break;
|
||||
case tExternal:
|
||||
str << *v.external;
|
||||
break;
|
||||
case tFloat:
|
||||
str << v.fpoint;
|
||||
break;
|
||||
default:
|
||||
throw Error("invalid value");
|
||||
throw Error(
|
||||
absl::StrCat("invalid value of type ", static_cast<int>(v.type)));
|
||||
}
|
||||
|
||||
active.erase(&v);
|
||||
|
@ -176,11 +174,16 @@ std::string showType(const Value& v) {
|
|||
case tPrimOpApp:
|
||||
return fmt("the partially applied built-in function '%s'",
|
||||
std::string(getPrimOp(v)->primOp->name));
|
||||
case tExternal:
|
||||
return v.external->showType();
|
||||
case _reserved1:
|
||||
LOG(FATAL) << "attempted to show the type string of the deprecated "
|
||||
"tExternal value";
|
||||
break;
|
||||
case tFloat:
|
||||
return "a float";
|
||||
}
|
||||
LOG(FATAL)
|
||||
<< "attempted to determine the type string of an unknown type number ("
|
||||
<< static_cast<int>(v.type) << ")";
|
||||
abort();
|
||||
}
|
||||
|
||||
|
@ -1524,10 +1527,6 @@ std::string EvalState::coerceToString(const Pos& pos, Value& v,
|
|||
copyToStore);
|
||||
}
|
||||
|
||||
if (v.type == tExternal) {
|
||||
return v.external->coerceToString(pos, context, coerceMore, copyToStore);
|
||||
}
|
||||
|
||||
if (coerceMore) {
|
||||
/* Note that `false' is represented as an empty string for
|
||||
shell scripting convenience, just like `null'. */
|
||||
|
@ -1691,9 +1690,6 @@ bool EvalState::eqValues(Value& v1, Value& v2) {
|
|||
case tPrimOpApp:
|
||||
return false;
|
||||
|
||||
case tExternal:
|
||||
return *v1.external == *v2.external;
|
||||
|
||||
case tFloat:
|
||||
return v1.fpoint == v2.fpoint;
|
||||
|
||||
|
@ -1894,14 +1890,6 @@ size_t valueSize(Value& v) {
|
|||
sz += doValue(*v.primOpApp.left);
|
||||
sz += doValue(*v.primOpApp.right);
|
||||
break;
|
||||
case tExternal:
|
||||
if (seen.find(v.external) != seen.end()) {
|
||||
break;
|
||||
}
|
||||
seen.insert(v.external);
|
||||
// note: this is a plugin call
|
||||
sz += v.external->valueSize(seen);
|
||||
break;
|
||||
default:;
|
||||
}
|
||||
|
||||
|
@ -1934,21 +1922,6 @@ size_t valueSize(Value& v) {
|
|||
return doValue(v);
|
||||
}
|
||||
|
||||
std::string ExternalValueBase::coerceToString(const Pos& pos, PathSet& context,
|
||||
bool copyMore,
|
||||
bool copyToStore) const {
|
||||
throw TypeError(format("cannot coerce %1% to a string, at %2%") % showType() %
|
||||
pos);
|
||||
}
|
||||
|
||||
bool ExternalValueBase::operator==(const ExternalValueBase& b) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
std::ostream& operator<<(std::ostream& str, const ExternalValueBase& v) {
|
||||
return v.print(str);
|
||||
}
|
||||
|
||||
EvalSettings evalSettings;
|
||||
|
||||
static GlobalConfig::Register r1(&evalSettings);
|
||||
|
|
3
third_party/nix/src/libexpr/primops.cc
vendored
3
third_party/nix/src/libexpr/primops.cc
vendored
|
@ -193,9 +193,6 @@ static void prim_typeOf(EvalState& state, const Pos& pos, Value** args,
|
|||
case tPrimOpApp:
|
||||
t = "lambda";
|
||||
break;
|
||||
case tExternal:
|
||||
t = args[0]->external->typeOf();
|
||||
break;
|
||||
case tFloat:
|
||||
t = "float";
|
||||
break;
|
||||
|
|
10
third_party/nix/src/libexpr/value-to-json.cc
vendored
10
third_party/nix/src/libexpr/value-to-json.cc
vendored
|
@ -73,10 +73,6 @@ void printValueAsJSON(EvalState& state, bool strict, Value& v,
|
|||
break;
|
||||
}
|
||||
|
||||
case tExternal:
|
||||
v.external->printValueAsJSON(state, strict, out, context);
|
||||
break;
|
||||
|
||||
case tFloat:
|
||||
out.write(v.fpoint);
|
||||
break;
|
||||
|
@ -92,10 +88,4 @@ void printValueAsJSON(EvalState& state, bool strict, Value& v,
|
|||
printValueAsJSON(state, strict, v, out, context);
|
||||
}
|
||||
|
||||
void ExternalValueBase::printValueAsJSON(EvalState& state, bool strict,
|
||||
JSONPlaceholder& out,
|
||||
PathSet& context) const {
|
||||
throw TypeError(format("cannot convert %1% to JSON") % showType());
|
||||
}
|
||||
|
||||
} // namespace nix
|
||||
|
|
12
third_party/nix/src/libexpr/value-to-xml.cc
vendored
12
third_party/nix/src/libexpr/value-to-xml.cc
vendored
|
@ -163,11 +163,6 @@ static void printValueAsXML(EvalState& state, bool strict, bool location,
|
|||
break;
|
||||
}
|
||||
|
||||
case tExternal:
|
||||
v.external->printValueAsXML(state, strict, location, doc, context,
|
||||
drvsSeen);
|
||||
break;
|
||||
|
||||
case tFloat:
|
||||
doc.writeEmptyElement(
|
||||
"float", singletonAttrs("value", (format("%1%") % v.fpoint).str()));
|
||||
|
@ -178,13 +173,6 @@ static void printValueAsXML(EvalState& state, bool strict, bool location,
|
|||
}
|
||||
}
|
||||
|
||||
void ExternalValueBase::printValueAsXML(EvalState& state, bool strict,
|
||||
bool location, XMLWriter& doc,
|
||||
PathSet& context,
|
||||
PathSet& drvsSeen) const {
|
||||
doc.writeEmptyElement("unevaluated");
|
||||
}
|
||||
|
||||
void printValueAsXML(EvalState& state, bool strict, bool location, Value& v,
|
||||
std::ostream& out, PathSet& context) {
|
||||
XMLWriter doc(true, out);
|
||||
|
|
53
third_party/nix/src/libexpr/value.hh
vendored
53
third_party/nix/src/libexpr/value.hh
vendored
|
@ -25,7 +25,7 @@ typedef enum {
|
|||
tBlackhole,
|
||||
tPrimOp,
|
||||
tPrimOpApp,
|
||||
tExternal,
|
||||
_reserved1, // formerly tExternal
|
||||
tFloat
|
||||
} ValueType;
|
||||
|
||||
|
@ -36,60 +36,10 @@ struct ExprLambda;
|
|||
struct PrimOp;
|
||||
struct PrimOp;
|
||||
class Symbol;
|
||||
struct Pos;
|
||||
class EvalState;
|
||||
class XMLWriter;
|
||||
class JSONPlaceholder;
|
||||
|
||||
typedef int64_t NixInt;
|
||||
typedef double NixFloat;
|
||||
|
||||
/* External values must descend from ExternalValueBase, so that
|
||||
* type-agnostic nix functions (e.g. showType) can be implemented
|
||||
*/
|
||||
class ExternalValueBase {
|
||||
friend std::ostream& operator<<(std::ostream& str,
|
||||
const ExternalValueBase& v);
|
||||
|
||||
protected:
|
||||
/* Print out the value */
|
||||
virtual std::ostream& print(std::ostream& str) const = 0;
|
||||
|
||||
public:
|
||||
/* Return a simple string describing the type */
|
||||
virtual std::string showType() const = 0;
|
||||
|
||||
/* Return a string to be used in builtins.typeOf */
|
||||
virtual std::string typeOf() const = 0;
|
||||
|
||||
/* How much space does this value take up */
|
||||
virtual size_t valueSize(std::set<const void*>& seen) const = 0;
|
||||
|
||||
/* Coerce the value to a string. Defaults to uncoercable, i.e. throws an
|
||||
* error
|
||||
*/
|
||||
virtual std::string coerceToString(const Pos& pos, PathSet& context,
|
||||
bool copyMore, bool copyToStore) const;
|
||||
|
||||
/* Compare to another value of the same type. Defaults to uncomparable,
|
||||
* i.e. always false.
|
||||
*/
|
||||
virtual bool operator==(const ExternalValueBase& b) const;
|
||||
|
||||
/* Print the value as JSON. Defaults to unconvertable, i.e. throws an error */
|
||||
virtual void printValueAsJSON(EvalState& state, bool strict,
|
||||
JSONPlaceholder& out, PathSet& context) const;
|
||||
|
||||
/* Print the value as XML. Defaults to unevaluated */
|
||||
virtual void printValueAsXML(EvalState& state, bool strict, bool location,
|
||||
XMLWriter& doc, PathSet& context,
|
||||
PathSet& drvsSeen) const;
|
||||
|
||||
virtual ~ExternalValueBase(){};
|
||||
};
|
||||
|
||||
std::ostream& operator<<(std::ostream& str, const ExternalValueBase& v);
|
||||
|
||||
// Forward declaration of Value is required because the following
|
||||
// types are mutually recursive.
|
||||
//
|
||||
|
@ -155,7 +105,6 @@ struct Value : public gc {
|
|||
NixLambda lambda;
|
||||
PrimOp* primOp;
|
||||
NixPrimOpApp primOpApp;
|
||||
ExternalValueBase* external;
|
||||
NixFloat fpoint;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue