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…
	
	Add table
		Add a link
		
	
		Reference in a new issue