about summary refs log tree commit diff
diff options
context:
space:
mode:
authorKane York <kanepyork@gmail.com>2020-07-31T22·27-0700
committerkanepyork <rikingcoding@gmail.com>2020-08-01T18·54+0000
commit64f6bb695130e14bb376fa52a46c716c975020a4 (patch)
treec0882c2e6ad92465700a67a66249f023aa5627c0
parent770034042a3e7cb7f3a9f7a271ab45e44b0d006c (diff)
feat(3p/nix): remove External values feature r/1527
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 <grfn@gws.fyi>
Reviewed-by: tazjin <mail@tazj.in>
-rw-r--r--third_party/nix/src/libexpr/eval.cc45
-rw-r--r--third_party/nix/src/libexpr/primops.cc3
-rw-r--r--third_party/nix/src/libexpr/value-to-json.cc10
-rw-r--r--third_party/nix/src/libexpr/value-to-xml.cc12
-rw-r--r--third_party/nix/src/libexpr/value.hh53
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 e04bf7fc49..34c1e5046d 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<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);
diff --git a/third_party/nix/src/libexpr/primops.cc b/third_party/nix/src/libexpr/primops.cc
index 8e916163b4..053565f480 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 3e5e025a27..a338d4eed7 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 aba6013f98..921973881f 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 35c5e4d0a0..5d5785ebeb 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<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;
   };