Skip to content

Commit 0353666

Browse files
jckingcopybara-github
authored andcommitted
Overhaul propagation of arenas and message factories
PiperOrigin-RevId: 691561398
1 parent 883d727 commit 0353666

38 files changed

Lines changed: 1019 additions & 411 deletions

conformance/service.cc

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -481,8 +481,7 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
481481

482482
if (enable_optimizations_) {
483483
CEL_RETURN_IF_ERROR(cel::extensions::EnableConstantFolding(
484-
builder, constant_memory_manager_,
485-
google::protobuf::MessageFactory::generated_factory()));
484+
builder, google::protobuf::MessageFactory::generated_factory()));
486485
}
487486
CEL_RETURN_IF_ERROR(cel::EnableReferenceResolver(
488487
builder, cel::ReferenceResolverEnabled::kAlways));
@@ -528,7 +527,7 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
528527

529528
void Check(const conformance::v1alpha1::CheckRequest& request,
530529
conformance::v1alpha1::CheckResponse& response) override {
531-
auto status = DoCheck(&constant_arena_, request, response);
530+
auto status = DoCheck(&arena_, request, response);
532531
if (!status.ok()) {
533532
auto* issue = response.add_issues();
534533
issue->set_code(ToGrpcCode(status.code()));
@@ -614,10 +613,7 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
614613
bool enable_optimizations)
615614
: options_(options),
616615
use_arena_(use_arena),
617-
enable_optimizations_(enable_optimizations),
618-
constant_memory_manager_(
619-
use_arena_ ? ProtoMemoryManagerRef(&constant_arena_)
620-
: cel::MemoryManagerRef::ReferenceCounting()) {}
616+
enable_optimizations_(enable_optimizations) {}
621617

622618
static absl::Status DoCheck(
623619
google::protobuf::Arena* arena, const conformance::v1alpha1::CheckRequest& request,
@@ -733,8 +729,7 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
733729
RuntimeOptions options_;
734730
bool use_arena_;
735731
bool enable_optimizations_;
736-
Arena constant_arena_;
737-
cel::MemoryManagerRef constant_memory_manager_;
732+
Arena arena_;
738733
};
739734

740735
} // namespace

eval/compiler/BUILD

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ cc_library(
3636
"//internal:casts",
3737
"//runtime:runtime_options",
3838
"//runtime/internal:issue_collector",
39+
"//runtime/internal:runtime_env",
3940
"@com_google_absl//absl/algorithm:container",
41+
"@com_google_absl//absl/base:core_headers",
4042
"@com_google_absl//absl/base:nullability",
4143
"@com_google_absl//absl/container:flat_hash_map",
4244
"@com_google_absl//absl/functional:any_invocable",
@@ -46,6 +48,7 @@ cc_library(
4648
"@com_google_absl//absl/status:statusor",
4749
"@com_google_absl//absl/types:optional",
4850
"@com_google_absl//absl/types:variant",
51+
"@com_google_protobuf//:protobuf",
4952
],
5053
)
5154

@@ -56,7 +59,6 @@ cc_test(
5659
":flat_expr_builder_extensions",
5760
":resolver",
5861
"//base/ast_internal:expr",
59-
"//common:casting",
6062
"//common:memory",
6163
"//common:native_type",
6264
"//common:value",
@@ -71,8 +73,12 @@ cc_test(
7173
"//runtime:runtime_options",
7274
"//runtime:type_registry",
7375
"//runtime/internal:issue_collector",
76+
"//runtime/internal:runtime_env",
77+
"//runtime/internal:runtime_env_testing",
78+
"@com_google_absl//absl/base:nullability",
7479
"@com_google_absl//absl/status",
7580
"@com_google_absl//absl/status:statusor",
81+
"@com_google_protobuf//:protobuf",
7682
],
7783
)
7884

