@@ -128,13 +128,15 @@ cel::expr::Expr ExtractExpr(
128128
129129absl::Status LegacyParse (const conformance::v1alpha1::ParseRequest& request,
130130 conformance::v1alpha1::ParseResponse& response,
131- bool enable_optional_syntax) {
131+ bool enable_optional_syntax,
132+ bool enable_variadic_logical_operators) {
132133 if (request.cel_source ().empty ()) {
133134 return absl::InvalidArgumentError (" no source code" );
134135 }
135136 cel::ParserOptions options;
136137 options.enable_optional_syntax = enable_optional_syntax;
137138 options.enable_quoted_identifiers = true ;
139+ options.enable_variadic_logical_operators = enable_variadic_logical_operators;
138140 cel::MacroRegistry macros;
139141 CEL_RETURN_IF_ERROR (cel::RegisterStandardMacros (macros, options));
140142 CEL_RETURN_IF_ERROR (
@@ -236,7 +238,8 @@ absl::Status CheckImpl(google::protobuf::Arena* arena,
236238class LegacyConformanceServiceImpl : public ConformanceServiceInterface {
237239 public:
238240 static absl::StatusOr<std::unique_ptr<LegacyConformanceServiceImpl>> Create (
239- bool optimize, bool recursive, bool select_optimization) {
241+ bool optimize, bool recursive, bool select_optimization,
242+ bool enable_variadic_logical_operators) {
240243 static auto * constant_arena = new Arena ();
241244
242245 google::protobuf::LinkMessageReflection<
@@ -313,14 +316,15 @@ class LegacyConformanceServiceImpl : public ConformanceServiceInterface {
313316 CEL_RETURN_IF_ERROR (cel::extensions::RegisterMathExtensionFunctions (
314317 builder->GetRegistry (), options));
315318
316- return absl::WrapUnique (
317- new LegacyConformanceServiceImpl ( std::move (builder)));
319+ return absl::WrapUnique (new LegacyConformanceServiceImpl (
320+ std::move (builder), enable_variadic_logical_operators ));
318321 }
319322
320323 void Parse (const conformance::v1alpha1::ParseRequest& request,
321324 conformance::v1alpha1::ParseResponse& response) override {
322325 auto status =
323- LegacyParse (request, response, /* enable_optional_syntax=*/ false );
326+ LegacyParse (request, response, /* enable_optional_syntax=*/ false ,
327+ enable_variadic_logical_operators_);
324328 if (!status.ok ()) {
325329 auto * issue = response.add_issues ();
326330 issue->set_code (ToGrpcCode (status.code ()));
@@ -418,17 +422,20 @@ class LegacyConformanceServiceImpl : public ConformanceServiceInterface {
418422 }
419423
420424 private:
421- explicit LegacyConformanceServiceImpl (
422- std::unique_ptr<CelExpressionBuilder> builder)
423- : builder_(std::move(builder)) {}
425+ LegacyConformanceServiceImpl (std::unique_ptr<CelExpressionBuilder> builder,
426+ bool enable_variadic_logical_operators)
427+ : builder_(std::move(builder)),
428+ enable_variadic_logical_operators_ (enable_variadic_logical_operators) {}
424429
425430 std::unique_ptr<CelExpressionBuilder> builder_;
431+ bool enable_variadic_logical_operators_;
426432};
427433
428434class ModernConformanceServiceImpl : public ConformanceServiceInterface {
429435 public:
430436 static absl::StatusOr<std::unique_ptr<ModernConformanceServiceImpl>> Create (
431- bool optimize, bool recursive, bool select_optimization) {
437+ bool optimize, bool recursive, bool select_optimization,
438+ bool enable_variadic_logical_operators) {
432439 google::protobuf::LinkMessageReflection<
433440 cel::expr::conformance::proto3::TestAllTypes>();
434441 google::protobuf::LinkMessageReflection<
@@ -470,8 +477,9 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
470477 options.max_recursion_depth = 48 ;
471478 }
472479
473- return absl::WrapUnique (new ModernConformanceServiceImpl (
474- options, optimize, select_optimization));
480+ return absl::WrapUnique (
481+ new ModernConformanceServiceImpl (options, optimize, select_optimization,
482+ enable_variadic_logical_operators));
475483 }
476484
477485 absl::StatusOr<std::unique_ptr<const cel::Runtime>> Setup (
@@ -523,7 +531,8 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
523531 void Parse (const conformance::v1alpha1::ParseRequest& request,
524532 conformance::v1alpha1::ParseResponse& response) override {
525533 auto status =
526- LegacyParse (request, response, /* enable_optional_syntax=*/ true );
534+ LegacyParse (request, response, /* enable_optional_syntax=*/ true ,
535+ enable_variadic_logical_operators_);
527536 if (!status.ok ()) {
528537 auto * issue = response.add_issues ();
529538 issue->set_code (ToGrpcCode (status.code ()));
@@ -614,10 +623,12 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
614623 private:
615624 ModernConformanceServiceImpl (const RuntimeOptions& options,
616625 bool enable_optimizations,
617- bool enable_select_optimization)
626+ bool enable_select_optimization,
627+ bool enable_variadic_logical_operators)
618628 : options_(options),
619629 enable_optimizations_ (enable_optimizations),
620- enable_select_optimization_(enable_select_optimization) {}
630+ enable_select_optimization_(enable_select_optimization),
631+ enable_variadic_logical_operators_(enable_variadic_logical_operators) {}
621632
622633 static absl::StatusOr<std::unique_ptr<cel::TraceableProgram>> Plan (
623634 const cel::Runtime& runtime,
@@ -648,6 +659,7 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
648659 RuntimeOptions options_;
649660 bool enable_optimizations_;
650661 bool enable_select_optimization_;
662+ bool enable_variadic_logical_operators_;
651663};
652664
653665} // namespace
@@ -660,10 +672,12 @@ absl::StatusOr<std::unique_ptr<ConformanceServiceInterface>>
660672NewConformanceService (const ConformanceServiceOptions& options) {
661673 if (options.modern ) {
662674 return google::api::expr::runtime::ModernConformanceServiceImpl::Create (
663- options.optimize , options.recursive , options.select_optimization );
675+ options.optimize , options.recursive , options.select_optimization ,
676+ options.enable_variadic_logical_operators );
664677 } else {
665678 return google::api::expr::runtime::LegacyConformanceServiceImpl::Create (
666- options.optimize , options.recursive , options.select_optimization );
679+ options.optimize , options.recursive , options.select_optimization ,
680+ options.enable_variadic_logical_operators );
667681 }
668682}
669683
0 commit comments