6767#include " extensions/proto_ext.h"
6868#include " extensions/protobuf/enum_adapter.h"
6969#include " extensions/select_optimization.h"
70+ #include " extensions/set_membership_optimization.h"
71+ #include " extensions/sets_functions.h"
7072#include " extensions/strings.h"
7173#include " internal/status_macros.h"
7274#include " parser/macro_registry.h"
@@ -196,6 +198,8 @@ absl::Status CheckImpl(google::protobuf::Arena* arena,
196198 builder->AddLibrary (cel::extensions::ComprehensionsV2CheckerLibrary ()));
197199 CEL_RETURN_IF_ERROR (
198200 builder->AddLibrary (cel::extensions::ListsCheckerLibrary ()));
201+ CEL_RETURN_IF_ERROR (
202+ builder->AddLibrary (cel::extensions::SetsCheckerLibrary ()));
199203 }
200204
201205 for (const auto & decl : request.type_env ()) {
@@ -245,7 +249,7 @@ absl::Status CheckImpl(google::protobuf::Arena* arena,
245249class LegacyConformanceServiceImpl : public ConformanceServiceInterface {
246250 public:
247251 static absl::StatusOr<std::unique_ptr<LegacyConformanceServiceImpl>> Create (
248- bool optimize, bool recursive, bool select_optimization ,
252+ bool optimize, bool recursive, bool extended_optimizations ,
249253 bool enable_variadic_logical_operators, bool enable_pratt_parser) {
250254 static auto * constant_arena = new Arena ();
251255
@@ -293,8 +297,8 @@ class LegacyConformanceServiceImpl : public ConformanceServiceInterface {
293297 options.enable_typed_field_access = true ;
294298 }
295299
296- if (select_optimization ) {
297- std::cerr << " Enabling select optimizations" << std::endl;
300+ if (extended_optimizations ) {
301+ std::cerr << " Enabling extended optimizations" << std::endl;
298302 options.enable_select_optimization = true ;
299303 }
300304
@@ -323,6 +327,8 @@ class LegacyConformanceServiceImpl : public ConformanceServiceInterface {
323327 builder->GetRegistry (), options));
324328 CEL_RETURN_IF_ERROR (cel::extensions::RegisterMathExtensionFunctions (
325329 builder->GetRegistry (), options));
330+ CEL_RETURN_IF_ERROR (cel::extensions::RegisterSetsFunctions (
331+ builder->GetRegistry (), options));
326332
327333 return absl::WrapUnique (new LegacyConformanceServiceImpl (
328334 std::move (builder), enable_variadic_logical_operators,
@@ -446,7 +452,7 @@ class LegacyConformanceServiceImpl : public ConformanceServiceInterface {
446452class ModernConformanceServiceImpl : public ConformanceServiceInterface {
447453 public:
448454 static absl::StatusOr<std::unique_ptr<ModernConformanceServiceImpl>> Create (
449- bool optimize, bool recursive, bool select_optimization ,
455+ bool optimize, bool recursive, bool extended_optimizations ,
450456 bool enable_variadic_logical_operators, bool enable_pratt_parser) {
451457 google::protobuf::LinkMessageReflection<
452458 cel::expr::conformance::proto3::TestAllTypes>();
@@ -490,7 +496,7 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
490496 }
491497
492498 return absl::WrapUnique (new ModernConformanceServiceImpl (
493- options, optimize, select_optimization ,
499+ options, optimize, extended_optimizations ,
494500 enable_variadic_logical_operators, enable_pratt_parser));
495501 }
496502
@@ -512,8 +518,10 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
512518 }
513519 CEL_RETURN_IF_ERROR (cel::EnableReferenceResolver (
514520 builder, cel::ReferenceResolverEnabled::kAlways ));
515- if (enable_select_optimization_ ) {
521+ if (enable_extended_optimizations_ ) {
516522 CEL_RETURN_IF_ERROR (cel::extensions::EnableSelectOptimization (builder));
523+ CEL_RETURN_IF_ERROR (
524+ cel::extensions::EnableSetMembershipOptimization (builder));
517525 }
518526
519527 auto & type_registry = builder.type_registry ();
@@ -542,6 +550,8 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
542550 builder.function_registry (), options));
543551 CEL_RETURN_IF_ERROR (cel::extensions::RegisterListsFunctions (
544552 builder.function_registry (), options));
553+ CEL_RETURN_IF_ERROR (cel::extensions::RegisterSetsFunctions (
554+ builder.function_registry (), options));
545555
546556 return std::move (builder).Build ();
547557 }
@@ -641,12 +651,12 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
641651 private:
642652 ModernConformanceServiceImpl (const RuntimeOptions& options,
643653 bool enable_optimizations,
644- bool enable_select_optimization ,
654+ bool enable_extended_optimizations ,
645655 bool enable_variadic_logical_operators,
646656 bool enable_pratt_parser)
647657 : options_(options),
648658 enable_optimizations_ (enable_optimizations),
649- enable_select_optimization_(enable_select_optimization ),
659+ enable_extended_optimizations_(enable_extended_optimizations ),
650660 enable_variadic_logical_operators_(enable_variadic_logical_operators),
651661 enable_pratt_parser_(enable_pratt_parser) {}
652662
@@ -678,7 +688,7 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
678688
679689 RuntimeOptions options_;
680690 bool enable_optimizations_;
681- bool enable_select_optimization_ ;
691+ bool enable_extended_optimizations_ ;
682692 bool enable_variadic_logical_operators_;
683693 bool enable_pratt_parser_;
684694};
@@ -693,11 +703,11 @@ absl::StatusOr<std::unique_ptr<ConformanceServiceInterface>>
693703NewConformanceService (const ConformanceServiceOptions& options) {
694704 if (options.modern ) {
695705 return google::api::expr::runtime::ModernConformanceServiceImpl::Create (
696- options.optimize , options.recursive , options.select_optimization ,
706+ options.optimize , options.recursive , options.extended_optimizations ,
697707 options.enable_variadic_logical_operators , options.enable_pratt_parser );
698708 } else {
699709 return google::api::expr::runtime::LegacyConformanceServiceImpl::Create (
700- options.optimize , options.recursive , options.select_optimization ,
710+ options.optimize , options.recursive , options.extended_optimizations ,
701711 options.enable_variadic_logical_operators , options.enable_pratt_parser );
702712 }
703713}
0 commit comments