@@ -115,28 +121,29 @@ cc_library(
115121
"//eval/eval:shadowable_value_step",
116122
"//eval/eval:ternary_step",
117123
"//eval/eval:trace_step",
118-
"//eval/public:cel_type_registry",
119124
"//internal:status_macros",
120125
"//runtime:function_registry",
121126
"//runtime:runtime_issue",
122127
"//runtime:runtime_options",
123128
"//runtime:type_registry",
124129
"//runtime/internal:convert_constant",
125130
"//runtime/internal:issue_collector",
131+
"//runtime/internal:runtime_env",
126132
"@com_google_absl//absl/algorithm:container",
127133
"@com_google_absl//absl/base:core_headers",
134+
"@com_google_absl//absl/base:nullability",
128135
"@com_google_absl//absl/container:flat_hash_map",
129136
"@com_google_absl//absl/container:flat_hash_set",
130137
"@com_google_absl//absl/container:node_hash_map",
131138
"@com_google_absl//absl/log:absl_check",
132-
"@com_google_absl//absl/log:absl_log",
133139
"@com_google_absl//absl/log:check",
134140
"@com_google_absl//absl/status",
135141
"@com_google_absl//absl/status:statusor",
136142
"@com_google_absl//absl/strings",
137143
"@com_google_absl//absl/types:optional",
138144
"@com_google_absl//absl/types:span",
139145
"@com_google_absl//absl/types:variant",
146+
"@com_google_protobuf//:protobuf",
140147
],
141148
)
142149

