Skip to content

Commit 3824596

Browse files
CEL Dev Teamcopybara-github
authored andcommitted
Reduce included ICU locales to limit the binary size
By default ICU includes all locales, which significantly increases the binary size. This cl adds a filter and limits the locale to the default locale. Users can link in more locales if needed. PiperOrigin-RevId: 720845594
1 parent 3f26570 commit 3824596

3 files changed

Lines changed: 27 additions & 0 deletions

File tree

extensions/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,7 @@ cc_library(
442442
srcs = ["strings.cc"],
443443
hdrs = ["strings.h"],
444444
deps = [
445+
":formatting",
445446
"//checker:type_checker_builder",
446447
"//checker/internal:builtins_arena",
447448
"//common:casting",

extensions/strings.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#include "common/value_manager.h"
3737
#include "eval/public/cel_function_registry.h"
3838
#include "eval/public/cel_options.h"
39+
#include "extensions/formatting.h"
3940
#include "internal/status_macros.h"
4041
#include "internal/utf8.h"
4142
#include "runtime/function_adapter.h"
@@ -431,6 +432,7 @@ absl::Status RegisterStringsFunctions(FunctionRegistry& registry,
431432
int64_t>::CreateDescriptor("replace", /*receiver_style=*/true),
432433
VariadicFunctionAdapter<absl::StatusOr<Value>, StringValue, StringValue,
433434
StringValue, int64_t>::WrapFunction(Replace2)));
435+
CEL_RETURN_IF_ERROR(RegisterStringFormattingFunctions(registry, options));
434436
return absl::OkStatus();
435437
}
436438

extensions/strings_test.cc

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,30 @@ TEST(Strings, UpperAscii) {
228228
EXPECT_TRUE(result.GetBool().NativeValue());
229229
}
230230

231+
TEST(Strings, Format) {
232+
google::protobuf::Arena arena;
233+
const auto options = RuntimeOptions{};
234+
ASSERT_OK_AND_ASSIGN(auto builder,
235+
CreateStandardRuntimeBuilder(
236+
internal::GetTestingDescriptorPool(), options));
237+
EXPECT_THAT(RegisterStringsFunctions(builder.function_registry(), options),
238+
IsOk());
239+
240+
ASSERT_OK_AND_ASSIGN(auto runtime, std::move(builder).Build());
241+
242+
ASSERT_OK_AND_ASSIGN(ParsedExpr expr,
243+
Parse("'abc %f'.format([2.0]) == 'abc 2.000000'",
244+
"<input>", ParserOptions{}));
245+
246+
ASSERT_OK_AND_ASSIGN(std::unique_ptr<Program> program,
247+
ProtobufRuntimeAdapter::CreateProgram(*runtime, expr));
248+
249+
Activation activation;
250+
ASSERT_OK_AND_ASSIGN(Value result, program->Evaluate(&arena, activation));
251+
ASSERT_TRUE(result.Is<BoolValue>());
252+
EXPECT_TRUE(result.GetBool().NativeValue());
253+
}
254+
231255
TEST(StringsCheckerLibrary, SmokeTest) {
232256
google::protobuf::Arena arena;
233257
ASSERT_OK_AND_ASSIGN(

0 commit comments

Comments
 (0)