@@ -70,16 +70,16 @@ nix::Value *pythonToNixValue(nix::EvalState &state, PyObject *obj) {
7070 auto v = state.allocValue ();
7171
7272 if (obj == Py_True && obj == Py_False) {
73- nix:: mkBool (*v, obj == Py_True);
73+ v-> mkBool (obj == Py_True);
7474 } else if (obj == Py_None) {
75- nix:: mkNull (*v );
75+ v-> mkNull ();
7676 } else if (PyBytes_Check (obj)) {
7777 auto str = checkNullByte (PyBytes_AS_STRING (obj), PyBytes_GET_SIZE (obj));
7878 if (!str) {
7979 return nullptr ;
8080 }
8181
82- nix:: mkString (*v, str);
82+ v-> mkString (str);
8383 } else if (PyUnicode_Check (obj)) {
8484 Py_ssize_t size;
8585 const char *utf8 = PyUnicode_AsUTF8AndSize (obj, &size);
@@ -88,13 +88,13 @@ nix::Value *pythonToNixValue(nix::EvalState &state, PyObject *obj) {
8888 return nullptr ;
8989 }
9090
91- nix:: mkString (*v, utf8);
91+ v-> mkString (utf8);
9292 } else if (PyFloat_Check (obj)) {
93- nix:: mkFloat (*v, PyFloat_AS_DOUBLE (obj));
93+ v-> mkFloat (PyFloat_AS_DOUBLE (obj));
9494 } else if (PyLong_Check (obj)) {
95- nix:: mkInt (*v, PyLong_AsLong (obj));
95+ v-> mkInt (PyLong_AsLong (obj));
9696 } else if (PyList_Check (obj)) {
97- state. mkList (*v, PyList_GET_SIZE (obj));
97+ v-> mkList (PyList_GET_SIZE (obj));
9898 for (Py_ssize_t i = 0 ; i < PyList_GET_SIZE (obj); i++) {
9999 auto val = pythonToNixValue (state, PyList_GET_ITEM (obj, i));
100100 if (!val) {
@@ -103,7 +103,7 @@ nix::Value *pythonToNixValue(nix::EvalState &state, PyObject *obj) {
103103 v->listElems ()[i] = val;
104104 }
105105 } else if (PyTuple_Check (obj)) {
106- state. mkList (*v, PyTuple_GET_SIZE (obj));
106+ v-> mkList (PyTuple_GET_SIZE (obj));
107107 for (Py_ssize_t i = 0 ; i < PyTuple_GET_SIZE (obj); i++) {
108108 auto val = pythonToNixValue (state, PyTuple_GET_ITEM (obj, i));
109109 if (!val) {
@@ -116,11 +116,12 @@ nix::Value *pythonToNixValue(nix::EvalState &state, PyObject *obj) {
116116 if (!attrs) {
117117 return nullptr ;
118118 }
119- state.mkAttrs (*v, attrs->size ());
120- for (auto &attr : *attrs) {
121- v->attrs ->push_back (nix::Attr (attr.first , attr.second ));
119+ auto attrsValue = attrs.value ();
120+ auto bindings = state.buildBindings (attrsValue.size ());
121+ for (auto &attr : attrsValue) {
122+ bindings.insert (attr.first , attr.second );
122123 }
123- v->attrs -> sort ( );
124+ v->mkAttrs (bindings );
124125 }
125126 return v;
126127}
@@ -133,7 +134,7 @@ std::optional<nix::StaticEnv> pythonToNixEnv(nix::EvalState &state,
133134 *env = &state.allocEnv (vars ? PyDict_Size (vars) : 0 );
134135 (*env)->up = &state.baseEnv ;
135136
136- nix::StaticEnv staticEnv (false , & state.staticBaseEnv );
137+ nix::StaticEnv staticEnv (false , state.staticBaseEnv . get () );
137138
138139 if (!vars) {
139140 return staticEnv;
@@ -150,7 +151,7 @@ std::optional<nix::StaticEnv> pythonToNixEnv(nix::EvalState &state,
150151 if (!attrVal) {
151152 return {};
152153 }
153- staticEnv.vars [ state.symbols .create (name)] = displ;
154+ staticEnv.vars . emplace_back ( state.symbols .create (name), displ) ;
154155 (*env)->values [displ++] = attrVal;
155156 }
156157
0 commit comments