@@ -287,7 +287,8 @@ class ExecutionFrame : public ExecutionFrameBase {
287287 state.comprehension_slots()),
288288 pc_ (0UL ),
289289 execution_path_(flat),
290- state_(state),
290+ value_stack_(&state.value_stack()),
291+ iterator_stack_(&state.iterator_stack()),
291292 subexpressions_() {}
292293
293294 ExecutionFrame (absl::Span<const ExecutionPathView> subexpressions,
@@ -301,7 +302,8 @@ class ExecutionFrame : public ExecutionFrameBase {
301302 state.comprehension_slots()),
302303 pc_(0UL ),
303304 execution_path_(subexpressions[0 ]),
304- state_(state),
305+ value_stack_(&state.value_stack()),
306+ iterator_stack_(&state.iterator_stack()),
305307 subexpressions_(subexpressions) {
306308 ABSL_DCHECK (!subexpressions.empty ());
307309 }
@@ -353,10 +355,10 @@ class ExecutionFrame : public ExecutionFrameBase {
353355 execution_path_ = subexpression;
354356 }
355357
356- EvaluatorStack& value_stack () { return state_. value_stack () ; }
358+ EvaluatorStack& value_stack () { return *value_stack_ ; }
357359
358360 cel::runtime_internal::IteratorStack& iterator_stack () {
359- return state_. iterator_stack () ;
361+ return *iterator_stack_ ;
360362 }
361363
362364 bool enable_attribute_tracking () const {
@@ -396,7 +398,8 @@ class ExecutionFrame : public ExecutionFrameBase {
396398
397399 size_t pc_; // pc_ - Program Counter. Current position on execution path.
398400 ExecutionPathView execution_path_;
399- FlatExpressionEvaluatorState& state_;
401+ absl::Nonnull<EvaluatorStack*> const value_stack_;
402+ absl::Nonnull<cel::runtime_internal::IteratorStack*> const iterator_stack_;
400403 absl::Span<const ExecutionPathView> subexpressions_;
401404 std::vector<SubFrame> call_stack_;
402405};
0 commit comments