This is an automated email from the ASF dual-hosted git repository.
tlopex pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tvm-ffi.git
The following commit(s) were added to refs/heads/main by this push:
new c385ece0 [REFACTOR][Rust] Rename visit policies to context policies
(#799)
c385ece0 is described below
commit c385ece01555c32cf4975a4e818a434d8a22f173
Author: Shushi Hong <[email protected]>
AuthorDate: Thu Sep 17 18:26:00 2026 -0400
[REFACTOR][Rust] Rename visit policies to context policies (#799)
Follow up on #794 while preserving the existing public names as aliases.
---
docs/guides/rust_lang_guide.md | 6 ++---
rust/tvm-ffi/src/extra/structural_visit.rs | 13 +++++++----
rust/tvm-ffi/src/extra/structural_visit/policy.rs | 24 +++++++++----------
rust/tvm-ffi/src/lib.rs | 8 +++----
rust/tvm-ffi/tests/test_structural_visit.rs | 28 +++++++++++------------
5 files changed, 42 insertions(+), 37 deletions(-)
diff --git a/docs/guides/rust_lang_guide.md b/docs/guides/rust_lang_guide.md
index e308d685..6da519a3 100644
--- a/docs/guides/rust_lang_guide.md
+++ b/docs/guides/rust_lang_guide.md
@@ -366,9 +366,9 @@ Callbacks are `Fn`; mutable data belongs in the visitor
state. A catch-all
callback must call `visit_children()` explicitly, and interrupt values must be
returned explicitly because `?` only propagates errors.
-`VisitCallbacks::with_policy` and `WalkWithPolicy` customize default recursion
-with reusable `VisitPolicy<State>` policies. See the `VisitPolicy` API
-documentation for policy composition and state access.
+`VisitCallbacks::with_policy` and `WalkWithPolicy` use `ContextPolicy<State>`
+to manage context around default recursion. See the `ContextPolicy` API
+documentation for composition and shared state access.
For a named implementation, `#[dispatch(visit)]` generates
`StructuralVisitor` from `visit_*` methods. Matching handlers own recursion;
diff --git a/rust/tvm-ffi/src/extra/structural_visit.rs
b/rust/tvm-ffi/src/extra/structural_visit.rs
index 9031de5f..5cea6591 100644
--- a/rust/tvm-ffi/src/extra/structural_visit.rs
+++ b/rust/tvm-ffi/src/extra/structural_visit.rs
@@ -223,7 +223,12 @@ impl From<Error> for NativeHalt {
type NativeResult = std::result::Result<(), NativeHalt>;
mod policy;
-pub use policy::{DefaultVisitPolicy, VisitPolicy, WalkWithPolicy};
+pub use policy::{ContextPolicy, DefaultContextPolicy, WalkWithPolicy};
+
+/// Compatibility name for [`ContextPolicy`].
+pub use policy::ContextPolicy as VisitPolicy;
+/// Compatibility name for [`DefaultContextPolicy`].
+pub use policy::DefaultContextPolicy as DefaultVisitPolicy;
/// State and recursive operations available to a visit callback.
///
@@ -510,7 +515,7 @@ macro_rules! impl_visit_chain_link {
impl_callback_chain_tuple_arities!(impl_visit_chain_link);
/// A reusable callback visitor with shared user state.
-pub struct VisitCallbacks<State, Link, Marker, Policy = DefaultVisitPolicy> {
+pub struct VisitCallbacks<State, Link, Marker, Policy = DefaultContextPolicy> {
policy: Option<Rc<Policy>>,
state: State,
callbacks: Rc<Link>,
@@ -535,7 +540,7 @@ where
impl<State, Link, Marker, Policy> VisitCallbacks<State, Link, Marker, Policy> {
/// Set the default-recursion policy while retaining the callbacks and
state.
/// A matched callback enters the policy only when it calls
`visit_children()`.
- pub fn with_policy<P: VisitPolicy<State>>(
+ pub fn with_policy<P: ContextPolicy<State>>(
self,
policy: P,
) -> VisitCallbacks<State, Link, Marker, P> {
@@ -1089,7 +1094,7 @@ where
impl<State, Link, Marker, Policy> StructuralVisitor for VisitCallbacks<State,
Link, Marker, Policy>
where
Link: VisitChainLink<State, Marker>,
- Policy: VisitPolicy<State>,
+ Policy: ContextPolicy<State>,
{
fn visit(
&mut self,
diff --git a/rust/tvm-ffi/src/extra/structural_visit/policy.rs
b/rust/tvm-ffi/src/extra/structural_visit/policy.rs
index 9b6b3d1c..502f0df4 100644
--- a/rust/tvm-ffi/src/extra/structural_visit/policy.rs
+++ b/rust/tvm-ffi/src/extra/structural_visit/policy.rs
@@ -21,14 +21,14 @@
use super::*;
-/// A reusable default-recursion policy sharing state with traversal callbacks.
+/// A reusable policy for managing context around default visit and walk
recursion.
///
/// `visit_children()` on this policy's context continues with the next policy
/// (or the built-in hooks and reflected fields). `visit()` re-enters the full
/// callback engine for a child. A tuple `(outer, inner)` composes two
policies;
/// tuples may nest. Policies are shared during recursive calls, so mutable
data
-/// belongs in the context's state.
-pub trait VisitPolicy<State> {
+/// belongs in the context's state. Save and restore scoped state around
descent.
+pub trait ContextPolicy<State> {
/// Customize default descent for the current value.
///
/// Return interrupts explicitly, and restore any scoped state before
@@ -43,9 +43,9 @@ pub trait VisitPolicy<State> {
}
/// Default descent through registered hooks or reflected structural fields.
-pub struct DefaultVisitPolicy;
+pub struct DefaultContextPolicy;
-impl<State> VisitPolicy<State> for DefaultVisitPolicy {
+impl<State> ContextPolicy<State> for DefaultContextPolicy {
fn default_visit(
&self,
_value: &StructuralView,
@@ -55,7 +55,7 @@ impl<State> VisitPolicy<State> for DefaultVisitPolicy {
}
}
-impl<State, Outer: VisitPolicy<State>, Inner: VisitPolicy<State>>
VisitPolicy<State>
+impl<State, Outer: ContextPolicy<State>, Inner: ContextPolicy<State>>
ContextPolicy<State>
for (Outer, Inner)
{
fn default_visit(
@@ -78,7 +78,7 @@ impl<State, Outer: VisitPolicy<State>, Inner:
VisitPolicy<State>> VisitPolicy<St
pub(super) fn visit_with_policy<State>(
driver: &mut dyn VisitContextDriver<State>,
- policy: &impl VisitPolicy<State>,
+ policy: &impl ContextPolicy<State>,
value: &StructuralView,
def_region_kind: DefRegionKind,
) -> Result<Option<VisitInterrupt>> {
@@ -98,7 +98,7 @@ struct NextPolicy<'a, State, Policy> {
policy: &'a Policy,
}
-impl<State, Policy: VisitPolicy<State>> VisitContextDriver<State>
+impl<State, Policy: ContextPolicy<State>> VisitContextDriver<State>
for NextPolicy<'_, State, Policy>
{
fn state(&self) -> &State {
@@ -160,7 +160,7 @@ pub struct WalkWithPolicy<Walker, Policy> {
policy: Rc<Policy>,
}
-impl<Walker: WalkDispatch, Policy: VisitPolicy<Walker>> WalkWithPolicy<Walker,
Policy> {
+impl<Walker: WalkDispatch, Policy: ContextPolicy<Walker>>
WalkWithPolicy<Walker, Policy> {
/// Combine a dispatcher and a default-recursion policy.
pub fn new(walker: Walker, policy: Policy) -> Self {
Self {
@@ -204,7 +204,7 @@ impl<Walker: WalkDispatch, Policy: VisitPolicy<Walker>>
WalkWithPolicy<Walker, P
#[doc(hidden)]
pub enum ByPolicyWalk {}
-impl<Walker: WalkDispatch, Policy: VisitPolicy<Walker>>
IntoWalker<ByPolicyWalk>
+impl<Walker: WalkDispatch, Policy: ContextPolicy<Walker>>
IntoWalker<ByPolicyWalk>
for WalkWithPolicy<Walker, Policy>
{
type Walker = Self;
@@ -213,7 +213,7 @@ impl<Walker: WalkDispatch, Policy: VisitPolicy<Walker>>
IntoWalker<ByPolicyWalk>
}
}
-impl<Walker: WalkDispatch, Policy: VisitPolicy<Walker>> NativeVisit
+impl<Walker: WalkDispatch, Policy: ContextPolicy<Walker>> NativeVisit
for WalkWithPolicy<Walker, Policy>
{
const CUSTOM_DESCENT: bool = true;
@@ -248,7 +248,7 @@ struct WalkDescent<'a, Walker, Policy, const PRE_ORDER:
bool> {
visitor: &'a mut WalkWithPolicy<Walker, Policy>,
}
-impl<Walker: WalkDispatch, Policy: VisitPolicy<Walker>, const PRE_ORDER: bool>
+impl<Walker: WalkDispatch, Policy: ContextPolicy<Walker>, const PRE_ORDER:
bool>
VisitContextDriver<Walker> for WalkDescent<'_, Walker, Policy, PRE_ORDER>
{
fn state(&self) -> &Walker {
diff --git a/rust/tvm-ffi/src/lib.rs b/rust/tvm-ffi/src/lib.rs
index 4bb5672c..f6ddd640 100644
--- a/rust/tvm-ffi/src/lib.rs
+++ b/rust/tvm-ffi/src/lib.rs
@@ -54,10 +54,10 @@ pub use crate::extra::structural_mutate::{
MutateContext, MutateDispatch, MutateValue, Mutator, StructuralMutator,
StructuralVarRemap,
};
pub use crate::extra::structural_visit::{
- structural_visit, structural_walk, DefRegionKind, DefaultVisitPolicy,
IntoVisitor,
- IntoWalkResult, IntoWalker, StructuralVisitor, VisitCallbacks,
VisitChainLink, VisitContext,
- VisitInterrupt, VisitPolicy, VisitValue, WalkChainLink, WalkDispatch,
WalkOrder, WalkResult,
- WalkWithPolicy,
+ structural_visit, structural_walk, ContextPolicy, DefRegionKind,
DefaultContextPolicy,
+ DefaultVisitPolicy, IntoVisitor, IntoWalkResult, IntoWalker,
StructuralVisitor, VisitCallbacks,
+ VisitChainLink, VisitContext, VisitInterrupt, VisitPolicy, VisitValue,
WalkChainLink,
+ WalkDispatch, WalkOrder, WalkResult, WalkWithPolicy,
};
pub use crate::extra::unchanged::{Unchanged, UnchangedOr};
pub use crate::extra::StructuralView;
diff --git a/rust/tvm-ffi/tests/test_structural_visit.rs
b/rust/tvm-ffi/tests/test_structural_visit.rs
index e1b42cba..2858844f 100644
--- a/rust/tvm-ffi/tests/test_structural_visit.rs
+++ b/rust/tvm-ffi/tests/test_structural_visit.rs
@@ -20,10 +20,10 @@
use std::cell::{Cell, RefCell};
use tvm_ffi::object::ObjectRef;
use tvm_ffi::{
- dispatch, get_type_attr, structural_visit, structural_walk, Any, Array,
DLDataType,
- DLDataTypeCode, DefRegionKind, Error, FieldGetter, Function, Map, Object,
ObjectRefCore,
- Result, String as FfiString, StructuralVisitor, TypeIndex, VisitCallbacks,
VisitContext,
- VisitInterrupt, VisitPolicy, VisitValue, WalkOrder, WalkResult,
WalkWithPolicy, RUNTIME_ERROR,
+ dispatch, get_type_attr, structural_visit, structural_walk, Any, Array,
ContextPolicy,
+ DLDataType, DLDataTypeCode, DefRegionKind, Error, FieldGetter, Function,
Map, Object,
+ ObjectRefCore, Result, String as FfiString, StructuralVisitor, TypeIndex,
VisitCallbacks,
+ VisitContext, VisitInterrupt, VisitValue, WalkOrder, WalkResult,
WalkWithPolicy, RUNTIME_ERROR,
};
fn runtime_error(message: &str) -> Error {
@@ -49,7 +49,7 @@ fn
composed_policies_share_array_scope_with_visit_and_walk_callbacks() {
// It does not know what the callbacks will do with the current depth.
struct ArrayScope;
- impl VisitPolicy<CollectIntegers> for ArrayScope {
+ impl ContextPolicy<CollectIntegers> for ArrayScope {
fn default_visit(
&self,
value: &VisitValue,
@@ -74,7 +74,7 @@ fn
composed_policies_share_array_scope_with_visit_and_walk_callbacks() {
// reaches the built-in Array hook, whose children re-enter the full
engine.
struct RecordDescent;
- impl VisitPolicy<CollectIntegers> for RecordDescent {
+ impl ContextPolicy<CollectIntegers> for RecordDescent {
fn default_visit(
&self,
_value: &VisitValue,
@@ -166,7 +166,7 @@ fn
policy_continuation_scopes_regions_and_restores_after_halts() {
}
}
struct Scope(DefRegionKind, i64);
- impl VisitPolicy<Probe> for Scope {
+ impl ContextPolicy<Probe> for Scope {
fn default_visit(
&self,
value: &VisitValue,
@@ -276,7 +276,7 @@ fn
policy_continuation_retargets_without_dispatching_the_container() {
}
struct Redirect;
- impl VisitPolicy<Probe> for Redirect {
+ impl ContextPolicy<Probe> for Redirect {
fn default_visit(
&self,
value: &VisitValue,
@@ -303,7 +303,7 @@ fn
policy_continuation_retargets_without_dispatching_the_container() {
}
struct Observe;
- impl VisitPolicy<Probe> for Observe {
+ impl ContextPolicy<Probe> for Observe {
fn default_visit(
&self,
value: &VisitValue,
@@ -426,7 +426,7 @@ fn
policy_halts_skip_remaining_policies_and_restore_outer_state() {
}
}
struct Scope;
- impl VisitPolicy<Probe> for Scope {
+ impl ContextPolicy<Probe> for Scope {
fn default_visit(
&self,
value: &VisitValue,
@@ -442,7 +442,7 @@ fn
policy_halts_skip_remaining_policies_and_restore_outer_state() {
}
}
struct Stop(bool);
- impl VisitPolicy<Probe> for Stop {
+ impl ContextPolicy<Probe> for Stop {
fn default_visit(
&self,
_: &VisitValue,
@@ -459,7 +459,7 @@ fn
policy_halts_skip_remaining_policies_and_restore_outer_state() {
}
}
struct Unreachable;
- impl VisitPolicy<Probe> for Unreachable {
+ impl ContextPolicy<Probe> for Unreachable {
fn default_visit(
&self,
_: &VisitValue,
@@ -508,7 +508,7 @@ fn
policy_halts_skip_remaining_policies_and_restore_outer_state() {
#[test]
fn policy_regions_compose_with_field_flags_and_function_hooks() {
struct SetRootRegion(i32, DefRegionKind);
- impl VisitPolicy<PolicyRegionTrace> for SetRootRegion {
+ impl ContextPolicy<PolicyRegionTrace> for SetRootRegion {
fn default_visit(
&self,
value: &VisitValue,
@@ -573,7 +573,7 @@ fn
policy_regions_compose_with_field_flags_and_function_hooks() {
fn walk_policy_preserves_reflected_pattern_before_default_descent() {
let root = visit_region_graph(false);
struct Reenter(DefRegionKind);
- impl VisitPolicy<PolicyRegionTrace> for Reenter {
+ impl ContextPolicy<PolicyRegionTrace> for Reenter {
fn default_visit(
&self,
value: &VisitValue,