package ecaml

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

Source file defvar.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
open! Core
open! Import

let all_defvar_symbols = ref []

module Private = struct
  let all_defvar_symbols () =
    !all_defvar_symbols |> List.sort ~compare:Symbol.compare_name
  ;;
end

let add_to_load_history symbol here =
  all_defvar_symbols := symbol :: !all_defvar_symbols;
  Load_history.add_entry here (Var symbol)
;;

let defvaralias =
  Funcall.Wrap.("defvaralias" <: Symbol.t @-> Symbol.t @-> nil_or string @-> return nil)
;;

let defvaralias symbol here ?docstring ~alias_of () =
  defvaralias symbol alias_of docstring;
  add_to_load_history symbol here
;;

let define_obsolete_alias obsolete here ?docstring ~alias_of ~since () =
  defvaralias obsolete here ?docstring ~alias_of ();
  Obsolete.make_variable_obsolete obsolete ~current:(Some alias_of) ~since
;;

let defvar
      symbol
      here
      ~docstring
      ~type_
      ~initial_value
      ?(include_in_all_defvar_symbols = true)
      ()
  =
  let symbol =
    match Symbol.Automatic_migration.migrate ~old:symbol with
    | None -> symbol
    | Some { new_; since } ->
      define_obsolete_alias symbol here ~alias_of:new_ ~since ();
      new_
  in
  let docstring = docstring |> String.strip in
  require_nonempty_docstring here ~docstring;
  ignore
    (Form.Blocking.eval
       ([ Q.defvar |> Symbol.to_value
        ; symbol |> Symbol.to_value
        ; Value.list
            [ Symbol.to_value Q.quote; initial_value |> Value.Type.to_value type_ ]
        ; docstring |> Value.of_utf8_bytes
        ]
        |> Value.list
        |> Form.of_value_exn)
     : Value.t);
  if include_in_all_defvar_symbols then add_to_load_history symbol here;
  Var.create symbol type_
;;
OCaml

Innovation. Community. Security.