package ppxlib

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file import.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
(* This file is used to control what we use from the current compiler and what is embed in
   this library.

   It must be opened in all modules, especially the ones coming from the compiler.
*)

module Js    = Migrate_parsetree.OCaml_407
module Ocaml = Migrate_parsetree.Versions.OCaml_current

module Select_ast(Ocaml : Migrate_parsetree.Versions.OCaml_version) = struct
  open Migrate_parsetree

  include Js

  module Type = struct
    type ('js, 'ocaml) t =
      | Signature
        : (Js   .Ast.Parsetree.signature,
           Ocaml.Ast.Parsetree.signature) t
      | Structure
        : (Js   .Ast.Parsetree.structure,
           Ocaml.Ast.Parsetree.structure) t
      | Toplevel_phrase
        : (Js   .Ast.Parsetree.toplevel_phrase,
           Ocaml.Ast.Parsetree.toplevel_phrase) t
      | Out_phrase
        : (Js   .Ast.Outcometree.out_phrase,
           Ocaml.Ast.Outcometree.out_phrase) t
      | Expression
        : (Js   .Ast.Parsetree.expression,
           Ocaml.Ast.Parsetree.expression) t
      | Core_type
        : (Js   .Ast.Parsetree.core_type,
           Ocaml.Ast.Parsetree.core_type) t
      | Type_declaration
        : (Js   .Ast.Parsetree.type_declaration,
           Ocaml.Ast.Parsetree.type_declaration) t
      | Type_extension
        : (Js   .Ast.Parsetree.type_extension,
           Ocaml.Ast.Parsetree.type_extension) t
      | Extension_constructor
        : (Js   .Ast.Parsetree.extension_constructor,
           Ocaml.Ast.Parsetree.extension_constructor) t
      | List
        : ('a, 'b) t -> ('a list, 'b list) t
      | Pair
        : ('a, 'b) t * ('c, 'd) t -> ('a * 'c, 'b * 'd) t
  end
  open Type

  module Of_ocaml = Versions.Convert(Ocaml)(Js)
  module To_ocaml = Versions.Convert(Js)(Ocaml)

  let rec of_ocaml : type ocaml js. (js, ocaml) Type.t -> ocaml -> js =
    let open Of_ocaml in
    fun node ->
      match node with
      | Signature             -> copy_signature
      | Structure             -> copy_structure
      | Toplevel_phrase       -> copy_toplevel_phrase
      | Out_phrase            -> copy_out_phrase
      | Expression            -> copy_expression
      | Core_type             -> copy_core_type
      | Type_declaration      -> copy_type_declaration
      | Type_extension        -> copy_type_extension
      | Extension_constructor -> copy_extension_constructor
      | List t                -> List.map (of_ocaml t)
      | Pair (a, b)           ->
        let f = of_ocaml a in
        let g = of_ocaml b in
        fun (x, y) -> (f x, g y)

  let rec to_ocaml : type ocaml js. (js, ocaml) Type.t -> js -> ocaml =
    let open To_ocaml in
    fun node ->
      match node with
      | Signature             -> copy_signature
      | Structure             -> copy_structure
      | Toplevel_phrase       -> copy_toplevel_phrase
      | Out_phrase            -> copy_out_phrase
      | Expression            -> copy_expression
      | Core_type             -> copy_core_type
      | Type_declaration      -> copy_type_declaration
      | Type_extension        -> copy_type_extension
      | Extension_constructor -> copy_extension_constructor
      | List t                -> List.map (to_ocaml t)
      | Pair (a, b)           ->
        let f = to_ocaml a in
        let g = to_ocaml b in
        fun (x, y) -> (f x, g y)

  let of_ocaml_mapper item f x =
    to_ocaml item x |> f |> of_ocaml item

  let to_ocaml_mapper item f x =
    of_ocaml item x |> f |> to_ocaml item
end

module Selected_ast = Select_ast(Ocaml)

(* Modules from migrate_parsetree *)
module Parsetree  = Selected_ast.Ast.Parsetree
module Asttypes   = Selected_ast.Ast.Asttypes

module Location   = struct
  include Ocaml_common.Location
  include Location_helper
end

module Clflags    = struct
  include Ocaml_common.Clflags
  include Clflags_helper
end

(* Modules imported directly from the compiler *)
module Longident  = Ocaml_common.Longident
module Misc       = Ocaml_common.Misc
module Warnings   = Ocaml_common.Warnings
OCaml

Innovation. Community. Security.