Skip to content
Open
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
6 changes: 4 additions & 2 deletions common/src/main/java/dev/cel/common/values/ErrorValue.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public abstract class ErrorValue extends CelValue {
public abstract long exprId();

@Override
public abstract Exception value();
public abstract RuntimeException value();

@Override
public boolean isZeroValue() {
Expand All @@ -48,7 +48,9 @@ public CelType celType() {
return SimpleType.ERROR;
}

public static ErrorValue create(long exprId, Exception value) {
public static ErrorValue create(long exprId, RuntimeException value) {
return new AutoValue_ErrorValue(exprId, value);
}

ErrorValue() {}
}
8 changes: 6 additions & 2 deletions runtime/src/main/java/dev/cel/runtime/CelRuntimeImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -191,8 +191,11 @@ public ListenableFuture<Object> evalAsync(PartialVars partialVars) {

@Override
public ListenableFuture<Object> evalAsync(Message message) {
throw new UnsupportedOperationException(
"evalAsync is not supported by this Program implementation.");
checkNotNull(message, "message");
return program.evalAsync(
ProtoMessageActivationFactory.fromProto(message, program.options()),
CelFunctionResolver.EMPTY,
/* partialVars= */ null);
}

@Override
Expand Down Expand Up @@ -580,6 +583,7 @@ public CelRuntime build() {
container(),
options(),
lateBoundFunctionNamesBuilder().build(),
runtimeEquality,
asyncEvaluationOptions(),
asyncExecutor().orElse(null));
setPlanner(planner);
Expand Down
5 changes: 3 additions & 2 deletions runtime/src/main/java/dev/cel/runtime/LiteRuntimeImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -183,10 +183,10 @@ public CelLiteRuntime build() {
ImmutableMap.Builder<String, CelFunctionBinding> functionBindingsBuilder =
ImmutableMap.builder();

RuntimeHelpers runtimeHelpers = RuntimeHelpers.create();
RuntimeEquality runtimeEquality = RuntimeEquality.create(runtimeHelpers, celOptions);
ImmutableSet<CelStandardFunction> standardFunctions = standardFunctionBuilder.build();
if (!standardFunctions.isEmpty()) {
RuntimeHelpers runtimeHelpers = RuntimeHelpers.create();
RuntimeEquality runtimeEquality = RuntimeEquality.create(runtimeHelpers, celOptions);
for (CelStandardFunction standardFunction : standardFunctions) {
ImmutableSet<CelFunctionBinding> standardFunctionBinding =
standardFunction.newFunctionBindings(celOptions, runtimeEquality);
Expand Down Expand Up @@ -230,6 +230,7 @@ public CelLiteRuntime build() {
container,
celOptions,
lateBoundFunctionNamesBuilder.build(),
runtimeEquality,
// TODO: Support async eval in lite runtime.
CelAsyncEvaluationOptions.defaultOptions(),
/* asyncExecutor= */ null);
Expand Down
48 changes: 46 additions & 2 deletions runtime/src/main/java/dev/cel/runtime/planner/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ java_library(
"//runtime:evaluation_exception_builder",
"//runtime:function_overload",
"//runtime:resolved_overload",
"//runtime:runtime_equality",
"@maven//:com_google_code_findbugs_annotations",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:com_google_guava_guava",
Expand All @@ -74,6 +75,9 @@ java_library(
tags = [
],
deps = [
":async_call_state_tracker",
":async_completion_coordinator",
":async_gate",
":error_metadata",
":localized_evaluation_exception",
":planned_interpretable",
Expand All @@ -82,6 +86,7 @@ java_library(
"//common/annotations",
"//common/exceptions:runtime_exception",
"//common/values",
"//runtime:accumulated_unknowns",
"//runtime:activation",
"//runtime:async_options",
"//runtime:evaluation_exception",
Expand All @@ -92,6 +97,7 @@ java_library(
"//runtime:interpreter_util",
"//runtime:partial_vars",
"//runtime:program",
"//runtime:runtime_equality",
"//runtime:variable_resolver",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:com_google_guava_guava",
Expand Down Expand Up @@ -250,10 +256,19 @@ java_library(
name = "eval_async_call",
srcs = ["EvalAsyncCall.java"],
deps = [
":eval_helpers",
":localized_evaluation_exception",
":planned_interpretable",
"//common:error_codes",
"//common/ast",
"//common/exceptions:overload_not_found",
"//common/exceptions:runtime_exception",
"//common/values",
"//runtime:accumulated_unknowns",
"//runtime:evaluation_exception",
"//runtime:function_overload",
"//runtime:interpretable",
"//runtime:resolved_overload",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:com_google_guava_guava",
],
Expand Down Expand Up @@ -336,6 +351,7 @@ java_library(
name = "eval_conditional",
srcs = ["EvalConditional.java"],
deps = [
":eval_helpers",
":planned_interpretable",
"//common/ast",
"//runtime:accumulated_unknowns",
Expand Down Expand Up @@ -373,6 +389,7 @@ java_library(
"//runtime:accumulated_unknowns",
"//runtime:interpretable",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:com_google_guava_guava",
],
)

Expand All @@ -383,10 +400,11 @@ java_library(
":eval_helpers",
":planned_interpretable",
"//common/ast",
"//common/values",
"//runtime:accumulated_unknowns",
"//runtime:evaluation_exception",
"//runtime:interpretable",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:com_google_guava_guava",
],
)

Expand All @@ -401,6 +419,7 @@ java_library(
"//runtime:accumulated_unknowns",
"//runtime:interpretable",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:com_google_guava_guava",
],
)

Expand Down Expand Up @@ -453,6 +472,7 @@ java_library(
"//common/values",
"//runtime:accumulated_unknowns",
"//runtime:evaluation_exception",
"//runtime:function_overload",
"//runtime:interpretable",
"//runtime:resolved_overload",
"@maven//:com_google_guava_guava",
Expand Down Expand Up @@ -597,6 +617,7 @@ java_library(
"PlannedInterpretable.java",
],
deps = [
":async_call_state_tracker",
":localized_evaluation_exception",
"//common:options",
"//common/ast",
Expand All @@ -609,6 +630,7 @@ java_library(
"//runtime:partial_vars",
"//runtime:resolved_overload",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:com_google_guava_guava",
"@maven//:org_jspecify_jspecify",
],
)
Expand Down Expand Up @@ -666,6 +688,7 @@ cel_android_library(
"//runtime:evaluation_exception_builder",
"//runtime:function_overload_android",
"//runtime:resolved_overload_android",
"//runtime:runtime_equality_android",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:org_jspecify_jspecify",
"@maven_android//:com_google_guava_guava",
Expand All @@ -678,6 +701,9 @@ cel_android_library(
tags = [
],
deps = [
":async_call_state_tracker_android",
":async_completion_coordinator_android",
":async_gate_android",
":error_metadata_android",
":localized_evaluation_exception_android",
":planned_interpretable_android",
Expand All @@ -686,11 +712,13 @@ cel_android_library(
"//common/annotations",
"//common/exceptions:runtime_exception",
"//common/values:values_android",
"//runtime:accumulated_unknowns_android",
"//runtime:activation_android",
"//runtime:async_options_android",
"//runtime:evaluation_exception",
"//runtime:evaluation_exception_builder",
"//runtime:interpretable_android",
"//runtime:runtime_equality_android",
"//runtime:variable_resolver",
"//runtime/src/main/java/dev/cel/runtime:evaluation_listener_android",
"//runtime/src/main/java/dev/cel/runtime:function_resolver_android",
Expand Down Expand Up @@ -856,10 +884,19 @@ cel_android_library(
name = "eval_async_call_android",
srcs = ["EvalAsyncCall.java"],
deps = [
":eval_helpers_android",
":localized_evaluation_exception_android",
":planned_interpretable_android",
"//common:error_codes",
"//common/ast:ast_android",
"//common/exceptions:overload_not_found",
"//common/exceptions:runtime_exception",
"//common/values:values_android",
"//runtime:accumulated_unknowns_android",
"//runtime:evaluation_exception",
"//runtime:function_overload_android",
"//runtime:interpretable_android",
"//runtime:resolved_overload_android",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven_android//:com_google_guava_guava",
],
Expand Down Expand Up @@ -942,6 +979,7 @@ cel_android_library(
name = "eval_conditional_android",
srcs = ["EvalConditional.java"],
deps = [
":eval_helpers_android",
":planned_interpretable_android",
"//common/ast:ast_android",
"//runtime:evaluation_exception",
Expand Down Expand Up @@ -979,6 +1017,7 @@ cel_android_library(
"//runtime:interpretable_android",
"//runtime/src/main/java/dev/cel/runtime:accumulated_unknowns_android",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven_android//:com_google_guava_guava",
],
)

Expand All @@ -989,10 +1028,11 @@ cel_android_library(
":eval_helpers_android",
":planned_interpretable_android",
"//common/ast:ast_android",
"//runtime:evaluation_exception",
"//common/values:values_android",
"//runtime:interpretable_android",
"//runtime/src/main/java/dev/cel/runtime:accumulated_unknowns_android",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven_android//:com_google_guava_guava",
],
)

Expand All @@ -1007,6 +1047,7 @@ cel_android_library(
"//runtime:interpretable_android",
"//runtime/src/main/java/dev/cel/runtime:accumulated_unknowns_android",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven_android//:com_google_guava_guava",
],
)

Expand Down Expand Up @@ -1058,6 +1099,7 @@ cel_android_library(
"//common/exceptions:overload_not_found",
"//common/values:values_android",
"//runtime:evaluation_exception",
"//runtime:function_overload_android",
"//runtime:interpretable_android",
"//runtime:resolved_overload_android",
"//runtime/src/main/java/dev/cel/runtime:accumulated_unknowns_android",
Expand Down Expand Up @@ -1198,6 +1240,7 @@ cel_android_library(
"PlannedInterpretable.java",
],
deps = [
":async_call_state_tracker_android",
":localized_evaluation_exception_android",
"//common:options",
"//common/ast:ast_android",
Expand All @@ -1211,5 +1254,6 @@ cel_android_library(
"//runtime/src/main/java/dev/cel/runtime:partial_vars_android",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:org_jspecify_jspecify",
"@maven_android//:com_google_guava_guava",
],
)
10 changes: 2 additions & 8 deletions runtime/src/main/java/dev/cel/runtime/planner/EvalAnd.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

package dev.cel.runtime.planner;

import static dev.cel.runtime.planner.EvalHelpers.evalNonstrictly;
import static dev.cel.runtime.planner.EvalHelpers.evalBooleanNonstrictly;

import com.google.common.base.Preconditions;
import dev.cel.common.ast.CelExpr;
Expand All @@ -32,7 +32,7 @@ Object evalInternal(GlobalResolver resolver, ExecutionFrame frame) {
ErrorValue errorValue = null;
AccumulatedUnknowns unknowns = null;
for (PlannedInterpretable arg : args) {
Object argVal = evalNonstrictly(arg, resolver, frame);
Object argVal = evalBooleanNonstrictly(arg, resolver, frame);
if (argVal instanceof Boolean) {
// Short-circuit on false
if (!((boolean) argVal)) {
Expand All @@ -45,12 +45,6 @@ Object evalInternal(GlobalResolver resolver, ExecutionFrame frame) {
}
} else if (argVal instanceof AccumulatedUnknowns) {
unknowns = AccumulatedUnknowns.maybeMerge(unknowns, argVal);
} else {
errorValue =
ErrorValue.create(
arg.expr().id(),
new IllegalArgumentException(
String.format("Expected boolean value, found: %s", argVal)));
}
}

Expand Down
Loading
Loading