about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--third_party/nix/src/libexpr/attr-set.cc7
-rw-r--r--third_party/nix/src/libexpr/attr-set.hh6
2 files changed, 10 insertions, 3 deletions
diff --git a/third_party/nix/src/libexpr/attr-set.cc b/third_party/nix/src/libexpr/attr-set.cc
index 55b1d0ccd5..0e4cf5d9dc 100644
--- a/third_party/nix/src/libexpr/attr-set.cc
+++ b/third_party/nix/src/libexpr/attr-set.cc
@@ -21,7 +21,7 @@ namespace nix {
 // This behaviour is mimicked by using .insert(), which will *not*
 // override existing values.
 void Bindings::push_back(const Attr& attr) {
-  auto [_, inserted] = attributes_.insert_or_assign(attr.name, attr);
+  auto [_, inserted] = attributes_.insert({attr.name, attr});
 
   if (!inserted) {
     DLOG(WARNING) << "attempted to insert duplicate attribute for key '"
@@ -29,6 +29,11 @@ void Bindings::push_back(const Attr& attr) {
   }
 }
 
+// Insert or assign (i.e. replace) a value in the attribute set.
+void Bindings::insert_or_assign(const Attr& attr) {
+  attributes_.insert_or_assign(attr.name, attr);
+}
+
 size_t Bindings::size() { return attributes_.size(); }
 
 size_t Bindings::capacity() { return 0; }
diff --git a/third_party/nix/src/libexpr/attr-set.hh b/third_party/nix/src/libexpr/attr-set.hh
index 5837b5cbdc..6b68b4664a 100644
--- a/third_party/nix/src/libexpr/attr-set.hh
+++ b/third_party/nix/src/libexpr/attr-set.hh
@@ -50,10 +50,12 @@ class Bindings {
   // Is this attribute set empty?
   bool empty();
 
-  // TODO(tazjin): rename
-  // TODO(tazjin): does this need to copy?
+  // Insert, but do not replace, values in the attribute set.
   void push_back(const Attr& attr);
 
+  // Insert a value, or replace an existing one.
+  void insert_or_assign(const Attr& attr);
+
   // Look up a specific element of the attribute set.
   iterator find(const Symbol& name);