diff --git a/third_party/nix/src/libexpr/attr-path.cc b/third_party/nix/src/libexpr/attr-path.cc index 3a467504a..1815b5e51 100644 --- a/third_party/nix/src/libexpr/attr-path.cc +++ b/third_party/nix/src/libexpr/attr-path.cc @@ -81,7 +81,7 @@ Value* findAlongAttrPath(EvalState& state, const std::string& attrPath, format("attribute '%1%' in selection path '%2%' not found") % attr % attrPath); } - v = &*a->value; + v = &*(a->second).value; } else if (apType == apIndex) { diff --git a/third_party/nix/src/libexpr/attr-set.cc b/third_party/nix/src/libexpr/attr-set.cc index e0fac9234..2df6bc9a2 100644 --- a/third_party/nix/src/libexpr/attr-set.cc +++ b/third_party/nix/src/libexpr/attr-set.cc @@ -31,12 +31,17 @@ std::vector Bindings::lexicographicOrder() { } Bindings::iterator Bindings::find(const Symbol& name) { - return &attributes_[name]; + return attributes_.find(name); } -Bindings::iterator Bindings::begin() { return &(attributes_.begin()->second); } +Bindings::iterator Bindings::begin() { + return attributes_.begin(); +} + +Bindings::iterator Bindings::end() { + return attributes_.end(); +} -Bindings::iterator Bindings::end() { return &(attributes_.end()->second); } void Bindings::merge(Bindings* other) { // We want the values from the other attribute set to take // precedence, but .merge() works the other way around. diff --git a/third_party/nix/src/libexpr/attr-set.hh b/third_party/nix/src/libexpr/attr-set.hh index 39af7c482..4ae908964 100644 --- a/third_party/nix/src/libexpr/attr-set.hh +++ b/third_party/nix/src/libexpr/attr-set.hh @@ -31,7 +31,7 @@ inline bool operator==(const Attr& lhs, const Attr& rhs) { class Bindings { public: - typedef Attr* iterator; // TODO: type, and also 'using'? + typedef absl::btree_map::iterator iterator; // Return the number of contained elements. size_t size(); @@ -71,4 +71,5 @@ class Bindings { private: absl::btree_map attributes_; }; + } // namespace nix