Removed camlp4/camlp5
This commit is contained in:
parent
ba3d278b32
commit
eae41f42a6
|
@ -1,9 +0,0 @@
|
|||
(jbuild_version 1)
|
||||
|
||||
(library
|
||||
((name uTop_camlp4)
|
||||
(public_name utop.camlp4)
|
||||
(optional)
|
||||
(modes (byte))
|
||||
(libraries (utop camlp4.lib))
|
||||
(preprocess (action (run ${bin:cppo} -V OCAML:${ocaml_version} ${<})))))
|
|
@ -1,130 +0,0 @@
|
|||
(*
|
||||
* uTop_camlp4.ml
|
||||
* --------------
|
||||
* Copyright : (c) 2012, Jeremie Dimino <jeremie@dimino.org>
|
||||
* Licence : BSD3
|
||||
*
|
||||
* This file is a part of utop.
|
||||
*)
|
||||
|
||||
open Lexing
|
||||
open Camlp4
|
||||
open Camlp4.PreCast
|
||||
|
||||
module Ast2pt = Camlp4.Struct.Camlp4Ast2OCamlAst.Make(Ast)
|
||||
|
||||
#if OCAML_VERSION < (4, 02, 0)
|
||||
external cast_toplevel_phrase : Camlp4_import.Parsetree.toplevel_phrase -> Parsetree.toplevel_phrase = "%identity"
|
||||
#else
|
||||
let cast_toplevel_phrase x = x
|
||||
#endif
|
||||
|
||||
let print_camlp4_error pp exn =
|
||||
Format.fprintf pp "@[<0>%a@]" Camlp4.ErrorHandler.print exn;
|
||||
Format.pp_print_flush pp ()
|
||||
|
||||
let get_camlp4_error_message exn =
|
||||
let loc, exn =
|
||||
match exn with
|
||||
| Loc.Exc_located (loc, exn) ->
|
||||
((Loc.start_off loc, Loc.stop_off loc), exn)
|
||||
| exn ->
|
||||
((0, 0), exn)
|
||||
in
|
||||
let msg = UTop.get_message print_camlp4_error exn in
|
||||
(* Camlp4 sometimes generate several empty lines at the end... *)
|
||||
let idx = ref (String.length msg - 1) in
|
||||
while !idx > 0 && msg.[!idx] = '\n' do
|
||||
decr idx
|
||||
done;
|
||||
if !idx + 1 < String.length msg then
|
||||
(loc, String.sub msg 0 (!idx + 1))
|
||||
else
|
||||
(loc, msg)
|
||||
|
||||
let convert_camlp4_toplevel_phrase ast =
|
||||
try
|
||||
UTop.Value (cast_toplevel_phrase (Ast2pt.phrase ast))
|
||||
with exn ->
|
||||
let loc, msg = get_camlp4_error_message exn in
|
||||
UTop.Error ([loc], msg)
|
||||
|
||||
let parse_camlp4 syntax str eos_is_error =
|
||||
(* Execute delayed actions now. *)
|
||||
Register.iter_and_take_callbacks (fun (_, f) -> f ());
|
||||
let eof = ref false in
|
||||
try
|
||||
let len = String.length str in
|
||||
let char_stream =
|
||||
Stream.from
|
||||
(fun i ->
|
||||
if i >= len then begin
|
||||
eof := true;
|
||||
None
|
||||
end else
|
||||
Some str.[i])
|
||||
in
|
||||
let token_stream = Gram.filter (Gram.lex (Loc.mk UTop.input_name) char_stream) in
|
||||
UTop.Value (Gram.parse_tokens_after_filter syntax token_stream)
|
||||
with exn ->
|
||||
if !eof && not eos_is_error then
|
||||
raise UTop.Need_more
|
||||
else
|
||||
let loc, msg = get_camlp4_error_message exn in
|
||||
UTop.Error ([loc], msg)
|
||||
|
||||
let filter phrase =
|
||||
try
|
||||
UTop.Value (AstFilters.fold_topphrase_filters (fun t filter -> filter t) phrase)
|
||||
with exn ->
|
||||
let loc, msg = get_camlp4_error_message exn in
|
||||
UTop.Error ([loc], msg)
|
||||
;;
|
||||
|
||||
let parse_toplevel_phrase_camlp4 str eos_is_error =
|
||||
match parse_camlp4 Syntax.top_phrase str eos_is_error with
|
||||
| UTop.Value None ->
|
||||
raise UTop.Need_more
|
||||
| UTop.Value (Some ast) ->
|
||||
filter ast
|
||||
| UTop.Error (locs, msg) ->
|
||||
UTop.Error (locs, msg)
|
||||
|
||||
let parse_toplevel_phrase str eos_is_error =
|
||||
match parse_toplevel_phrase_camlp4 str eos_is_error with
|
||||
| UTop.Value ast ->
|
||||
convert_camlp4_toplevel_phrase ast
|
||||
| UTop.Error (locs, msg) ->
|
||||
UTop.Error (locs, msg)
|
||||
|
||||
let parse_use_file str eos_is_error =
|
||||
match parse_camlp4 Syntax.use_file str eos_is_error with
|
||||
| UTop.Value ([], _) ->
|
||||
raise UTop.Need_more
|
||||
| UTop.Value (asts, _) ->
|
||||
let rec loop phrases = function
|
||||
| [] -> UTop.Value (List.rev phrases)
|
||||
| (ast::more_asts) ->
|
||||
match filter ast with
|
||||
| UTop.Error _ as e -> e
|
||||
| UTop.Value ast ->
|
||||
match convert_camlp4_toplevel_phrase ast with
|
||||
| UTop.Error _ as e -> e
|
||||
| UTop.Value y -> loop (y::phrases) more_asts
|
||||
in loop [] asts
|
||||
| UTop.Error (locs, msg) ->
|
||||
UTop.Error (locs, msg)
|
||||
|
||||
let () =
|
||||
UTop.parse_toplevel_phrase := parse_toplevel_phrase;
|
||||
UTop.parse_use_file := parse_use_file;
|
||||
(* So that camlp4 doesn't display its welcome message. *)
|
||||
let interactive = !Sys.interactive in
|
||||
Sys.interactive := false;
|
||||
let () =
|
||||
try
|
||||
ignore (!Toploop.parse_toplevel_phrase (Lexing.from_string ""))
|
||||
with _ ->
|
||||
()
|
||||
in
|
||||
Sys.interactive := interactive
|
|
@ -1,24 +0,0 @@
|
|||
(*
|
||||
* uTop_camlp4.mli
|
||||
* ---------------
|
||||
* Copyright : (c) 2012, Jeremie Dimino <jeremie@dimino.org>
|
||||
* Licence : BSD3
|
||||
*
|
||||
* This file is a part of utop.
|
||||
*)
|
||||
|
||||
val parse_toplevel_phrase : string -> bool -> Parsetree.toplevel_phrase UTop.result
|
||||
(** Toplevel phrase parser for utop using camlp4. *)
|
||||
|
||||
val parse_toplevel_phrase_camlp4 : string -> bool -> Camlp4.PreCast.Ast.str_item UTop.result
|
||||
(** Camlp4 toplevel phrase parser. Same as {!parse_toplevel_phrase}
|
||||
but the result is not converted to an OCaml ast. *)
|
||||
|
||||
val convert_camlp4_toplevel_phrase : Camlp4.PreCast.Ast.str_item -> Parsetree.toplevel_phrase UTop.result
|
||||
(** Converts a camlp4 toplevel phrase into a standard OCaml toplevel
|
||||
phrase. Note that a camlp4 ast may not be convertible to an
|
||||
OCaml one, in which case it returns {!UTop.Error}. *)
|
||||
|
||||
val get_camlp4_error_message : exn -> UTop.location * string
|
||||
(** [get_camlp4_error_message exn] returns the location and error
|
||||
message for the exception [exn] as printed by camlp4. *)
|
|
@ -1,66 +0,0 @@
|
|||
(*
|
||||
* uTop_camlp5.ml
|
||||
* --------------
|
||||
* Copyright : (c) 2012, Wojciech Meyer <wojciech.meyer@gmail.org>
|
||||
* Licence : BSD3
|
||||
*
|
||||
* This file is a part of utop.
|
||||
*)
|
||||
|
||||
open Lexing
|
||||
|
||||
let print_camlp5_error pp exn =
|
||||
let save = Format.get_formatter_output_functions () in
|
||||
Format.set_formatter_output_functions
|
||||
(fun str s e -> Format.pp_print_string pp (String.sub str s e))
|
||||
(fun () -> Format.pp_print_flush pp ());
|
||||
Format.printf "@[<0>%a@]@." (fun _ -> Pcaml.report_error) exn;
|
||||
Format.set_formatter_output_functions (fst save) (snd save)
|
||||
|
||||
let get_camlp5_error_message exn =
|
||||
let loc, exn =
|
||||
match exn with
|
||||
| Ploc.Exc (loc, exn) ->
|
||||
((Ploc.first_pos loc, Ploc.last_pos loc), exn)
|
||||
| exn ->
|
||||
((0, 0), exn)
|
||||
in
|
||||
let msg = UTop.get_message print_camlp5_error exn in
|
||||
loc, msg
|
||||
|
||||
let convert_camlp5_toplevel_phrase ast =
|
||||
try
|
||||
UTop.Value (Ast2pt.phrase ast)
|
||||
with exn ->
|
||||
let loc, msg = get_camlp5_error_message exn in
|
||||
UTop.Error ([loc], msg)
|
||||
|
||||
let parse_toplevel_phrase_camlp5 str eos_is_error =
|
||||
try
|
||||
let token_stream = Stream.of_string str in
|
||||
match Grammar.Entry.parse Pcaml.top_phrase token_stream with
|
||||
| Some ast ->
|
||||
UTop.Value ast
|
||||
| None ->
|
||||
raise UTop.Need_more
|
||||
with exn ->
|
||||
if not eos_is_error then
|
||||
raise UTop.Need_more
|
||||
else
|
||||
let loc, msg = get_camlp5_error_message exn in
|
||||
UTop.Error ([loc], msg)
|
||||
|
||||
let parse_toplevel_phrase str eos_is_error =
|
||||
match parse_toplevel_phrase_camlp5 str eos_is_error with
|
||||
| UTop.Value ast ->
|
||||
convert_camlp5_toplevel_phrase ast
|
||||
| UTop.Error (locs, msg) ->
|
||||
UTop.Error (locs, msg)
|
||||
|
||||
let () =
|
||||
UTop.parse_toplevel_phrase := parse_toplevel_phrase;
|
||||
(* Force camlp5 to display its welcome message. *)
|
||||
try
|
||||
ignore (!Toploop.parse_toplevel_phrase (Lexing.from_string ""))
|
||||
with _ ->
|
||||
()
|
|
@ -1,23 +0,0 @@
|
|||
(*
|
||||
* uTop_camlp5.mli
|
||||
* ---------------
|
||||
* Copyright : (c) 2012, Wojciech Meyer <wojciech.meyer@gmail.com>
|
||||
* Licence : BSD3
|
||||
*
|
||||
* This file is a part of utop.
|
||||
*)
|
||||
|
||||
val parse_toplevel_phrase : string -> bool -> Parsetree.toplevel_phrase UTop.result
|
||||
(** Toplevel phrase parser for utop using camlp5. *)
|
||||
val parse_toplevel_phrase_camlp5 : string -> bool -> MLast.str_item UTop.result
|
||||
(** Camlp5 toplevel phrase parser. Same as {!parse_toplevel_phrase}
|
||||
but the result is not converted to an OCaml ast. *)
|
||||
|
||||
val convert_camlp5_toplevel_phrase : MLast.str_item -> Parsetree.toplevel_phrase UTop.result
|
||||
(** Converts a camlp5 toplevel phrase into a standard OCaml toplevel
|
||||
phrase. Note that a camlp5 ast may not be convertible to an
|
||||
OCaml one, in which case it returns {!UTop.Error}. *)
|
||||
|
||||
val get_camlp5_error_message : exn -> UTop.location * string
|
||||
(** [get_camlp5_error_message exn] returns the location and error
|
||||
message for the exception [exn] as printed by camlp5. *)
|
Loading…
Reference in New Issue