diff options
Diffstat (limited to 'compiler/ValuesUtils.ml')
-rw-r--r-- | compiler/ValuesUtils.ml | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/compiler/ValuesUtils.ml b/compiler/ValuesUtils.ml index df00bfb2..470f40ac 100644 --- a/compiler/ValuesUtils.ml +++ b/compiler/ValuesUtils.ml @@ -170,6 +170,24 @@ let value_has_borrows (infos : TA.type_infos) (v : value) : bool = false with Found -> true +(** Check if a value has loans. + + Note that loans are necessarily concrete (there can't be loans hidden + inside symbolic values). + *) +let value_has_loans (v : value) : bool = + let obj = + object + inherit [_] iter_typed_value + method! visit_loan_content _env _ = raise Found + end + in + (* We use exceptions *) + try + obj#visit_value () v; + false + with Found -> true + (** Check if a value has loans or borrows in **a general sense**. It checks if: |