-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprelude.js
More file actions
86 lines (74 loc) · 2.61 KB
/
Copy pathprelude.js
File metadata and controls
86 lines (74 loc) · 2.61 KB
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
let prelude = {
moduleName: module.path[1],
};
if (
!(
module.path[0] != "modules" ||
prelude.moduleName == undefined ||
module.globals.init == undefined
) &&
module.globals.loadDependencies[prelude.moduleName]
) {
module.globals.prelude ??= {};
module.globals.preludePaths ??= {};
prelude.evalStack = ["prelude"];
let { Files, Path } = java.nio.file;
prelude.evalString = function (name) {
let path = module.globals.preludePaths[name];
prelude.evalStack.push(path);
try {
module.evalFile(module.globals.prelude[name], path.toString());
} catch (e) {
module.globals.init.error(
`Error while in prelude.evalFile at path ${path}: ${e.toString()}\nCall stack:\n${prelude.evalStack.join("\n")}`,
);
}
prelude.evalStack.pop();
};
prelude.evalFile = function (path, name) {
if (!path.isAbsolute()) path = Path.of("/").resolve(path);
module.globals.preludePaths[name] = path;
module.globals.prelude[name] = "{" + Files.readString(path) + "}";
prelude.evalStack.push(path);
prelude.evalString(name);
prelude.evalStack.pop();
};
prelude.eval = function (content, ident) {
prelude.evalStack.push(ident);
try {
module.eval(content);
} catch (e) {
module.globals.init.error(
`Error while in prelude.eval [ident=${ident}]: ${e.toString()}\nCall stack:\n${prelude.evalStack.join("\n")}`,
);
}
prelude.evalStack.pop();
};
for (let name of module.globals.loadDependencies[prelude.moduleName] ??
[]) {
let gotPrelude = module.globals.prelude[name];
if (gotPrelude == false) continue;
if (gotPrelude == undefined) {
let modulePath = module.globals.init.modulesPath.resolve(name);
if (
module.globals.loadedModules === undefined ||
!module.globals.loadedModules[name]
) {
module.globals.prelude[name] = false;
continue;
}
let preludePath = modulePath.resolve("prelude.js");
if (!Files.exists(preludePath)) {
preludePath = modulePath.resolve("prelude/init.js");
if (!Files.exists(preludePath)) {
module.globals.prelude[name] = false;
continue;
}
}
prelude.evalFile(preludePath, name);
} else {
prelude.evalString(name);
}
}
}
delete prelude;