@@ -129,14 +129,16 @@ cel::expr::Expr ExtractExpr(
129129absl::Status LegacyParse (const conformance::v1alpha1::ParseRequest& request,
130130 conformance::v1alpha1::ParseResponse& response,
131131 bool enable_optional_syntax,
132- bool enable_variadic_logical_operators) {
132+ bool enable_variadic_logical_operators,
133+ bool enable_pratt_parser) {
133134 if (request.cel_source ().empty ()) {
134135 return absl::InvalidArgumentError (" no source code" );
135136 }
136137 cel::ParserOptions options;
137138 options.enable_optional_syntax = enable_optional_syntax;
138139 options.enable_quoted_identifiers = true ;
139140 options.enable_variadic_logical_operators = enable_variadic_logical_operators;
141+ options.enable_pratt_parser = enable_pratt_parser;
140142 cel::MacroRegistry macros;
141143 CEL_RETURN_IF_ERROR (cel::RegisterStandardMacros (macros, options));
142144 CEL_RETURN_IF_ERROR (
@@ -239,7 +241,7 @@ class LegacyConformanceServiceImpl : public ConformanceServiceInterface {
239241 public:
240242 static absl::StatusOr<std::unique_ptr<LegacyConformanceServiceImpl>> Create (
241243 bool optimize, bool recursive, bool select_optimization,
242- bool enable_variadic_logical_operators) {
244+ bool enable_variadic_logical_operators, bool enable_pratt_parser ) {
243245 static auto * constant_arena = new Arena ();
244246
245247 google::protobuf::LinkMessageReflection<
@@ -317,14 +319,15 @@ class LegacyConformanceServiceImpl : public ConformanceServiceInterface {
317319 builder->GetRegistry (), options));
318320
319321 return absl::WrapUnique (new LegacyConformanceServiceImpl (
320- std::move (builder), enable_variadic_logical_operators));
322+ std::move (builder), enable_variadic_logical_operators,
323+ enable_pratt_parser));
321324 }
322325
323326 void Parse (const conformance::v1alpha1::ParseRequest& request,
324327 conformance::v1alpha1::ParseResponse& response) override {
325328 auto status =
326329 LegacyParse (request, response, /* enable_optional_syntax=*/ false ,
327- enable_variadic_logical_operators_);
330+ enable_variadic_logical_operators_, enable_pratt_parser_ );
328331 if (!status.ok ()) {
329332 auto * issue = response.add_issues ();
330333 issue->set_code (ToGrpcCode (status.code ()));
@@ -423,19 +426,22 @@ class LegacyConformanceServiceImpl : public ConformanceServiceInterface {
423426
424427 private:
425428 LegacyConformanceServiceImpl (std::unique_ptr<CelExpressionBuilder> builder,
426- bool enable_variadic_logical_operators)
429+ bool enable_variadic_logical_operators,
430+ bool enable_pratt_parser)
427431 : builder_(std::move(builder)),
428- enable_variadic_logical_operators_ (enable_variadic_logical_operators) {}
432+ enable_variadic_logical_operators_ (enable_variadic_logical_operators),
433+ enable_pratt_parser_(enable_pratt_parser) {}
429434
430435 std::unique_ptr<CelExpressionBuilder> builder_;
431436 bool enable_variadic_logical_operators_;
437+ bool enable_pratt_parser_;
432438};
433439
434440class ModernConformanceServiceImpl : public ConformanceServiceInterface {
435441 public:
436442 static absl::StatusOr<std::unique_ptr<ModernConformanceServiceImpl>> Create (
437443 bool optimize, bool recursive, bool select_optimization,
438- bool enable_variadic_logical_operators) {
444+ bool enable_variadic_logical_operators, bool enable_pratt_parser ) {
439445 google::protobuf::LinkMessageReflection<
440446 cel::expr::conformance::proto3::TestAllTypes>();
441447 google::protobuf::LinkMessageReflection<
@@ -477,9 +483,9 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
477483 options.max_recursion_depth = 48 ;
478484 }
479485
480- return absl::WrapUnique (
481- new ModernConformanceServiceImpl ( options, optimize, select_optimization,
482- enable_variadic_logical_operators));
486+ return absl::WrapUnique (new ModernConformanceServiceImpl (
487+ options, optimize, select_optimization,
488+ enable_variadic_logical_operators, enable_pratt_parser ));
483489 }
484490
485491 absl::StatusOr<std::unique_ptr<const cel::Runtime>> Setup (
@@ -532,7 +538,7 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
532538 conformance::v1alpha1::ParseResponse& response) override {
533539 auto status =
534540 LegacyParse (request, response, /* enable_optional_syntax=*/ true ,
535- enable_variadic_logical_operators_);
541+ enable_variadic_logical_operators_, enable_pratt_parser_ );
536542 if (!status.ok ()) {
537543 auto * issue = response.add_issues ();
538544 issue->set_code (ToGrpcCode (status.code ()));
@@ -624,11 +630,13 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
624630 ModernConformanceServiceImpl (const RuntimeOptions& options,
625631 bool enable_optimizations,
626632 bool enable_select_optimization,
627- bool enable_variadic_logical_operators)
633+ bool enable_variadic_logical_operators,
634+ bool enable_pratt_parser)
628635 : options_(options),
629636 enable_optimizations_ (enable_optimizations),
630637 enable_select_optimization_(enable_select_optimization),
631- enable_variadic_logical_operators_(enable_variadic_logical_operators) {}
638+ enable_variadic_logical_operators_(enable_variadic_logical_operators),
639+ enable_pratt_parser_(enable_pratt_parser) {}
632640
633641 static absl::StatusOr<std::unique_ptr<cel::TraceableProgram>> Plan (
634642 const cel::Runtime& runtime,
@@ -660,6 +668,7 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
660668 bool enable_optimizations_;
661669 bool enable_select_optimization_;
662670 bool enable_variadic_logical_operators_;
671+ bool enable_pratt_parser_;
663672};
664673
665674} // namespace
@@ -673,11 +682,11 @@ NewConformanceService(const ConformanceServiceOptions& options) {
673682 if (options.modern ) {
674683 return google::api::expr::runtime::ModernConformanceServiceImpl::Create (
675684 options.optimize , options.recursive , options.select_optimization ,
676- options.enable_variadic_logical_operators );
685+ options.enable_variadic_logical_operators , options. enable_pratt_parser );
677686 } else {
678687 return google::api::expr::runtime::LegacyConformanceServiceImpl::Create (
679688 options.optimize , options.recursive , options.select_optimization ,
680- options.enable_variadic_logical_operators );
689+ options.enable_variadic_logical_operators , options. enable_pratt_parser );
681690 }
682691}
683692
0 commit comments