From 64f6bb695130e14bb376fa52a46c716c975020a4 Mon Sep 17 00:00:00 2001 From: Kane York Date: Fri, 31 Jul 2020 15:27:39 -0700 Subject: [PATCH] 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 320659b0cd161249c95e736c3fb309b1a73ea728 Change-Id: Ib4929c349bbb33f16224fc674e94c7b7d5953c6a Reviewed-on: https://cl.tvl.fyi/c/depot/+/1505 Tested-by: BuildkiteCI Reviewed-by: glittershark Reviewed-by: tazjin --- third_party/nix/src/libexpr/eval.cc | 45 ++++------------- third_party/nix/src/libexpr/primops.cc | 3 -- third_party/nix/src/libexpr/value-to-json.cc | 10 ---- third_party/nix/src/libexpr/value-to-xml.cc | 12 ----- third_party/nix/src/libexpr/value.hh | 53 +------------------- 5 files changed, 10 insertions(+), 113 deletions(-) diff --git a/third_party/nix/src/libexpr/eval.cc b/third_party/nix/src/libexpr/eval.cc index e04bf7fc4..34c1e5046 100644 --- a/third_party/nix/src/libexpr/eval.cc +++ b/third_party/nix/src/libexpr/eval.cc @@ -119,14 +119,12 @@ static void printValue(std::ostream& str, std::set& active, case tPrimOpApp: str << ""; 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(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(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); diff --git a/third_party/nix/src/libexpr/primops.cc b/third_party/nix/src/libexpr/primops.cc index 8e916163b..053565f48 100644 --- a/third_party/nix/src/libexpr/primops.cc +++ b/third_party/nix/src/libexpr/primops.cc @@ -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; diff --git a/third_party/nix/src/libexpr/value-to-json.cc b/third_party/nix/src/libexpr/value-to-json.cc index 3e5e025a2..a338d4eed 100644 --- a/third_party/nix/src/libexpr/value-to-json.cc +++ b/third_party/nix/src/libexpr/value-to-json.cc @@ -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 diff --git a/third_party/nix/src/libexpr/value-to-xml.cc b/third_party/nix/src/libexpr/value-to-xml.cc index aba6013f9..921973881 100644 --- a/third_party/nix/src/libexpr/value-to-xml.cc +++ b/third_party/nix/src/libexpr/value-to-xml.cc @@ -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); diff --git a/third_party/nix/src/libexpr/value.hh b/third_party/nix/src/libexpr/value.hh index 35c5e4d0a..5d5785ebe 100644 --- a/third_party/nix/src/libexpr/value.hh +++ b/third_party/nix/src/libexpr/value.hh @@ -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& 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; };