Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions env/env.cc
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,8 @@ Env::Env() {
compiler_options_.adapt_parser_errors = true;
}

absl::StatusOr<std::unique_ptr<CompilerBuilder>> Env::NewCompilerBuilder() {
absl::StatusOr<std::unique_ptr<CompilerBuilder>> Env::NewCompilerBuilder()
const {
CEL_ASSIGN_OR_RETURN(
std::unique_ptr<CompilerBuilder> compiler_builder,
cel::NewCompilerBuilder(descriptor_pool_, compiler_options_));
Expand Down Expand Up @@ -214,7 +215,7 @@ absl::StatusOr<std::unique_ptr<CompilerBuilder>> Env::NewCompilerBuilder() {
return compiler_builder;
}

absl::StatusOr<std::unique_ptr<Compiler>> Env::NewCompiler() {
absl::StatusOr<std::unique_ptr<Compiler>> Env::NewCompiler() const {
CEL_ASSIGN_OR_RETURN(std::unique_ptr<CompilerBuilder> compiler_builder,
NewCompilerBuilder());
return compiler_builder->Build();
Expand Down
4 changes: 2 additions & 2 deletions env/env.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,10 @@ class Env {

CompilerOptions& GetCompilerOptions() { return compiler_options_; }

absl::StatusOr<std::unique_ptr<CompilerBuilder>> NewCompilerBuilder();
absl::StatusOr<std::unique_ptr<CompilerBuilder>> NewCompilerBuilder() const;

// Shortcut for NewCompilerBuilder() followed by Build().
absl::StatusOr<std::unique_ptr<Compiler>> NewCompiler();
absl::StatusOr<std::unique_ptr<Compiler>> NewCompiler() const;

private:
cel::env_internal::ExtensionRegistry extension_registry_;
Expand Down
28 changes: 20 additions & 8 deletions env/env_runtime.cc
Original file line number Diff line number Diff line change
Expand Up @@ -41,32 +41,38 @@ void EnvRuntime::RegisterExtensionFunctions(
name, alias, version, std::move(function_registration_callback));
}

absl::StatusOr<RuntimeBuilder> EnvRuntime::CreateRuntimeBuilder() {
absl::StatusOr<RuntimeBuilder> EnvRuntime::CreateRuntimeBuilder() const {
return CreateRuntimeBuilder(runtime_options_);
}

absl::StatusOr<RuntimeBuilder> EnvRuntime::CreateRuntimeBuilder(
const RuntimeOptions& options) const {
RuntimeOptions runtime_options = options;
const std::vector<Config::ExtensionConfig>& extension_configs =
config_.GetExtensionConfigs();
const Config::ExtensionConfig* optional_extension_config = nullptr;
for (const Config::ExtensionConfig& extension_config : extension_configs) {
if (extension_config.name == "optional") {
optional_extension_config = &extension_config;
runtime_options_.enable_qualified_type_identifiers = true;
runtime_options.enable_qualified_type_identifiers = true;
break;
}
}

CEL_ASSIGN_OR_RETURN(
RuntimeBuilder runtime_builder,
cel::CreateRuntimeBuilder(descriptor_pool_, runtime_options_));
cel::CreateRuntimeBuilder(descriptor_pool_, runtime_options));

if (!config_.GetStandardLibraryConfig().disable) {
CEL_RETURN_IF_ERROR(RegisterStandardFunctions(
runtime_builder.function_registry(), runtime_options_));
runtime_builder.function_registry(), runtime_options));
}

// Register optional extension functions first, because other extensions
// depend on it (e.g. regex).
if (optional_extension_config != nullptr) {
CEL_RETURN_IF_ERROR(extension_registry_.RegisterExtensionFunctions(
runtime_builder, runtime_options_, optional_extension_config->name,
runtime_builder, runtime_options, optional_extension_config->name,
optional_extension_config->version));
}

Expand All @@ -75,14 +81,20 @@ absl::StatusOr<RuntimeBuilder> EnvRuntime::CreateRuntimeBuilder() {
continue;
}
CEL_RETURN_IF_ERROR(extension_registry_.RegisterExtensionFunctions(
runtime_builder, runtime_options_, extension_config.name,
runtime_builder, runtime_options, extension_config.name,
extension_config.version));
}
return runtime_builder;
}

absl::StatusOr<std::unique_ptr<Runtime>> EnvRuntime::NewRuntime() {
CEL_ASSIGN_OR_RETURN(RuntimeBuilder runtime_builder, CreateRuntimeBuilder());
absl::StatusOr<std::unique_ptr<Runtime>> EnvRuntime::NewRuntime() const {
return NewRuntime(runtime_options_);
}

absl::StatusOr<std::unique_ptr<Runtime>> EnvRuntime::NewRuntime(
const RuntimeOptions& options) const {
CEL_ASSIGN_OR_RETURN(RuntimeBuilder runtime_builder,
CreateRuntimeBuilder(options));
return std::move(runtime_builder).Build();
}

Expand Down
8 changes: 6 additions & 2 deletions env/env_runtime.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,14 @@ class EnvRuntime {

RuntimeOptions& mutable_runtime_options() { return runtime_options_; }

absl::StatusOr<RuntimeBuilder> CreateRuntimeBuilder();
absl::StatusOr<RuntimeBuilder> CreateRuntimeBuilder() const;
absl::StatusOr<RuntimeBuilder> CreateRuntimeBuilder(
const RuntimeOptions& options) const;

// Shortcut for CreateRuntimeBuilder() followed by Build().
absl::StatusOr<std::unique_ptr<Runtime>> NewRuntime();
absl::StatusOr<std::unique_ptr<Runtime>> NewRuntime() const;
absl::StatusOr<std::unique_ptr<Runtime>> NewRuntime(
const RuntimeOptions& options) const;

private:
cel::env_internal::RuntimeExtensionRegistry& GetRuntimeExtensionRegistry() {
Expand Down
Loading