let by_array_reference_usage_term e =
let s = "[by_array_ref_usage_term]" in
debug "%s" s;
match delta_array_term e with
| None ->
(match bracket_term e with
| None ->
debug "%s not a bracket pattern" s; Any
| Some (x,n) ->
begin
debug "%s %a[]<%d>" s !Ast_printer.d_logic_var x n;
if (is_lformal x) then
( debug "%s %a is a formal" s !Ast_printer.d_logic_var x;
let arr = brackets_and_stars_lv_typ x.lv_type in
if (arr >= n) then
(debug "%s %a has dim %d ok!" s
!Ast_printer.d_logic_var x arr ;Ok (x,arr))
else
(debug "%s %a has dim %d when need %d ko!"
s !Ast_printer.d_logic_var x arr n
;Ko (x,arr)))
else
( debug "%s %a is not a formal"
s !Ast_printer.d_logic_var x;Any)
end)
|Some (x,n) ->
debug "%s %a[]" s !Ast_printer.d_logic_var x ;
if is_lformal x then Ok (x,n) else Any