From addea6d6384b825984b39c715c92672ac510c293 Mon Sep 17 00:00:00 2001 From: Justin King Date: Fri, 25 Sep 2026 14:38:09 -0700 Subject: [PATCH] Cache evaluation option flags in ExecutionFrameBase PiperOrigin-RevId: 988502087 --- eval/eval/evaluator_core.h | 42 +++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/eval/eval/evaluator_core.h b/eval/eval/evaluator_core.h index 575abfa05..d1d4e5438 100644 --- a/eval/eval/evaluator_core.h +++ b/eval/eval/evaluator_core.h @@ -178,7 +178,18 @@ class ExecutionFrameBase { activation.GetMissingAttributes()), slots_(&ComprehensionSlots::GetEmptyInstance()), max_iterations_(options.comprehension_max_iterations), - iterations_(0) { + iterations_(0), + attribute_tracking_enabled_( + options_->unknown_processing != + cel::UnknownProcessingOptions::kDisabled || + options_->enable_missing_attribute_errors), + missing_attribute_errors_enabled_( + options_->enable_missing_attribute_errors), + unknown_processing_enabled_(options_->unknown_processing != + cel::UnknownProcessingOptions::kDisabled), + unknown_function_results_enabled_( + options_->unknown_processing == + cel::UnknownProcessingOptions::kAttributeAndFunction) { if (unknown_processing_enabled()) { if (auto matcher = cel::runtime_internal:: ActivationAttributeMatcherAccess::GetAttributeMatcher(activation); @@ -209,7 +220,18 @@ class ExecutionFrameBase { activation.GetMissingAttributes()), slots_(&slots), max_iterations_(options.comprehension_max_iterations), - iterations_(0) { + iterations_(0), + attribute_tracking_enabled_( + options_->unknown_processing != + cel::UnknownProcessingOptions::kDisabled || + options_->enable_missing_attribute_errors), + missing_attribute_errors_enabled_( + options_->enable_missing_attribute_errors), + unknown_processing_enabled_(options_->unknown_processing != + cel::UnknownProcessingOptions::kDisabled), + unknown_function_results_enabled_( + options_->unknown_processing == + cel::UnknownProcessingOptions::kAttributeAndFunction) { if (unknown_processing_enabled()) { if (auto matcher = cel::runtime_internal:: ActivationAttributeMatcherAccess::GetAttributeMatcher(activation); @@ -246,23 +268,19 @@ class ExecutionFrameBase { } bool attribute_tracking_enabled() const { - return options_->unknown_processing != - cel::UnknownProcessingOptions::kDisabled || - options_->enable_missing_attribute_errors; + return attribute_tracking_enabled_; } bool missing_attribute_errors_enabled() const { - return options_->enable_missing_attribute_errors; + return missing_attribute_errors_enabled_; } bool unknown_processing_enabled() const { - return options_->unknown_processing != - cel::UnknownProcessingOptions::kDisabled; + return unknown_processing_enabled_; } bool unknown_function_results_enabled() const { - return options_->unknown_processing == - cel::UnknownProcessingOptions::kAttributeAndFunction; + return unknown_function_results_enabled_; } ComprehensionSlots& comprehension_slots() { return *slots_; } @@ -294,6 +312,10 @@ class ExecutionFrameBase { ComprehensionSlots* absl_nonnull slots_; const int max_iterations_; int iterations_; + const bool attribute_tracking_enabled_; + const bool missing_attribute_errors_enabled_; + const bool unknown_processing_enabled_; + const bool unknown_function_results_enabled_; }; // ExecutionFrame manages the context needed for expression evaluation.