1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.PreludeGenerator = void 0;
|
7 |
|
8 | var t = _interopRequireWildcard(require("@babel/types"));
|
9 |
|
10 | var _babelhelpers = require("./babelhelpers.js");
|
11 |
|
12 | var _NameGenerator = require("./NameGenerator.js");
|
13 |
|
14 | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 | class PreludeGenerator {
|
25 | constructor(debugNames, uniqueSuffix) {
|
26 | this.prelude = [];
|
27 | this.memoizedRefs = new Map();
|
28 | this.nameGenerator = new _NameGenerator.NameGenerator(new Set(), !!debugNames, uniqueSuffix || "", "_$");
|
29 | this.usesThis = false;
|
30 | this.declaredGlobals = new Set();
|
31 | this.nextInvariantId = 0;
|
32 | }
|
33 |
|
34 | createNameGenerator(prefix) {
|
35 | return new _NameGenerator.NameGenerator(this.nameGenerator.forbiddenNames, this.nameGenerator.debugNames, this.nameGenerator.uniqueSuffix, prefix);
|
36 | }
|
37 |
|
38 | convertStringToMember(str) {
|
39 | return str.split(".").map(name => {
|
40 | if (name === "global") {
|
41 | return this.memoizeReference(name);
|
42 | } else if (name === "this") {
|
43 | return t.thisExpression();
|
44 | } else {
|
45 | return t.identifier(name);
|
46 | }
|
47 | }).reduce((obj, prop) => t.memberExpression(obj, prop));
|
48 | }
|
49 |
|
50 | globalReference(key, globalScope = false) {
|
51 | if (globalScope && t.isValidIdentifier(key)) return t.identifier(key);
|
52 | return (0, _babelhelpers.memberExpressionHelper)(this.memoizeReference("global"), key);
|
53 | }
|
54 |
|
55 | memoizeReference(key) {
|
56 | let ref = this.memoizedRefs.get(key);
|
57 | if (ref) return ref;
|
58 | let init;
|
59 |
|
60 | if (key.includes("(") || key.includes("[")) {
|
61 |
|
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 |
|
68 |
|
69 | init = t.identifier(key);
|
70 | } else if (key === "global") {
|
71 | this.usesThis = true;
|
72 | init = t.thisExpression();
|
73 | } else {
|
74 | let i = key.lastIndexOf(".");
|
75 |
|
76 | if (i === -1) {
|
77 | init = t.memberExpression(this.memoizeReference("global"), t.identifier(key));
|
78 | } else {
|
79 | init = t.memberExpression(this.memoizeReference(key.substr(0, i)), t.identifier(key.substr(i + 1)));
|
80 | }
|
81 | }
|
82 |
|
83 | ref = t.identifier(this.nameGenerator.generate(key));
|
84 | this.prelude.push(t.variableDeclaration("var", [t.variableDeclarator(ref, init)]));
|
85 | this.memoizedRefs.set(key, ref);
|
86 | return ref;
|
87 | }
|
88 |
|
89 | }
|
90 |
|
91 | exports.PreludeGenerator = PreludeGenerator;
|
92 |
|
\ | No newline at end of file |