diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc index b0afccdfb..2ff975610 100644 --- a/src/libexpr/eval.cc +++ b/src/libexpr/eval.cc @@ -1616,20 +1616,20 @@ size_t valueSize(Value & v) } -string ExternalValueBase::coerceToString(const Pos & pos, PathSet & context, bool copyMore, bool copyToStore) +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) +bool ExternalValueBase::operator==(const ExternalValueBase & b) const { return false; } -std::ostream & operator << (std::ostream & str, ExternalValueBase & v) { +std::ostream & operator << (std::ostream & str, const ExternalValueBase & v) { return v.print(str); } diff --git a/src/libexpr/value-to-json.cc b/src/libexpr/value-to-json.cc index b9f3e6551..cdb713418 100644 --- a/src/libexpr/value-to-json.cc +++ b/src/libexpr/value-to-json.cc @@ -91,7 +91,7 @@ void printValueAsJSON(EvalState & state, bool strict, void ExternalValueBase::printValueAsJSON(EvalState & state, bool strict, - std::ostream & str, PathSet & context) + std::ostream & str, PathSet & context) const { throw TypeError(format("cannot convert %1% to JSON") % showType()); } diff --git a/src/libexpr/value-to-xml.cc b/src/libexpr/value-to-xml.cc index 3cecc33dc..bbbb7039b 100644 --- a/src/libexpr/value-to-xml.cc +++ b/src/libexpr/value-to-xml.cc @@ -155,7 +155,7 @@ static void printValueAsXML(EvalState & state, bool strict, bool location, void ExternalValueBase::printValueAsXML(EvalState & state, bool strict, - bool location, XMLWriter & doc, PathSet & context, PathSet & drvsSeen) + bool location, XMLWriter & doc, PathSet & context, PathSet & drvsSeen) const { doc.writeEmptyElement("unevaluated"); } diff --git a/src/libexpr/value.hh b/src/libexpr/value.hh index 227a81f2b..c06b5a6d1 100644 --- a/src/libexpr/value.hh +++ b/src/libexpr/value.hh @@ -42,45 +42,45 @@ typedef long NixInt; */ class ExternalValueBase { - friend std::ostream & operator << (std::ostream & str, ExternalValueBase & v); + friend std::ostream & operator << (std::ostream & str, const ExternalValueBase & v); protected: /* Print out the value */ - virtual std::ostream & print(std::ostream & str) = 0; + virtual std::ostream & print(std::ostream & str) const = 0; public: /* Return a simple string describing the type */ - virtual string showType() = 0; + virtual string showType() const = 0; /* Return a string to be used in builtins.typeOf */ - virtual string typeOf() = 0; + virtual string typeOf() const = 0; /* How much space does this value take up */ - virtual size_t valueSize(std::set & seen) = 0; + virtual size_t valueSize(std::set & seen) const = 0; /* Coerce the value to a string. Defaults to uncoercable, i.e. throws an * error */ - virtual string coerceToString(const Pos & pos, PathSet & context, bool copyMore, bool copyToStore); + virtual 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); + 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, - std::ostream & str, PathSet & context); + std::ostream & str, 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); + XMLWriter & doc, PathSet & context, PathSet & drvsSeen) const; virtual ~ExternalValueBase() { }; }; -std::ostream & operator << (std::ostream & str, ExternalValueBase & v); +std::ostream & operator << (std::ostream & str, const ExternalValueBase & v); struct Value