diff --git a/ocaml/.depend b/ocaml/.depend index a41b256da53..ce84373694d 100644 --- a/ocaml/.depend +++ b/ocaml/.depend @@ -75,6 +75,13 @@ utils/consistbl.cmx : \ utils/consistbl.cmi utils/consistbl.cmi : \ utils/misc.cmi +utils/debug.cmo : \ + utils/clflags.cmi \ + utils/debug.cmi +utils/debug.cmx : \ + utils/clflags.cmx \ + utils/debug.cmi +utils/debug.cmi : utils/diffing.cmo : \ utils/misc.cmi \ utils/diffing.cmi @@ -422,6 +429,7 @@ parsing/docstrings.cmi : \ parsing/location.cmi parsing/extensions.cmo : \ parsing/parsetree.cmi \ + parsing/longident.cmi \ parsing/location.cmi \ utils/language_extension.cmi \ parsing/extensions_parsing.cmi \ @@ -430,6 +438,7 @@ parsing/extensions.cmo : \ parsing/extensions.cmi parsing/extensions.cmx : \ parsing/parsetree.cmi \ + parsing/longident.cmx \ parsing/location.cmx \ utils/language_extension.cmx \ parsing/extensions_parsing.cmx \ @@ -438,6 +447,7 @@ parsing/extensions.cmx : \ parsing/extensions.cmi parsing/extensions.cmi : \ parsing/parsetree.cmi \ + parsing/longident.cmi \ parsing/location.cmi \ parsing/asttypes.cmi parsing/extensions_parsing.cmo : \ @@ -630,7 +640,6 @@ typing/cmt2annot.cmo : \ typing/envaux.cmi \ typing/env.cmi \ file_formats/cmt_format.cmi \ - file_formats/cms_format.cmi \ parsing/asttypes.cmi \ typing/annot.cmi typing/cmt2annot.cmx : \ @@ -645,7 +654,6 @@ typing/cmt2annot.cmx : \ typing/envaux.cmx \ typing/env.cmx \ file_formats/cmt_format.cmx \ - file_formats/cms_format.cmx \ parsing/asttypes.cmi \ typing/annot.cmi typing/ctype.cmo : \ @@ -725,6 +733,7 @@ typing/env.cmo : \ typing/predef.cmi \ typing/persistent_env.cmi \ typing/path.cmi \ + parsing/parsetree.cmi \ utils/misc.cmi \ parsing/longident.cmi \ parsing/location.cmi \ @@ -748,6 +757,7 @@ typing/env.cmx : \ typing/predef.cmx \ typing/persistent_env.cmx \ typing/path.cmx \ + parsing/parsetree.cmi \ utils/misc.cmx \ parsing/longident.cmx \ parsing/location.cmx \ @@ -769,6 +779,7 @@ typing/env.cmi : \ typing/subst.cmi \ typing/shape.cmi \ typing/path.cmi \ + parsing/parsetree.cmi \ utils/misc.cmi \ parsing/longident.cmi \ parsing/location.cmi \ @@ -912,7 +923,6 @@ typing/includemod.cmo : \ utils/diffing.cmi \ typing/ctype.cmi \ file_formats/cmt_format.cmi \ - file_formats/cms_format.cmi \ parsing/builtin_attributes.cmi \ typing/btype.cmi \ typing/includemod.cmi @@ -936,7 +946,6 @@ typing/includemod.cmx : \ utils/diffing.cmx \ typing/ctype.cmx \ file_formats/cmt_format.cmx \ - file_formats/cms_format.cmx \ parsing/builtin_attributes.cmx \ typing/btype.cmx \ typing/includemod.cmi @@ -1464,7 +1473,6 @@ typing/typeclass.cmo : \ typing/env.cmi \ typing/ctype.cmi \ file_formats/cmt_format.cmi \ - file_formats/cms_format.cmi \ utils/clflags.cmi \ parsing/builtin_attributes.cmi \ typing/btype.cmi \ @@ -1493,7 +1501,6 @@ typing/typeclass.cmx : \ typing/env.cmx \ typing/ctype.cmx \ file_formats/cmt_format.cmx \ - file_formats/cms_format.cmx \ utils/clflags.cmx \ parsing/builtin_attributes.cmx \ typing/btype.cmx \ @@ -1540,7 +1547,6 @@ typing/typecore.cmo : \ typing/env.cmi \ typing/ctype.cmi \ file_formats/cmt_format.cmi \ - file_formats/cms_format.cmi \ utils/clflags.cmi \ parsing/builtin_attributes.cmi \ typing/btype.cmi \ @@ -1576,7 +1582,6 @@ typing/typecore.cmx : \ typing/env.cmx \ typing/ctype.cmx \ file_formats/cmt_format.cmx \ - file_formats/cms_format.cmx \ utils/clflags.cmx \ parsing/builtin_attributes.cmx \ typing/btype.cmx \ @@ -1799,6 +1804,7 @@ typing/typemod.cmo : \ typing/subst.cmi \ typing/signature_group.cmi \ typing/shape.cmi \ + utils/profile.cmi \ typing/printtyp.cmi \ typing/path.cmi \ parsing/parsetree.cmi \ @@ -1819,8 +1825,8 @@ typing/typemod.cmo : \ utils/config.cmi \ utils/compilation_unit.cmi \ file_formats/cmt_format.cmi \ - file_formats/cms_format.cmi \ typing/cmt2annot.cmo \ + file_formats/cms_format.cmi \ file_formats/cmi_format.cmi \ utils/clflags.cmi \ parsing/builtin_attributes.cmi \ @@ -1839,6 +1845,7 @@ typing/typemod.cmx : \ typing/subst.cmx \ typing/signature_group.cmx \ typing/shape.cmx \ + utils/profile.cmx \ typing/printtyp.cmx \ typing/path.cmx \ parsing/parsetree.cmi \ @@ -1859,8 +1866,8 @@ typing/typemod.cmx : \ utils/config.cmx \ utils/compilation_unit.cmx \ file_formats/cmt_format.cmx \ - file_formats/cms_format.cmx \ typing/cmt2annot.cmx \ + file_formats/cms_format.cmx \ file_formats/cmi_format.cmx \ utils/clflags.cmx \ parsing/builtin_attributes.cmx \ @@ -3640,6 +3647,7 @@ lambda/lambda.cmo : \ typing/path.cmi \ utils/misc.cmi \ parsing/longident.cmi \ + parsing/location.cmi \ typing/ident.cmi \ typing/env.cmi \ lambda/debuginfo.cmi \ @@ -3654,6 +3662,7 @@ lambda/lambda.cmx : \ typing/path.cmx \ utils/misc.cmx \ parsing/longident.cmx \ + parsing/location.cmx \ typing/ident.cmx \ typing/env.cmx \ lambda/debuginfo.cmx \ @@ -3666,6 +3675,7 @@ lambda/lambda.cmi : \ typing/types.cmi \ typing/primitive.cmi \ typing/path.cmi \ + parsing/location.cmi \ typing/ident.cmi \ typing/env.cmi \ lambda/debuginfo.cmi \ @@ -3877,6 +3887,7 @@ lambda/translattribute.cmo : \ lambda/lambda.cmi \ utils/config.cmi \ parsing/builtin_attributes.cmi \ + parsing/asttypes.cmi \ lambda/translattribute.cmi lambda/translattribute.cmx : \ utils/warnings.cmx \ @@ -3888,6 +3899,7 @@ lambda/translattribute.cmx : \ lambda/lambda.cmx \ utils/config.cmx \ parsing/builtin_attributes.cmx \ + parsing/asttypes.cmi \ lambda/translattribute.cmi lambda/translattribute.cmi : \ typing/typedtree.cmi \ @@ -4181,23 +4193,34 @@ file_formats/cmo_format.cmi : \ utils/import_info.cmi \ typing/ident.cmi \ utils/compilation_unit.cmi -file_formats/cmt_format.cmo : \ - typing/types.cmi \ - typing/typedtree.cmi \ - typing/tast_mapper.cmi \ +file_formats/cms_format.cmo : \ typing/shape.cmi \ + parsing/parsetree.cmi \ utils/misc.cmi \ parsing/location.cmi \ - utils/load_path.cmi \ parsing/lexer.cmi \ - utils/import_info.cmi \ typing/env.cmi \ utils/config.cmi \ utils/compilation_unit.cmi \ - file_formats/cmi_format.cmi \ utils/clflags.cmi \ - file_formats/cmt_format.cmi -file_formats/cms_format.cmo : \ + file_formats/cms_format.cmi +file_formats/cms_format.cmx : \ + typing/shape.cmx \ + parsing/parsetree.cmi \ + utils/misc.cmx \ + parsing/location.cmx \ + parsing/lexer.cmx \ + typing/env.cmx \ + utils/config.cmx \ + utils/compilation_unit.cmx \ + utils/clflags.cmx \ + file_formats/cms_format.cmi +file_formats/cms_format.cmi : \ + typing/shape.cmi \ + parsing/parsetree.cmi \ + parsing/location.cmi \ + utils/compilation_unit.cmi +file_formats/cmt_format.cmo : \ typing/types.cmi \ typing/typedtree.cmi \ typing/tast_mapper.cmi \ @@ -4212,7 +4235,7 @@ file_formats/cms_format.cmo : \ utils/compilation_unit.cmi \ file_formats/cmi_format.cmi \ utils/clflags.cmi \ - file_formats/cms_format.cmi + file_formats/cmt_format.cmi file_formats/cmt_format.cmx : \ typing/types.cmx \ typing/typedtree.cmx \ @@ -4229,22 +4252,6 @@ file_formats/cmt_format.cmx : \ file_formats/cmi_format.cmx \ utils/clflags.cmx \ file_formats/cmt_format.cmi -file_formats/cms_format.cmx : \ - typing/types.cmx \ - typing/typedtree.cmx \ - typing/tast_mapper.cmx \ - typing/shape.cmx \ - utils/misc.cmx \ - parsing/location.cmx \ - utils/load_path.cmx \ - parsing/lexer.cmx \ - utils/import_info.cmx \ - typing/env.cmx \ - utils/config.cmx \ - utils/compilation_unit.cmx \ - file_formats/cmi_format.cmx \ - utils/clflags.cmx \ - file_formats/cms_format.cmi file_formats/cmt_format.cmi : \ typing/types.cmi \ typing/typedtree.cmi \ @@ -4254,14 +4261,6 @@ file_formats/cmt_format.cmi : \ typing/env.cmi \ utils/compilation_unit.cmi \ file_formats/cmi_format.cmi -file_formats/cms_format.cmi : \ - typing/types.cmi \ - typing/typedtree.cmi \ - typing/shape.cmi \ - parsing/location.cmi \ - typing/env.cmi \ - utils/compilation_unit.cmi \ - file_formats/cmi_format.cmi file_formats/cmx_format.cmi : \ lambda/lambda.cmi \ utils/import_info.cmi \ @@ -4963,6 +4962,8 @@ middle_end/flambda/flambda_to_clambda.cmo : \ middle_end/flambda/base_types/static_exception.cmi \ middle_end/flambda/simple_value_approx.cmi \ middle_end/flambda/base_types/set_of_closures_id.cmi \ + lambda/printlambda.cmi \ + middle_end/printclambda.cmi \ typing/primitive.cmi \ middle_end/flambda/parameter.cmi \ utils/numbers.cmi \ @@ -4995,6 +4996,8 @@ middle_end/flambda/flambda_to_clambda.cmx : \ middle_end/flambda/base_types/static_exception.cmx \ middle_end/flambda/simple_value_approx.cmx \ middle_end/flambda/base_types/set_of_closures_id.cmx \ + lambda/printlambda.cmx \ + middle_end/printclambda.cmx \ typing/primitive.cmx \ middle_end/flambda/parameter.cmx \ utils/numbers.cmx \ diff --git a/ocaml/compilerlibs/Makefile.compilerlibs b/ocaml/compilerlibs/Makefile.compilerlibs index 523d327d093..ab0c3afb107 100644 --- a/ocaml/compilerlibs/Makefile.compilerlibs +++ b/ocaml/compilerlibs/Makefile.compilerlibs @@ -34,6 +34,7 @@ UTILS = \ utils/local_store.cmo \ utils/load_path.cmo \ utils/clflags.cmo \ + utils/debug.cmo \ utils/language_extension.cmo \ utils/profile.cmo \ utils/terminfo.cmo \ diff --git a/ocaml/driver/main_args.ml b/ocaml/driver/main_args.ml index 27ca9c583b1..b1b6d5a942d 100644 --- a/ocaml/driver/main_args.ml +++ b/ocaml/driver/main_args.ml @@ -921,6 +921,10 @@ let mk_dstartup f = "-dstartup", Arg.Unit f, " (undocumented)" ;; +let mk_debug_ocaml f = + "-debug-ocaml", Arg.Unit f, " Debugging output for the compiler\n\ + (internal use only)" + let mk_opaque f = "-opaque", Arg.Unit f, " Does not generate cross-module optimization information\n\ @@ -1005,6 +1009,7 @@ module type Common_options = sig val _version : unit -> unit val _vnum : unit -> unit val _w : string -> unit + val _debug_ocaml : unit -> unit val anonymous : string -> unit end @@ -1341,6 +1346,7 @@ struct mk_dprofile F._dprofile; mk_dump_into_file F._dump_into_file; mk_dump_dir F._dump_dir; + mk_debug_ocaml F._debug_ocaml; mk_args F._args; mk_args0 F._args0; @@ -1409,6 +1415,7 @@ struct mk_drawlambda F._drawlambda; mk_dlambda F._dlambda; mk_dinstr F._dinstr; + mk_debug_ocaml F._debug_ocaml; mk_args F._args; mk_args0 F._args0; @@ -1578,6 +1585,7 @@ struct mk_dump_into_file F._dump_into_file; mk_dump_dir F._dump_dir; mk_dump_pass F._dump_pass; + mk_debug_ocaml F._debug_ocaml; mk_args F._args; mk_args0 F._args0; @@ -1686,6 +1694,8 @@ module Make_opttop_options (F : Opttop_options) = struct mk_dinterval F._dinterval; mk_dstartup F._dstartup; mk_dump_pass F._dump_pass; + mk_debug_ocaml F._debug_ocaml; + mk_eval F._eval; ] end;; @@ -1738,6 +1748,7 @@ struct mk_vnum F._vnum; mk_w F._w; mk__ F.anonymous; + mk_debug_ocaml F._debug_ocaml; ] end;; @@ -1823,6 +1834,7 @@ module Default = struct let _unsafe_string = set unsafe_string let _w s = Warnings.parse_options false s |> Option.iter Location.(prerr_alert none) + let _debug_ocaml = set debug_ocaml let anonymous = Compenv.anonymous diff --git a/ocaml/driver/main_args.mli b/ocaml/driver/main_args.mli index a92852b9b47..adb0eb8b147 100644 --- a/ocaml/driver/main_args.mli +++ b/ocaml/driver/main_args.mli @@ -50,7 +50,7 @@ module type Common_options = sig val _version : unit -> unit val _vnum : unit -> unit val _w : string -> unit - + val _debug_ocaml : unit -> unit val anonymous : string -> unit end diff --git a/ocaml/dune b/ocaml/dune index af82fd22847..480833d8f49 100644 --- a/ocaml/dune +++ b/ocaml/dune @@ -60,7 +60,7 @@ (modules ;; UTILS config build_path_prefix_map misc identifiable numbers arg_helper clflags - profile terminfo ccomp warnings consistbl strongly_connected_components + debug profile terminfo ccomp warnings consistbl strongly_connected_components targetint load_path int_replace_polymorphic_compare domainstate binutils local_store target_system compilation_unit import_info linkage_name symbol lazy_backtrack diffing diffing_with_keys language_extension diff --git a/ocaml/otherlibs/dynlink/Makefile b/ocaml/otherlibs/dynlink/Makefile index 3382c62fca9..58d88aad523 100644 --- a/ocaml/otherlibs/dynlink/Makefile +++ b/ocaml/otherlibs/dynlink/Makefile @@ -80,6 +80,7 @@ COMPILERLIBS_SOURCES=\ utils/local_store.ml \ utils/load_path.ml \ utils/clflags.ml \ + utils/debug.ml \ utils/language_extension.ml \ utils/profile.ml \ utils/consistbl.ml \ diff --git a/ocaml/otherlibs/dynlink/dune b/ocaml/otherlibs/dynlink/dune index 4dc60ecf320..d861ee8dc7e 100644 --- a/ocaml/otherlibs/dynlink/dune +++ b/ocaml/otherlibs/dynlink/dune @@ -31,6 +31,7 @@ numbers arg_helper clflags + debug language_extension profile consistbl @@ -109,6 +110,7 @@ (copy_files ../../utils/numbers.ml) (copy_files ../../utils/arg_helper.ml) (copy_files ../../utils/clflags.ml) +(copy_files ../../utils/debug.ml) (copy_files ../../utils/language_extension.ml) (copy_files ../../utils/profile.ml) (copy_files ../../utils/consistbl.ml) @@ -165,6 +167,7 @@ (copy_files ../../utils/numbers.mli) (copy_files ../../utils/arg_helper.mli) (copy_files ../../utils/clflags.mli) +(copy_files ../../utils/debug.mli) (copy_files ../../utils/language_extension.mli) (copy_files ../../utils/profile.mli) (copy_files ../../utils/consistbl.mli) @@ -263,6 +266,7 @@ .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Numbers.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Profile.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Clflags.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Debug.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Language_extension.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Terminfo.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Location.cmo @@ -334,6 +338,7 @@ .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Numbers.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Profile.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Clflags.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Debug.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Language_extension.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Terminfo.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Location.cmx diff --git a/ocaml/tools/Makefile b/ocaml/tools/Makefile index ed64b86f2ec..39a685971d3 100644 --- a/ocaml/tools/Makefile +++ b/ocaml/tools/Makefile @@ -83,7 +83,7 @@ ocamldep.opt$(EXE): $(call byte2native, $(OCAMLDEP)) # The profiler OCAMLPROF=config.cmo build_path_prefix_map.cmo misc.cmo identifiable.cmo \ - numbers.cmo arg_helper.cmo clflags.cmo terminfo.cmo \ + numbers.cmo arg_helper.cmo clflags.cmo debug.cmo terminfo.cmo \ warnings.cmo location.cmo longident.cmo docstrings.cmo \ syntaxerr.cmo ast_helper.cmo \ language_extension.cmo extensions_parsing.cmo extensions.cmo \ diff --git a/ocaml/utils/clflags.ml b/ocaml/utils/clflags.ml index 5980e6362ad..d400947527b 100644 --- a/ocaml/utils/clflags.ml +++ b/ocaml/utils/clflags.ml @@ -132,6 +132,7 @@ let dump_linear = ref false (* -dlinear *) let dump_interval = ref false (* -dinterval *) let keep_startup_file = ref false (* -dstartup *) let dump_combine = ref false (* -dcombine *) +let debug_ocaml = ref false (* -debug-ocaml *) let default_timings_precision = 3 let timings_precision = ref default_timings_precision (* -dtimings-precision *) let profile_columns : Profile.column list ref = ref [] (* -dprofile/-dtimings *) diff --git a/ocaml/utils/clflags.mli b/ocaml/utils/clflags.mli index 65d2053729f..a8c7cf9b5ba 100644 --- a/ocaml/utils/clflags.mli +++ b/ocaml/utils/clflags.mli @@ -138,6 +138,7 @@ val dump_reload : bool ref val dump_scheduling : bool ref val dump_linear : bool ref val dump_interval : bool ref +val debug_ocaml : bool ref val keep_startup_file : bool ref val dump_combine : bool ref val native_code : bool ref diff --git a/ocaml/utils/debug.ml b/ocaml/utils/debug.ml new file mode 100644 index 00000000000..fc6c99ff427 --- /dev/null +++ b/ocaml/utils/debug.ml @@ -0,0 +1,20 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Richard Eisenberg, Jane Street, New York *) +(* *) +(* Copyright 2023 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +open Format + +let print fmt = + if !Clflags.debug_ocaml + then printf (fmt ^^ "@.") + else ifprintf std_formatter fmt diff --git a/ocaml/utils/debug.mli b/ocaml/utils/debug.mli new file mode 100644 index 00000000000..5ea75b79213 --- /dev/null +++ b/ocaml/utils/debug.mli @@ -0,0 +1,24 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Richard Eisenberg, Jane Street, New York *) +(* *) +(* Copyright 2023 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +open Format + +(** Print some output to stdout, if [-debug-ocaml] is given on this + invocation of ocaml. Example: + + {[ + Debug.print "The type is %a" Printtyp.raw_type_expr ty + ]} +*) +val print : ('a, formatter, unit) format -> 'a