let by_array_reference_usage e =
let s = "[by_array_ref_usage]" in
debug "%s" s;
match delta_array e with
| None ->
(match bracket_exp e with
| None ->
debug "%s not a bracket pattern" s;
Any
| Some (x,n) ->
debug "%s %a[]<%d>" s !Ast_printer.d_var x n;
if x.vformal then
(debug "%s %a is a formal" s !Ast_printer.d_var x;
let arr = brackets_and_stars_typ x.vtype in
if (arr >= n) then
(debug "%s %a has dim %d ok!" s !Ast_printer.d_var x arr;
Ok (x,arr)) else
(debug "%s %a has dim %d when need %d ko!"
s !Ast_printer.d_var x arr n;
Ko(x,arr))
)
else
( debug "%s %a is not a formal" s !Ast_printer.d_var x;
Any) )
| Some (x,n) ->
debug "%s %a[]" s !Ast_printer.d_var x ;
if x.vformal then Ok (x,n) else Any