Skip to content

Commit 89feafb

Browse files
l46kokcopybara-github
authored andcommitted
Include identity functions in the standard definitions
PiperOrigin-RevId: 657756541
1 parent a1cefcf commit 89feafb

3 files changed

Lines changed: 21 additions & 1 deletion

File tree

base/builtins.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ constexpr char kSeconds[] = "getSeconds";
8181
constexpr char kMilliseconds[] = "getMilliseconds";
8282

8383
// Type conversions
84-
// TODO: Add other type conversion methods.
84+
constexpr char kBool[] = "bool";
8585
constexpr char kBytes[] = "bytes";
8686
constexpr char kDouble[] = "double";
8787
constexpr char kDyn[] = "dyn";

runtime/standard/type_conversion_functions.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,13 @@ using ::cel::internal::MaxTimestamp;
4242
// Time representing `9999-12-31T23:59:59.999999999Z`.
4343
const absl::Time kMaxTime = MaxTimestamp();
4444

45+
absl::Status RegisterBoolConversionFunctions(FunctionRegistry& registry,
46+
const RuntimeOptions&) {
47+
// bool -> bool
48+
return UnaryFunctionAdapter<bool, bool>::RegisterGlobalOverload(
49+
cel::builtin::kBool, [](ValueManager&, bool v) { return v; }, registry);
50+
}
51+
4552
absl::Status RegisterIntConversionFunctions(FunctionRegistry& registry,
4653
const RuntimeOptions&) {
4754
// bool -> int
@@ -362,6 +369,8 @@ absl::Status RegisterTimeConversionFunctions(FunctionRegistry& registry,
362369

363370
absl::Status RegisterTypeConversionFunctions(FunctionRegistry& registry,
364371
const RuntimeOptions& options) {
372+
CEL_RETURN_IF_ERROR(RegisterBoolConversionFunctions(registry, options));
373+
365374
CEL_RETURN_IF_ERROR(RegisterBytesConversionFunctions(registry, options));
366375

367376
CEL_RETURN_IF_ERROR(RegisterDoubleConversionFunctions(registry, options));

runtime/standard/type_conversion_functions_test.cc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,17 @@ MATCHER_P3(MatchesUnaryDescriptor, name, receiver, expected_kind, "") {
3333
descriptor.types() == types;
3434
}
3535

36+
TEST(RegisterTypeConversionFunctions, RegisterBoolConversionFunctions) {
37+
FunctionRegistry registry;
38+
RuntimeOptions options;
39+
40+
ASSERT_OK(RegisterTypeConversionFunctions(registry, options));
41+
42+
EXPECT_THAT(registry.FindStaticOverloads(builtin::kBool, false, {Kind::kAny}),
43+
UnorderedElementsAre(
44+
MatchesUnaryDescriptor(builtin::kBool, false, Kind::kBool)));
45+
}
46+
3647
TEST(RegisterTypeConversionFunctions, RegisterIntConversionFunctions) {
3748
FunctionRegistry registry;
3849
RuntimeOptions options;

0 commit comments

Comments
 (0)