Skip to content

Commit f6cff9f

Browse files
authored
Merge pull request #159 from google/cpp-sync
OSS export
2 parents 23e50eb + 9b0b4de commit f6cff9f

30 files changed

+1540
-57
lines changed

base/ast.h

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,15 @@ class CreateStruct {
371371

372372
const Expr& map_key() const;
373373

374+
Expr& mutable_map_key() {
375+
auto* value = absl::get_if<std::unique_ptr<Expr>>(&key_kind_);
376+
if (value != nullptr) {
377+
if (*value != nullptr) return **value;
378+
}
379+
key_kind_.emplace<std::unique_ptr<Expr>>(std::make_unique<Expr>());
380+
return *absl::get<std::unique_ptr<Expr>>(key_kind_);
381+
}
382+
374383
bool has_value() const { return value_ != nullptr; }
375384

376385
const Expr& value() const;
@@ -411,6 +420,8 @@ class CreateStruct {
411420

412421
std::vector<Entry>& mutable_entries() { return entries_; }
413422

423+
const std::string& message_name() const { return message_name_; }
424+
414425
bool operator==(const CreateStruct& other) const {
415426
return message_name_ == other.message_name_ && entries_ == other.entries_;
416427
}
@@ -672,6 +683,15 @@ class Expr {
672683
return *default_constant;
673684
}
674685

686+
Constant& mutable_const_expr() {
687+
auto* value = absl::get_if<Constant>(&expr_kind_);
688+
if (value != nullptr) {
689+
return *value;
690+
}
691+
expr_kind_.emplace<Constant>();
692+
return absl::get<Constant>(expr_kind_);
693+
}
694+
675695
const Ident& ident_expr() const {
676696
auto* value = absl::get_if<Ident>(&expr_kind_);
677697
if (value != nullptr) {
@@ -681,6 +701,15 @@ class Expr {
681701
return *default_ident;
682702
}
683703

704+
Ident& mutable_ident_expr() {
705+
auto* value = absl::get_if<Ident>(&expr_kind_);
706+
if (value != nullptr) {
707+
return *value;
708+
}
709+
expr_kind_.emplace<Ident>();
710+
return absl::get<Ident>(expr_kind_);
711+
}
712+
684713
const Select& select_expr() const {
685714
auto* value = absl::get_if<Select>(&expr_kind_);
686715
if (value != nullptr) {
@@ -690,6 +719,15 @@ class Expr {
690719
return *default_select;
691720
}
692721

722+
Select& mutable_select_expr() {
723+
auto* value = absl::get_if<Select>(&expr_kind_);
724+
if (value != nullptr) {
725+
return *value;
726+
}
727+
expr_kind_.emplace<Select>();
728+
return absl::get<Select>(expr_kind_);
729+
}
730+
693731
const Call& call_expr() const {
694732
auto* value = absl::get_if<Call>(&expr_kind_);
695733
if (value != nullptr) {
@@ -699,6 +737,15 @@ class Expr {
699737
return *default_call;
700738
}
701739

740+
Call& mutable_call_expr() {
741+
auto* value = absl::get_if<Call>(&expr_kind_);
742+
if (value != nullptr) {
743+
return *value;
744+
}
745+
expr_kind_.emplace<Call>();
746+
return absl::get<Call>(expr_kind_);
747+
}
748+
702749
const CreateList& list_expr() const {
703750
auto* value = absl::get_if<CreateList>(&expr_kind_);
704751
if (value != nullptr) {
@@ -708,6 +755,15 @@ class Expr {
708755
return *default_create_list;
709756
}
710757

758+
CreateList& mutable_list_expr() {
759+
auto* value = absl::get_if<CreateList>(&expr_kind_);
760+
if (value != nullptr) {
761+
return *value;
762+
}
763+
expr_kind_.emplace<CreateList>();
764+
return absl::get<CreateList>(expr_kind_);
765+
}
766+
711767
const CreateStruct& struct_expr() const {
712768
auto* value = absl::get_if<CreateStruct>(&expr_kind_);
713769
if (value != nullptr) {
@@ -717,6 +773,15 @@ class Expr {
717773
return *default_create_struct;
718774
}
719775

776+
CreateStruct& mutable_struct_expr() {
777+
auto* value = absl::get_if<CreateStruct>(&expr_kind_);
778+
if (value != nullptr) {
779+
return *value;
780+
}
781+
expr_kind_.emplace<CreateStruct>();
782+
return absl::get<CreateStruct>(expr_kind_);
783+
}
784+
720785
const Comprehension& comprehension_expr() const {
721786
auto* value = absl::get_if<Comprehension>(&expr_kind_);
722787
if (value != nullptr) {
@@ -726,6 +791,15 @@ class Expr {
726791
return *default_comprehension;
727792
}
728793

794+
Comprehension& mutable_comprehension_expr() {
795+
auto* value = absl::get_if<Comprehension>(&expr_kind_);
796+
if (value != nullptr) {
797+
return *value;
798+
}
799+
expr_kind_.emplace<Comprehension>();
800+
return absl::get<Comprehension>(expr_kind_);
801+
}
802+
729803
bool operator==(const Expr& other) const {
730804
return id_ == other.id_ && expr_kind_ == other.expr_kind_;
731805
}

base/ast_test.cc

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,16 @@ TEST(AstTest, CreateStructEntryMutableValue) {
172172
ASSERT_EQ(absl::get<Ident>(entry.value().expr_kind()).name(), "var");
173173
}
174174

175+
TEST(AstTest, CreateStructEntryMutableMapKey) {
176+
CreateStruct::Entry entry;
177+
entry.mutable_map_key().set_expr_kind(Ident("key"));
178+
ASSERT_TRUE(absl::holds_alternative<Ident>(entry.map_key().expr_kind()));
179+
ASSERT_EQ(absl::get<Ident>(entry.map_key().expr_kind()).name(), "key");
180+
entry.mutable_map_key().set_expr_kind(Ident("new_key"));
181+
ASSERT_TRUE(absl::holds_alternative<Ident>(entry.map_key().expr_kind()));
182+
ASSERT_EQ(absl::get<Ident>(entry.map_key().expr_kind()).name(), "new_key");
183+
}
184+
175185
TEST(AstTest, ExprConstructionComprehension) {
176186
Comprehension comprehension;
177187
comprehension.set_iter_var("iter_var");
@@ -385,6 +395,36 @@ TEST(AstTest, TypeComparatorTest) {
385395
EXPECT_FALSE(type.type() == Type());
386396
}
387397

398+
TEST(AstTest, ExprMutableConstruction) {
399+
Expr expr;
400+
expr.mutable_const_expr().set_constant_kind(true);
401+
ASSERT_TRUE(expr.has_const_expr());
402+
EXPECT_TRUE(expr.const_expr().bool_value());
403+
expr.mutable_ident_expr().set_name("expr");
404+
ASSERT_TRUE(expr.has_ident_expr());
405+
EXPECT_FALSE(expr.has_const_expr());
406+
EXPECT_EQ(expr.ident_expr().name(), "expr");
407+
expr.mutable_select_expr().set_field("field");
408+
ASSERT_TRUE(expr.has_select_expr());
409+
EXPECT_FALSE(expr.has_ident_expr());
410+
EXPECT_EQ(expr.select_expr().field(), "field");
411+
expr.mutable_call_expr().set_function("function");
412+
ASSERT_TRUE(expr.has_call_expr());
413+
EXPECT_FALSE(expr.has_select_expr());
414+
EXPECT_EQ(expr.call_expr().function(), "function");
415+
expr.mutable_list_expr();
416+
EXPECT_TRUE(expr.has_list_expr());
417+
EXPECT_FALSE(expr.has_call_expr());
418+
expr.mutable_struct_expr().set_message_name("name");
419+
ASSERT_TRUE(expr.has_struct_expr());
420+
EXPECT_EQ(expr.struct_expr().message_name(), "name");
421+
EXPECT_FALSE(expr.has_list_expr());
422+
expr.mutable_comprehension_expr().set_accu_var("accu_var");
423+
ASSERT_TRUE(expr.has_comprehension_expr());
424+
EXPECT_FALSE(expr.has_list_expr());
425+
EXPECT_EQ(expr.comprehension_expr().accu_var(), "accu_var");
426+
}
427+
388428
} // namespace
389429
} // namespace internal
390430
} // namespace ast

base/handle.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ class Persistent final : private base_internal::HandlePolicy<T> {
188188
friend struct base_internal::HandleFactory;
189189

190190
template <typename... Args>
191-
explicit Persistent(absl::in_place_t in_place, Args&&... args)
191+
explicit Persistent(absl::in_place_t, Args&&... args)
192192
: impl_(std::forward<Args>(args)...) {}
193193

194194
Handle impl_;

base/internal/data.h

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -162,15 +162,6 @@ class HeapData /* : public Data */ {
162162
0;
163163
};
164164

165-
inline constexpr size_t HeapDataMetadataAndReferenceCountOffset() {
166-
return offsetof(HeapData, metadata_and_reference_count_);
167-
}
168-
169-
static_assert(HeapDataMetadataAndReferenceCountOffset() == sizeof(uintptr_t),
170-
"Expected vptr to be at offset 0");
171-
static_assert(sizeof(HeapData) == sizeof(uintptr_t) * 2,
172-
"Unexpected class size");
173-
174165
// Provides introspection for `Data`.
175166
class Metadata final {
176167
public:
@@ -302,7 +293,8 @@ union alignas(Align) AnyDataStorage final {
302293
// dereference our stored pointers as it may have already been deleted. Thus we
303294
// need to know if it was arena allocated without dereferencing the pointer.
304295
template <size_t Size, size_t Align>
305-
struct AnyData {
296+
class AnyData {
297+
public:
306298
static_assert(Size >= sizeof(uintptr_t),
307299
"Size must be at least sizeof(uintptr_t)");
308300
static_assert(Align >= alignof(uintptr_t),

base/type.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,7 @@ class PersistentTypeHandle final {
106106
PersistentTypeHandle() = default;
107107

108108
template <typename T, typename... Args>
109-
explicit PersistentTypeHandle(absl::in_place_type_t<T> in_place_type,
110-
Args&&... args) {
109+
explicit PersistentTypeHandle(absl::in_place_type_t<T>, Args&&... args) {
111110
data_.ConstructInline<T>(std::forward<Args>(args)...);
112111
}
113112

base/type_provider.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class TypeProvider {
4949
//
5050
// An empty handle is returned if the provider cannot find the requested type.
5151
virtual absl::StatusOr<Persistent<const Type>> ProvideType(
52-
TypeFactory& type_factory, absl::string_view name) const {
52+
TypeFactory&, absl::string_view) const {
5353
return absl::UnimplementedError("ProvideType is not yet implemented");
5454
}
5555
};

eval/compiler/flat_expr_builder_short_circuiting_conformance_test.cc

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,7 @@ TEST_P(ShortCircuitingTest, UnknownAnd) {
252252
const UnknownAttributeSet& attrs =
253253
result.UnknownSetOrDie()->unknown_attributes();
254254
ASSERT_THAT(attrs.attributes(), testing::SizeIs(1));
255-
EXPECT_THAT(attrs.attributes()[0]->variable().ident_expr().name(),
256-
testing::Eq("var1"));
255+
EXPECT_THAT(attrs.attributes()[0]->variable_name(), testing::Eq("var1"));
257256
}
258257

259258
TEST_P(ShortCircuitingTest, UnknownOr) {
@@ -285,8 +284,7 @@ TEST_P(ShortCircuitingTest, UnknownOr) {
285284
const UnknownAttributeSet& attrs =
286285
result.UnknownSetOrDie()->unknown_attributes();
287286
ASSERT_THAT(attrs.attributes(), testing::SizeIs(1));
288-
EXPECT_THAT(attrs.attributes()[0]->variable().ident_expr().name(),
289-
testing::Eq("var1"));
287+
EXPECT_THAT(attrs.attributes()[0]->variable_name(), testing::Eq("var1"));
290288
}
291289

292290
TEST_P(ShortCircuitingTest, BasicTernary) {
@@ -369,7 +367,7 @@ TEST_P(ShortCircuitingTest, TernaryUnknownCondHandling) {
369367
const auto& attrs =
370368
result.UnknownSetOrDie()->unknown_attributes().attributes();
371369
ASSERT_THAT(attrs, SizeIs(1));
372-
EXPECT_THAT(attrs[0]->variable().ident_expr().name(), Eq("cond"));
370+
EXPECT_THAT(attrs[0]->variable_name(), Eq("cond"));
373371

374372
// Unknown branches are discarded if condition is unknown
375373
activation.set_unknown_attribute_patterns({CelAttributePattern("cond", {}),
@@ -382,7 +380,7 @@ TEST_P(ShortCircuitingTest, TernaryUnknownCondHandling) {
382380
const auto& attrs2 =
383381
result.UnknownSetOrDie()->unknown_attributes().attributes();
384382
ASSERT_THAT(attrs2, SizeIs(1));
385-
EXPECT_THAT(attrs2[0]->variable().ident_expr().name(), Eq("cond"));
383+
EXPECT_THAT(attrs2[0]->variable_name(), Eq("cond"));
386384
}
387385

388386
TEST_P(ShortCircuitingTest, TernaryUnknownArgsHandling) {
@@ -418,7 +416,7 @@ TEST_P(ShortCircuitingTest, TernaryUnknownArgsHandling) {
418416
const auto& attrs3 =
419417
result.UnknownSetOrDie()->unknown_attributes().attributes();
420418
ASSERT_THAT(attrs3, SizeIs(1));
421-
EXPECT_EQ(attrs3[0]->variable().ident_expr().name(), "arg2");
419+
EXPECT_EQ(attrs3[0]->variable_name(), "arg2");
422420
}
423421

424422
TEST_P(ShortCircuitingTest, TernaryUnknownAndErrorHandling) {
@@ -456,7 +454,7 @@ TEST_P(ShortCircuitingTest, TernaryUnknownAndErrorHandling) {
456454
const auto& attrs =
457455
result.UnknownSetOrDie()->unknown_attributes().attributes();
458456
ASSERT_THAT(attrs, SizeIs(1));
459-
EXPECT_EQ(attrs[0]->variable().ident_expr().name(), "cond");
457+
EXPECT_EQ(attrs[0]->variable_name(), "cond");
460458
}
461459

462460
const char* TestName(testing::TestParamInfo<bool> info) {

eval/compiler/flat_expr_builder_test.cc

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1706,12 +1706,9 @@ TEST(FlatExprBuilderTest, Ternary) {
17061706
ASSERT_TRUE(result.IsUnknownSet());
17071707
const UnknownSet* result_set = result.UnknownSetOrDie();
17081708
EXPECT_THAT(result_set->unknown_attributes().attributes().size(), Eq(1));
1709-
EXPECT_THAT(result_set->unknown_attributes()
1710-
.attributes()[0]
1711-
->variable()
1712-
.ident_expr()
1713-
.name(),
1714-
Eq("selector"));
1709+
EXPECT_THAT(
1710+
result_set->unknown_attributes().attributes()[0]->variable_name(),
1711+
Eq("selector"));
17151712
}
17161713
}
17171714

eval/eval/attribute_trail.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ AttributeTrail AttributeTrail::Step(CelAttributeQualifier qualifier,
2424

2525
std::vector<CelAttributeQualifier> qualifiers = attribute_->qualifier_path();
2626
qualifiers.push_back(qualifier);
27-
auto attribute =
28-
manager.New<CelAttribute>(attribute_->variable(), std::move(qualifiers));
27+
auto attribute = manager.New<CelAttribute>(
28+
std::string(attribute_->variable_name()), std::move(qualifiers));
2929
return AttributeTrail(attribute.release());
3030
}
3131

eval/eval/comprehension_step_test.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ TEST_F(ListKeysStepTest, MapPartiallyUnknown) {
158158
eval_result->UnknownSetOrDie()->unknown_attributes().attributes();
159159

160160
EXPECT_THAT(attrs, SizeIs(1));
161-
EXPECT_THAT(attrs.at(0)->variable().ident_expr().name(), Eq("var"));
161+
EXPECT_THAT(attrs.at(0)->variable_name(), Eq("var"));
162162
EXPECT_THAT(attrs.at(0)->qualifier_path(), SizeIs(0));
163163
}
164164

0 commit comments

Comments
 (0)