@@ -130,14 +130,16 @@ cel::expr::Expr ExtractExpr(
130130absl::Status LegacyParse (const conformance::v1alpha1::ParseRequest& request,
131131 conformance::v1alpha1::ParseResponse& response,
132132 bool enable_optional_syntax,
133- bool enable_variadic_logical_operators) {
133+ bool enable_variadic_logical_operators,
134+ bool enable_pratt_parser) {
134135 if (request.cel_source ().empty ()) {
135136 return absl::InvalidArgumentError (" no source code" );
136137 }
137138 cel::ParserOptions options;
138139 options.enable_optional_syntax = enable_optional_syntax;
139140 options.enable_quoted_identifiers = true ;
140141 options.enable_variadic_logical_operators = enable_variadic_logical_operators;
142+ options.enable_pratt_parser = enable_pratt_parser;
141143 cel::MacroRegistry macros;
142144 CEL_RETURN_IF_ERROR (cel::RegisterStandardMacros (macros, options));
143145 CEL_RETURN_IF_ERROR (
@@ -240,7 +242,7 @@ class LegacyConformanceServiceImpl : public ConformanceServiceInterface {
240242 public:
241243 static absl::StatusOr<std::unique_ptr<LegacyConformanceServiceImpl>> Create (
242244 bool optimize, bool recursive, bool select_optimization,
243- bool enable_variadic_logical_operators) {
245+ bool enable_variadic_logical_operators, bool enable_pratt_parser ) {
244246 static auto * constant_arena = new Arena ();
245247
246248 google::protobuf::LinkMessageReflection<
@@ -319,14 +321,15 @@ class LegacyConformanceServiceImpl : public ConformanceServiceInterface {
319321 builder->GetRegistry (), options));
320322
321323 return absl::WrapUnique (new LegacyConformanceServiceImpl (
322- std::move (builder), enable_variadic_logical_operators));
324+ std::move (builder), enable_variadic_logical_operators,
325+ enable_pratt_parser));
323326 }
324327
325328 void Parse (const conformance::v1alpha1::ParseRequest& request,
326329 conformance::v1alpha1::ParseResponse& response) override {
327330 auto status =
328331 LegacyParse (request, response, /* enable_optional_syntax=*/ false ,
329- enable_variadic_logical_operators_);
332+ enable_variadic_logical_operators_, enable_pratt_parser_ );
330333 if (!status.ok ()) {
331334 auto * issue = response.add_issues ();
332335 issue->set_code (ToGrpcCode (status.code ()));
@@ -425,19 +428,22 @@ class LegacyConformanceServiceImpl : public ConformanceServiceInterface {
425428
426429 private:
427430 LegacyConformanceServiceImpl (std::unique_ptr<CelExpressionBuilder> builder,
428- bool enable_variadic_logical_operators)
431+ bool enable_variadic_logical_operators,
432+ bool enable_pratt_parser)
429433 : builder_(std::move(builder)),
430- enable_variadic_logical_operators_ (enable_variadic_logical_operators) {}
434+ enable_variadic_logical_operators_ (enable_variadic_logical_operators),
435+ enable_pratt_parser_(enable_pratt_parser) {}
431436
432437 std::unique_ptr<CelExpressionBuilder> builder_;
433438 bool enable_variadic_logical_operators_;
439+ bool enable_pratt_parser_;
434440};
435441
436442class ModernConformanceServiceImpl : public ConformanceServiceInterface {
437443 public:
438444 static absl::StatusOr<std::unique_ptr<ModernConformanceServiceImpl>> Create (
439445 bool optimize, bool recursive, bool select_optimization,
440- bool enable_variadic_logical_operators) {
446+ bool enable_variadic_logical_operators, bool enable_pratt_parser ) {
441447 google::protobuf::LinkMessageReflection<
442448 cel::expr::conformance::proto3::TestAllTypes>();
443449 google::protobuf::LinkMessageReflection<
@@ -479,9 +485,9 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
479485 options.max_recursion_depth = 48 ;
480486 }
481487
482- return absl::WrapUnique (
483- new ModernConformanceServiceImpl ( options, optimize, select_optimization,
484- enable_variadic_logical_operators));
488+ return absl::WrapUnique (new ModernConformanceServiceImpl (
489+ options, optimize, select_optimization,
490+ enable_variadic_logical_operators, enable_pratt_parser ));
485491 }
486492
487493 absl::StatusOr<std::unique_ptr<const cel::Runtime>> Setup (
@@ -538,7 +544,7 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
538544 conformance::v1alpha1::ParseResponse& response) override {
539545 auto status =
540546 LegacyParse (request, response, /* enable_optional_syntax=*/ true ,
541- enable_variadic_logical_operators_);
547+ enable_variadic_logical_operators_, enable_pratt_parser_ );
542548 if (!status.ok ()) {
543549 auto * issue = response.add_issues ();
544550 issue->set_code (ToGrpcCode (status.code ()));
@@ -630,11 +636,13 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
630636 ModernConformanceServiceImpl (const RuntimeOptions& options,
631637 bool enable_optimizations,
632638 bool enable_select_optimization,
633- bool enable_variadic_logical_operators)
639+ bool enable_variadic_logical_operators,
640+ bool enable_pratt_parser)
634641 : options_(options),
635642 enable_optimizations_ (enable_optimizations),
636643 enable_select_optimization_(enable_select_optimization),
637- enable_variadic_logical_operators_(enable_variadic_logical_operators) {}
644+ enable_variadic_logical_operators_(enable_variadic_logical_operators),
645+ enable_pratt_parser_(enable_pratt_parser) {}
638646
639647 static absl::StatusOr<std::unique_ptr<cel::TraceableProgram>> Plan (
640648 const cel::Runtime& runtime,
@@ -666,6 +674,7 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
666674 bool enable_optimizations_;
667675 bool enable_select_optimization_;
668676 bool enable_variadic_logical_operators_;
677+ bool enable_pratt_parser_;
669678};
670679
671680} // namespace
@@ -679,11 +688,11 @@ NewConformanceService(const ConformanceServiceOptions& options) {
679688 if (options.modern ) {
680689 return google::api::expr::runtime::ModernConformanceServiceImpl::Create (
681690 options.optimize , options.recursive , options.select_optimization ,
682- options.enable_variadic_logical_operators );
691+ options.enable_variadic_logical_operators , options. enable_pratt_parser );
683692 } else {
684693 return google::api::expr::runtime::LegacyConformanceServiceImpl::Create (
685694 options.optimize , options.recursive , options.select_optimization ,
686- options.enable_variadic_logical_operators );
695+ options.enable_variadic_logical_operators , options. enable_pratt_parser );
687696 }
688697}
689698
0 commit comments