Skip to content

Commit 4684e69

Browse files
jnthntatumcopybara-github
authored andcommitted
Add special case for identifier step.
PiperOrigin-RevId: 988345868
1 parent addea6d commit 4684e69

75 files changed

Lines changed: 2962 additions & 2286 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎eval/compiler/BUILD‎

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,6 @@ cc_library(
111111
"//common:type",
112112
"//common:type_spec_resolver",
113113
"//common:value",
114-
"//eval/eval:comprehension_step",
115114
"//eval/eval:const_value_step",
116115
"//eval/eval:container_access_step",
117116
"//eval/eval:create_list_step",
@@ -122,9 +121,6 @@ cc_library(
122121
"//eval/eval:evaluator_core",
123122
"//eval/eval:function_step",
124123
"//eval/eval:ident_step",
125-
"//eval/eval:jump_step",
126-
"//eval/eval:lazy_init_step",
127-
"//eval/eval:logic_step",
128124
"//eval/eval:optional_or_step",
129125
"//eval/eval:select_step",
130126
"//eval/eval:shadowable_value_step",
@@ -139,6 +135,7 @@ cc_library(
139135
"//runtime/internal:issue_collector",
140136
"//runtime/internal:runtime_env",
141137
"@com_google_absl//absl/algorithm:container",
138+
"@com_google_absl//absl/base:core_headers",
142139
"@com_google_absl//absl/base:nullability",
143140
"@com_google_absl//absl/container:flat_hash_map",
144141
"@com_google_absl//absl/container:flat_hash_set",
@@ -360,7 +357,6 @@ cc_test(
360357
"//base:ast",
361358
"//common:expr",
362359
"//common:value",
363-
"//eval/eval:const_value_step",
364360
"//eval/eval:create_list_step",
365361
"//eval/eval:create_map_step",
366362
"//eval/eval:evaluator_core",

‎eval/compiler/cel_expression_builder_flat_impl.cc‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,12 @@ CelExpressionBuilderFlatImpl::CreateExpressionImpl(
100100
!impl.subexpressions().empty() &&
101101
// mainline expression is exactly one recursive step.
102102
impl.subexpressions().front().size() == 1 &&
103-
impl.subexpressions().front().front()->GetNativeTypeId() ==
103+
impl.subexpressions().front().front().IsGenericStep() &&
104+
impl.subexpressions()
105+
.front()
106+
.front()
107+
.GetGenericStep()
108+
->GetNativeTypeId() ==
104109
cel::NativeTypeId::For<WrappedDirectStep>()) {
105110
return CelExpressionRecursiveImpl::Create(env_, std::move(impl));
106111
}

‎eval/compiler/constant_folding.cc‎

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,11 @@ using ::cel::builtin::kOr;
5050
using ::cel::builtin::kTernary;
5151
using ::cel::runtime_internal::ConvertConstant;
5252
using ::google::api::expr::runtime::CreateConstValueDirectStep;
53-
using ::google::api::expr::runtime::CreateConstValueStep;
5453
using ::google::api::expr::runtime::EvaluationListener;
5554
using ::google::api::expr::runtime::ExecutionFrame;
5655
using ::google::api::expr::runtime::ExecutionPath;
5756
using ::google::api::expr::runtime::ExecutionPathView;
57+
using ::google::api::expr::runtime::ExpressionStep;
5858
using ::google::api::expr::runtime::FlatExpressionEvaluatorState;
5959
using ::google::api::expr::runtime::PlannerContext;
6060
using ::google::api::expr::runtime::ProgramOptimizer;
@@ -242,9 +242,7 @@ absl::Status ConstantFoldingExtension::OnPostVisit(PlannerContext& context,
242242

243243
// Otherwise make a stack machine plan.
244244
ExecutionPath new_plan;
245-
CEL_ASSIGN_OR_RETURN(
246-
new_plan.emplace_back(),
247-
CreateConstValueStep(std::move(value), node.id(), false));
245+
new_plan.push_back(ExpressionStep::MakeConstant(value, node.id()));
248246

249247
return context.ReplaceSubplan(node, std::move(new_plan));
250248
}

‎eval/compiler/constant_folding_test.cc‎

Lines changed: 65 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
#include "common/value.h"
3030
#include "eval/compiler/flat_expr_builder_extensions.h"
3131
#include "eval/compiler/resolver.h"
32-
#include "eval/eval/const_value_step.h"
3332
#include "eval/eval/create_list_step.h"
3433
#include "eval/eval/create_map_step.h"
3534
#include "eval/eval/evaluator_core.h"
@@ -58,10 +57,10 @@ using ::cel::runtime_internal::IssueCollector;
5857
using ::cel::runtime_internal::NewTestingRuntimeEnv;
5958
using ::cel::expr::ParsedExpr;
6059
using ::google::api::expr::parser::Parse;
61-
using ::google::api::expr::runtime::CreateConstValueStep;
6260
using ::google::api::expr::runtime::CreateCreateListStep;
6361
using ::google::api::expr::runtime::CreateCreateStructStepForMap;
6462
using ::google::api::expr::runtime::ExecutionPath;
63+
using ::google::api::expr::runtime::ExpressionStep;
6564
using ::google::api::expr::runtime::PlannerContext;
6665
using ::google::api::expr::runtime::ProgramBuilder;
6766
using ::google::api::expr::runtime::ProgramOptimizer;
@@ -115,26 +114,25 @@ TEST_F(UpdatedConstantFoldingTest, SkipsTernary) {
115114
program_builder.EnterSubexpression(&call);
116115
// condition
117116
program_builder.EnterSubexpression(&condition);
118-
ASSERT_OK_AND_ASSIGN(auto step,
119-
CreateConstValueStep(cel::BoolValue(true), -1));
120-
program_builder.AddStep(std::move(step));
117+
program_builder.AddStep(
118+
ExpressionStep::MakeConstant(cel::BoolValue(true), condition.id()));
121119
program_builder.ExitSubexpression(&condition);
122120

123121
// true
124122
program_builder.EnterSubexpression(&true_branch);
125-
ASSERT_OK_AND_ASSIGN(step, CreateConstValueStep(cel::BoolValue(true), -1));
126-
program_builder.AddStep(std::move(step));
123+
program_builder.AddStep(
124+
ExpressionStep::MakeConstant(cel::BoolValue(true), true_branch.id()));
127125
program_builder.ExitSubexpression(&true_branch);
128126

129127
// false
130128
program_builder.EnterSubexpression(&false_branch);
131-
ASSERT_OK_AND_ASSIGN(step, CreateConstValueStep(cel::BoolValue(true), -1));
132-
program_builder.AddStep(std::move(step));
129+
program_builder.AddStep(
130+
ExpressionStep::MakeConstant(cel::BoolValue(true), false_branch.id()));
133131
program_builder.ExitSubexpression(&false_branch);
134132

135133
// ternary.
136-
ASSERT_OK_AND_ASSIGN(step, CreateConstValueStep(cel::NullValue(), -1));
137-
program_builder.AddStep(std::move(step));
134+
program_builder.AddStep(
135+
ExpressionStep::MakeConstant(cel::NullValue(), call.id()));
138136
program_builder.ExitSubexpression(&call);
139137

140138
std::shared_ptr<google::protobuf::Arena> arena;
@@ -179,21 +177,20 @@ TEST_F(UpdatedConstantFoldingTest, SkipsOr) {
179177

180178
// left
181179
program_builder.EnterSubexpression(&left_condition);
182-
ASSERT_OK_AND_ASSIGN(auto step,
183-
CreateConstValueStep(cel::BoolValue(false), -1));
184-
program_builder.AddStep(std::move(step));
180+
program_builder.AddStep(
181+
ExpressionStep::MakeConstant(cel::BoolValue(false), left_condition.id()));
185182
program_builder.ExitSubexpression(&left_condition);
186183

187184
// right
188185
program_builder.EnterSubexpression(&right_condition);
189-
ASSERT_OK_AND_ASSIGN(step, CreateConstValueStep(cel::BoolValue(true), -1));
190-
program_builder.AddStep(std::move(step));
186+
program_builder.AddStep(
187+
ExpressionStep::MakeConstant(cel::BoolValue(true), right_condition.id()));
191188
program_builder.ExitSubexpression(&right_condition);
192189

193190
// op
194191
// Just a placeholder.
195-
ASSERT_OK_AND_ASSIGN(step, CreateConstValueStep(cel::NullValue(), -1));
196-
program_builder.AddStep(std::move(step));
192+
program_builder.AddStep(
193+
ExpressionStep::MakeConstant(cel::NullValue(), call.id()));
197194
program_builder.ExitSubexpression(&call);
198195

199196
std::shared_ptr<google::protobuf::Arena> arena;
@@ -235,21 +232,20 @@ TEST_F(UpdatedConstantFoldingTest, SkipsAnd) {
235232

236233
// left
237234
program_builder.EnterSubexpression(&left_condition);
238-
ASSERT_OK_AND_ASSIGN(auto step,
239-
CreateConstValueStep(cel::BoolValue(true), -1));
240-
program_builder.AddStep(std::move(step));
235+
program_builder.AddStep(
236+
ExpressionStep::MakeConstant(cel::BoolValue(true), left_condition.id()));
241237
program_builder.ExitSubexpression(&left_condition);
242238

243239
// right
244240
program_builder.EnterSubexpression(&right_condition);
245-
ASSERT_OK_AND_ASSIGN(step, CreateConstValueStep(cel::BoolValue(false), -1));
246-
program_builder.AddStep(std::move(step));
241+
program_builder.AddStep(ExpressionStep::MakeConstant(cel::BoolValue(false),
242+
right_condition.id()));
247243
program_builder.ExitSubexpression(&right_condition);
248244

249245
// op
250246
// Just a placeholder.
251-
ASSERT_OK_AND_ASSIGN(step, CreateConstValueStep(cel::NullValue(), -1));
252-
program_builder.AddStep(std::move(step));
247+
program_builder.AddStep(
248+
ExpressionStep::MakeConstant(cel::NullValue(), call.id()));
253249
program_builder.ExitSubexpression(&call);
254250

255251
std::shared_ptr<google::protobuf::Arena> arena;
@@ -291,19 +287,21 @@ TEST_F(UpdatedConstantFoldingTest, CreatesList) {
291287

292288
// elem one
293289
program_builder.EnterSubexpression(&elem_one);
294-
ASSERT_OK_AND_ASSIGN(auto step, CreateConstValueStep(cel::IntValue(1L), 1));
295-
program_builder.AddStep(std::move(step));
290+
program_builder.AddStep(
291+
ExpressionStep::MakeConstant(cel::IntValue(1L), elem_one.id()));
296292
program_builder.ExitSubexpression(&elem_one);
297293

298294
// elem two
299295
program_builder.EnterSubexpression(&elem_two);
300-
ASSERT_OK_AND_ASSIGN(step, CreateConstValueStep(cel::IntValue(2L), 2));
301-
program_builder.AddStep(std::move(step));
296+
program_builder.AddStep(
297+
ExpressionStep::MakeConstant(cel::IntValue(2L), elem_two.id()));
302298
program_builder.ExitSubexpression(&elem_two);
303299

304300
// createlist
305-
ASSERT_OK_AND_ASSIGN(step, CreateCreateListStep(create_list.list_expr(), 3));
306-
program_builder.AddStep(std::move(step));
301+
ASSERT_OK_AND_ASSIGN(auto step,
302+
CreateCreateListStep(create_list.list_expr()));
303+
program_builder.AddStep(
304+
ExpressionStep::MakeGenericStep(std::move(step), create_list.id()));
307305
program_builder.ExitSubexpression(&create_list);
308306

309307
std::shared_ptr<google::protobuf::Arena> arena;
@@ -349,37 +347,39 @@ TEST_F(UpdatedConstantFoldingTest, CreatesLargeList) {
349347

350348
// 0
351349
ASSERT_TRUE(program_builder.EnterSubexpression(&elem0) != nullptr);
352-
ASSERT_OK_AND_ASSIGN(auto step, CreateConstValueStep(cel::IntValue(1L), 1));
353-
program_builder.AddStep(std::move(step));
350+
program_builder.AddStep(
351+
ExpressionStep::MakeConstant(cel::IntValue(1L), elem0.id()));
354352
program_builder.ExitSubexpression(&elem0);
355353

356354
// 1
357355
ASSERT_TRUE(program_builder.EnterSubexpression(&elem1));
358-
ASSERT_OK_AND_ASSIGN(step, CreateConstValueStep(cel::IntValue(2L), 2));
359-
program_builder.AddStep(std::move(step));
356+
program_builder.AddStep(
357+
ExpressionStep::MakeConstant(cel::IntValue(2L), elem1.id()));
360358
program_builder.ExitSubexpression(&elem1);
361359

362360
// 2
363361
ASSERT_TRUE(program_builder.EnterSubexpression(&elem2) != nullptr);
364-
ASSERT_OK_AND_ASSIGN(step, CreateConstValueStep(cel::IntValue(3L), 3));
365-
program_builder.AddStep(std::move(step));
362+
program_builder.AddStep(
363+
ExpressionStep::MakeConstant(cel::IntValue(3L), elem2.id()));
366364
program_builder.ExitSubexpression(&elem2);
367365

368366
// 3
369367
ASSERT_TRUE(program_builder.EnterSubexpression(&elem3) != nullptr);
370-
ASSERT_OK_AND_ASSIGN(step, CreateConstValueStep(cel::IntValue(4L), 4));
371-
program_builder.AddStep(std::move(step));
368+
program_builder.AddStep(
369+
ExpressionStep::MakeConstant(cel::IntValue(4L), elem3.id()));
372370
program_builder.ExitSubexpression(&elem3);
373371

374372
// 4
375373
ASSERT_TRUE(program_builder.EnterSubexpression(&elem4) != nullptr);
376-
ASSERT_OK_AND_ASSIGN(step, CreateConstValueStep(cel::IntValue(5L), 5));
377-
program_builder.AddStep(std::move(step));
374+
program_builder.AddStep(
375+
ExpressionStep::MakeConstant(cel::IntValue(5L), elem4.id()));
378376
program_builder.ExitSubexpression(&elem4);
379377

380378
// createlist
381-
ASSERT_OK_AND_ASSIGN(step, CreateCreateListStep(create_list.list_expr(), 6));
382-
program_builder.AddStep(std::move(step));
379+
ASSERT_OK_AND_ASSIGN(auto step_large,
380+
CreateCreateListStep(create_list.list_expr()));
381+
program_builder.AddStep(
382+
ExpressionStep::MakeGenericStep(std::move(step_large), create_list.id()));
383383
program_builder.ExitSubexpression(&create_list);
384384

385385
std::shared_ptr<google::protobuf::Arena> arena;
@@ -426,21 +426,22 @@ TEST_F(UpdatedConstantFoldingTest, CreatesMap) {
426426

427427
// key
428428
program_builder.EnterSubexpression(&key);
429-
ASSERT_OK_AND_ASSIGN(auto step, CreateConstValueStep(cel::IntValue(1L), 1));
430-
program_builder.AddStep(std::move(step));
429+
program_builder.AddStep(
430+
ExpressionStep::MakeConstant(cel::IntValue(1L), key.id()));
431431
program_builder.ExitSubexpression(&key);
432432

433433
// value
434434
program_builder.EnterSubexpression(&value);
435-
ASSERT_OK_AND_ASSIGN(step, CreateConstValueStep(cel::IntValue(2L), 2));
436-
program_builder.AddStep(std::move(step));
435+
program_builder.AddStep(
436+
ExpressionStep::MakeConstant(cel::IntValue(2L), value.id()));
437437
program_builder.ExitSubexpression(&value);
438438

439439
// create map
440440
ASSERT_OK_AND_ASSIGN(
441-
step, CreateCreateStructStepForMap(create_map.map_expr().entries().size(),
442-
{}, 3));
443-
program_builder.AddStep(std::move(step));
441+
auto step_map,
442+
CreateCreateStructStepForMap(create_map.map_expr().entries().size(), {}));
443+
program_builder.AddStep(
444+
ExpressionStep::MakeGenericStep(std::move(step_map), create_map.id()));
444445
program_builder.ExitSubexpression(&create_map);
445446

446447
std::shared_ptr<google::protobuf::Arena> arena;
@@ -481,22 +482,22 @@ TEST_F(UpdatedConstantFoldingTest, CreatesInvalidMap) {
481482

482483
// key
483484
program_builder.EnterSubexpression(&key);
484-
ASSERT_OK_AND_ASSIGN(auto step,
485-
CreateConstValueStep(cel::DoubleValue(1.0), 1));
486-
program_builder.AddStep(std::move(step));
485+
program_builder.AddStep(
486+
ExpressionStep::MakeConstant(cel::DoubleValue(1.0), key.id()));
487487
program_builder.ExitSubexpression(&key);
488488

489489
// value
490490
program_builder.EnterSubexpression(&value);
491-
ASSERT_OK_AND_ASSIGN(step, CreateConstValueStep(cel::IntValue(2L), 2));
492-
program_builder.AddStep(std::move(step));
491+
program_builder.AddStep(
492+
ExpressionStep::MakeConstant(cel::IntValue(2L), value.id()));
493493
program_builder.ExitSubexpression(&value);
494494

495495
// create map
496496
ASSERT_OK_AND_ASSIGN(
497-
step, CreateCreateStructStepForMap(create_map.map_expr().entries().size(),
498-
{}, 3));
499-
program_builder.AddStep(std::move(step));
497+
auto step_invalid_map,
498+
CreateCreateStructStepForMap(create_map.map_expr().entries().size(), {}));
499+
program_builder.AddStep(ExpressionStep::MakeGenericStep(
500+
std::move(step_invalid_map), create_map.id()));
500501
program_builder.ExitSubexpression(&create_map);
501502

502503
std::shared_ptr<google::protobuf::Arena> arena;
@@ -536,21 +537,20 @@ TEST_F(UpdatedConstantFoldingTest, ErrorsOnUnexpectedOrder) {
536537
program_builder.EnterSubexpression(&call);
537538
// left
538539
program_builder.EnterSubexpression(&left_condition);
539-
ASSERT_OK_AND_ASSIGN(auto step,
540-
CreateConstValueStep(cel::BoolValue(true), -1));
541-
program_builder.AddStep(std::move(step));
540+
program_builder.AddStep(
541+
ExpressionStep::MakeConstant(cel::BoolValue(true), left_condition.id()));
542542
program_builder.ExitSubexpression(&left_condition);
543543

544544
// right
545545
program_builder.EnterSubexpression(&right_condition);
546-
ASSERT_OK_AND_ASSIGN(step, CreateConstValueStep(cel::BoolValue(false), -1));
547-
program_builder.AddStep(std::move(step));
546+
program_builder.AddStep(ExpressionStep::MakeConstant(cel::BoolValue(false),
547+
right_condition.id()));
548548
program_builder.ExitSubexpression(&right_condition);
549549

550550
// op
551551
// Just a placeholder.
552-
ASSERT_OK_AND_ASSIGN(step, CreateConstValueStep(cel::NullValue(), -1));
553-
program_builder.AddStep(std::move(step));
552+
program_builder.AddStep(
553+
ExpressionStep::MakeConstant(cel::NullValue(), call.id()));
554554
program_builder.ExitSubexpression(&call);
555555

556556
std::shared_ptr<google::protobuf::Arena> arena;

0 commit comments

Comments
 (0)