|
@@ -11,6 +11,13 @@ let c_dim = if no_color then "" else "\x1b[2m"
|
|
|
let todo = "\x1b[33m[TODO]" ^ c_reset
|
|
|
let todo_error = "\x1b[31m[TODO] error:" ^ c_reset
|
|
|
|
|
|
+let print_stacktrace () =
|
|
|
+ let stack = Printexc.get_callstack 10 in
|
|
|
+ let lines = Printf.sprintf "%s\n" (Printexc.raw_backtrace_to_string stack) in
|
|
|
+ match (ExtString.String.split_on_char '\n' lines) with
|
|
|
+ | (_ :: (_ :: lines)) -> ServerMessage.debug_msg (Printf.sprintf "%s" (ExtString.String.join "\n" lines))
|
|
|
+ | _ -> die "" __LOC__
|
|
|
+
|
|
|
class hxb_reader
|
|
|
(* (com : Common.context) *)
|
|
|
(* (file_ch : IO.input) *)
|
|
@@ -92,7 +99,7 @@ class hxb_reader
|
|
|
method read_from_string_pool pool =
|
|
|
let l = self#read_uleb128 in
|
|
|
try pool.(l) with e ->
|
|
|
- ServerMessage.debug_msg (Printf.sprintf " Failed getting string #%d\n" l);
|
|
|
+ print_endline (Printf.sprintf " Failed getting string #%d" l);
|
|
|
raise e
|
|
|
|
|
|
method read_string =
|
|
@@ -125,7 +132,7 @@ class hxb_reader
|
|
|
let pack = self#read_list (fun () -> self#read_string) in
|
|
|
let mname = self#read_string in
|
|
|
let tname = self#read_string in
|
|
|
- (* Printf.eprintf " Read full path %s\n" (ExtString.String.join "." (pack @ [mname; tname])); *)
|
|
|
+ (* ServerMessage.debug_msg (Printf.sprintf " Read full path %s" (ExtString.String.join "." (pack @ [mname; tname]))); *)
|
|
|
(pack,mname,tname)
|
|
|
|
|
|
method read_documentation =
|
|
@@ -146,7 +153,7 @@ class hxb_reader
|
|
|
pmin = min;
|
|
|
pmax = max;
|
|
|
} in
|
|
|
- (* Printf.eprintf "Read pos: %s\n" (Printer.s_pos pos); *)
|
|
|
+ (* ServerMessage.debug_msg (Printf.sprintf "Read pos: %s" (Printer.s_pos pos)); *)
|
|
|
(* MessageReporting.display_source_at com pos; *)
|
|
|
pos
|
|
|
|
|
@@ -164,45 +171,46 @@ class hxb_reader
|
|
|
method read_class_ref =
|
|
|
let i = self#read_uleb128 in
|
|
|
try classes.(i) with e ->
|
|
|
- ServerMessage.debug_msg (Printf.sprintf "[%s] %s reading class ref %i\n" (s_type_path m.m_path) todo_error i);
|
|
|
+ print_endline (Printf.sprintf "[%s] %s reading class ref %i" (s_type_path m.m_path) todo_error i);
|
|
|
raise e
|
|
|
|
|
|
method read_abstract_ref =
|
|
|
let i = self#read_uleb128 in
|
|
|
try abstracts.(i) with e ->
|
|
|
- ServerMessage.debug_msg (Printf.sprintf "[%s] %s reading abstract ref %i\n" (s_type_path m.m_path) todo_error i);
|
|
|
+ print_endline (Printf.sprintf "[%s] %s reading abstract ref %i" (s_type_path m.m_path) todo_error i);
|
|
|
raise e
|
|
|
|
|
|
method read_enum_ref =
|
|
|
let i = self#read_uleb128 in
|
|
|
try enums.(i) with e ->
|
|
|
- ServerMessage.debug_msg (Printf.sprintf "[%s] %s reading enum ref %i\n" (s_type_path m.m_path) todo_error i);
|
|
|
+ print_endline (Printf.sprintf "[%s] %s reading enum ref %i" (s_type_path m.m_path) todo_error i);
|
|
|
raise e
|
|
|
|
|
|
method read_typedef_ref =
|
|
|
let i = self#read_uleb128 in
|
|
|
try typedefs.(i) with e ->
|
|
|
- ServerMessage.debug_msg (Printf.sprintf "[%s] %s reading typedef ref %i\n" (s_type_path m.m_path) todo_error i);
|
|
|
+ print_endline (Printf.sprintf "[%s] %s reading typedef ref %i" (s_type_path m.m_path) todo_error i);
|
|
|
raise e
|
|
|
|
|
|
method read_anon_ref =
|
|
|
let i = self#read_uleb128 in
|
|
|
try anons.(i) with e ->
|
|
|
- ServerMessage.debug_msg (Printf.sprintf "[%s] %s reading anon ref %i\n" (s_type_path m.m_path) todo_error i);
|
|
|
+ print_endline (Printf.sprintf "[%s] %s reading anon ref %i" (s_type_path m.m_path) todo_error i);
|
|
|
raise e
|
|
|
|
|
|
method read_field_ref fields =
|
|
|
let name = self#read_string in
|
|
|
try PMap.find name fields with e ->
|
|
|
- ServerMessage.debug_msg (Printf.sprintf "[%s] %s reading field %s\n" (s_type_path m.m_path) todo_error name);
|
|
|
- ServerMessage.debug_msg (Printf.sprintf " Available fields: %s\n" (PMap.fold (fun f acc -> acc ^ " " ^ f.cf_name) fields ""));
|
|
|
+ print_endline (Printf.sprintf "[%s] %s reading field %s" (s_type_path m.m_path) todo_error name);
|
|
|
+ ServerMessage.debug_msg (Printf.sprintf " Available fields: %s" (PMap.fold (fun f acc -> acc ^ " " ^ f.cf_name) fields ""));
|
|
|
+ print_stacktrace ();
|
|
|
null_field
|
|
|
|
|
|
method read_enum_field_ref en =
|
|
|
let name = self#read_string in
|
|
|
try PMap.find name en.e_constrs with e ->
|
|
|
- ServerMessage.debug_msg (Printf.sprintf " %s reading enum field ref for %s.%s\n" todo_error (s_type_path en.e_path) name);
|
|
|
- ServerMessage.debug_msg (Printf.sprintf " Available fields: %s\n" (PMap.fold (fun ef acc -> acc ^ " " ^ ef.ef_name) en.e_constrs ""));
|
|
|
+ print_endline (Printf.sprintf " %s reading enum field ref for %s.%s" todo_error (s_type_path en.e_path) name);
|
|
|
+ ServerMessage.debug_msg (Printf.sprintf " Available fields: %s" (PMap.fold (fun ef acc -> acc ^ " " ^ ef.ef_name) en.e_constrs ""));
|
|
|
null_enum_field
|
|
|
|
|
|
method read_anon_field_ref =
|
|
@@ -210,7 +218,7 @@ class hxb_reader
|
|
|
| 0 ->
|
|
|
let index = self#read_uleb128 in
|
|
|
(try anon_fields.(index) with e ->
|
|
|
- ServerMessage.debug_msg (Printf.sprintf "[%s] %s reading anon field (0) ref %i\n" (s_type_path m.m_path) todo_error index);
|
|
|
+ print_endline (Printf.sprintf "[%s] %s reading anon field (0) ref %i" (s_type_path m.m_path) todo_error index);
|
|
|
raise e
|
|
|
)
|
|
|
| 1 ->
|
|
@@ -220,7 +228,7 @@ class hxb_reader
|
|
|
anon_fields.(index) <- cf;
|
|
|
cf
|
|
|
end with e ->
|
|
|
- ServerMessage.debug_msg (Printf.sprintf "[%s] %s reading anon field (1) ref %i\n" (s_type_path m.m_path) todo_error index);
|
|
|
+ print_endline (Printf.sprintf "[%s] %s reading anon field (1) ref %i" (s_type_path m.m_path) todo_error index);
|
|
|
raise e
|
|
|
)
|
|
|
| _ ->
|
|
@@ -619,14 +627,14 @@ class hxb_reader
|
|
|
|
|
|
method read_type_instance =
|
|
|
let kind = self#read_u8 in
|
|
|
- (* Printf.eprintf " Read type instance %d\n" kind; *)
|
|
|
+ (* ServerMessage.debug_msg (Printf.sprintf " Read type instance %d" kind); *)
|
|
|
|
|
|
match kind with
|
|
|
| 0 ->
|
|
|
- (* Printf.eprintf " %s identity\n" todo; *)
|
|
|
+ (* ServerMessage.debug_msg (Printf.sprintf " %s identity" todo); *)
|
|
|
mk_mono() (* TODO: identity *)
|
|
|
| 1 ->
|
|
|
- (* Printf.eprintf " %s TMono Some\n" todo; *)
|
|
|
+ (* ServerMessage.debug_msg (Printf.sprintf " %s TMono Some" todo); *)
|
|
|
let t = self#read_type_instance in
|
|
|
let tmono = !monomorph_create_ref () in (* TODO identity *)
|
|
|
tmono.tm_type <- Some t;
|
|
@@ -681,7 +689,7 @@ class hxb_reader
|
|
|
| 31 ->
|
|
|
let f () =
|
|
|
let name = self#read_string in
|
|
|
- (* Printf.eprintf " Read type instance for %s\n" name; *)
|
|
|
+ (* ServerMessage.debug_msg (Printf.sprintf " Read type instance for %s" name); *)
|
|
|
let opt = self#read_bool in
|
|
|
let t = self#read_type_instance in
|
|
|
(name,opt,t)
|
|
@@ -691,13 +699,13 @@ class hxb_reader
|
|
|
| 32 ->
|
|
|
let f () =
|
|
|
let name = self#read_string in
|
|
|
- (* Printf.eprintf " Read type instance for %s\n" name; *)
|
|
|
+ (* ServerMessage.debug_msg (Printf.sprintf " Read type instance for %s" name); *)
|
|
|
let opt = self#read_bool in
|
|
|
let t = self#read_type_instance in
|
|
|
(name,opt,t)
|
|
|
in
|
|
|
let args = self#read_list f in
|
|
|
- (* Printf.eprintf " Read type instance for TFun\n"; *)
|
|
|
+ (* ServerMessage.debug_msg (Printf.sprintf " Read type instance for TFun"); *)
|
|
|
let ret = self#read_type_instance in
|
|
|
TFun(args,ret)
|
|
|
| 33 ->
|
|
@@ -725,8 +733,8 @@ class hxb_reader
|
|
|
let a = Array.init l (fun _ ->
|
|
|
let name = self#read_string in
|
|
|
let pos = self#read_pos in
|
|
|
- (* Printf.eprintf " Read ttp pos for %s: %s\n" name (Printer.s_pos pos); *)
|
|
|
- (* Printf.eprintf " - Path was %s\n" (s_type_path path); *)
|
|
|
+ (* ServerMessage.debug_msg (Printf.sprintf " Read ttp pos for %s: %s" name (Printer.s_pos pos)); *)
|
|
|
+ (* ServerMessage.debug_msg (Printf.sprintf " - Path was %s" (s_type_path path)); *)
|
|
|
let c = mk_class m (fst path @ [snd path],name) pos pos in
|
|
|
mk_type_param name (TInst(c,[])) None
|
|
|
) in
|
|
@@ -850,7 +858,7 @@ class hxb_reader
|
|
|
let pos = self#read_pos in
|
|
|
|
|
|
let i = IO.read_byte ch in
|
|
|
- (* Printf.eprintf " -- texpr [%d] --\n" i; *)
|
|
|
+ (* ServerMessage.debug_msg (Printf.sprintf " -- texpr [%d] --" i); *)
|
|
|
let e = match i with
|
|
|
(* values 0-19 *)
|
|
|
| 0 -> TConst TNull
|
|
@@ -981,7 +989,6 @@ class hxb_reader
|
|
|
| 101 ->
|
|
|
let e1 = self#read_texpr in
|
|
|
let en = self#read_enum_ref in
|
|
|
- (* PMap.iter (fun k _-> Printf.eprintf " -> %s\n" k) en.e_constrs; *)
|
|
|
let ef = self#read_enum_field_ref en in
|
|
|
let i = IO.read_i32 ch in
|
|
|
TEnumParameter(e1,ef,i)
|
|
@@ -989,13 +996,11 @@ class hxb_reader
|
|
|
let e1 = self#read_texpr in
|
|
|
let c = self#read_class_ref in
|
|
|
let tl = self#read_types in
|
|
|
- (* Printf.eprintf " Read field ref for expr 102 (cl = %s, %d fields)\n" (s_type_path c.cl_path) (List.length c.cl_ordered_fields); *)
|
|
|
let cf = self#read_field_ref c.cl_fields in
|
|
|
TField(e1,FInstance(c,tl,cf))
|
|
|
| 103 ->
|
|
|
let e1 = self#read_texpr in
|
|
|
let c = self#read_class_ref in
|
|
|
- (* Printf.eprintf " Read field ref for expr 103 (cl = %s)\n" (s_type_path c.cl_path); *)
|
|
|
let cf = self#read_field_ref c.cl_statics in
|
|
|
TField(e1,FStatic(c,cf))
|
|
|
| 104 ->
|
|
@@ -1006,7 +1011,6 @@ class hxb_reader
|
|
|
let e1 = self#read_texpr in
|
|
|
let c = self#read_class_ref in
|
|
|
let tl = self#read_types in
|
|
|
- (* Printf.eprintf " Read field ref for expr 105 (cl = %s)\n" (s_type_path c.cl_path); *)
|
|
|
let cf = self#read_field_ref c.cl_fields in
|
|
|
TField(e1,FClosure(Some(c,tl),cf))
|
|
|
| 106 ->
|
|
@@ -1072,12 +1076,12 @@ class hxb_reader
|
|
|
| 250 -> TIdent (self#read_string)
|
|
|
|
|
|
| i ->
|
|
|
- ServerMessage.debug_msg (Printf.sprintf " [ERROR] Unhandled texpr %d at:\n" i);
|
|
|
+ print_endline (Printf.sprintf " [ERROR] Unhandled texpr %d at:" i);
|
|
|
(* MessageReporting.display_source_at com pos; *)
|
|
|
assert false
|
|
|
in
|
|
|
|
|
|
- (* Printf.eprintf " Done reading texpr at:\n"; *)
|
|
|
+ (* ServerMessage.debug_msg (Printf.sprintf " Done reading texpr at:"); *)
|
|
|
(* MessageReporting.display_source_at com pos; *)
|
|
|
|
|
|
{
|
|
@@ -1099,7 +1103,7 @@ class hxb_reader
|
|
|
|
|
|
method read_class_field_data (nested : bool) (cf : tclass_field) : unit =
|
|
|
let name = cf.cf_name in
|
|
|
- (* Printf.eprintf " Read class field %s\n" name; *)
|
|
|
+ (* ServerMessage.debug_msg (Printf.sprintf " Read class field %s" name); *)
|
|
|
self#read_type_parameters ([],name) (fun a ->
|
|
|
field_type_parameters <- if nested then Array.append field_type_parameters a else a
|
|
|
);
|
|
@@ -1150,8 +1154,8 @@ class hxb_reader
|
|
|
| _ ->
|
|
|
type_type_parameters <- Array.of_list c.cl_params
|
|
|
end;
|
|
|
- (* Printf.eprintf " read class fields with type parameters for %s: %d\n" (s_type_path c.cl_path) (Array.length type_type_parameters); *)
|
|
|
- (* Printf.eprintf " own class params: %d\n" (List.length c.cl_params); *)
|
|
|
+ (* ServerMessage.debug_msg (Printf.sprintf " read class fields with type parameters for %s: %d" (s_type_path c.cl_path) (Array.length type_type_parameters); *)
|
|
|
+ (* ServerMessage.debug_msg (Printf.sprintf " own class params: %d" (List.length c.cl_params); *)
|
|
|
let _ = self#read_option (fun f ->
|
|
|
self#read_class_field_data false (Option.get c.cl_constructor)
|
|
|
) in
|
|
@@ -1169,7 +1173,7 @@ class hxb_reader
|
|
|
type_type_parameters <- Array.of_list e.e_params;
|
|
|
ignore(self#read_list (fun () ->
|
|
|
let name = self#read_string in
|
|
|
- (* Printf.eprintf " Read enum field %s\n" name; *)
|
|
|
+ (* ServerMessage.debug_msg (Printf.sprintf " Read enum field %s" name); *)
|
|
|
let ef = PMap.find name e.e_constrs in
|
|
|
self#read_type_parameters ([],name) (fun a -> field_type_parameters <- a);
|
|
|
ef.ef_params <- Array.to_list field_type_parameters;
|
|
@@ -1182,7 +1186,7 @@ class hxb_reader
|
|
|
|
|
|
method read_common_module_type (infos : tinfos) =
|
|
|
(* if (snd m.m_path) = "Issue9149" then *)
|
|
|
- (* Printf.eprintf "[%s] Read module type %s\n" (s_type_path m.m_path) (s_type_path infos.mt_path); *)
|
|
|
+ (* ServerMessage.debug_msg (Printf.sprintf "[%s] Read module type %s" (s_type_path m.m_path) (s_type_path infos.mt_path)); *)
|
|
|
infos.mt_private <- self#read_bool;
|
|
|
infos.mt_doc <- self#read_option (fun () -> self#read_documentation);
|
|
|
infos.mt_meta <- self#read_metadata;
|
|
@@ -1265,7 +1269,7 @@ class hxb_reader
|
|
|
|
|
|
method read_string_pool =
|
|
|
let l = self#read_uleb128 in
|
|
|
- (* Printf.eprintf " Read string pool of size %d\n" l; *)
|
|
|
+ (* ServerMessage.debug_msg (Printf.sprintf " Read string pool of size %d" l); *)
|
|
|
Array.init l (fun i ->
|
|
|
self#read_raw_string;
|
|
|
);
|
|
@@ -1276,7 +1280,7 @@ class hxb_reader
|
|
|
let data = IO.nread ch size in
|
|
|
let crc = self#read_u32 in
|
|
|
ignore(crc); (* TODO *)
|
|
|
- (* Printf.eprintf "%s check crc (%d)\n" todo (Int32.to_int crc); *)
|
|
|
+ (* ServerMessage.debug_msg (Printf.sprintf "%s check crc (%d)" todo (Int32.to_int crc)); *)
|
|
|
let kind = chunk_kind_of_string name in
|
|
|
(kind,data)
|
|
|
|
|
@@ -1401,7 +1405,6 @@ class hxb_reader
|
|
|
|
|
|
method read_annr =
|
|
|
let l = self#read_uleb128 in
|
|
|
- (* Printf.eprintf "ANNR - %d\n" l; *)
|
|
|
anons <- Array.init l (fun _ -> { a_fields = PMap.empty; a_status = ref Closed });
|
|
|
|
|
|
method read_typf =
|
|
@@ -1424,7 +1427,7 @@ class hxb_reader
|
|
|
c.cl_constructor <- self#read_option read_field;
|
|
|
c.cl_ordered_fields <- self#read_list read_field;
|
|
|
c.cl_ordered_statics <- self#read_list read_field;
|
|
|
- (* Printf.eprintf " Forward declare %s with %d fields, %d statics\n" (s_type_path path) (List.length c.cl_ordered_fields) (List.length c.cl_ordered_statics); *)
|
|
|
+ (* ServerMessage.debug_msg (Printf.sprintf " Forward declare %s with %d fields, %d statics\n" (s_type_path path) (List.length c.cl_ordered_fields) (List.length c.cl_ordered_statics)); *)
|
|
|
List.iter (fun cf -> c.cl_fields <- PMap.add cf.cf_name cf c.cl_fields) c.cl_ordered_fields;
|
|
|
List.iter (fun cf -> c.cl_statics <- PMap.add cf.cf_name cf c.cl_statics) c.cl_ordered_statics;
|
|
|
|
|
@@ -1514,7 +1517,7 @@ class hxb_reader
|
|
|
let chunks = pass_0 chunks in
|
|
|
assert(m != null_module);
|
|
|
List.iter (fun (kind,data) ->
|
|
|
- (* Printf.eprintf " Reading chunk %s\n" (string_of_chunk_kind kind); *)
|
|
|
+ (* ServerMessage.debug_msg (Printf.sprintf " Reading chunk %s" (string_of_chunk_kind kind)); *)
|
|
|
ch <- IO.input_bytes data;
|
|
|
match kind with
|
|
|
| TYPF ->
|