@@ -155,6 +162,7 @@ cc_test(
155162
":qualified_reference_resolver",
156163
"//base:function",
157164
"//base:function_descriptor",
165+
"//common:value",
158166
"//eval/public:activation",
159167
"//eval/public:builtin_func_registrar",
160168
"//eval/public:cel_attribute",
@@ -174,13 +182,13 @@ cc_test(
174182
"//eval/public/structs:protobuf_descriptor_type_provider",
175183
"//eval/public/testing:matchers",
176184
"//eval/testutil:test_message_cc_proto",
177-
"//extensions/protobuf:memory_manager",
178185
"//internal:proto_file_util",
179186
"//internal:proto_matchers",
180187
"//internal:status_macros",
181188
"//internal:testing",
182189
"//parser",
183190
"//runtime:runtime_options",
191+
"//runtime/internal:runtime_env_testing",
184192
"@com_google_absl//absl/container:flat_hash_map",
185193
"@com_google_absl//absl/status",
186194
"@com_google_absl//absl/strings",
@@ -213,6 +221,7 @@ cc_test(
213221
"//internal:testing",
214222
"//parser",
215223
"//runtime:runtime_options",
224+
"//runtime/internal:runtime_env_testing",
216225
"@com_google_absl//absl/status",
217226
"@com_google_absl//absl/strings",
218227
"@com_google_cel_spec//proto/cel/expr:syntax_cc_proto",
@@ -236,14 +245,20 @@ cc_library(
236245
"//eval/eval:direct_expression_step",
237246
"//eval/eval:evaluator_core",
238247
"//eval/public:cel_expression",
248+
"//eval/public:cel_function_registry",
249+
"//eval/public:cel_type_registry",
239250
"//extensions/protobuf:ast_converters",
240251
"//internal:status_macros",
241252
"//runtime:runtime_issue",
242253
"//runtime:runtime_options",
254+
"//runtime/internal:runtime_env",
243255
"@com_google_absl//absl/base:core_headers",
256+
"@com_google_absl//absl/base:nullability",
257+
"@com_google_absl//absl/log:absl_check",
244258
"@com_google_absl//absl/log:check",
245259
"@com_google_absl//absl/status",
246260
"@com_google_absl//absl/status:statusor",
261+
"@com_google_absl//absl/strings:string_view",
247262
"@com_google_cel_spec//proto/cel/expr:checked_cc_proto",
248263
"@com_google_cel_spec//proto/cel/expr:syntax_cc_proto",
249264
],
@@ -270,12 +285,12 @@ cc_test(
270285
"//eval/public/structs:protobuf_descriptor_type_provider",
271286
"//eval/public/testing:matchers",
272287
"//extensions:bindings_ext",
273-
"//extensions/protobuf:memory_manager",
274288
"//internal:status_macros",
275289
"//internal:testing",
276290
"//parser",
277291
"//parser:macro",
278292
"//runtime:runtime_options",
293+
"//runtime/internal:runtime_env_testing",
279294
"@com_google_absl//absl/algorithm:container",
280295
"@com_google_absl//absl/status",
281296
"@com_google_absl//absl/status:statusor",
@@ -303,7 +318,7 @@ cc_library(
303318
"//base:kind",
304319
"//base/ast_internal:ast_impl",
305320
"//base/ast_internal:expr",
306-
"//common:allocator",
321+
"//common:memory",
307322
"//common:value",
308323
"//eval/eval:const_value_step",
309324
"//eval/eval:evaluator_core",
@@ -331,8 +346,6 @@ cc_test(
331346
"//base:ast",
332347
"//base/ast_internal:ast_impl",
333348
"//base/ast_internal:expr",
334-
"//common:memory",
335-
"//common:type",
336349
"//common:value",
337350
"//eval/eval:const_value_step",
338351
"//eval/eval:create_list_step",
@@ -342,12 +355,16 @@ cc_test(
342355
"//extensions/protobuf:memory_manager",
343356
"//internal:status_macros",
344357
"//internal:testing",
358+
"//internal:testing_descriptor_pool",
345359
"//parser",
346360
"//runtime:function_registry",
347361
"//runtime:runtime_issue",
348362
"//runtime:runtime_options",
349363
"//runtime:type_registry",
350364
"//runtime/internal:issue_collector",
365+
"//runtime/internal:runtime_env",
366+
"//runtime/internal:runtime_env_testing",
367+
"@com_google_absl//absl/base:nullability",
351368
"@com_google_absl//absl/status",
352369
"@com_google_absl//absl/status:statusor",
353370
"@com_google_absl//absl/strings",
@@ -390,14 +407,12 @@ cc_library(
390407
hdrs = ["resolver.h"],
391408
deps = [
392409
"//base:kind",
393-
"//common:memory",
394410
"//common:type",
395411
"//common:value",
396412
"//internal:status_macros",
397413
"//runtime:function_overload_reference",
398414
"//runtime:function_registry",
399415
"//runtime:type_registry",
400-
"@com_google_absl//absl/base:nullability",
401416
"@com_google_absl//absl/container:flat_hash_map",
402417
"@com_google_absl//absl/status:statusor",
403418
"@com_google_absl//absl/strings",
@@ -445,17 +460,16 @@ cc_test(
445460
],
446461
deps = [
447462
":cel_expression_builder_flat_impl",
448-
":flat_expr_builder",
463+
"//base:builtins",
449464
"//eval/public:activation",
450465
"//eval/public:cel_attribute",
451-
"//eval/public:cel_builtins",
452466
"//eval/public:cel_expression",
453-
"//eval/public:cel_options",
467+
"//eval/public:cel_value",
454468
"//eval/public:unknown_attribute_set",
455469
"//eval/public:unknown_set",
456-
"//internal:status_macros",
457470
"//internal:testing",
458471
"//runtime:runtime_options",
472+
"//runtime/internal:runtime_env_testing",
459473
"@com_google_absl//absl/status",
460474
"@com_google_absl//absl/strings",
461475
"@com_google_protobuf//:protobuf",
@@ -533,6 +547,9 @@ cc_test(
533547
"//parser",
534548
"//runtime:runtime_issue",
535549
"//runtime/internal:issue_collector",
550+
"//runtime/internal:runtime_env",
551+
"//runtime/internal:runtime_env_testing",
552+
"@com_google_absl//absl/base:nullability",
536553
"@com_google_absl//absl/status",
537554
"@com_google_cel_spec//proto/cel/expr:checked_cc_proto",
538555
"@com_google_cel_spec//proto/cel/expr:syntax_cc_proto",
@@ -581,7 +598,6 @@ cc_test(
581598
":instrumentation",
582599
":regex_precompilation_optimization",
583600
"//base/ast_internal:ast_impl",
584-
"//common:type",
585601
"//common:value",
586602
"//eval/eval:evaluator_core",
587603
"//extensions/protobuf:ast_converters",
@@ -594,6 +610,9 @@ cc_test(
594610
"//runtime:runtime_options",
595611
"//runtime:standard_functions",
596612
"//runtime:type_registry",
613+
"//runtime/internal:runtime_env",
614+
"//runtime/internal:runtime_env_testing",
615+
"@com_google_absl//absl/base:nullability",
597616
"@com_google_absl//absl/container:flat_hash_map",
598617
"@com_google_absl//absl/status",
599618
"@com_google_cel_spec//proto/cel/expr:syntax_cc_proto",

eval/compiler/cel_expression_builder_flat_impl.h

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,17 @@
2424

2525
#include "cel/expr/checked.pb.h"
2626
#include "cel/expr/syntax.pb.h"
27+
#include "absl/base/nullability.h"
28+
#include "absl/log/absl_check.h"
2729
#include "absl/status/status.h"
2830
#include "absl/status/statusor.h"
31+
#include "absl/strings/string_view.h"
2932
#include "base/ast.h"
3033
#include "eval/compiler/flat_expr_builder.h"
3134
#include "eval/public/cel_expression.h"
35+
#include "eval/public/cel_function_registry.h"
36+
#include "eval/public/cel_type_registry.h"
37+
#include "runtime/internal/runtime_env.h"
3238
#include "runtime/runtime_options.h"
3339

3440
namespace google::api::expr::runtime {
@@ -37,13 +43,16 @@ namespace google::api::expr::runtime {
3743
// Builds instances of CelExpressionFlatImpl.
3844
class CelExpressionBuilderFlatImpl : public CelExpressionBuilder {
3945
public:
40-
explicit CelExpressionBuilderFlatImpl(const cel::RuntimeOptions& options)
41-
: flat_expr_builder_(GetRegistry()->InternalGetRegistry(),
42-
*GetTypeRegistry(), options) {}
46+
CelExpressionBuilderFlatImpl(
47+
absl::Nonnull<std::shared_ptr<cel::runtime_internal::RuntimeEnv>> env,
48+
const cel::RuntimeOptions& options)
49+
: env_(std::move(env)), flat_expr_builder_(env_, options) {
50+
ABSL_DCHECK(env_->IsInitialized());
51+
}
4352

44-
CelExpressionBuilderFlatImpl()
45-
: flat_expr_builder_(GetRegistry()->InternalGetRegistry(),
46-
*GetTypeRegistry()) {}
53+
explicit CelExpressionBuilderFlatImpl(
54+
absl::Nonnull<std::shared_ptr<cel::runtime_internal::RuntimeEnv>> env)
55+
: CelExpressionBuilderFlatImpl(std::move(env), cel::RuntimeOptions()) {}
4756

4857
absl::StatusOr<std::unique_ptr<CelExpression>> CreateExpression(
4958
const cel::expr::Expr* expr,
@@ -64,15 +73,32 @@ class CelExpressionBuilderFlatImpl : public CelExpressionBuilder {
6473
FlatExprBuilder& flat_expr_builder() { return flat_expr_builder_; }
6574

6675
void set_container(std::string container) override {
67-
CelExpressionBuilder::set_container(container);
6876
flat_expr_builder_.set_container(std::move(container));
6977
}
7078

79+
// CelFunction registry. Extension function should be registered with it
80+
// prior to expression creation.
81+
CelFunctionRegistry* GetRegistry() const override {
82+
return &env_->legacy_function_registry;
83+
}
84+
85+
// CEL Type registry. Provides a means to resolve the CEL built-in types to
86+
// CelValue instances, and to extend the set of types and enums known to
87+
// expressions by registering them ahead of time.
88+
CelTypeRegistry* GetTypeRegistry() const override {
89+
return &env_->legacy_type_registry;
90+
}
91+
92+
absl::string_view container() const override {
93+
return flat_expr_builder_.container();
94+
}
95+
7196
private:
7297
absl::StatusOr<std::unique_ptr<CelExpression>> CreateExpressionImpl(
7398
std::unique_ptr<cel::Ast> converted_ast,
7499
std::vector<absl::Status>* warnings) const;
75100

101+
absl::Nonnull<std::shared_ptr<cel::runtime_internal::RuntimeEnv>> env_;
76102
FlatExprBuilder flat_expr_builder_;
77103
};
78104

0 commit comments

Comments
 (0)