arkanalyzer 1.0.87 → 1.0.89
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/arkanalyzer.json +11 -0
- package/lib/Config.d.ts +27 -2
- package/lib/Config.d.ts.map +1 -1
- package/lib/Config.js +65 -2
- package/lib/Scene.d.ts +5 -2
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +34 -67
- package/lib/callgraph/pointerAnalysis/context/Context.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/context/Context.js +10 -12
- package/lib/callgraph/pointerAnalysis/plugins/WorkerPlugin.js +1 -1
- package/lib/cli/commands/cg.d.ts +27 -6
- package/lib/cli/commands/cg.d.ts.map +1 -1
- package/lib/cli/commands/cg.js +9 -6
- package/lib/core/base/Expr.js +3 -3
- package/lib/core/base/Position.d.ts +1 -1
- package/lib/core/base/Position.d.ts.map +1 -1
- package/lib/core/base/Position.js +2 -2
- package/lib/core/base/Type.d.ts.map +1 -1
- package/lib/core/base/Type.js +1 -2
- package/lib/core/common/Const.d.ts +1 -0
- package/lib/core/common/Const.d.ts.map +1 -1
- package/lib/core/common/Const.js +2 -1
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +1 -1
- package/lib/core/common/IRUtils.d.ts.map +1 -1
- package/lib/core/common/IRUtils.js +3 -33
- package/lib/core/common/ModelUtils.d.ts +6 -0
- package/lib/core/common/ModelUtils.d.ts.map +1 -1
- package/lib/core/common/ModelUtils.js +30 -0
- package/lib/core/common/SdkUtils.js +1 -1
- package/lib/core/common/TypeInference.d.ts +13 -0
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +44 -0
- package/lib/core/common/ValueUtil.d.ts +1 -1
- package/lib/core/common/ValueUtil.d.ts.map +1 -1
- package/lib/core/common/ValueUtil.js +28 -12
- package/lib/core/graph/Cfg.d.ts.map +1 -1
- package/lib/core/graph/Cfg.js +0 -2
- package/lib/core/graph/DominanceFinder.d.ts +3 -0
- package/lib/core/graph/DominanceFinder.d.ts.map +1 -1
- package/lib/core/graph/DominanceFinder.js +42 -36
- package/lib/core/graph/DominanceTree.d.ts.map +1 -1
- package/lib/core/graph/DominanceTree.js +0 -4
- package/lib/core/inference/ValueInference.d.ts.map +1 -1
- package/lib/core/inference/ValueInference.js +3 -2
- package/lib/core/inference/abc/AbcInference.d.ts.map +1 -1
- package/lib/core/inference/abc/AbcInference.js +2 -1
- package/lib/core/inference/arkts/ArkTsInference.d.ts.map +1 -1
- package/lib/core/inference/arkts/ArkTsInference.js +3 -2
- package/lib/core/model/ArkClass.d.ts +3 -0
- package/lib/core/model/ArkClass.d.ts.map +1 -1
- package/lib/core/model/ArkClass.js +32 -6
- package/lib/core/model/ArkFile.d.ts.map +1 -1
- package/lib/core/model/ArkFile.js +0 -1
- package/lib/core/model/ArkMetadata.d.ts +32 -1
- package/lib/core/model/ArkMetadata.d.ts.map +1 -1
- package/lib/core/model/ArkMetadata.js +28 -3
- package/lib/core/model/builder/ArkMetadataBuilder.d.ts +21 -0
- package/lib/core/model/builder/ArkMetadataBuilder.d.ts.map +1 -0
- package/lib/core/model/builder/ArkMetadataBuilder.js +160 -0
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +32 -26
- package/lib/frontend/FrontendBuilder.d.ts +26 -0
- package/lib/frontend/FrontendBuilder.d.ts.map +1 -0
- package/lib/frontend/FrontendBuilder.js +108 -0
- package/lib/frontend/arktsFrontend/ArktsFrontend.d.ts +16 -0
- package/lib/frontend/arktsFrontend/ArktsFrontend.d.ts.map +1 -0
- package/lib/frontend/arktsFrontend/ArktsFrontend.js +52 -0
- package/lib/frontend/cppFrontend/CppFrontend.d.ts +13 -0
- package/lib/frontend/cppFrontend/CppFrontend.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/CppFrontend.js +85 -0
- package/lib/frontend/cppFrontend/ast/index.d.ts +5 -0
- package/lib/frontend/cppFrontend/ast/index.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/index.js +31 -0
- package/lib/frontend/cppFrontend/ast/ts/ArkCxxAstNode.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/ts/astParser.d.ts +25 -0
- package/lib/frontend/cppFrontend/ast/ts/astParser.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/ts/astParser.js +280 -0
- package/lib/frontend/cppFrontend/ast/ts/astUtils.d.ts +18 -0
- package/lib/frontend/cppFrontend/ast/ts/astUtils.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/ts/astUtils.js +158 -0
- package/lib/frontend/cppFrontend/ast/{const.d.ts → ts/const.d.ts} +0 -13
- package/lib/frontend/cppFrontend/ast/ts/const.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/ts/const.js +58 -0
- package/lib/frontend/cppFrontend/ast/ts/napi/napiApi.d.ts +8 -0
- package/lib/frontend/cppFrontend/ast/ts/napi/napiApi.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/ts/napi/napiApi.js +90 -0
- package/lib/frontend/cppFrontend/ast/ts/napi/napiRunner.d.ts +8 -0
- package/lib/frontend/cppFrontend/ast/ts/napi/napiRunner.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/ts/napi/napiRunner.js +180 -0
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts +1 -1
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.js +55 -55
- package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts +1 -1
- package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/ArkValueTransformer.js +151 -151
- package/lib/frontend/cppFrontend/common/IRInference.js +2 -2
- package/lib/frontend/cppFrontend/common/IRUtils.d.ts +1 -1
- package/lib/frontend/cppFrontend/common/IRUtils.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/IRUtils.js +2 -2
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.js +74 -74
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.js +3 -3
- package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.js +16 -17
- package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.js +2 -2
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.js +2 -2
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/builderUtils.js +3 -3
- package/lib/index.d.ts +5 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +14 -6
- package/lib/pass/Dispatcher.d.ts.map +1 -1
- package/lib/pass/Dispatcher.js +0 -4
- package/lib/save/source/SourceStmt.d.ts.map +1 -1
- package/lib/save/source/SourceStmt.js +3 -1
- package/lib/utils/FileUtils.d.ts +1 -0
- package/lib/utils/FileUtils.d.ts.map +1 -1
- package/lib/utils/FileUtils.js +11 -3
- package/package.json +9 -4
- package/lib/frontend/cppFrontend/ast/ArkCxxAstNode.d.ts.map +0 -1
- package/lib/frontend/cppFrontend/ast/astUtils.d.ts +0 -51
- package/lib/frontend/cppFrontend/ast/astUtils.d.ts.map +0 -1
- package/lib/frontend/cppFrontend/ast/astUtils.js +0 -470
- package/lib/frontend/cppFrontend/ast/const.d.ts.map +0 -1
- package/lib/frontend/cppFrontend/ast/const.js +0 -134
- /package/lib/frontend/cppFrontend/ast/{ArkCxxAstNode.d.ts → ts/ArkCxxAstNode.d.ts} +0 -0
- /package/lib/frontend/cppFrontend/ast/{ArkCxxAstNode.js → ts/ArkCxxAstNode.js} +0 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2026 Huawei Device Co., Ltd.
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
19
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
20
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
21
|
+
}
|
|
22
|
+
Object.defineProperty(o, k2, desc);
|
|
23
|
+
}) : (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
o[k2] = m[k];
|
|
26
|
+
}));
|
|
27
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
28
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
29
|
+
}) : function(o, v) {
|
|
30
|
+
o["default"] = v;
|
|
31
|
+
});
|
|
32
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.dumpAstJson = void 0;
|
|
41
|
+
const path = __importStar(require("node:path"));
|
|
42
|
+
const logger_1 = __importStar(require("../../../../../utils/logger"));
|
|
43
|
+
const astUtils_1 = require("../astUtils");
|
|
44
|
+
const napiRunner_1 = require("./napiRunner");
|
|
45
|
+
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'astJsonDumper');
|
|
46
|
+
function buildRunEnv(llvmPath) {
|
|
47
|
+
var _a;
|
|
48
|
+
const out = Object.assign({}, process.env);
|
|
49
|
+
if (!llvmPath) {
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
const sep = path.delimiter;
|
|
53
|
+
const cur = (_a = out.PATH) !== null && _a !== void 0 ? _a : '';
|
|
54
|
+
if (!cur.split(sep).includes(llvmPath)) {
|
|
55
|
+
out.PATH = cur.length === 0 ? llvmPath : cur + sep + llvmPath;
|
|
56
|
+
}
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
function buildAstJsonArgv(request) {
|
|
60
|
+
const argv = [request.sourceFile, '-o', request.outputFile];
|
|
61
|
+
if (request.ccJsonPath) {
|
|
62
|
+
argv.push('-p', request.ccJsonPath);
|
|
63
|
+
}
|
|
64
|
+
if (request.includeDirs && request.includeDirs.length > 0) {
|
|
65
|
+
request.includeDirs.forEach((dir) => {
|
|
66
|
+
argv.push(`--extra-arg-before=-I${dir}`);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return argv;
|
|
70
|
+
}
|
|
71
|
+
function dumpAstJson(request, cwd, llvmPath) {
|
|
72
|
+
const argv = buildAstJsonArgv(request);
|
|
73
|
+
logger.info('================================================================');
|
|
74
|
+
logger.info(`[Debug] CWD: ${cwd}`);
|
|
75
|
+
logger.info(`[Debug] astJsonDumper args: ${JSON.stringify(argv)}`);
|
|
76
|
+
logger.info('================================================================');
|
|
77
|
+
if (!(0, astUtils_1.isAstJsonDumperAvailable)()) {
|
|
78
|
+
logger.error('[Debug] astJsonDumper backend is unavailable.');
|
|
79
|
+
return -1;
|
|
80
|
+
}
|
|
81
|
+
const env = buildRunEnv(llvmPath);
|
|
82
|
+
const code = (0, napiRunner_1.runAstJsonArgv)(argv, { cwd, env });
|
|
83
|
+
if (code !== 0) {
|
|
84
|
+
logger.error(`[Debug] astJsonDumper exited with code ${code}`);
|
|
85
|
+
return code;
|
|
86
|
+
}
|
|
87
|
+
logger.info('[Debug] astJsonDumper finished successfully.');
|
|
88
|
+
return 0;
|
|
89
|
+
}
|
|
90
|
+
exports.dumpAstJson = dumpAstJson;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"napiRunner.d.ts","sourceRoot":"","sources":["../../../../../../src/frontend/cppFrontend/ast/ts/napi/napiRunner.ts"],"names":[],"mappings":";AAyBA,UAAU,iBAAiB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;CAC1B;AA4JD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAEjF"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2026 Huawei Device Co., Ltd.
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
19
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
20
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
21
|
+
}
|
|
22
|
+
Object.defineProperty(o, k2, desc);
|
|
23
|
+
}) : (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
o[k2] = m[k];
|
|
26
|
+
}));
|
|
27
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
28
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
29
|
+
}) : function(o, v) {
|
|
30
|
+
o["default"] = v;
|
|
31
|
+
});
|
|
32
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.runAstJsonArgv = void 0;
|
|
41
|
+
const node_child_process_1 = require("node:child_process");
|
|
42
|
+
const fs = __importStar(require("node:fs"));
|
|
43
|
+
const path = __importStar(require("node:path"));
|
|
44
|
+
const logger_1 = __importStar(require("../../../../../utils/logger"));
|
|
45
|
+
const astUtils_1 = require("../astUtils");
|
|
46
|
+
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'astJsonDumper');
|
|
47
|
+
let selectedRunArgv = null;
|
|
48
|
+
function startNewAstJsonWorker(addonAbsolutePath, onExit) {
|
|
49
|
+
var _a, _b;
|
|
50
|
+
const workerPath = path.join(__dirname, 'napiWorker.cjs');
|
|
51
|
+
const proc = (0, node_child_process_1.fork)(workerPath, [addonAbsolutePath], {
|
|
52
|
+
serialization: 'advanced',
|
|
53
|
+
stdio: ['ignore', 'pipe', 'pipe', 'ipc'],
|
|
54
|
+
});
|
|
55
|
+
(_a = proc.stdout) === null || _a === void 0 ? void 0 : _a.on('data', (chunk) => {
|
|
56
|
+
const text = chunk.toString();
|
|
57
|
+
if (text.trim().length > 0) {
|
|
58
|
+
logger.info(`[Debug] astJsonDumper worker stdout:\n${text}`);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
(_b = proc.stderr) === null || _b === void 0 ? void 0 : _b.on('data', (chunk) => {
|
|
62
|
+
const text = chunk.toString();
|
|
63
|
+
if (text.trim().length > 0) {
|
|
64
|
+
logger.error(`[Debug] astJsonDumper worker stderr:\n${text}`);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
proc.on('exit', (code, signal) => {
|
|
68
|
+
onExit(proc, code, signal);
|
|
69
|
+
});
|
|
70
|
+
return proc;
|
|
71
|
+
}
|
|
72
|
+
function awaitWorkerArgvReply(proc, workerStillCurrent, disposeOnSendFail, context, argv) {
|
|
73
|
+
const state = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT * 2));
|
|
74
|
+
try {
|
|
75
|
+
proc.send({
|
|
76
|
+
type: 'run',
|
|
77
|
+
argv,
|
|
78
|
+
cwd: context.cwd,
|
|
79
|
+
envPath: context.env.PATH,
|
|
80
|
+
state: state.buffer,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
logger.error('[Debug] Failed to send astJsonDumper request to worker:', error);
|
|
85
|
+
disposeOnSendFail(proc);
|
|
86
|
+
return -1;
|
|
87
|
+
}
|
|
88
|
+
while (Atomics.load(state, 0) === 0) {
|
|
89
|
+
Atomics.wait(state, 0, 0, 1000);
|
|
90
|
+
if (!workerStillCurrent() || proc.exitCode !== null || proc.killed) {
|
|
91
|
+
logger.error('[Debug] astJsonDumper worker exited before replying.');
|
|
92
|
+
return -1;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return Atomics.load(state, 1);
|
|
96
|
+
}
|
|
97
|
+
function createPersistentWorkerRunner(addonAbsolutePath) {
|
|
98
|
+
let worker = null;
|
|
99
|
+
const disposeWorker = (proc) => {
|
|
100
|
+
if (worker === proc) {
|
|
101
|
+
worker = null;
|
|
102
|
+
}
|
|
103
|
+
if (proc.exitCode === null && !proc.killed) {
|
|
104
|
+
proc.kill();
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
const ensureWorker = () => {
|
|
108
|
+
if (worker && worker.exitCode === null && !worker.killed) {
|
|
109
|
+
return worker;
|
|
110
|
+
}
|
|
111
|
+
const proc = startNewAstJsonWorker(addonAbsolutePath, (exitedProc, code, signal) => {
|
|
112
|
+
if (worker === exitedProc) {
|
|
113
|
+
worker = null;
|
|
114
|
+
}
|
|
115
|
+
logger.warn(`[Debug] astJsonDumper worker exited (code=${code}, signal=${signal}).`);
|
|
116
|
+
});
|
|
117
|
+
worker = proc;
|
|
118
|
+
return proc;
|
|
119
|
+
};
|
|
120
|
+
return (context, ...argv) => {
|
|
121
|
+
const proc = ensureWorker();
|
|
122
|
+
return awaitWorkerArgvReply(proc, () => worker === proc, disposeWorker, context, argv);
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function logSpawnSyncFailure(result) {
|
|
126
|
+
if (result.stdout) {
|
|
127
|
+
logger.error(`[Debug] child stdout:\n${result.stdout}`);
|
|
128
|
+
}
|
|
129
|
+
if (result.stderr) {
|
|
130
|
+
logger.error(`[Debug] child stderr:\n${result.stderr}`);
|
|
131
|
+
}
|
|
132
|
+
logger.error(`[Debug] astJsonDumper child exited with code ${result.status}`);
|
|
133
|
+
return -1;
|
|
134
|
+
}
|
|
135
|
+
function runArgvInSubprocess(context, ...argv) {
|
|
136
|
+
const addonPath = (0, astUtils_1.getAstJsonDumperNodePath)();
|
|
137
|
+
const childScript = 'const addon = require(process.argv[1]); ' +
|
|
138
|
+
'const rc = addon.runArgv(process.argv.slice(2)); ' +
|
|
139
|
+
"process.exitCode = typeof rc === 'number' ? rc : 1;";
|
|
140
|
+
const quoted = ['-e', childScript, addonPath, ...argv]
|
|
141
|
+
.map((arg) => (arg.includes(' ') ? `"${arg}"` : arg))
|
|
142
|
+
.join(' ');
|
|
143
|
+
logger.info('================================================================');
|
|
144
|
+
logger.info(`[Debug] CWD: ${context.cwd}`);
|
|
145
|
+
logger.info(`[Debug] astJsonDumper.node: ${addonPath}`);
|
|
146
|
+
logger.info(`[Debug] CMD: "${process.execPath}" ${quoted}`);
|
|
147
|
+
logger.info('================================================================');
|
|
148
|
+
if (!fs.existsSync(addonPath)) {
|
|
149
|
+
logger.error(`[Debug] Missing addon: ${addonPath}`);
|
|
150
|
+
return -1;
|
|
151
|
+
}
|
|
152
|
+
const result = (0, node_child_process_1.spawnSync)(process.execPath, ['-e', childScript, addonPath, ...argv], {
|
|
153
|
+
stdio: ['inherit', 'pipe', 'pipe'],
|
|
154
|
+
encoding: 'utf-8',
|
|
155
|
+
env: context.env,
|
|
156
|
+
cwd: context.cwd,
|
|
157
|
+
});
|
|
158
|
+
if (result.status !== 0) {
|
|
159
|
+
return logSpawnSyncFailure(result);
|
|
160
|
+
}
|
|
161
|
+
return 0;
|
|
162
|
+
}
|
|
163
|
+
function shouldIsolateRuns() {
|
|
164
|
+
if (!('ARKANALYZER_AST_JSON_SUBPROCESS' in process.env)) {
|
|
165
|
+
return true;
|
|
166
|
+
}
|
|
167
|
+
return process.env.VITEST === 'true';
|
|
168
|
+
}
|
|
169
|
+
function getRunArgv() {
|
|
170
|
+
if (!selectedRunArgv) {
|
|
171
|
+
selectedRunArgv = shouldIsolateRuns()
|
|
172
|
+
? runArgvInSubprocess
|
|
173
|
+
: createPersistentWorkerRunner((0, astUtils_1.getAstJsonDumperNodePath)());
|
|
174
|
+
}
|
|
175
|
+
return selectedRunArgv;
|
|
176
|
+
}
|
|
177
|
+
function runAstJsonArgv(argv, context) {
|
|
178
|
+
return getRunArgv()(context, ...argv);
|
|
179
|
+
}
|
|
180
|
+
exports.runAstJsonArgv = runAstJsonArgv;
|
|
@@ -7,7 +7,7 @@ import { AliasType } from '../../../core/base/Type';
|
|
|
7
7
|
import { ArkMethod } from '../../../core/model/ArkMethod';
|
|
8
8
|
import { FullPosition } from '../../../core/base/Position';
|
|
9
9
|
import { ArkIRTransformer } from '../../../core/common/ArkIRTransformer';
|
|
10
|
-
import { CxxAstNode, CxxTranslationUnit } from '../ast
|
|
10
|
+
import { CxxAstNode, CxxTranslationUnit } from '../ast';
|
|
11
11
|
export type ValueAndStmts = {
|
|
12
12
|
value: Value;
|
|
13
13
|
valueOriginalPositions: FullPosition[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArkIRTransformer.d.ts","sourceRoot":"","sources":["../../../../src/frontend/cppFrontend/common/ArkIRTransformer.ts"],"names":[],"mappings":"AAeA,OAAO,EAYH,aAAa,EAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAMH,SAAS,EACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEjD,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EACH,sBAAsB,EAOtB,IAAI,EACP,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACH,SAAS,EASZ,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAmB,MAAM,6BAA6B,CAAC;AAW5E,OAAO,EAAE,gBAAgB,EAAa,MAAM,uCAAuC,CAAC;AAMpF,OAAO,EAAW,UAAU,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"ArkIRTransformer.d.ts","sourceRoot":"","sources":["../../../../src/frontend/cppFrontend/common/ArkIRTransformer.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,7 +57,7 @@ const builderUtils_1 = require("../model/builder/builderUtils");
|
|
|
57
57
|
const ModelUtils_1 = require("../../../core/common/ModelUtils");
|
|
58
58
|
const ArkClass_1 = require("../../../core/model/ArkClass");
|
|
59
59
|
const ArkClassBuilder_1 = require("../model/builder/ArkClassBuilder");
|
|
60
|
-
const
|
|
60
|
+
const ast_1 = require("../ast");
|
|
61
61
|
const ValueUtil_2 = require("../../../core/common/ValueUtil");
|
|
62
62
|
const Type_2 = require("../base/Type");
|
|
63
63
|
const builderUtils_2 = require("../../../core/model/builder/builderUtils");
|
|
@@ -104,94 +104,94 @@ class ArkCxxIRTransformer extends ArkIRTransformer_1.ArkIRTransformer {
|
|
|
104
104
|
}
|
|
105
105
|
// Determine whether to generate temporary variable assignment statement based on operator
|
|
106
106
|
shouldGenerateCxxExtraAssignStmt(expression) {
|
|
107
|
-
if (expression.kind ===
|
|
107
|
+
if (expression.kind === ast_1.astKind.ParentExpr) {
|
|
108
108
|
return this.shouldGenerateCxxExtraAssignStmt(expression.inner[0]);
|
|
109
109
|
}
|
|
110
|
-
return !((expression.kind ===
|
|
110
|
+
return !((expression.kind === ast_1.astKind.BinaryOperator && expression.opcode === '=') ||
|
|
111
111
|
ArkValueTransformer_1.ArkCxxValueTransformer.isCxxCompoundAssignmentOperator(expression.opcode) ||
|
|
112
|
-
expression.kind ===
|
|
113
|
-
expression.kind ===
|
|
114
|
-
(expression.kind ===
|
|
115
|
-
expression.kind ===
|
|
116
|
-
expression.kind ===
|
|
117
|
-
expression.kind ===
|
|
112
|
+
expression.kind === ast_1.astKind.CXXNewExpr ||
|
|
113
|
+
expression.kind === ast_1.astKind.CallExpr ||
|
|
114
|
+
(expression.kind === ast_1.astKind.UnaryOperator && (expression.opcode === '++' || expression.opcode === '--')) ||
|
|
115
|
+
expression.kind === ast_1.astKind.CXXOperatorCallExpr ||
|
|
116
|
+
expression.kind === ast_1.astKind.CXXConstructExpr ||
|
|
117
|
+
expression.kind === ast_1.astKind.CXXCtorInitializer);
|
|
118
118
|
}
|
|
119
119
|
/** The main function for converting C++ AST nodes to Stmts */
|
|
120
120
|
cxxNodeToStmts(node) {
|
|
121
121
|
let stmts = [];
|
|
122
122
|
switch (node.kind) {
|
|
123
|
-
case
|
|
123
|
+
case ast_1.astKind.ParmVarDecl:
|
|
124
124
|
stmts = this.cxxParameterToStmts(node);
|
|
125
125
|
break;
|
|
126
|
-
case
|
|
127
|
-
case
|
|
128
|
-
case
|
|
126
|
+
case ast_1.astKind.BreakStmt:
|
|
127
|
+
case ast_1.astKind.ContinueStmt:
|
|
128
|
+
case ast_1.astKind.GotoStmt:
|
|
129
129
|
stmts = [];
|
|
130
130
|
break;
|
|
131
|
-
case
|
|
132
|
-
case
|
|
133
|
-
case
|
|
134
|
-
case
|
|
135
|
-
case
|
|
136
|
-
case
|
|
137
|
-
case
|
|
138
|
-
case
|
|
139
|
-
case
|
|
140
|
-
case
|
|
141
|
-
case
|
|
131
|
+
case ast_1.astKind.CXXRewrittenBinaryOperator:
|
|
132
|
+
case ast_1.astKind.BinaryOperator:
|
|
133
|
+
case ast_1.astKind.CallExpr:
|
|
134
|
+
case ast_1.astKind.CompoundAssignOperator:
|
|
135
|
+
case ast_1.astKind.CXXConstructExpr:
|
|
136
|
+
case ast_1.astKind.CXXOperatorCallExpr:
|
|
137
|
+
case ast_1.astKind.UnaryOperator:
|
|
138
|
+
case ast_1.astKind.RecoveryExpr:
|
|
139
|
+
case ast_1.astKind.CXXDeleteExpr:
|
|
140
|
+
case ast_1.astKind.AtomicCallExpr:
|
|
141
|
+
case ast_1.astKind.CXXCtorInitializer:
|
|
142
142
|
stmts = this.cxxExpressionStatementToStmts(node);
|
|
143
143
|
break;
|
|
144
|
-
case
|
|
144
|
+
case ast_1.astKind.DeclStmt:
|
|
145
145
|
stmts = this.cxxDeclStatementToStmts(node);
|
|
146
146
|
break;
|
|
147
|
-
case
|
|
147
|
+
case ast_1.astKind.VarDecl:
|
|
148
148
|
stmts = this.cxxVariableDeclarationListToStmts(node);
|
|
149
149
|
break;
|
|
150
|
-
case
|
|
150
|
+
case ast_1.astKind.CompoundStmt:
|
|
151
151
|
stmts = this.compoundToStmts(node);
|
|
152
152
|
break;
|
|
153
|
-
case
|
|
153
|
+
case ast_1.astKind.CXXMemberCallExpr:
|
|
154
154
|
stmts = this.memberCallExprToStmts(node);
|
|
155
155
|
break;
|
|
156
|
-
case
|
|
156
|
+
case ast_1.astKind.CXXCatchStmt:
|
|
157
157
|
stmts = this.cxxCatchClauseToStmts(node);
|
|
158
158
|
break;
|
|
159
|
-
case
|
|
159
|
+
case ast_1.astKind.CXXThrowExpr:
|
|
160
160
|
stmts = this.cxxThrowStatementToStmts(node);
|
|
161
161
|
break;
|
|
162
|
-
case
|
|
162
|
+
case ast_1.astKind.DoStmt:
|
|
163
163
|
stmts = this.cxxDoStatementToStmts(node);
|
|
164
164
|
break;
|
|
165
|
-
case
|
|
165
|
+
case ast_1.astKind.ExprWithCleanups:
|
|
166
166
|
stmts = this.expressionWithCleanup(node);
|
|
167
167
|
break;
|
|
168
|
-
case
|
|
168
|
+
case ast_1.astKind.ForStmt:
|
|
169
169
|
stmts = this.cxxForStatementToStmts(node);
|
|
170
170
|
break;
|
|
171
|
-
case
|
|
171
|
+
case ast_1.astKind.IfStmt:
|
|
172
172
|
stmts = this.cxxIfStatementToStmts(node);
|
|
173
173
|
break;
|
|
174
|
-
case
|
|
174
|
+
case ast_1.astKind.ReturnStmt:
|
|
175
175
|
stmts = this.cxxReturnStatementToStmts(node);
|
|
176
176
|
break;
|
|
177
|
-
case
|
|
177
|
+
case ast_1.astKind.WhileStmt:
|
|
178
178
|
stmts = this.cxxWhileStatementToStmts(node);
|
|
179
179
|
break;
|
|
180
|
-
case
|
|
180
|
+
case ast_1.astKind.CXXForRangeStmt:
|
|
181
181
|
stmts = this.forRangeStatementToStmts(node);
|
|
182
182
|
break;
|
|
183
|
-
case
|
|
184
|
-
case
|
|
183
|
+
case ast_1.astKind.TypedefDecl:
|
|
184
|
+
case ast_1.astKind.TypeAliasDecl:
|
|
185
185
|
stmts = this.typeDefDeclToStmts(node);
|
|
186
186
|
break;
|
|
187
|
-
case
|
|
187
|
+
case ast_1.astKind.TypeAliasTemplateDecl:
|
|
188
188
|
stmts = this.typeDefDeclToStmts(node);
|
|
189
189
|
break;
|
|
190
|
-
case
|
|
191
|
-
case
|
|
190
|
+
case ast_1.astKind.EnumDecl:
|
|
191
|
+
case ast_1.astKind.CXXRecordDecl:
|
|
192
192
|
stmts = this.cxxClassDeclarationToStmts(node);
|
|
193
193
|
break;
|
|
194
|
-
case
|
|
194
|
+
case ast_1.astKind.DecompositionDecl:
|
|
195
195
|
stmts = this.decompositionDeclToStmts(node);
|
|
196
196
|
break;
|
|
197
197
|
default:
|
|
@@ -241,7 +241,7 @@ class ArkCxxIRTransformer extends ArkIRTransformer_1.ArkIRTransformer {
|
|
|
241
241
|
preprocessTypeAlias(node) {
|
|
242
242
|
var _a, _b;
|
|
243
243
|
let targetDecl = node;
|
|
244
|
-
if (node.kind ===
|
|
244
|
+
if (node.kind === ast_1.astKind.TypeAliasTemplateDecl) {
|
|
245
245
|
targetDecl = node.inner[node.inner.length - 1];
|
|
246
246
|
}
|
|
247
247
|
const typeNode = Array.isArray(targetDecl.inner) ? targetDecl.inner[0] : undefined;
|
|
@@ -267,7 +267,7 @@ class ArkCxxIRTransformer extends ArkIRTransformer_1.ArkIRTransformer {
|
|
|
267
267
|
configureTemplateAndTypename(node, aliasType, rightOp, initialRightType) {
|
|
268
268
|
var _a;
|
|
269
269
|
// Handle Template Alias
|
|
270
|
-
if (node.kind ===
|
|
270
|
+
if (node.kind === ast_1.astKind.TypeAliasTemplateDecl) {
|
|
271
271
|
const genericTypes = (0, builderUtils_1.buildTypeParameters)(node, this.cxxSourceFile, this.declaringMethod);
|
|
272
272
|
aliasType.setGenericTypes(genericTypes);
|
|
273
273
|
aliasType.setOriginalType((0, builderUtils_2.buildGenericType)(initialRightType, aliasType));
|
|
@@ -284,9 +284,9 @@ class ArkCxxIRTransformer extends ArkIRTransformer_1.ArkIRTransformer {
|
|
|
284
284
|
* Extracts real generic types from TemplateTypeParmDecl nodes and sets them on the expression.
|
|
285
285
|
*/
|
|
286
286
|
populateRealGenericTypes(node, expr) {
|
|
287
|
-
if (node.kind ===
|
|
287
|
+
if (node.kind === ast_1.astKind.TypeAliasTemplateDecl) {
|
|
288
288
|
const realGenericTypes = [];
|
|
289
|
-
node.inner.filter(inn => inn.kind ===
|
|
289
|
+
node.inner.filter(inn => inn.kind === ast_1.astKind.TemplateTypeParmDecl)
|
|
290
290
|
.forEach(typeArgument => {
|
|
291
291
|
realGenericTypes.push((0, builderUtils_1.cxxNode2Type)(typeArgument, this.declaringMethod));
|
|
292
292
|
});
|
|
@@ -373,8 +373,8 @@ class ArkCxxIRTransformer extends ArkIRTransformer_1.ArkIRTransformer {
|
|
|
373
373
|
const castExpr = new Expr_1.ArkCastExpr(yieldValue, Type_1.UnknownType.getInstance());
|
|
374
374
|
const castExprPositions = [yieldValuePositions[0], ...yieldValuePositions];
|
|
375
375
|
let declStmts = forOfStatement.inner[0];
|
|
376
|
-
declStmts = declStmts.kind ===
|
|
377
|
-
if (declStmts.kind ===
|
|
376
|
+
declStmts = declStmts.kind === ast_1.astKind.DeclStmt ? declStmts.inner[0] : declStmts;
|
|
377
|
+
if (declStmts.kind === ast_1.astKind.VarDecl) {
|
|
378
378
|
const { value: initValue, valueOriginalPositions: initOriPos, stmts: initStmts, } = this.ArkCxxValueTransformer.cxxVariableDeclarationToValueAndStmts(declStmts, false);
|
|
379
379
|
const assignStmt = new Stmt_1.ArkAssignStmt(initValue, castExpr);
|
|
380
380
|
assignStmt.setOperandOriginalPositions([...initOriPos, ...castExprPositions]);
|
|
@@ -382,7 +382,7 @@ class ArkCxxIRTransformer extends ArkIRTransformer_1.ArkIRTransformer {
|
|
|
382
382
|
stmts.push(...initStmts);
|
|
383
383
|
// Processing structured binding under cyclic conditions
|
|
384
384
|
}
|
|
385
|
-
else if (declStmts.kind ===
|
|
385
|
+
else if (declStmts.kind === ast_1.astKind.DecompositionDecl) {
|
|
386
386
|
const { stmts: initStmts, } = this.ArkCxxValueTransformer.bindingNodeToValueAndStmts(declStmts, yieldValue);
|
|
387
387
|
stmts.push(...initStmts);
|
|
388
388
|
}
|
|
@@ -570,7 +570,7 @@ class ArkCxxIRTransformer extends ArkIRTransformer_1.ArkIRTransformer {
|
|
|
570
570
|
});
|
|
571
571
|
// switchNode.inner[length - 1] is the cases
|
|
572
572
|
for (const clause of switchStatement.inner[switchStatement.inner.length - 1].inner) {
|
|
573
|
-
if (clause.kind.toString() ===
|
|
573
|
+
if (clause.kind.toString() === ast_1.astKind.CaseStmt) {
|
|
574
574
|
const clauseStmts = [];
|
|
575
575
|
let { value: clauseValue, valueOriginalPositions: clausePositions, stmts: clauseTempStmts, } = this.cxxNodeToValueAndStmts(clause.inner[0]);
|
|
576
576
|
clauseStmts.push(...clauseTempStmts);
|
|
@@ -751,24 +751,24 @@ class ArkCxxIRTransformer extends ArkIRTransformer_1.ArkIRTransformer {
|
|
|
751
751
|
}
|
|
752
752
|
cxxIfStatementToStmts(ifStatement, depth = 0, context) {
|
|
753
753
|
const stmts = [];
|
|
754
|
-
if (ifStatement.kind ===
|
|
754
|
+
if (ifStatement.kind === ast_1.astKind.IfStmt) {
|
|
755
755
|
return this.cxxIfStatementToStmts(ifStatement.inner[0], depth);
|
|
756
756
|
}
|
|
757
|
-
else if (ifStatement.kind ===
|
|
757
|
+
else if (ifStatement.kind === ast_1.astKind.BinaryOperator && ifStatement.opcode === '||') {
|
|
758
758
|
// || The child of a node must have two child nodes
|
|
759
759
|
stmts.push(...this.cxxIfStatementToStmts(ifStatement.inner[0], depth + 1));
|
|
760
760
|
stmts.push(new ArkIRTransformer_1.DummyStmt(ArkCxxIRTransformer.DUMMY_IF_OPERATOR_OR_SIGNAL + depth));
|
|
761
761
|
stmts.push(...this.cxxIfStatementToStmts(ifStatement.inner[1], depth + 1));
|
|
762
762
|
stmts.push(new ArkIRTransformer_1.DummyStmt(ArkCxxIRTransformer.DUMMY_IF_OPERATOR_END + depth));
|
|
763
763
|
}
|
|
764
|
-
else if (ifStatement.kind ===
|
|
764
|
+
else if (ifStatement.kind === ast_1.astKind.BinaryOperator && ifStatement.opcode === '&&') {
|
|
765
765
|
// && The child of a node must have two child nodes
|
|
766
766
|
stmts.push(...this.cxxIfStatementToStmts(ifStatement.inner[0], depth + 1));
|
|
767
767
|
stmts.push(new ArkIRTransformer_1.DummyStmt(ArkCxxIRTransformer.DUMMY_IF_OPERATOR_AND_SIGNAL + depth));
|
|
768
768
|
stmts.push(...this.cxxIfStatementToStmts(ifStatement.inner[1], depth + 1));
|
|
769
769
|
stmts.push(new ArkIRTransformer_1.DummyStmt(ArkCxxIRTransformer.DUMMY_IF_OPERATOR_END + depth));
|
|
770
770
|
}
|
|
771
|
-
else if (ifStatement.kind ===
|
|
771
|
+
else if (ifStatement.kind === ast_1.astKind.ParenExpr) {
|
|
772
772
|
return this.cxxIfStatementToStmts(ifStatement.inner[0], depth);
|
|
773
773
|
}
|
|
774
774
|
else {
|
|
@@ -2,7 +2,7 @@ import { Value } from '../../../core/base/Value';
|
|
|
2
2
|
import { ArkMethod } from '../../../core/model/ArkMethod';
|
|
3
3
|
import { ArkCxxIRTransformer, ValueAndStmts } from './ArkIRTransformer';
|
|
4
4
|
import { ArkValueTransformer } from '../../../core/common/ArkValueTransformer';
|
|
5
|
-
import { CxxAstNode, CxxTranslationUnit } from '../ast
|
|
5
|
+
import { CxxAstNode, CxxTranslationUnit } from '../ast';
|
|
6
6
|
export declare class ArkCxxValueTransformer extends ArkValueTransformer {
|
|
7
7
|
private ArkCxxIRTransformer;
|
|
8
8
|
private readonly cxxSourceFile;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArkValueTransformer.d.ts","sourceRoot":"","sources":["../../../../src/frontend/cppFrontend/common/ArkValueTransformer.ts"],"names":[],"mappings":"AA6DA,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAWjD,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAI1D,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAUxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAK/E,OAAO,EAAW,UAAU,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"ArkValueTransformer.d.ts","sourceRoot":"","sources":["../../../../src/frontend/cppFrontend/common/ArkValueTransformer.ts"],"names":[],"mappings":"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"}
|