package reason
Reason: Syntax & Toolchain for OCaml
Install
Dune Dependency
Authors
Maintainers
Sources
reason-3.8.0.tbz
sha256=9478724b01767320064ba950ddea24c5df0eefdcdd8ff1324ba9ccd646258979
sha512=c5dcec810a1981b78b19271a8a255f4087628514725d6818419b141be6346a62b28fe8d0f10855efe420ede2839bfe562aa5abf21f29d66250e5c0d02323d6d8
doc/src/reason.ocaml-migrate-parsetree/migrate_parsetree_ast_io.ml.html
Source file migrate_parsetree_ast_io.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
(**************************************************************************) (* *) (* OCaml Migrate Parsetree *) (* *) (* Frédéric Bour *) (* *) (* Copyright 2017 Institut National de Recherche en Informatique et *) (* en Automatique (INRIA). *) (* *) (* 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 Result type ast = | Impl : (module Migrate_parsetree_versions.OCaml_version with type Ast.Parsetree.structure = 'concrete) * 'concrete -> ast | Intf : (module Migrate_parsetree_versions.OCaml_version with type Ast.Parsetree.signature = 'concrete) * 'concrete -> ast type filename = string let magic_length = String.length Ast_402.Config.ast_impl_magic_number let read_magic ic = let buf = Bytes.create magic_length in let len = input ic buf 0 magic_length in let s = Bytes.sub_string buf 0 len in if len = magic_length then Ok s else Error s type read_error = | Not_a_binary_ast of string | Unknown_version of string let find_magic magic = let rec loop = function | [] -> let prefix = String.sub magic 0 9 in if prefix = String.sub Ast_402.Config.ast_impl_magic_number 0 9 || prefix = String.sub Ast_402.Config.ast_intf_magic_number 0 9 then Error (Unknown_version magic) else Error (Not_a_binary_ast magic) | (module Frontend : Migrate_parsetree_versions.OCaml_version) :: tail -> if Frontend.Ast.Config.ast_impl_magic_number = magic then Ok (fun x -> Impl ((module Frontend), Obj.obj x)) else if Frontend.Ast.Config.ast_intf_magic_number = magic then Ok (fun x -> Intf ((module Frontend), Obj.obj x)) else loop tail in loop Migrate_parsetree_versions.all_versions let from_channel ic = match read_magic ic with | Error s -> Error (Not_a_binary_ast s) | Ok s -> match find_magic s with | Ok inj -> let filename : filename = input_value ic in let payload = inj (input_value ic) in Ok (filename, payload) | Error _ as e -> e let from_bytes bytes pos = if Bytes.length bytes - pos < magic_length then Error (Not_a_binary_ast "") else let magic = Bytes.to_string (Bytes.sub bytes pos magic_length) in match find_magic magic with | Ok inj -> let filename_pos = pos + magic_length in let filename : filename = Marshal.from_bytes bytes filename_pos in let payload_pos = filename_pos + Marshal.total_size bytes filename_pos in let payload = inj (Marshal.from_bytes bytes payload_pos) in Ok (filename, payload) | Error _ as e -> e let decompose_ast = function | Impl ((module Frontend), tree) -> (Frontend.Ast.Config.ast_impl_magic_number, Obj.repr tree) | Intf ((module Frontend), tree) -> (Frontend.Ast.Config.ast_intf_magic_number, Obj.repr tree) let to_channel oc (filename : filename) x = let magic_number, payload = decompose_ast x in output_string oc magic_number; output_value oc filename; output_value oc payload let to_bytes (filename : filename) x = let magic_number, payload = decompose_ast x in Bytes.cat ( Bytes.cat (Bytes.of_string magic_number) (Marshal.to_bytes filename []) ) (Marshal.to_bytes payload [])
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>