@ -230,21 +230,17 @@ let update_init_loc cn ms loc_start =
try ignore ( JBasics . ClassMap . find cn ! init_loc_map )
with Not_found -> init_loc_map := ( JBasics . ClassMap . add cn loc_start ! init_loc_map )
(* * Creates a procedure description. *)
let create_procdesc source_file program linereader icfg m : Cfg . Procdesc . t option =
let cfg = icfg . JContext . cfg in
let tenv = icfg . JContext . tenv in
let cn , ms = JBasics . cms_split ( Javalib . get_class_method_signature m ) in
let proc_name = JTransType . translate_method_name m in
let trans_access = function
let trans_access = function
| ` Default -> PredSymb . Default
| ` Public -> PredSymb . Public
| ` Private -> PredSymb . Private
| ` Protected -> PredSymb . Protected in
try
let procdesc =
match m with
| Javalib . AbstractMethod am -> (* create a procdesc with empty body *)
| ` Protected -> PredSymb . Protected
let create_am_procdesc program icfg am proc_name : Cfg . Procdesc . t =
let cfg = icfg . JContext . cfg in
let tenv = icfg . JContext . tenv in
let m = Javalib . AbstractMethod am in
let cn , ms = JBasics . cms_split ( Javalib . get_class_method_signature m ) in
let formals =
formals_from_signature program tenv cn ms ( JTransType . get_method_kind m ) in
let method_annotation =
@ -271,7 +267,12 @@ let create_procdesc source_file program linereader icfg m : Cfg.Procdesc.t optio
Cfg . Procdesc . set_start_node procdesc start_node ;
Cfg . Procdesc . set_exit_node procdesc exit_node ;
procdesc
| Javalib . ConcreteMethod cm when is_java_native cm ->
let create_native_procdesc program icfg cm proc_name =
let cfg = icfg . JContext . cfg in
let tenv = icfg . JContext . tenv in
let m = Javalib . ConcreteMethod cm in
let cn , ms = JBasics . cms_split ( Javalib . get_class_method_signature m ) in
let formals =
formals_from_signature program tenv cn ms ( JTransType . get_method_kind m ) in
let method_annotation =
@ -286,9 +287,17 @@ let create_procdesc source_file program linereader icfg m : Cfg.Procdesc.t optio
method_annotation ;
ret_type = JTransType . return_type program tenv ms ;
} in
Cfg . create_proc_desc cfg proc_attributes ;
| Javalib . ConcreteMethod cm ->
Cfg . create_proc_desc cfg proc_attributes
(* * Creates a procedure description. *)
let create_cm_procdesc source_file program linereader icfg cm proc_name =
let cfg = icfg . JContext . cfg in
let tenv = icfg . JContext . tenv in
let m = Javalib . ConcreteMethod cm in
let cn , ms = JBasics . cms_split ( Javalib . get_class_method_signature m ) in
try
let impl = get_implementation cm in
let procdesc =
let locals , formals = locals_formals program tenv cn impl in
let loc_start =
let loc = get_location source_file impl 0 in
@ -326,10 +335,10 @@ let create_procdesc source_file program linereader icfg m : Cfg.Procdesc.t optio
Cfg . Procdesc . set_exit_node procdesc exit_node ;
Cfg . Node . add_locals_ret_declaration start_node proc_attributes locals ;
procdesc in
Some procdesc
with JBir . Subroutine | JBasics . Class_structure_error _ ->
Some ( procdesc , impl )
with JBir . Subroutine ->
L . do_err
" create_procdesc raised JBir.Subroutine o r JBasics.Class_structure_error o n %a@."
" create_procdesc raised JBir.Subroutine o n %a@."
Procname . pp proc_name ;
None