Skip to content

Commit b804a95

Browse files
committed
Get rid of Primitive_lazy
1 parent fdae1ba commit b804a95

File tree

5 files changed

+216
-174
lines changed

5 files changed

+216
-174
lines changed

lib/es6/Stdlib_Lazy.js

Lines changed: 59 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,73 @@
11

22

3-
import * as Primitive_lazy from "./Primitive_lazy.js";
3+
import * as Primitive_exceptions from "./Primitive_exceptions.js";
44

5-
let make = Primitive_lazy.from_fun;
5+
function is_val(l) {
6+
return l.LAZY_DONE;
7+
}
68

7-
let get = Primitive_lazy.force;
9+
let Undefined = /* @__PURE__ */Primitive_exceptions.create("Stdlib_Lazy.Undefined");
810

9-
let isEvaluated = Primitive_lazy.is_val;
11+
function forward_with_closure(blk, closure) {
12+
let result = closure();
13+
blk.VAL = result;
14+
blk.LAZY_DONE = true;
15+
return result;
16+
}
1017

11-
let Undefined = Primitive_lazy.Undefined;
18+
function raise_undefined() {
19+
throw {
20+
RE_EXN_ID: Undefined,
21+
Error: new Error()
22+
};
23+
}
1224

13-
let force = Primitive_lazy.force;
25+
function force(lzv) {
26+
if (lzv.LAZY_DONE) {
27+
return lzv.VAL;
28+
} else {
29+
let closure = lzv.VAL;
30+
lzv.VAL = raise_undefined;
31+
try {
32+
return forward_with_closure(lzv, closure);
33+
} catch (e) {
34+
lzv.VAL = () => {
35+
throw e;
36+
};
37+
throw e;
38+
}
39+
}
40+
}
1441

15-
let force_val = Primitive_lazy.force_val;
42+
function force_val(lzv) {
43+
if (lzv.LAZY_DONE) {
44+
return lzv.VAL;
45+
} else {
46+
let closure = lzv.VAL;
47+
lzv.VAL = raise_undefined;
48+
return forward_with_closure(lzv, closure);
49+
}
50+
}
51+
52+
function from_fun(closure) {
53+
return {
54+
LAZY_DONE: false,
55+
VAL: closure
56+
};
57+
}
58+
59+
function from_val(value) {
60+
return {
61+
LAZY_DONE: true,
62+
VAL: value
63+
};
64+
}
1665

17-
let from_fun = Primitive_lazy.from_fun;
66+
let make = from_fun;
1867

19-
let from_val = Primitive_lazy.from_val;
68+
let get = force;
2069

21-
let is_val = Primitive_lazy.is_val;
70+
let isEvaluated = is_val;
2271

2372
export {
2473
make,

lib/js/Stdlib_Lazy.js

Lines changed: 59 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,73 @@
11
'use strict';
22

3-
let Primitive_lazy = require("./Primitive_lazy.js");
3+
let Primitive_exceptions = require("./Primitive_exceptions.js");
44

5-
let make = Primitive_lazy.from_fun;
5+
function is_val(l) {
6+
return l.LAZY_DONE;
7+
}
68

7-
let get = Primitive_lazy.force;
9+
let Undefined = /* @__PURE__ */Primitive_exceptions.create("Stdlib_Lazy.Undefined");
810

9-
let isEvaluated = Primitive_lazy.is_val;
11+
function forward_with_closure(blk, closure) {
12+
let result = closure();
13+
blk.VAL = result;
14+
blk.LAZY_DONE = true;
15+
return result;
16+
}
1017

11-
let Undefined = Primitive_lazy.Undefined;
18+
function raise_undefined() {
19+
throw {
20+
RE_EXN_ID: Undefined,
21+
Error: new Error()
22+
};
23+
}
1224

13-
let force = Primitive_lazy.force;
25+
function force(lzv) {
26+
if (lzv.LAZY_DONE) {
27+
return lzv.VAL;
28+
} else {
29+
let closure = lzv.VAL;
30+
lzv.VAL = raise_undefined;
31+
try {
32+
return forward_with_closure(lzv, closure);
33+
} catch (e) {
34+
lzv.VAL = () => {
35+
throw e;
36+
};
37+
throw e;
38+
}
39+
}
40+
}
1441

15-
let force_val = Primitive_lazy.force_val;
42+
function force_val(lzv) {
43+
if (lzv.LAZY_DONE) {
44+
return lzv.VAL;
45+
} else {
46+
let closure = lzv.VAL;
47+
lzv.VAL = raise_undefined;
48+
return forward_with_closure(lzv, closure);
49+
}
50+
}
1651

17-
let from_fun = Primitive_lazy.from_fun;
52+
function from_fun(closure) {
53+
return {
54+
LAZY_DONE: false,
55+
VAL: closure
56+
};
57+
}
1858

19-
let from_val = Primitive_lazy.from_val;
59+
function from_val(value) {
60+
return {
61+
LAZY_DONE: true,
62+
VAL: value
63+
};
64+
}
2065

21-
let is_val = Primitive_lazy.is_val;
66+
let make = from_fun;
67+
68+
let get = force;
69+
70+
let isEvaluated = is_val;
2271

2372
exports.make = make;
2473
exports.get = get;

runtime/Primitive_lazy.res

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

runtime/Primitive_lazy.resi

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

0 commit comments

Comments
 (0)