about summary refs log tree commit diff
path: root/third_party/nix/src/libexpr
diff options
context:
space:
mode:
authorVincent Ambo <tazjin@google.com>2020-05-22T15·48+0100
committerVincent Ambo <tazjin@google.com>2020-05-22T15·57+0100
commitb3c9166b23aebbbfcbe65ea59e7ea18d876d45db (patch)
tree48b9e56e7bf8608e320fdc1420597f4c026bbb10 /third_party/nix/src/libexpr
parente24466c7951a96b35bea947e6e6854f277eda9d7 (diff)
refactor(3p/nix/libexpr): state->allocBindings -> Bindings::NewGC r/805
EvalState::allocBindings had little to do with Bindings, other than
returning them, and didn't belong in that class.
Diffstat (limited to 'third_party/nix/src/libexpr')
-rw-r--r--third_party/nix/src/libexpr/attr-set.cc7
-rw-r--r--third_party/nix/src/libexpr/attr-set.hh4
-rw-r--r--third_party/nix/src/libexpr/common-eval-args.cc2
-rw-r--r--third_party/nix/src/libexpr/eval.cc4
-rw-r--r--third_party/nix/src/libexpr/eval.hh2
-rw-r--r--third_party/nix/src/libexpr/get-drvs.cc2
6 files changed, 10 insertions, 11 deletions
diff --git a/third_party/nix/src/libexpr/attr-set.cc b/third_party/nix/src/libexpr/attr-set.cc
index 71777c95dc..e961156487 100644
--- a/third_party/nix/src/libexpr/attr-set.cc
+++ b/third_party/nix/src/libexpr/attr-set.cc
@@ -49,10 +49,7 @@ void Bindings::merge(Bindings* other) {
   attributes_.swap(other->attributes_);
 }
 
-// Allocate a new attribute set, making it visible to the garbage collector.
-Bindings* EvalState::allocBindings(size_t _capacity) {
-  return new (GC) Bindings;
-}
+Bindings* Bindings::NewGC() { return new (GC) Bindings; }
 
 void EvalState::mkAttrs(Value& v, size_t capacity) {
   if (capacity == 0) {
@@ -61,7 +58,7 @@ void EvalState::mkAttrs(Value& v, size_t capacity) {
   }
   clearValue(v);
   v.type = tAttrs;
-  v.attrs = new (GC) Bindings;
+  v.attrs = Bindings::NewGC();
   nrAttrsets++;
   nrAttrsInAttrsets += capacity;
 }
diff --git a/third_party/nix/src/libexpr/attr-set.hh b/third_party/nix/src/libexpr/attr-set.hh
index 8327333653..caddc6bebd 100644
--- a/third_party/nix/src/libexpr/attr-set.hh
+++ b/third_party/nix/src/libexpr/attr-set.hh
@@ -33,6 +33,10 @@ class Bindings {
  public:
   typedef absl::btree_map<Symbol, Attr>::iterator iterator;
 
+  // Allocate a new attribute set that is visible to the garbage
+  // collector.
+  static Bindings* NewGC();
+
   // Return the number of contained elements.
   size_t size();
 
diff --git a/third_party/nix/src/libexpr/common-eval-args.cc b/third_party/nix/src/libexpr/common-eval-args.cc
index 1b9db51c61..2059d53741 100644
--- a/third_party/nix/src/libexpr/common-eval-args.cc
+++ b/third_party/nix/src/libexpr/common-eval-args.cc
@@ -33,7 +33,7 @@ MixEvalArgs::MixEvalArgs() {
 }
 
 Bindings* MixEvalArgs::getAutoArgs(EvalState& state) {
-  Bindings* res = state.allocBindings(autoArgs.size());
+  Bindings* res = Bindings::NewGC();
   for (auto& i : autoArgs) {
     Value* v = state.allocValue();
     if (i.second[0] == 'E') {
diff --git a/third_party/nix/src/libexpr/eval.cc b/third_party/nix/src/libexpr/eval.cc
index 679d3ca996..c6804ee114 100644
--- a/third_party/nix/src/libexpr/eval.cc
+++ b/third_party/nix/src/libexpr/eval.cc
@@ -372,7 +372,7 @@ EvalState::EvalState(const Strings& _searchPath, const ref<Store>& store)
 
   clearValue(vEmptySet);
   vEmptySet.type = tAttrs;
-  vEmptySet.attrs = allocBindings(0);
+  vEmptySet.attrs = Bindings::NewGC();
 
   createBaseEnv();
 }
@@ -857,7 +857,7 @@ void ExprAttrs::eval(EvalState& state, Env& env, Value& v) {
     if (hasOverrides) {
       Value* vOverrides = v.attrs->find(overrides->first)->second.value;
       state.forceAttrs(*vOverrides);
-      Bindings* newBnds = state.allocBindings(/* capacity = */ 0);
+      Bindings* newBnds = Bindings::NewGC();
       for (auto& i : *v.attrs) {  // TODO(tazjin): copy constructor?
         newBnds->push_back(i.second);
       }
diff --git a/third_party/nix/src/libexpr/eval.hh b/third_party/nix/src/libexpr/eval.hh
index bc07f95070..73e35c9b2c 100644
--- a/third_party/nix/src/libexpr/eval.hh
+++ b/third_party/nix/src/libexpr/eval.hh
@@ -258,8 +258,6 @@ class EvalState {
 
   Value* allocAttr(Value& vAttrs, const Symbol& name);
 
-  [[deprecated]] static Bindings* allocBindings(size_t capacity);
-
   void mkList(Value& v, size_t size);
   void mkAttrs(Value& v, size_t capacity);
   void mkThunk_(Value& v, Expr* expr);
diff --git a/third_party/nix/src/libexpr/get-drvs.cc b/third_party/nix/src/libexpr/get-drvs.cc
index 822bff3699..6d4ad33be0 100644
--- a/third_party/nix/src/libexpr/get-drvs.cc
+++ b/third_party/nix/src/libexpr/get-drvs.cc
@@ -293,7 +293,7 @@ bool DrvInfo::queryMetaBool(const std::string& name, bool def) {
 void DrvInfo::setMeta(const std::string& name, Value* v) {
   getMeta();
   Bindings* old = meta;
-  meta = state->allocBindings(1 + (old != nullptr ? old->size() : 0));
+  meta = Bindings::NewGC();
   Symbol sym = state->symbols.Create(name);
   if (old != nullptr) {
     for (auto i : *old) {