labath accepted this revision. labath added a comment. This looks good to me. I still have some doubts about the ConstStringification of the returned values (I am not a fan of constifying everything), but I don't want to block this review for that.
================ Comment at: lldb/source/API/SBEnvironment.cpp:62-73 + ConstString(std::next(m_opaque_up->begin(), index)->first()) + .AsCString("")); +} + +const char *SBEnvironment::GetValueAtIndex(size_t index) { + LLDB_RECORD_METHOD(const char *, SBEnvironment, GetValueAtIndex, (size_t), + index); ---------------- wallace wrote: > clayborg wrote: > > labath wrote: > > > I don't think these need to const-stringified now, given that they are > > > backed by the underlying map. We already have functions which return > > > pointers to internal objects (e.g. SBStream::GetData). > > > > > > @clayborg? > > That's a tough one. I would like to think that any "const char *" that > > comes back from an API that returns strings could just be pointer compared > > if needed. So I like the idea that for strings that comes out of the API > > that they are all const-ed and could easily be compared. I am fine with > > SBStream::GetData() returning its own string because _it_ owns the data. So > > I would vote to ConstString() any returned results > I'm adding a Clear method. With that, the backing char* might be wiped out > and the python reference to this string might be invalid unless we use > ConstString > I am fine with SBStream::GetData() returning its own string because _it_ owns > the data. I am afraid I don't see the distinction here. SBStream owns a Stream (via a unique_ptr) and the stream data is inside that. An SBEnvironment has a unique_ptr<Environment>, and the strings are inside of that. > I'm adding a Clear method. With that, the backing char* might be wiped out > and the python reference to this string might be invalid unless we use > ConstString Python will be fine if as it will copy the string as soon as it gets its hand on it. C++ users could be affected by that, but, this is not something that should come across as surprising to them (and indeed, the same thing will happen with SBStream::GetData). ================ Comment at: lldb/source/API/SBEnvironment.cpp:26 + + m_opaque_up = clone(rhs.m_opaque_up); +} ---------------- move this into the initializer list? ================ Comment at: lldb/source/API/SBEnvironment.cpp:29 + +SBEnvironment::SBEnvironment(const Environment &rhs) + : m_opaque_up(new Environment(rhs)) {} ---------------- super-nit: if you make this constructor accept a `Environment rhs` (without the `const &` part) and then do the initialization as `new Environment(std::move(rhs))`, you will avoid copying the environment in the expressions like `SBEnvironment(Environment(whatever))`. Currently that will create one `Environment` object to initialize the `rhs` argument, and then a second one when copying things to `m_opaque_up`. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D76111/new/ https://reviews.llvm.org/D76111 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits