diff --git a/common/values/custom_list_value.cc b/common/values/custom_list_value.cc index 0e55115b0..5a34b42cf 100644 --- a/common/values/custom_list_value.cc +++ b/common/values/custom_list_value.cc @@ -53,6 +53,8 @@ class EmptyListValue final : public common_internal::CompatListValue { EmptyListValue() = default; + google::protobuf::Arena* GetOwningArena() const override { return nullptr; } + std::string DebugString() const override { return "[]"; } bool IsEmpty() const override { return true; } diff --git a/common/values/custom_map_value.cc b/common/values/custom_map_value.cc index 99e610efe..ce463f890 100644 --- a/common/values/custom_map_value.cc +++ b/common/values/custom_map_value.cc @@ -70,6 +70,8 @@ class EmptyMapValue final : public common_internal::CompatMapValue { EmptyMapValue() = default; + google::protobuf::Arena* GetOwningArena() const override { return nullptr; } + std::string DebugString() const override { return "{}"; } bool IsEmpty() const override { return true; } diff --git a/common/values/list_value_builder.h b/common/values/list_value_builder.h index 91cef066d..d7af362c9 100644 --- a/common/values/list_value_builder.h +++ b/common/values/list_value_builder.h @@ -39,6 +39,9 @@ namespace common_internal { // `list_value_builder.cc`. class CompatListValue : public CustomListValueInterface, public google::api::expr::runtime::CelList { + public: + virtual google::protobuf::Arena* GetOwningArena() const = 0; + private: NativeTypeId GetNativeTypeId() const final { return NativeTypeId::For(); @@ -78,6 +81,9 @@ class MutableListValue : public CustomListValueInterface { // inheritance and `dynamic_cast`. class MutableCompatListValue : public MutableListValue, public google::api::expr::runtime::CelList { + public: + virtual google::protobuf::Arena* GetOwningArena() const = 0; + private: NativeTypeId GetNativeTypeId() const final { return NativeTypeId::For(); diff --git a/common/values/map_value_builder.h b/common/values/map_value_builder.h index a5a47eda9..2eb70b613 100644 --- a/common/values/map_value_builder.h +++ b/common/values/map_value_builder.h @@ -39,6 +39,9 @@ namespace common_internal { // `map_value_builder.cc`. class CompatMapValue : public CustomMapValueInterface, public google::api::expr::runtime::CelMap { + public: + virtual google::protobuf::Arena* GetOwningArena() const = 0; + private: NativeTypeId GetNativeTypeId() const final { return NativeTypeId::For(); @@ -78,6 +81,9 @@ class MutableMapValue : public CustomMapValueInterface { // inheritance and `dynamic_cast`. class MutableCompatMapValue : public MutableMapValue, public google::api::expr::runtime::CelMap { + public: + virtual google::protobuf::Arena* GetOwningArena() const = 0; + private: NativeTypeId GetNativeTypeId() const final { return NativeTypeId::For(); diff --git a/common/values/value_builder.cc b/common/values/value_builder.cc index 78d7a57d8..0bcd29eb8 100644 --- a/common/values/value_builder.cc +++ b/common/values/value_builder.cc @@ -251,6 +251,10 @@ class CompatListValueImpl final : public CompatListValue { explicit CompatListValueImpl(ValueVector&& elements) : elements_(std::move(elements)) {} + google::protobuf::Arena* GetOwningArena() const override { + return elements_.get_allocator().arena(); + } + std::string DebugString() const override { return absl::StrCat("[", absl::StrJoin(elements_, ", ", ValueFormatter{}), "]"); @@ -388,6 +392,10 @@ class MutableCompatListValueImpl final : public MutableCompatListValue { explicit MutableCompatListValueImpl(google::protobuf::Arena* absl_nonnull arena) : elements_(arena) {} + google::protobuf::Arena* GetOwningArena() const override { + return elements_.get_allocator().arena(); + } + std::string DebugString() const override { return absl::StrCat("[", absl::StrJoin(elements_, ", ", ValueFormatter{}), "]"); @@ -995,6 +1003,10 @@ class CompatMapValueImpl final : public CompatMapValue { public: explicit CompatMapValueImpl(ValueFlatHashMap&& map) : map_(std::move(map)) {} + google::protobuf::Arena* GetOwningArena() const override { + return map_.get_allocator().arena(); + } + std::string DebugString() const override { return absl::StrCat("{", absl::StrJoin(map_, ", ", ValueFormatter{}), "}"); } @@ -1159,6 +1171,10 @@ class TrivialMutableMapValueImpl final : public MutableCompatMapValue { explicit TrivialMutableMapValueImpl(google::protobuf::Arena* absl_nonnull arena) : map_(arena) {} + google::protobuf::Arena* GetOwningArena() const override { + return map_.get_allocator().arena(); + } + std::string DebugString() const override { return absl::StrCat("{", absl::StrJoin(map_, ", ", ValueFormatter{}), "}"); }