Skip to content

Commit 5f9c5da

Browse files
committed
merge exn primitive modules
1 parent 90a4454 commit 5f9c5da

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+268
-364
lines changed

jscomp/core/lam_compile_primitive.ml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ let translate output_prefix loc (cxt : Lam_compile_context.t)
7878
| Pis_not_none -> Js_of_lam_option.is_not_none (Ext_list.singleton_exn args)
7979
| Pcreate_extension s -> E.make_exception s
8080
| Pwrap_exn ->
81-
E.runtime_call Js_runtime_modules.caml_js_exceptions
82-
"internalToOCamlException" args
81+
E.runtime_call Js_runtime_modules.exceptions
82+
"internalToException" args
8383
| Praw_js_code { code; code_info } -> E.raw_js_code code_info code
8484
(* FIXME: save one allocation
8585
trim can not be done before syntax checking

jscomp/ext/js_runtime_modules.ml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,8 @@ let option = "Primitive_option"
4848

4949
let hash = "Primitive_hash"
5050

51-
let deriving = "Runtime_deriving"
51+
let exceptions = "Primitive_exceptions"
5252

53-
let exceptions = "Caml_exceptions"
53+
let deriving = "Runtime_deriving"
5454

5555
let curry = "Curry"
56-
57-
let caml_js_exceptions = "Caml_js_exceptions"

jscomp/runtime/caml_exceptions.resi

Lines changed: 0 additions & 31 deletions
This file was deleted.

jscomp/runtime/caml_js_exceptions.res

Lines changed: 0 additions & 38 deletions
This file was deleted.

jscomp/runtime/caml_exceptions.res renamed to jscomp/runtime/primitive_exceptions.res

Lines changed: 48 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright (C) 2015-2016 Bloomberg Finance L.P.
1+
/* Copyright (C) 2015- Hongbo Zhang, Authors of ReScript
22
*
33
* This program is free software: you can redistribute it and/or modify
44
* it under the terms of the GNU Lesser General Public License as published by
@@ -26,39 +26,8 @@ module Obj = Primitive_object_extern
2626

2727
type t = {@as("RE_EXN_ID") id: string}
2828

29-
module Dict = {
30-
@obj
31-
external empty: unit => dict<'a> = ""
32-
33-
@set_index
34-
external set: (dict<'a>, string, 'a) => unit = ""
35-
36-
@get_index
37-
/**
38-
It's the same as `Js.Dict.get` but it doesn't have runtime overhead to check if the key exists.
39-
*/
40-
external dangerouslyGetNonOption: (dict<'a>, string) => option<'a> = ""
41-
}
42-
43-
/**
44-
Needs to have unique extension ids when used with functors.
45-
See discussion in https://github.com/rescript-lang/rescript-compiler/pull/6570
46-
*/
47-
let idMap = Dict.empty()
48-
49-
let create = (str: string): string => {
50-
switch idMap->Dict.dangerouslyGetNonOption(str) {
51-
| Some(v) => {
52-
let id = v + 1
53-
idMap->Dict.set(str, id)
54-
str ++ ("/" ++ (Obj.magic((id: int)): string))
55-
}
56-
| None => {
57-
idMap->Dict.set(str, 1)
58-
str
59-
}
60-
}
61-
}
29+
exception Error = JsError
30+
type js_error = {cause: exn}
6231

6332
/**
6433
This function should never throw
@@ -91,12 +60,54 @@ let create = (str: string): string => {
9160
9261
This is not a problem in `try .. with` since the logic above is not expressible, see more design in [destruct_exn.md]
9362
*/
94-
let is_extension = (type a, e: a): bool =>
63+
let isExtension = (type a, e: a): bool =>
9564
if Js.testAny(e) {
9665
false
9766
} else {
9867
Js.typeof((Obj.magic(e): t).id) == "string"
9968
}
10069

101-
/** FIXME: remove the trailing `/` */
102-
let exn_slot_name = (x: t): string => x.id
70+
/**
71+
This function has to be in this module Since
72+
[Error] is defined here
73+
*/
74+
let internalToException = (e: unknown) =>
75+
if isExtension(e) {
76+
(Obj.magic(e): exn)
77+
} else {
78+
JsError(e)
79+
}
80+
81+
module Dict = {
82+
@obj
83+
external empty: unit => dict<'a> = ""
84+
85+
@set_index
86+
external set: (dict<'a>, string, 'a) => unit = ""
87+
88+
@get_index
89+
/**
90+
It's the same as `Js.Dict.get` but it doesn't have runtime overhead to check if the key exists.
91+
*/
92+
external dangerouslyGetNonOption: (dict<'a>, string) => option<'a> = ""
93+
}
94+
95+
/**
96+
Needs to have unique extension ids when used with functors.
97+
See discussion in https://github.com/rescript-lang/rescript-compiler/pull/6570
98+
*/
99+
let idMap = Dict.empty()
100+
101+
let create = (str: string): string => {
102+
switch idMap->Dict.dangerouslyGetNonOption(str) {
103+
| Some(v) => {
104+
let id = v + 1
105+
idMap->Dict.set(str, id)
106+
str ++ ("/" ++ (Obj.magic((id: int)): string))
107+
}
108+
| None => {
109+
idMap->Dict.set(str, 1)
110+
str
111+
}
112+
}
113+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
exception Error = JsError
2+
type js_error = {cause: exn}
3+
4+
// TODO: remove legacy exn representation
5+
type t = {@as("RE_EXN_ID") id: string}
6+
let create: string => string
7+
let internalToException: unknown => exn

jscomp/runtime/release.ninja

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,20 @@ o runtime/bs_stdlib_mini.cmi : cc runtime/bs_stdlib_mini.resi
1313
bsc_flags = -nostdlib -nopervasives
1414
o runtime/js.cmj runtime/js.cmi : cc runtime/js.res
1515
bsc_flags = $bsc_no_open_flags
16-
o runtime/caml_exceptions.cmj : cc_cmi runtime/caml_exceptions.res | runtime/caml_exceptions.cmi runtime/obj.cmj runtime/primitive_object_extern.cmj
17-
o runtime/caml_exceptions.cmi : cc runtime/caml_exceptions.resi | runtime/bs_stdlib_mini.cmi runtime/js.cmi runtime/js.cmj
1816
o runtime/lazy.cmj : cc_cmi runtime/lazy.res | runtime/lazy.cmi runtime/primitive_lazy.cmj
1917
o runtime/lazy.cmi : cc runtime/lazy.resi | runtime/bs_stdlib_mini.cmi runtime/js.cmi runtime/js.cmj
18+
o runtime/primitive_exceptions.cmj : cc_cmi runtime/primitive_exceptions.res | runtime/obj.cmj runtime/primitive_exceptions.cmi runtime/primitive_object_extern.cmj
19+
o runtime/primitive_exceptions.cmi : cc runtime/primitive_exceptions.resi | runtime/bs_stdlib_mini.cmi runtime/js.cmi runtime/js.cmj
2020
o runtime/primitive_hash.cmj : cc_cmi runtime/primitive_hash.res | runtime/obj.cmj runtime/primitive_hash.cmi runtime/primitive_object_extern.cmj
2121
o runtime/primitive_hash.cmi : cc runtime/primitive_hash.resi | runtime/bs_stdlib_mini.cmi runtime/js.cmi runtime/js.cmj runtime/primitive_object.cmi
22-
o runtime/primitive_lazy.cmj : cc_cmi runtime/primitive_lazy.res | runtime/caml_exceptions.cmj runtime/primitive_lazy.cmi
22+
o runtime/primitive_lazy.cmj : cc_cmi runtime/primitive_lazy.res | runtime/primitive_exceptions.cmj runtime/primitive_lazy.cmi
2323
o runtime/primitive_lazy.cmi : cc runtime/primitive_lazy.resi | runtime/bs_stdlib_mini.cmi runtime/js.cmi runtime/js.cmj
2424
o runtime/primitive_module.cmj : cc_cmi runtime/primitive_module.res | runtime/lazy.cmj runtime/obj.cmj runtime/primitive_module.cmi runtime/primitive_object_extern.cmj
2525
o runtime/primitive_module.cmi : cc runtime/primitive_module.resi | runtime/bs_stdlib_mini.cmi runtime/js.cmi runtime/js.cmj runtime/primitive_object.cmi
2626
o runtime/primitive_object.cmj : cc_cmi runtime/primitive_object.res | runtime/primitive_bool.cmj runtime/primitive_float.cmj runtime/primitive_int.cmj runtime/primitive_object.cmi runtime/primitive_object_extern.cmj runtime/primitive_option.cmj runtime/primitive_string.cmj
2727
o runtime/primitive_object.cmi : cc runtime/primitive_object.resi | runtime/bs_stdlib_mini.cmi runtime/js.cmi runtime/js.cmj runtime/primitive_object_extern.cmj
2828
o runtime/primitive_option.cmj : cc_cmi runtime/primitive_option.res | runtime/primitive_object_extern.cmj runtime/primitive_option.cmi
2929
o runtime/primitive_option.cmi : cc runtime/primitive_option.resi | runtime/bs_stdlib_mini.cmi runtime/js.cmi runtime/js.cmj runtime/primitive_object_extern.cmj
30-
o runtime/caml_js_exceptions.cmi runtime/caml_js_exceptions.cmj : cc runtime/caml_js_exceptions.res | runtime/bs_stdlib_mini.cmi runtime/caml_exceptions.cmj runtime/js.cmi runtime/js.cmj runtime/primitive_object_extern.cmj
3130
o runtime/char.cmi runtime/char.cmj : cc runtime/char.res | runtime/bs_stdlib_mini.cmi runtime/js.cmi runtime/js.cmj
3231
o runtime/curry.cmi runtime/curry.cmj : cc runtime/curry.res | runtime/bs_stdlib_mini.cmi runtime/js.cmi runtime/js.cmj runtime/obj.cmj runtime/primitive_object_extern.cmj
3332
o runtime/obj.cmi runtime/obj.cmj : cc runtime/obj.res | runtime/bs_stdlib_mini.cmi runtime/js.cmi runtime/js.cmj runtime/primitive_object_extern.cmj
@@ -43,4 +42,4 @@ o runtime/primitive_promise.cmi runtime/primitive_promise.cmj : cc runtime/primi
4342
o runtime/primitive_string.cmi runtime/primitive_string.cmj : cc runtime/primitive_string.res | runtime/bs_stdlib_mini.cmi runtime/js.cmi runtime/js.cmj runtime/primitive_string_extern.cmj
4443
o runtime/primitive_string_extern.cmi runtime/primitive_string_extern.cmj : cc runtime/primitive_string_extern.res | runtime/bs_stdlib_mini.cmi runtime/js.cmi runtime/js.cmj
4544
o runtime/string.cmi runtime/string.cmj : cc runtime/string.res | runtime/bs_stdlib_mini.cmi runtime/js.cmi runtime/js.cmj runtime/primitive_string.cmj runtime/primitive_string_extern.cmj
46-
o runtime : phony runtime/bs_stdlib_mini.cmi runtime/js.cmj runtime/js.cmi runtime/caml_exceptions.cmi runtime/caml_exceptions.cmj runtime/lazy.cmi runtime/lazy.cmj runtime/primitive_hash.cmi runtime/primitive_hash.cmj runtime/primitive_lazy.cmi runtime/primitive_lazy.cmj runtime/primitive_module.cmi runtime/primitive_module.cmj runtime/primitive_object.cmi runtime/primitive_object.cmj runtime/primitive_option.cmi runtime/primitive_option.cmj runtime/caml_js_exceptions.cmi runtime/caml_js_exceptions.cmj runtime/char.cmi runtime/char.cmj runtime/curry.cmi runtime/curry.cmj runtime/obj.cmi runtime/obj.cmj runtime/primitive_array.cmi runtime/primitive_array.cmj runtime/primitive_bigint.cmi runtime/primitive_bigint.cmj runtime/primitive_bool.cmi runtime/primitive_bool.cmj runtime/primitive_char_extern.cmi runtime/primitive_char_extern.cmj runtime/primitive_dict.cmi runtime/primitive_dict.cmj runtime/primitive_float.cmi runtime/primitive_float.cmj runtime/primitive_int.cmi runtime/primitive_int.cmj runtime/primitive_object_extern.cmi runtime/primitive_object_extern.cmj runtime/primitive_promise.cmi runtime/primitive_promise.cmj runtime/primitive_string.cmi runtime/primitive_string.cmj runtime/primitive_string_extern.cmi runtime/primitive_string_extern.cmj runtime/string.cmi runtime/string.cmj
45+
o runtime : phony runtime/bs_stdlib_mini.cmi runtime/js.cmj runtime/js.cmi runtime/lazy.cmi runtime/lazy.cmj runtime/primitive_exceptions.cmi runtime/primitive_exceptions.cmj runtime/primitive_hash.cmi runtime/primitive_hash.cmj runtime/primitive_lazy.cmi runtime/primitive_lazy.cmj runtime/primitive_module.cmi runtime/primitive_module.cmj runtime/primitive_object.cmi runtime/primitive_object.cmj runtime/primitive_option.cmi runtime/primitive_option.cmj runtime/char.cmi runtime/char.cmj runtime/curry.cmi runtime/curry.cmj runtime/obj.cmi runtime/obj.cmj runtime/primitive_array.cmi runtime/primitive_array.cmj runtime/primitive_bigint.cmi runtime/primitive_bigint.cmj runtime/primitive_bool.cmi runtime/primitive_bool.cmj runtime/primitive_char_extern.cmi runtime/primitive_char_extern.cmj runtime/primitive_dict.cmi runtime/primitive_dict.cmj runtime/primitive_float.cmi runtime/primitive_float.cmj runtime/primitive_int.cmi runtime/primitive_int.cmj runtime/primitive_object_extern.cmi runtime/primitive_object_extern.cmj runtime/primitive_promise.cmi runtime/primitive_promise.cmj runtime/primitive_string.cmi runtime/primitive_string.cmj runtime/primitive_string_extern.cmi runtime/primitive_string_extern.cmj runtime/string.cmi runtime/string.cmj

jscomp/test/array_safe_get.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

jscomp/test/caml_compare_test.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

jscomp/test/custom_error_test.js

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

jscomp/test/equal_exception_test.js

Lines changed: 6 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)