Skip to content

Commit bf0e7dc

Browse files
jnthntatumcopybara-github
authored andcommitted
Change default behavior to drop function names from reference map.
PiperOrigin-RevId: 866522706
1 parent c92607d commit bf0e7dc

File tree

3 files changed

+16
-7
lines changed

3 files changed

+16
-7
lines changed

checker/checker_options.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,16 @@ struct CheckerOptions {
8585
// expressions that compound nesting e.g.
8686
// type5(T)->type(type(type(type(type(T)))))); type5(type5(T)) -> type10(T)
8787
int max_type_decl_nesting = 13;
88+
89+
// If true, the checker will include the resolved function name in the
90+
// reference map for the function call expr.
91+
//
92+
// If false, the function name will be empty and implied by the overload id
93+
// set. This matches the behavior in cel-go and cel-java.
94+
//
95+
// Temporary flag to allow rolling out the change. No functional changes to
96+
// evaluation behavior in either mode.
97+
bool enable_function_name_in_reference = false;
8898
};
8999

90100
} // namespace cel

checker/internal/type_checker_impl.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1259,7 +1259,9 @@ class ResolveRewriter : public AstRewriterBase {
12591259
const FunctionDecl* decl = iter->second.decl;
12601260
const bool needs_rewrite = iter->second.namespace_rewrite;
12611261
auto& ast_ref = reference_map_[expr.id()];
1262-
ast_ref.set_name(decl->name());
1262+
if (options_.enable_function_name_in_reference) {
1263+
ast_ref.set_name(decl->name());
1264+
}
12631265
for (const auto& overload : decl->overloads()) {
12641266
ast_ref.mutable_overload_id().push_back(overload.id());
12651267
}

checker/internal/type_checker_impl_test.cc

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -140,23 +140,20 @@ MATCHER_P(IsVariableReference, var_name, "") {
140140

141141
MATCHER_P2(IsFunctionReference, fn_name, overloads, "") {
142142
const Reference& reference = arg;
143-
if (reference.name() != fn_name) {
144-
*result_listener << "expected: " << fn_name
145-
<< "\nactual: " << reference.name();
146-
}
147143

148144
absl::flat_hash_set<std::string> got_overload_set(
149145
reference.overload_id().begin(), reference.overload_id().end());
150146
absl::flat_hash_set<std::string> want_overload_set(overloads.begin(),
151147
overloads.end());
152148

153149
if (got_overload_set != want_overload_set) {
154-
*result_listener << "expected overload_ids: "
150+
*result_listener << "reference to " << fn_name << "\n"
151+
<< "expected overload_ids: "
155152
<< absl::StrJoin(want_overload_set, ",")
156153
<< "\nactual: " << absl::StrJoin(got_overload_set, ",");
157154
}
158155

159-
return reference.name() == fn_name && got_overload_set == want_overload_set;
156+
return got_overload_set == want_overload_set;
160157
}
161158

162159
absl::Status RegisterMinimalBuiltins(google::protobuf::Arena* absl_nonnull arena,

0 commit comments

Comments
 (0)