Skip to content

Commit 0e2fb93

Browse files
committed
fix AMD loader (#267)
1 parent 05c495d commit 0e2fb93

File tree

7 files changed

+147
-2
lines changed

7 files changed

+147
-2
lines changed

jscomp/js_config.ml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
type env =
2323
| Browser
2424
| NodeJS
25+
| AmdJS
2526
| Goog of string option
2627

2728
let default_env = ref NodeJS
@@ -35,6 +36,8 @@ let cmd_set_module str =
3536
match str with
3637
| "commonjs" -> default_env := NodeJS
3738
| "amdjs" ->
39+
default_env := AmdJS
40+
| "browser-internal" -> (* used internal *)
3841
default_env := Browser
3942
| _ ->
4043
if Ext_string.starts_with str "goog" then
@@ -58,7 +61,9 @@ let cmd_set_module str =
5861
let get_goog_package_name () =
5962
match !default_env with
6063
| Goog x -> x
61-
| Browser | NodeJS -> None
64+
| Browser
65+
| AmdJS
66+
| NodeJS -> None
6267

6368
let default_gen_tds = ref false
6469

jscomp/js_config.mli

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
type env =
2222
| Browser
2323
| NodeJS
24+
| AmdJS
2425
| Goog of string option
2526

2627
val get_env : unit -> env

jscomp/js_dump.ml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1592,8 +1592,10 @@ let pp_deps_program ( program : J.deps_program) (f : Ext_pp.t) =
15921592
P.string f L.strict_directive;
15931593
P.newline f ;
15941594
ignore (match Js_config.get_env () with
1595+
| AmdJS ->
1596+
amd_program f program
15951597
| Browser ->
1596-
(node_program f program)
1598+
node_program f program
15971599
| NodeJS ->
15981600
begin match Sys.getenv "OCAML_AMD_MODULE" with
15991601
| exception Not_found ->

jscomp/js_program_loader.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ let string_of_module_id (x : Lam_module_ident.t) : string =
5353
"./runtime/" ^ Filename.chop_extension target
5454
else
5555
"./stdlib/" ^ Filename.chop_extension target
56+
| AmdJS
5657
| NodeJS ->
5758
if Ext_string.starts_with id.name "Caml_" then
5859
let path =

jscomp/test/.depend

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,8 @@ obj_test.cmo : mt.cmi
284284
obj_test.cmx : mt.cmx
285285
of_string_test.cmo : mt.cmi
286286
of_string_test.cmx : mt.cmx
287+
pq_test.cmo :
288+
pq_test.cmx :
287289
pr_regression_test.cmo : mt.cmi
288290
pr_regression_test.cmx : mt.cmx
289291
primitive_reg_test.cmo :
@@ -824,6 +826,8 @@ obj_test.cmo : mt.cmi
824826
obj_test.cmj : mt.cmj
825827
of_string_test.cmo : mt.cmi
826828
of_string_test.cmj : mt.cmj
829+
pq_test.cmo :
830+
pq_test.cmj :
827831
pr_regression_test.cmo : mt.cmi
828832
pr_regression_test.cmj : mt.cmj
829833
primitive_reg_test.cmo :

jscomp/test/pq_test.js

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
// Generated CODE, PLEASE EDIT WITH CARE
2+
'use strict';
3+
4+
var Caml_builtin_exceptions = require("../runtime/caml_builtin_exceptions");
5+
6+
function insert(queue, prio, elt) {
7+
if (queue) {
8+
var right = queue[3];
9+
var left = queue[2];
10+
var e = queue[1];
11+
var p = queue[0];
12+
if (prio <= p) {
13+
return /* Node */[
14+
prio,
15+
elt,
16+
insert(right, p, e),
17+
left
18+
];
19+
}
20+
else {
21+
return /* Node */[
22+
p,
23+
e,
24+
insert(right, prio, elt),
25+
left
26+
];
27+
}
28+
}
29+
else {
30+
return /* Node */[
31+
prio,
32+
elt,
33+
/* Empty */0,
34+
/* Empty */0
35+
];
36+
}
37+
}
38+
39+
var Queue_is_empty = {
40+
0: "Pq_test.PrioQueue.Queue_is_empty",
41+
1: Caml_builtin_exceptions.get_id(),
42+
length: 2,
43+
tag: 248
44+
};
45+
46+
function remove_top(param) {
47+
if (param) {
48+
var left = param[2];
49+
if (param[3]) {
50+
if (left) {
51+
var right = param[3];
52+
var rprio = right[0];
53+
var lprio = left[0];
54+
if (lprio <= rprio) {
55+
return /* Node */[
56+
lprio,
57+
left[1],
58+
remove_top(left),
59+
right
60+
];
61+
}
62+
else {
63+
return /* Node */[
64+
rprio,
65+
right[1],
66+
left,
67+
remove_top(right)
68+
];
69+
}
70+
}
71+
else {
72+
return param[3];
73+
}
74+
}
75+
else {
76+
return left;
77+
}
78+
}
79+
else {
80+
throw Queue_is_empty;
81+
}
82+
}
83+
84+
function extract(queue) {
85+
if (queue) {
86+
return /* tuple */[
87+
queue[0],
88+
queue[1],
89+
remove_top(queue)
90+
];
91+
}
92+
else {
93+
throw Queue_is_empty;
94+
}
95+
}
96+
97+
var PrioQueue = /* module */[
98+
/* Empty */0,
99+
insert,
100+
Queue_is_empty,
101+
remove_top,
102+
extract
103+
];
104+
105+
exports.PrioQueue = PrioQueue;
106+
/* No side effect */

jscomp/test/pq_test.ml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
module PrioQueue =
2+
struct
3+
type priority = int
4+
type 'a queue = Empty | Node of priority * 'a * 'a queue * 'a queue
5+
let empty = Empty
6+
let rec insert queue prio elt =
7+
match queue with
8+
Empty -> Node(prio, elt, Empty, Empty)
9+
| Node(p, e, left, right) ->
10+
if prio <= p
11+
then Node(prio, elt, insert right p e, left)
12+
else Node(p, e, insert right prio elt, left)
13+
exception Queue_is_empty
14+
let rec remove_top = function
15+
Empty -> raise Queue_is_empty
16+
| Node(prio, elt, left, Empty) -> left
17+
| Node(prio, elt, Empty, right) -> right
18+
| Node(prio, elt, (Node(lprio, lelt, _, _) as left),
19+
(Node(rprio, relt, _, _) as right)) ->
20+
if lprio <= rprio
21+
then Node(lprio, lelt, remove_top left, right)
22+
else Node(rprio, relt, left, remove_top right)
23+
let extract = function
24+
Empty -> raise Queue_is_empty
25+
| Node(prio, elt, _, _) as queue -> (prio, elt, remove_top queue)
26+
end;;

0 commit comments

Comments
 (0)