diff --git a/env/env.cc b/env/env.cc index 85c5139da..dd71323d5 100644 --- a/env/env.cc +++ b/env/env.cc @@ -149,7 +149,8 @@ Env::Env() { compiler_options_.adapt_parser_errors = true; } -absl::StatusOr> Env::NewCompilerBuilder() { +absl::StatusOr> Env::NewCompilerBuilder() + const { CEL_ASSIGN_OR_RETURN( std::unique_ptr compiler_builder, cel::NewCompilerBuilder(descriptor_pool_, compiler_options_)); @@ -214,7 +215,7 @@ absl::StatusOr> Env::NewCompilerBuilder() { return compiler_builder; } -absl::StatusOr> Env::NewCompiler() { +absl::StatusOr> Env::NewCompiler() const { CEL_ASSIGN_OR_RETURN(std::unique_ptr compiler_builder, NewCompilerBuilder()); return compiler_builder->Build(); diff --git a/env/env.h b/env/env.h index 673ab19e4..c4a23e2cb 100644 --- a/env/env.h +++ b/env/env.h @@ -61,10 +61,10 @@ class Env { CompilerOptions& GetCompilerOptions() { return compiler_options_; } - absl::StatusOr> NewCompilerBuilder(); + absl::StatusOr> NewCompilerBuilder() const; // Shortcut for NewCompilerBuilder() followed by Build(). - absl::StatusOr> NewCompiler(); + absl::StatusOr> NewCompiler() const; private: cel::env_internal::ExtensionRegistry extension_registry_; diff --git a/env/env_runtime.cc b/env/env_runtime.cc index 33e0747cc..0f58d80b9 100644 --- a/env/env_runtime.cc +++ b/env/env_runtime.cc @@ -41,32 +41,38 @@ void EnvRuntime::RegisterExtensionFunctions( name, alias, version, std::move(function_registration_callback)); } -absl::StatusOr EnvRuntime::CreateRuntimeBuilder() { +absl::StatusOr EnvRuntime::CreateRuntimeBuilder() const { + return CreateRuntimeBuilder(runtime_options_); +} + +absl::StatusOr EnvRuntime::CreateRuntimeBuilder( + const RuntimeOptions& options) const { + RuntimeOptions runtime_options = options; const std::vector& 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)); } @@ -75,14 +81,20 @@ absl::StatusOr 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> EnvRuntime::NewRuntime() { - CEL_ASSIGN_OR_RETURN(RuntimeBuilder runtime_builder, CreateRuntimeBuilder()); +absl::StatusOr> EnvRuntime::NewRuntime() const { + return NewRuntime(runtime_options_); +} + +absl::StatusOr> EnvRuntime::NewRuntime( + const RuntimeOptions& options) const { + CEL_ASSIGN_OR_RETURN(RuntimeBuilder runtime_builder, + CreateRuntimeBuilder(options)); return std::move(runtime_builder).Build(); } diff --git a/env/env_runtime.h b/env/env_runtime.h index 63473c295..f8a80eb12 100644 --- a/env/env_runtime.h +++ b/env/env_runtime.h @@ -62,10 +62,14 @@ class EnvRuntime { RuntimeOptions& mutable_runtime_options() { return runtime_options_; } - absl::StatusOr CreateRuntimeBuilder(); + absl::StatusOr CreateRuntimeBuilder() const; + absl::StatusOr CreateRuntimeBuilder( + const RuntimeOptions& options) const; // Shortcut for CreateRuntimeBuilder() followed by Build(). - absl::StatusOr> NewRuntime(); + absl::StatusOr> NewRuntime() const; + absl::StatusOr> NewRuntime( + const RuntimeOptions& options) const; private: cel::env_internal::RuntimeExtensionRegistry& GetRuntimeExtensionRegistry() {