diff --git a/src/Expr.cc b/src/Expr.cc index 68e10a9a90..93c5d8f84e 100644 --- a/src/Expr.cc +++ b/src/Expr.cc @@ -239,7 +239,7 @@ IntrusivePtr NameExpr::Eval(Frame* f) const v = id->GetVal(); else if ( f ) - v = {NewRef{}, f->GetElement(id.get())}; + v = f->GetElementByID(id); else // No frame - evaluating for Simplify() purposes diff --git a/src/Frame.cc b/src/Frame.cc index 2217dea187..d4aff1c844 100644 --- a/src/Frame.cc +++ b/src/Frame.cc @@ -121,12 +121,12 @@ void Frame::SetElement(const ID* id, IntrusivePtr v) SetElement(id->Offset(), std::move(v)); } -Val* Frame::GetElement(const ID* id) const +const IntrusivePtr& Frame::GetElementByID(const ID* id) const { if ( closure ) { if ( IsOuterID(id) ) - return closure->GetElement(id); + return closure->GetElementByID(id); } // do we have an offset for it? @@ -134,10 +134,10 @@ Val* Frame::GetElement(const ID* id) const { auto where = offset_map->find(std::string(id->Name())); if ( where != offset_map->end() ) - return frame[where->second].get(); + return frame[where->second]; } - return frame[id->Offset()].get(); + return frame[id->Offset()]; } void Frame::Reset(int startIdx) diff --git a/src/Frame.h b/src/Frame.h index 1003be2ce5..9c517ff65c 100644 --- a/src/Frame.h +++ b/src/Frame.h @@ -74,7 +74,12 @@ public: * @param id the id who's value to retreive * @return the value associated with *id* */ - Val* GetElement(const ID* id) const; + const IntrusivePtr& GetElementByID(const IntrusivePtr& id) const + { return GetElementByID(id.get()); } + + [[deprecated("Remove in v4.1. Use GetElementByID().")]] + Val* GetElement(const ID* id) const + { return GetElementByID(id).get(); } /** * Resets all of the indexes from [*startIdx, frame_size) in @@ -232,6 +237,8 @@ private: using OffsetMap = std::unordered_map; + const IntrusivePtr& GetElementByID(const ID* id) const; + /** * Sets the element at index *n* of the underlying array to *v*, but does * not take ownership of a reference count to it. This method is used to