arkanalyzer 1.0.90 → 1.0.92
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 +0 -1
- package/lib/Config.d.ts +3 -0
- package/lib/Config.d.ts.map +1 -1
- package/lib/Scene.d.ts +114 -0
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +268 -13
- package/lib/callgraph/common/Statistics.js +2 -2
- package/lib/callgraph/model/CallGraph.d.ts +2 -2
- package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
- package/lib/callgraph/model/CallGraph.js +6 -6
- package/lib/callgraph/model/CallSite.d.ts +1 -1
- package/lib/callgraph/model/CallSite.d.ts.map +1 -1
- package/lib/callgraph/model/CallSite.js +2 -2
- package/lib/core/base/Ref.d.ts.map +1 -1
- package/lib/core/base/Ref.js +6 -1
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkIRTransformer.js +5 -0
- package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkValueTransformer.js +2 -1
- package/lib/core/common/Const.d.ts +3 -0
- package/lib/core/common/Const.d.ts.map +1 -1
- package/lib/core/common/Const.js +5 -1
- package/lib/core/common/DummyMainCreater.d.ts +25 -12
- package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
- package/lib/core/common/DummyMainCreater.js +90 -76
- package/lib/core/common/EtsConst.d.ts +2 -0
- package/lib/core/common/EtsConst.d.ts.map +1 -1
- package/lib/core/common/EtsConst.js +133 -125
- package/lib/core/common/SdkUtils.d.ts +1 -0
- package/lib/core/common/SdkUtils.d.ts.map +1 -1
- package/lib/core/common/SdkUtils.js +29 -0
- package/lib/core/graph/BaseExplicitGraph.d.ts +2 -0
- package/lib/core/graph/BaseExplicitGraph.d.ts.map +1 -1
- package/lib/core/graph/BaseExplicitGraph.js +12 -1
- package/lib/core/graph/BaseImplicitGraph.d.ts +16 -0
- package/lib/core/graph/BaseImplicitGraph.d.ts.map +1 -1
- package/lib/core/graph/BaseImplicitGraph.js +21 -0
- package/lib/core/graph/FileDepGraph.d.ts +75 -0
- package/lib/core/graph/FileDepGraph.d.ts.map +1 -0
- package/lib/core/graph/FileDepGraph.js +170 -0
- package/lib/core/graph/GraphTraits.d.ts +2 -0
- package/lib/core/graph/GraphTraits.d.ts.map +1 -1
- package/lib/core/graph/GraphTraits.js +1 -1
- package/lib/core/graph/ModuleDepGraph.d.ts +175 -0
- package/lib/core/graph/ModuleDepGraph.d.ts.map +1 -0
- package/lib/core/graph/ModuleDepGraph.js +421 -0
- package/lib/core/graph/Scc.d.ts +1 -3
- package/lib/core/graph/Scc.d.ts.map +1 -1
- package/lib/core/graph/Scc.js +6 -19
- package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/CfgBuilder.js +7 -1
- package/lib/core/graph/builder/TrapBuilder.d.ts +1 -0
- package/lib/core/graph/builder/TrapBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/TrapBuilder.js +27 -7
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts +13 -3
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/ViewTreeBuilder.js +271 -86
- package/lib/core/model/ArkBody.d.ts +1 -0
- package/lib/core/model/ArkBody.d.ts.map +1 -1
- package/lib/core/model/ArkBody.js +7 -0
- package/lib/core/model/ArkClass.d.ts +1 -0
- package/lib/core/model/ArkClass.d.ts.map +1 -1
- package/lib/core/model/ArkClass.js +37 -0
- package/lib/core/model/ArkExport.d.ts +1 -0
- package/lib/core/model/ArkExport.d.ts.map +1 -1
- package/lib/core/model/ArkExport.js +6 -0
- package/lib/core/model/ArkField.d.ts +1 -0
- package/lib/core/model/ArkField.d.ts.map +1 -1
- package/lib/core/model/ArkField.js +5 -0
- package/lib/core/model/ArkFile.d.ts +5 -0
- package/lib/core/model/ArkFile.d.ts.map +1 -1
- package/lib/core/model/ArkFile.js +30 -0
- package/lib/core/model/ArkImport.d.ts +1 -0
- package/lib/core/model/ArkImport.d.ts.map +1 -1
- package/lib/core/model/ArkImport.js +5 -0
- package/lib/core/model/ArkMethod.d.ts +8 -0
- package/lib/core/model/ArkMethod.d.ts.map +1 -1
- package/lib/core/model/ArkMethod.js +22 -0
- package/lib/core/model/ArkModule.d.ts +133 -0
- package/lib/core/model/ArkModule.d.ts.map +1 -0
- package/lib/core/model/ArkModule.js +247 -0
- package/lib/core/model/ArkNamespace.d.ts +1 -0
- package/lib/core/model/ArkNamespace.d.ts.map +1 -1
- package/lib/core/model/ArkNamespace.js +18 -0
- package/lib/core/model/builder/ArkClassBuilder.js +6 -0
- package/lib/core/model/builder/ArkFileBuilder.d.ts +19 -0
- package/lib/core/model/builder/ArkFileBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkFileBuilder.js +155 -51
- package/lib/frontend/FrontendBuilder.d.ts +114 -0
- package/lib/frontend/FrontendBuilder.d.ts.map +1 -1
- package/lib/frontend/FrontendBuilder.js +248 -0
- package/lib/frontend/arktsFrontend/ArktsFrontend.d.ts +11 -0
- package/lib/frontend/arktsFrontend/ArktsFrontend.d.ts.map +1 -1
- package/lib/frontend/arktsFrontend/ArktsFrontend.js +15 -0
- package/lib/frontend/common/MemoryMonitor.d.ts +62 -0
- package/lib/frontend/common/MemoryMonitor.d.ts.map +1 -0
- package/lib/frontend/common/MemoryMonitor.js +108 -0
- package/lib/frontend/common/ModuleAnalysisConfig.d.ts +99 -0
- package/lib/frontend/common/ModuleAnalysisConfig.d.ts.map +1 -0
- package/lib/frontend/common/ModuleAnalysisConfig.js +153 -0
- package/lib/frontend/common/ModuleBuilder.d.ts +508 -0
- package/lib/frontend/common/ModuleBuilder.d.ts.map +1 -0
- package/lib/frontend/common/ModuleBuilder.js +1587 -0
- package/lib/frontend/common/ModuleCache.d.ts +120 -0
- package/lib/frontend/common/ModuleCache.d.ts.map +1 -0
- package/lib/frontend/common/ModuleCache.js +198 -0
- package/lib/frontend/common/ModuleDepth.d.ts +33 -0
- package/lib/frontend/common/ModuleDepth.d.ts.map +1 -0
- package/lib/frontend/common/ModuleDepth.js +55 -0
- package/lib/frontend/cppFrontend/CppFrontend.d.ts +5 -0
- package/lib/frontend/cppFrontend/CppFrontend.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/CppFrontend.js +11 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts +8 -0
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.js +105 -2
- package/lib/index.d.ts +9 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +22 -3
- package/lib/utils/Canonicalizer.d.ts +105 -0
- package/lib/utils/Canonicalizer.d.ts.map +1 -0
- package/lib/utils/Canonicalizer.js +520 -0
- package/lib/utils/ModuleUtils.js +4 -2
- package/lib/utils/entryMethodUtils.d.ts +23 -0
- package/lib/utils/entryMethodUtils.d.ts.map +1 -1
- package/lib/utils/entryMethodUtils.js +53 -1
- package/package.json +1 -1
package/lib/Scene.js
CHANGED
|
@@ -49,6 +49,8 @@ const VisibleValue_1 = require("./core/common/VisibleValue");
|
|
|
49
49
|
const ArkFile_1 = require("./core/model/ArkFile");
|
|
50
50
|
const ArkNamespace_1 = require("./core/model/ArkNamespace");
|
|
51
51
|
const ArkSignature_1 = require("./core/model/ArkSignature");
|
|
52
|
+
const ModuleAnalysisConfig_1 = require("./frontend/common/ModuleAnalysisConfig");
|
|
53
|
+
const ModuleBuilder_1 = require("./frontend/common/ModuleBuilder");
|
|
52
54
|
const logger_1 = __importStar(require("./utils/logger"));
|
|
53
55
|
const json5parser_1 = require("./utils/json5parser");
|
|
54
56
|
const getAllFiles_1 = require("./utils/getAllFiles");
|
|
@@ -72,6 +74,8 @@ const Inference_1 = require("./core/inference/Inference");
|
|
|
72
74
|
const IRInference_2 = require("./core/common/IRInference");
|
|
73
75
|
const ModuleUtils_1 = require("./utils/ModuleUtils");
|
|
74
76
|
const DependenciesSort_1 = require("./utils/DependenciesSort");
|
|
77
|
+
const Canonicalizer_1 = require("./utils/Canonicalizer");
|
|
78
|
+
const ModuleDepGraph_1 = require("./core/graph/ModuleDepGraph");
|
|
75
79
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'Scene');
|
|
76
80
|
var SceneBuildStage;
|
|
77
81
|
(function (SceneBuildStage) {
|
|
@@ -106,6 +110,8 @@ class Scene {
|
|
|
106
110
|
this.namespacesMap = new Map();
|
|
107
111
|
this.classesMap = new Map();
|
|
108
112
|
this.methodsMap = new Map();
|
|
113
|
+
/** Custom @Component name → ClassSignature; written at ArkClass build, kept after module unload for ViewTree stubs. */
|
|
114
|
+
this.customComponentMap = new Map();
|
|
109
115
|
// TODO: type of key should be signature object
|
|
110
116
|
this.sdkArkFilesMap = new Map();
|
|
111
117
|
this.sdkGlobalMap = new Map();
|
|
@@ -116,6 +122,10 @@ class Scene {
|
|
|
116
122
|
this.overRideDependencyMap = new Map();
|
|
117
123
|
this.buildStage = SceneBuildStage.BUILD_INIT;
|
|
118
124
|
this.fileLanguages = new Map();
|
|
125
|
+
/** Maps ArkModule objects to dense integer ModuleIDs via the objectIdentity strategy. */
|
|
126
|
+
this.moduleCanonicalizer = new Canonicalizer_1.Canonicalizer();
|
|
127
|
+
/** Whether module preparation has completed (prepareModules + analyzeModuleDependencies, idempotent). */
|
|
128
|
+
this.modulesRegistered = false;
|
|
119
129
|
this.unhandledFilePaths = new Set();
|
|
120
130
|
this.unhandledSdkFilePaths = [];
|
|
121
131
|
}
|
|
@@ -129,6 +139,8 @@ class Scene {
|
|
|
129
139
|
ValueUtil_1.ValueUtil.dispose();
|
|
130
140
|
ModelUtils_1.ModelUtils.dispose();
|
|
131
141
|
(0, builderUtils_1.clearCxxTypeStringCache)();
|
|
142
|
+
this.moduleCache = undefined;
|
|
143
|
+
this.memoryMonitor = undefined;
|
|
132
144
|
}
|
|
133
145
|
getOptions() {
|
|
134
146
|
return this.options;
|
|
@@ -143,6 +155,7 @@ class Scene {
|
|
|
143
155
|
return this.overRideDependencyMap;
|
|
144
156
|
}
|
|
145
157
|
clear() {
|
|
158
|
+
var _a;
|
|
146
159
|
this.projectFiles = [];
|
|
147
160
|
this.moduleScenesMap.clear();
|
|
148
161
|
this.modulePath2NameMap.clear();
|
|
@@ -152,14 +165,25 @@ class Scene {
|
|
|
152
165
|
this.namespacesMap.clear();
|
|
153
166
|
this.classesMap.clear();
|
|
154
167
|
this.methodsMap.clear();
|
|
168
|
+
this.customComponentMap.clear();
|
|
155
169
|
this.sdkArkFilesMap.clear();
|
|
156
170
|
this.sdkGlobalMap.clear();
|
|
157
171
|
this.ohPkgContentMap.clear();
|
|
158
172
|
this.ohPkgContent = {};
|
|
173
|
+
(_a = this.moduleCache) === null || _a === void 0 ? void 0 : _a.clear();
|
|
159
174
|
}
|
|
160
175
|
getStage() {
|
|
161
176
|
return this.buildStage;
|
|
162
177
|
}
|
|
178
|
+
/**
|
|
179
|
+
* Set the current {@link SceneBuildStage}. Used by module-level builders (e.g.
|
|
180
|
+
* {@link FrontendBuilder.buildModuleMethodBody}) to temporarily open the
|
|
181
|
+
* {@link buildClassDone} gate so that nested/anonymous method bodies are built
|
|
182
|
+
* immediately during body construction, then restore the previous stage.
|
|
183
|
+
*/
|
|
184
|
+
setBuildStage(stage) {
|
|
185
|
+
this.buildStage = stage;
|
|
186
|
+
}
|
|
163
187
|
/**
|
|
164
188
|
* Build scene object according to the {@link SceneConfig}. This API implements 3 functions.
|
|
165
189
|
* First is to build scene object from {@link SceneConfig}, second is to generate {@link ArkFile}s,
|
|
@@ -194,6 +218,7 @@ class Scene {
|
|
|
194
218
|
*/
|
|
195
219
|
buildBasicInfo(sceneConfig) {
|
|
196
220
|
var _a;
|
|
221
|
+
this.sceneConfig = sceneConfig;
|
|
197
222
|
this.options = sceneConfig.getOptions();
|
|
198
223
|
this.projectName = sceneConfig.getTargetProjectName();
|
|
199
224
|
this.realProjectDir = fs_1.default.realpathSync(sceneConfig.getTargetProjectDirectory());
|
|
@@ -305,8 +330,9 @@ class Scene {
|
|
|
305
330
|
}
|
|
306
331
|
findTsConfigInfoDeeply(tsConfigObj, tsConfigFilePath) {
|
|
307
332
|
if (tsConfigObj.extends) {
|
|
308
|
-
const
|
|
309
|
-
|
|
333
|
+
const extTsConfigFilePath = path_1.default.join(path_1.default.dirname(tsConfigFilePath), tsConfigObj.extends);
|
|
334
|
+
const extTsConfigObj = (0, json5parser_1.fetchDependenciesFromFile)(extTsConfigFilePath);
|
|
335
|
+
this.findTsConfigInfoDeeply(extTsConfigObj, extTsConfigFilePath);
|
|
310
336
|
if (!this.baseUrl && !this.globalModule2PathMapping) {
|
|
311
337
|
this.addTsConfigInfo(extTsConfigObj);
|
|
312
338
|
}
|
|
@@ -566,8 +592,7 @@ class Scene {
|
|
|
566
592
|
}
|
|
567
593
|
}
|
|
568
594
|
findDependenciesByRule(originPath) {
|
|
569
|
-
if (!this.findFilesByPathArray(originPath) &&
|
|
570
|
-
!this.findFilesByExtNameArray(originPath, this.options.supportFileExts)) {
|
|
595
|
+
if (!this.findFilesByPathArray(originPath) && !this.findFilesByExtNameArray(originPath, this.options.supportFileExts)) {
|
|
571
596
|
logger.trace(originPath + 'module mapperInfo is not found!');
|
|
572
597
|
}
|
|
573
598
|
}
|
|
@@ -666,7 +691,7 @@ class Scene {
|
|
|
666
691
|
*/
|
|
667
692
|
buildSdk(sdkName, sdkPath) {
|
|
668
693
|
const allFiles = this.collectSdkFiles(sdkName, sdkPath);
|
|
669
|
-
allFiles.forEach(
|
|
694
|
+
allFiles.forEach(file => {
|
|
670
695
|
if (FileUtils_1.FileUtils.getFileLanguage(file, this.fileLanguages) === ArkFile_1.Language.CXX) {
|
|
671
696
|
return;
|
|
672
697
|
}
|
|
@@ -682,6 +707,7 @@ class Scene {
|
|
|
682
707
|
}
|
|
683
708
|
return builtInFiles;
|
|
684
709
|
}
|
|
710
|
+
SdkUtils_1.SdkUtils.loadSystemComponentsFromSdk(sdkPath);
|
|
685
711
|
return (0, getAllFiles_1.getAllFiles)(sdkPath, this.options.supportFileExts, this.options.ignoreFileNames);
|
|
686
712
|
}
|
|
687
713
|
parseAndRegisterSdkFile(file, sdkPath, sdkName) {
|
|
@@ -811,6 +837,154 @@ class Scene {
|
|
|
811
837
|
getRealProjectDir() {
|
|
812
838
|
return this.realProjectDir;
|
|
813
839
|
}
|
|
840
|
+
/**
|
|
841
|
+
* Returns the {@link SceneConfig} used to build this scene, or undefined before
|
|
842
|
+
* {@link buildBasicInfo} has been called.
|
|
843
|
+
*/
|
|
844
|
+
getSceneConfig() {
|
|
845
|
+
return this.sceneConfig;
|
|
846
|
+
}
|
|
847
|
+
/**
|
|
848
|
+
* Save the {@link SceneConfig} into the scene for later module-level analysis.
|
|
849
|
+
* Unlike {@link buildBasicInfo}, this method only stores the config (and derives
|
|
850
|
+
* the real project directory) without building ArkFiles or performing type inference.
|
|
851
|
+
* This is the lightweight entry point for {@link analyseByModule}.
|
|
852
|
+
*/
|
|
853
|
+
config(sceneConfig) {
|
|
854
|
+
this.sceneConfig = sceneConfig;
|
|
855
|
+
this.options = sceneConfig.getOptions();
|
|
856
|
+
this.projectName = sceneConfig.getTargetProjectName();
|
|
857
|
+
const dir = sceneConfig.getTargetProjectDirectory();
|
|
858
|
+
if (dir) {
|
|
859
|
+
this.realProjectDir = fs_1.default.realpathSync(dir);
|
|
860
|
+
}
|
|
861
|
+
this.fileLanguages = sceneConfig.getFileLanguages();
|
|
862
|
+
}
|
|
863
|
+
/**
|
|
864
|
+
* Returns all registered {@link ArkModule} objects.
|
|
865
|
+
*/
|
|
866
|
+
getModules() {
|
|
867
|
+
const result = [];
|
|
868
|
+
for (let i = 0; i < this.moduleCanonicalizer.size(); i++) {
|
|
869
|
+
const m = this.moduleCanonicalizer.get(i);
|
|
870
|
+
if (m) {
|
|
871
|
+
result.push(m);
|
|
872
|
+
}
|
|
873
|
+
}
|
|
874
|
+
return result;
|
|
875
|
+
}
|
|
876
|
+
// --- Module query methods (Scene is a lightweight result container) ---
|
|
877
|
+
/** The module dependency graph, or undefined before dependency analysis. */
|
|
878
|
+
getModuleDepGraph() {
|
|
879
|
+
return this.moduleDepGraph;
|
|
880
|
+
}
|
|
881
|
+
/** Whether module preparation has completed. */
|
|
882
|
+
isModulesRegistered() {
|
|
883
|
+
return this.modulesRegistered;
|
|
884
|
+
}
|
|
885
|
+
// --- Module cache management (persistent across analyseByModule calls) ---
|
|
886
|
+
getModuleCache() {
|
|
887
|
+
return this.moduleCache;
|
|
888
|
+
}
|
|
889
|
+
setModuleCache(cache) {
|
|
890
|
+
this.moduleCache = cache;
|
|
891
|
+
}
|
|
892
|
+
getMemoryMonitor() {
|
|
893
|
+
return this.memoryMonitor;
|
|
894
|
+
}
|
|
895
|
+
setMemoryMonitor(monitor) {
|
|
896
|
+
this.memoryMonitor = monitor;
|
|
897
|
+
}
|
|
898
|
+
// --- Internal accessors used by ModuleBuilder to read/write persistent state ---
|
|
899
|
+
/** Get a registered module by its ModuleID. Returns undefined when the id is out of bounds. */
|
|
900
|
+
getModule(id) {
|
|
901
|
+
return this.moduleCanonicalizer.get(id);
|
|
902
|
+
}
|
|
903
|
+
/** Get the ModuleID assigned to a registered ArkModule. */
|
|
904
|
+
getModuleId(module) {
|
|
905
|
+
return this.moduleCanonicalizer.getId(module);
|
|
906
|
+
}
|
|
907
|
+
/** Total number of registered modules. */
|
|
908
|
+
getModuleCount() {
|
|
909
|
+
return this.moduleCanonicalizer.size();
|
|
910
|
+
}
|
|
911
|
+
/** Create a {@link ModuleDepGraph} sharing the internal module canonicalizer. */
|
|
912
|
+
createModuleDepGraph() {
|
|
913
|
+
return new ModuleDepGraph_1.ModuleDepGraph(this.moduleCanonicalizer);
|
|
914
|
+
}
|
|
915
|
+
setModuleDepGraph(graph) {
|
|
916
|
+
this.moduleDepGraph = graph;
|
|
917
|
+
}
|
|
918
|
+
setModulesRegistered(value) {
|
|
919
|
+
this.modulesRegistered = value;
|
|
920
|
+
}
|
|
921
|
+
/**
|
|
922
|
+
* Perform module-level analysis by iterating modules in topological order and invoking
|
|
923
|
+
* the callback for each module.
|
|
924
|
+
*
|
|
925
|
+
* Flow: prepareModules → analyzeModuleDependencies → buildSdkModules (SDK files parsed +
|
|
926
|
+
* inferred first) → resolveTargetModuleIds → computeModuleClosureByIds → iterate topoOrder
|
|
927
|
+
* → loadModule → callback.
|
|
928
|
+
* Each step is idempotent; repeated calls do not repeat preprocessing.
|
|
929
|
+
*
|
|
930
|
+
* - SDK modules are registered and built in one fused step by {@link ModuleBuilder.buildSdkModules}
|
|
931
|
+
* before the topoOrder loop, so that global APIs are available when project/oh_modules modules
|
|
932
|
+
* are loaded. SDK modules are not in the module dependency graph and thus never appear in the
|
|
933
|
+
* topoOrder or callback.
|
|
934
|
+
* - Target modules are resolved from the config's type filter, explicit include IDs, and
|
|
935
|
+
* explicit exclude IDs. The transitive closure (targets + dependencies) determines which
|
|
936
|
+
* modules are loaded. The callback is invoked only for target modules, not their dependencies.
|
|
937
|
+
* - By default (no explicit selection), all PROJECT and OH_MODULES modules are targets.
|
|
938
|
+
*
|
|
939
|
+
* @param callback - Invoked for each target module with the module and the scene.
|
|
940
|
+
* @param config - Optional configuration for target module selection and load levels.
|
|
941
|
+
*/
|
|
942
|
+
analyseByModule(callback, config) {
|
|
943
|
+
const builder = new ModuleBuilder_1.ModuleBuilder(this);
|
|
944
|
+
// 1. Prepare modules + analyze dependencies (merged, guarded by modulesRegistered)
|
|
945
|
+
if (!this.isModulesRegistered()) {
|
|
946
|
+
builder.prepareModules();
|
|
947
|
+
builder.analyzeModuleDependencies();
|
|
948
|
+
this.setModulesRegistered(true);
|
|
949
|
+
}
|
|
950
|
+
// 2. Build SDK modules — fused registration + building (idempotent). SDK loaded FIRST so
|
|
951
|
+
// that global APIs are available when project/oh_modules modules are loaded.
|
|
952
|
+
builder.buildSdkModules();
|
|
953
|
+
// 3. Resolve target modules and compute closure (unified flow, no branching)
|
|
954
|
+
const effectiveConfig = config !== null && config !== void 0 ? config : new ModuleAnalysisConfig_1.ModuleAnalysisConfig();
|
|
955
|
+
const targetIds = builder.resolveTargetModuleIds(effectiveConfig);
|
|
956
|
+
const closure = builder.computeModuleClosureByIds(targetIds);
|
|
957
|
+
const topoOrder = builder.getFilteredTopoOrder(closure);
|
|
958
|
+
// 4. Initialize / update cache management (persistent ModuleCache + MemoryMonitor in Scene)
|
|
959
|
+
builder.initCacheManagement(this.getOptions(), topoOrder, effectiveConfig.getDependencyLoadLevel());
|
|
960
|
+
// 5. Pre-call cleanup: unload cached modules not in current topoOrder
|
|
961
|
+
const cache = this.getModuleCache();
|
|
962
|
+
if (cache) {
|
|
963
|
+
const currentTopoSet = new Set(topoOrder);
|
|
964
|
+
for (const moduleId of cache.getLoadedModules()) {
|
|
965
|
+
if (!currentTopoSet.has(moduleId)) {
|
|
966
|
+
builder.unload(moduleId);
|
|
967
|
+
cache.unregister(moduleId);
|
|
968
|
+
}
|
|
969
|
+
}
|
|
970
|
+
}
|
|
971
|
+
// 6. Iterate topoOrder: loadModule internally handles cache eviction and registration
|
|
972
|
+
const targetLevel = effectiveConfig.getLoadLevel();
|
|
973
|
+
const depLevel = effectiveConfig.getDependencyLoadLevel();
|
|
974
|
+
for (const moduleId of topoOrder) {
|
|
975
|
+
const isTarget = targetIds.test(moduleId);
|
|
976
|
+
builder.loadModule(moduleId, isTarget ? targetLevel : depLevel);
|
|
977
|
+
if (!isTarget) {
|
|
978
|
+
continue;
|
|
979
|
+
}
|
|
980
|
+
const module = builder.getModule(moduleId);
|
|
981
|
+
if (!module) {
|
|
982
|
+
continue;
|
|
983
|
+
}
|
|
984
|
+
callback(module, this);
|
|
985
|
+
}
|
|
986
|
+
// 7. No unload, no dispose — modules persist in cache for cross-call reuse
|
|
987
|
+
}
|
|
814
988
|
/**
|
|
815
989
|
* Returns the **string** name of the project.
|
|
816
990
|
* @returns The name of the project.
|
|
@@ -872,6 +1046,13 @@ class Scene {
|
|
|
872
1046
|
setFile(file) {
|
|
873
1047
|
this.filesMap.set(file.getFileSignature().toMapKey(), file);
|
|
874
1048
|
}
|
|
1049
|
+
/**
|
|
1050
|
+
* Add an SDK ArkFile to the scene's `sdkArkFilesMap`, keyed by its file signature.
|
|
1051
|
+
* Used by {@link ModuleBuilder.parseAndRegisterSdkFile} during SDK file registration.
|
|
1052
|
+
*/
|
|
1053
|
+
addSdkArkFile(arkFile) {
|
|
1054
|
+
this.sdkArkFilesMap.set(arkFile.getFileSignature().toMapKey(), arkFile);
|
|
1055
|
+
}
|
|
875
1056
|
hasSdkFile(fileSignature) {
|
|
876
1057
|
return this.sdkArkFilesMap.has(fileSignature.toMapKey());
|
|
877
1058
|
}
|
|
@@ -985,6 +1166,41 @@ class Scene {
|
|
|
985
1166
|
}
|
|
986
1167
|
return arkClass || null;
|
|
987
1168
|
}
|
|
1169
|
+
/**
|
|
1170
|
+
* Register a custom {@code @Component} into {@link customComponentMap}.
|
|
1171
|
+
* Called from ArkClass builders (full Scene build and module load share the same path).
|
|
1172
|
+
* Entries intentionally survive module unload so ViewTree can still resolve signatures.
|
|
1173
|
+
*/
|
|
1174
|
+
registerCustomComponent(cls) {
|
|
1175
|
+
if (!cls.hasComponentDecorator()) {
|
|
1176
|
+
return;
|
|
1177
|
+
}
|
|
1178
|
+
const name = cls.getName();
|
|
1179
|
+
if (!name || name.startsWith('%')) {
|
|
1180
|
+
return;
|
|
1181
|
+
}
|
|
1182
|
+
this.customComponentMap.set(name, cls.getSignature());
|
|
1183
|
+
}
|
|
1184
|
+
/**
|
|
1185
|
+
* Remove a custom component entry. Not called on module unload — the map must outlive IR.
|
|
1186
|
+
* Used when an ArkClass is explicitly removed from a live Scene, or via {@link clear}.
|
|
1187
|
+
*/
|
|
1188
|
+
unregisterCustomComponent(cls) {
|
|
1189
|
+
const name = cls.getName();
|
|
1190
|
+
if (!name || !cls.hasComponentDecorator()) {
|
|
1191
|
+
return;
|
|
1192
|
+
}
|
|
1193
|
+
const existing = this.customComponentMap.get(name);
|
|
1194
|
+
if (existing && existing.toMapKey() === cls.getSignature().toMapKey()) {
|
|
1195
|
+
this.customComponentMap.delete(name);
|
|
1196
|
+
}
|
|
1197
|
+
}
|
|
1198
|
+
getCustomComponent(name) {
|
|
1199
|
+
return name ? this.customComponentMap.get(name) : undefined;
|
|
1200
|
+
}
|
|
1201
|
+
getCustomComponentMap() {
|
|
1202
|
+
return this.customComponentMap;
|
|
1203
|
+
}
|
|
988
1204
|
getClassesMap(refresh) {
|
|
989
1205
|
if (refresh || this.buildStage === SceneBuildStage.METHOD_DONE) {
|
|
990
1206
|
this.classesMap.clear();
|
|
@@ -1072,6 +1288,7 @@ class Scene {
|
|
|
1072
1288
|
return this.methodsMap.delete(method.getSignature().toMapKey());
|
|
1073
1289
|
}
|
|
1074
1290
|
removeClass(arkClass) {
|
|
1291
|
+
this.unregisterCustomComponent(arkClass);
|
|
1075
1292
|
return this.classesMap.delete(arkClass.getSignature().toMapKey());
|
|
1076
1293
|
}
|
|
1077
1294
|
removeNamespace(namespace) {
|
|
@@ -1080,6 +1297,48 @@ class Scene {
|
|
|
1080
1297
|
removeFile(file) {
|
|
1081
1298
|
return this.filesMap.delete(file.getFileSignature().toMapKey());
|
|
1082
1299
|
}
|
|
1300
|
+
/**
|
|
1301
|
+
* Dispose a module's data from all global indices.
|
|
1302
|
+
*
|
|
1303
|
+
* Removes the module's ArkFiles, ArkClasses, ArkMethods, and ArkNamespaces from the Scene's
|
|
1304
|
+
* global maps (filesMap, sdkArkFilesMap, classesMap, methodsMap, namespacesMap) and clears
|
|
1305
|
+
* the oh-package.json5 content cache. After this call, the module's heavy data is no longer
|
|
1306
|
+
* reachable via Scene's global indices and can be garbage-collected.
|
|
1307
|
+
*
|
|
1308
|
+
* The global sdkGlobalMap is NOT cleaned (its keys are flat global names that cannot be
|
|
1309
|
+
* reverse-mapped to a module). SDK modules should not be disposed.
|
|
1310
|
+
*
|
|
1311
|
+
* @param module - The module whose data should be removed from global indices.
|
|
1312
|
+
*/
|
|
1313
|
+
disposeModule(module) {
|
|
1314
|
+
for (const arkFile of module.getFilesMap().values()) {
|
|
1315
|
+
const key = arkFile.getFileSignature().toMapKey();
|
|
1316
|
+
this.filesMap.delete(key);
|
|
1317
|
+
this.sdkArkFilesMap.delete(key);
|
|
1318
|
+
for (const ns of ModelUtils_1.ModelUtils.getAllNamespacesInFile(arkFile)) {
|
|
1319
|
+
this.namespacesMap.delete(ns.getNamespaceSignature().toMapKey());
|
|
1320
|
+
}
|
|
1321
|
+
for (const cls of ModelUtils_1.ModelUtils.getAllClassesInFile(arkFile)) {
|
|
1322
|
+
this.classesMap.delete(cls.getSignature().toMapKey());
|
|
1323
|
+
for (const mtd of cls.getMethods()) {
|
|
1324
|
+
this.methodsMap.delete(mtd.getSignature().toMapKey());
|
|
1325
|
+
// Release heavy per-method IR (ArkBody/CFG/Stmt/Locals + ViewTree) so it can
|
|
1326
|
+
// be GC'd on eviction, even if the ArkMethod/ArkFile skeleton is still referenced
|
|
1327
|
+
// by residual back-edges. Bodies/viewTrees are rebuilt on reload.
|
|
1328
|
+
mtd.clearBodyAndSupplementary();
|
|
1329
|
+
}
|
|
1330
|
+
// Sever back-references: remove this class from its base classes' extendedClasses,
|
|
1331
|
+
// otherwise base classes (e.g. SDK) keep evicted project classes alive (memory leak).
|
|
1332
|
+
for (const base of cls.getAllHeritageClasses()) {
|
|
1333
|
+
base.getExtendedClasses().delete(cls.getName());
|
|
1334
|
+
}
|
|
1335
|
+
}
|
|
1336
|
+
// Release the TS AST (SourceFile) and cached source text; getCode() re-reads from disk.
|
|
1337
|
+
arkFile.setAST(null);
|
|
1338
|
+
arkFile.clearSourceCode();
|
|
1339
|
+
}
|
|
1340
|
+
this.ohPkgContentMap.delete(module.getOhPkgPath());
|
|
1341
|
+
}
|
|
1083
1342
|
hasMainMethod() {
|
|
1084
1343
|
return false;
|
|
1085
1344
|
}
|
|
@@ -1276,8 +1535,7 @@ class Scene {
|
|
|
1276
1535
|
const importNameSpaceClasses = classMap.get(importNameSpace.getNamespaceSignature());
|
|
1277
1536
|
importClasses.push(...importNameSpaceClasses.filter(c => !importClasses.includes(c) && c.getName() !== Const_1.DEFAULT_ARK_CLASS_NAME));
|
|
1278
1537
|
}
|
|
1279
|
-
catch (_a) {
|
|
1280
|
-
}
|
|
1538
|
+
catch (_a) { }
|
|
1281
1539
|
}
|
|
1282
1540
|
}
|
|
1283
1541
|
const fileClasses = classMap.get(file.getFileSignature());
|
|
@@ -1329,8 +1587,7 @@ class Scene {
|
|
|
1329
1587
|
while (namespaceStack.length > 0) {
|
|
1330
1588
|
const ns = namespaceStack.shift();
|
|
1331
1589
|
const nsGlobalLocals = [];
|
|
1332
|
-
(_a = ns
|
|
1333
|
-
.getDefaultClass()
|
|
1590
|
+
(_a = ns.getDefaultClass()
|
|
1334
1591
|
.getDefaultArkMethod()
|
|
1335
1592
|
.getBody()) === null || _a === void 0 ? void 0 : _a.getLocals().forEach(local => {
|
|
1336
1593
|
if (local.getDeclaringStmt() && local.getName() !== 'this' && local.getName()[0] !== '$') {
|
|
@@ -1398,8 +1655,7 @@ class Scene {
|
|
|
1398
1655
|
const importNameSpaceClasses = globalVariableMap.get(importNameSpace.getNamespaceSignature());
|
|
1399
1656
|
importLocals.push(...importNameSpaceClasses.filter(c => !importLocals.includes(c) && c.getName() !== Const_1.DEFAULT_ARK_CLASS_NAME));
|
|
1400
1657
|
}
|
|
1401
|
-
catch (_a) {
|
|
1402
|
-
}
|
|
1658
|
+
catch (_a) { }
|
|
1403
1659
|
}
|
|
1404
1660
|
}
|
|
1405
1661
|
const fileLocals = globalVariableMap.get(file.getFileSignature());
|
|
@@ -1441,8 +1697,7 @@ class Scene {
|
|
|
1441
1697
|
const parentMap = new Map();
|
|
1442
1698
|
const finalNamespaces = [];
|
|
1443
1699
|
const globalLocals = [];
|
|
1444
|
-
(_b = (_a = file
|
|
1445
|
-
.getDefaultClass()) === null || _a === void 0 ? void 0 : _a.getDefaultArkMethod().getBody()) === null || _b === void 0 ? void 0 : _b.getLocals().forEach(local => {
|
|
1700
|
+
(_b = (_a = file.getDefaultClass()) === null || _a === void 0 ? void 0 : _a.getDefaultArkMethod().getBody()) === null || _b === void 0 ? void 0 : _b.getLocals().forEach(local => {
|
|
1446
1701
|
if (local.getDeclaringStmt() && local.getName() !== 'this' && local.getName()[0] !== '$') {
|
|
1447
1702
|
globalLocals.push(local);
|
|
1448
1703
|
}
|
|
@@ -218,7 +218,7 @@ exports.PAGStat = PAGStat;
|
|
|
218
218
|
class CGStat extends StatTraits {
|
|
219
219
|
constructor() {
|
|
220
220
|
super(...arguments);
|
|
221
|
-
//real,
|
|
221
|
+
//real, virtual, intrinsic, constructor
|
|
222
222
|
this.numTotalNode = 0;
|
|
223
223
|
this.numReal = 0;
|
|
224
224
|
this.numVirtual = 0;
|
|
@@ -249,7 +249,7 @@ class CGStat extends StatTraits {
|
|
|
249
249
|
case CallGraph_1.CallGraphNodeKind.real:
|
|
250
250
|
this.numReal++;
|
|
251
251
|
break;
|
|
252
|
-
case CallGraph_1.CallGraphNodeKind.
|
|
252
|
+
case CallGraph_1.CallGraphNodeKind.virtual:
|
|
253
253
|
this.numVirtual++;
|
|
254
254
|
break;
|
|
255
255
|
case CallGraph_1.CallGraphNodeKind.constructor:
|
|
@@ -9,7 +9,7 @@ export type FuncID = number;
|
|
|
9
9
|
export { CallSite, DynCallSite, ICallSite };
|
|
10
10
|
export declare enum CallGraphNodeKind {
|
|
11
11
|
real = 0,
|
|
12
|
-
|
|
12
|
+
virtual = 1,
|
|
13
13
|
intrinsic = 2,
|
|
14
14
|
constructor = 3,
|
|
15
15
|
blank = 4
|
|
@@ -56,7 +56,7 @@ export declare class CallGraph extends BaseExplicitGraph {
|
|
|
56
56
|
getCallGraphNodeByMethod(method: Method): CallGraphNode;
|
|
57
57
|
addDirectOrSpecialCallEdge(caller: Method, callee: Method, callStmt: Stmt, isDirectCall?: boolean): void;
|
|
58
58
|
removeCallGraphEdge(nodeID: NodeID): void;
|
|
59
|
-
addDynamicCallInfo(callStmt: Stmt, caller: Method,
|
|
59
|
+
addDynamicCallInfo(callStmt: Stmt, caller: Method, potentialCallee?: Method): void;
|
|
60
60
|
addDynamicCallEdge(callerID: NodeID, calleeID: NodeID, callStmt: Stmt): void;
|
|
61
61
|
getDynCallSiteByStmt(stmt: Stmt): DynCallSite | undefined;
|
|
62
62
|
addStmtToCallSiteMap(stmt: Stmt, cs: CallSite): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CallGraph.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallGraph.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAGvD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAGnG,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG3F,MAAM,MAAM,MAAM,GAAG,eAAe,CAAC;AACrC,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAE5B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AAE5C,oBAAY,iBAAiB;IACzB,IAAI,IAAA;IACJ,
|
|
1
|
+
{"version":3,"file":"CallGraph.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallGraph.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,7 +28,7 @@ const CGJsonPrinter_1 = require("../../save/CGJsonPrinter");
|
|
|
28
28
|
var CallGraphNodeKind;
|
|
29
29
|
(function (CallGraphNodeKind) {
|
|
30
30
|
CallGraphNodeKind[CallGraphNodeKind["real"] = 0] = "real";
|
|
31
|
-
CallGraphNodeKind[CallGraphNodeKind["
|
|
31
|
+
CallGraphNodeKind[CallGraphNodeKind["virtual"] = 1] = "virtual";
|
|
32
32
|
CallGraphNodeKind[CallGraphNodeKind["intrinsic"] = 2] = "intrinsic";
|
|
33
33
|
CallGraphNodeKind[CallGraphNodeKind["constructor"] = 3] = "constructor";
|
|
34
34
|
CallGraphNodeKind[CallGraphNodeKind["blank"] = 4] = "blank";
|
|
@@ -156,7 +156,7 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
|
|
|
156
156
|
// means the method has no implementation, or base type is unclear to find it
|
|
157
157
|
// Create a virtual CG Node
|
|
158
158
|
// TODO: this virtual CG Node need be remove once the base type is clear
|
|
159
|
-
return this.addCallGraphNode(method, CallGraphNodeKind.
|
|
159
|
+
return this.addCallGraphNode(method, CallGraphNodeKind.virtual);
|
|
160
160
|
}
|
|
161
161
|
return this.getNode(n);
|
|
162
162
|
}
|
|
@@ -192,15 +192,15 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
|
|
|
192
192
|
node.removeIncomingEdge(inEdge);
|
|
193
193
|
}
|
|
194
194
|
for (const outEdge of (_b = node.getOutgoingEdges()) !== null && _b !== void 0 ? _b : []) {
|
|
195
|
-
node.
|
|
195
|
+
node.removeOutgoingEdge(outEdge);
|
|
196
196
|
}
|
|
197
197
|
}
|
|
198
|
-
addDynamicCallInfo(callStmt, caller,
|
|
198
|
+
addDynamicCallInfo(callStmt, caller, potentialCallee) {
|
|
199
199
|
var _a;
|
|
200
200
|
let callerNode = this.getCallGraphNodeByMethod(caller);
|
|
201
201
|
let calleeNode;
|
|
202
|
-
if (
|
|
203
|
-
calleeNode = this.getCallGraphNodeByMethod(
|
|
202
|
+
if (potentialCallee) {
|
|
203
|
+
calleeNode = this.getCallGraphNodeByMethod(potentialCallee);
|
|
204
204
|
}
|
|
205
205
|
let args = (_a = callStmt.getInvokeExpr()) === null || _a === void 0 ? void 0 : _a.getArgs();
|
|
206
206
|
let cs = this.csManager.newDynCallSite(callStmt, args, calleeNode === null || calleeNode === void 0 ? void 0 : calleeNode.getID(), callerNode.getID());
|
|
@@ -22,7 +22,7 @@ export declare class DynCallSite implements ICallSite {
|
|
|
22
22
|
id: CallSiteID;
|
|
23
23
|
callStmt: Stmt;
|
|
24
24
|
args: Value[] | undefined;
|
|
25
|
-
|
|
25
|
+
potentialCalleeFuncID: FuncID | undefined;
|
|
26
26
|
callerFuncID: FuncID;
|
|
27
27
|
constructor(id: CallSiteID, s: Stmt, a: Value[] | undefined, ptcCallee: FuncID | undefined, caller: FuncID);
|
|
28
28
|
getCalleeFuncID(): FuncID | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CallSite.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallSite.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC,MAAM,WAAW,SAAS;IACtB,EAAE,EAAE,UAAU,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,IAAI,MAAM,GAAG,SAAS,CAAC;CACzC;AAED,qBAAa,QAAS,YAAW,SAAS;IAC/B,EAAE,EAAE,UAAU,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;gBAEhB,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAQ5E,eAAe,IAAI,MAAM,GAAG,SAAS;CAG/C;AAED,qBAAa,WAAY,YAAW,SAAS;IAClC,EAAE,EAAE,UAAU,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC1B,
|
|
1
|
+
{"version":3,"file":"CallSite.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallSite.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC,MAAM,WAAW,SAAS;IACtB,EAAE,EAAE,UAAU,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,IAAI,MAAM,GAAG,SAAS,CAAC;CACzC;AAED,qBAAa,QAAS,YAAW,SAAS;IAC/B,EAAE,EAAE,UAAU,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;gBAEhB,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAQ5E,eAAe,IAAI,MAAM,GAAG,SAAS;CAG/C;AAED,qBAAa,WAAY,YAAW,SAAS;IAClC,EAAE,EAAE,UAAU,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC1B,qBAAqB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,YAAY,EAAE,MAAM,CAAC;gBAEhB,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM;IAQnG,eAAe,IAAI,MAAM,GAAG,SAAS;CAG/C;AAED,qBAAa,eAAe;IACxB,OAAO,CAAC,eAAe,CAAyC;IAChE,OAAO,CAAC,eAAe,CAAyC;IAChE,OAAO,CAAC,cAAc,CAA4C;IAE3D,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ;IAQ9E,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW;IAQ3G,oBAAoB,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,GAAG,QAAQ;IAkB9E,eAAe,CAAC,EAAE,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS;CAGhE"}
|
|
@@ -34,10 +34,10 @@ class DynCallSite {
|
|
|
34
34
|
this.callerFuncID = caller;
|
|
35
35
|
this.callStmt = s;
|
|
36
36
|
this.args = a;
|
|
37
|
-
this.
|
|
37
|
+
this.potentialCalleeFuncID = ptcCallee;
|
|
38
38
|
}
|
|
39
39
|
getCalleeFuncID() {
|
|
40
|
-
return this.
|
|
40
|
+
return this.potentialCalleeFuncID;
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
exports.DynCallSite = DynCallSite;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Ref.d.ts","sourceRoot":"","sources":["../../../src/core/base/Ref.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAa,SAAS,
|
|
1
|
+
{"version":3,"file":"Ref.d.ts","sourceRoot":"","sources":["../../../src/core/base/Ref.ts"],"names":[],"mappings":"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"}
|
package/lib/core/base/Ref.js
CHANGED
|
@@ -103,7 +103,12 @@ class ArkArrayRef extends AbstractRef {
|
|
|
103
103
|
this.index = newIndex;
|
|
104
104
|
}
|
|
105
105
|
getType() {
|
|
106
|
-
|
|
106
|
+
const rawType = this.base.getType();
|
|
107
|
+
// StringType is primitive, never generic — skip replaceTypeWithReal to avoid wasted Set allocation
|
|
108
|
+
if (rawType instanceof Type_1.StringType) {
|
|
109
|
+
return Type_1.StringType.getInstance();
|
|
110
|
+
}
|
|
111
|
+
const baseType = TypeInference_1.TypeInference.replaceTypeWithReal(rawType);
|
|
107
112
|
if (baseType instanceof Type_1.ArrayType) {
|
|
108
113
|
return baseType.getBaseType();
|
|
109
114
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArkIRTransformer.d.ts","sourceRoot":"","sources":["../../../src/core/common/ArkIRTransformer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ArkIRTransformer.d.ts","sourceRoot":"","sources":["../../../src/core/common/ArkIRTransformer.ts"],"names":[],"mappings":"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"}
|
|
@@ -819,6 +819,7 @@ class ArkIRTransformer {
|
|
|
819
819
|
};
|
|
820
820
|
}
|
|
821
821
|
generateIfStmtForValues(leftValue, leftOpOriginalPositions, rightValue, rightOpOriginalPositions) {
|
|
822
|
+
var _a;
|
|
822
823
|
const stmts = [];
|
|
823
824
|
if (IRUtils_1.IRUtils.moreThanOneAddress(leftValue)) {
|
|
824
825
|
const { value: tempLeftValue, valueOriginalPositions: tempLeftPositions, stmts: leftStmts, } = this.generateAssignStmtForValue(leftValue, leftOpOriginalPositions);
|
|
@@ -836,6 +837,10 @@ class ArkIRTransformer {
|
|
|
836
837
|
const conditionPositions = [...leftOpOriginalPositions, ...rightOpOriginalPositions];
|
|
837
838
|
const ifStmt = new Stmt_1.ArkIfStmt(conditionExpr);
|
|
838
839
|
ifStmt.setOperandOriginalPositions([...conditionPositions]);
|
|
840
|
+
const originPos = (_a = rightOpOriginalPositions.find(p => p !== Position_1.FullPosition.DEFAULT)) !== null && _a !== void 0 ? _a : leftOpOriginalPositions.find(p => p !== Position_1.FullPosition.DEFAULT);
|
|
841
|
+
if (originPos) {
|
|
842
|
+
ifStmt.setOriginFullPosition(originPos);
|
|
843
|
+
}
|
|
839
844
|
stmts.push(ifStmt);
|
|
840
845
|
return stmts;
|
|
841
846
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArkValueTransformer.d.ts","sourceRoot":"","sources":["../../../src/core/common/ArkValueTransformer.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAA2C,IAAI,EAAE,MAAM,cAAc,CAAC;AACrG,OAAO,EAgBH,cAAc,EAGjB,MAAM,cAAc,CAAC;AAItB,OAAO,EACH,SAAS,EAcT,IAAI,EAMP,MAAM,cAAc,CAAC;AAKtB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAYtC,OAAO,EAAyE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE/G,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAK/C,OAAO,EAAE,gBAAgB,EAAa,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOhF,qBAAa,mBAAmB;IACrB,qBAAqB,EAAE,MAAM,CAAK;IACzC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAK;IAClC,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;IACpC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAa;IACjD,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC3C,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC;IAC3B,SAAS,CAAC,eAAe,EAAE,SAAS,CAAC;IACrC,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC7C,SAAS,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC,CAAa;IACrF,SAAS,CAAC,wBAAwB,UAAS;gBAE/B,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,SAAS;IAQ9F,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC;IAIvB,YAAY,IAAI,KAAK;IAIrB,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;IAInE,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,GAAE,IAAgC,GAAG,KAAK;IAMlF,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI;IAIlD,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS;IAOrD,qBAAqB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,aAAa;IAsE1D,OAAO,CAAC,kCAAkC;IAW1C,OAAO,CAAC,6BAA6B;IAQrC,OAAO,CAAC,8BAA8B;IAQtC,OAAO,CAAC,oCAAoC;IA4C5C,OAAO,CAAC,qCAAqC;IAoC7C,OAAO,CAAC,oCAAoC;IAW5C,OAAO,CAAC,qCAAqC;IAwC7C,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,+BAA+B;IAavC,OAAO,CAAC,6BAA6B;IA4BrC,OAAO,CAAC,2BAA2B;IAwBnC,OAAO,CAAC,sBAAsB;IAiD9B,OAAO,CAAC,8BAA8B;IAqB/B,yBAAyB,CAAC,aAAa,EAAE,MAAM,EAAE,2BAA2B,CAAC,EAAE,YAAY,GAAG,IAAI;IAuBzG,OAAO,CAAC,qCAAqC;IAa7C,OAAO,CAAC,8BAA8B;IAkBtC,OAAO,CAAC,iCAAiC;IAkBzC,OAAO,CAAC,2BAA2B;IA8CnC,OAAO,CAAC,oBAAoB;IAqD5B,OAAO,CAAC,uCAAuC;IA+B/C,OAAO,CAAC,qBAAqB;IAoD7B,OAAO,CAAC,yBAAyB;IAmBjC,OAAO,CAAC,+BAA+B;IA+DvC,OAAO,CAAC,sCAAsC;
|
|
1
|
+
{"version":3,"file":"ArkValueTransformer.d.ts","sourceRoot":"","sources":["../../../src/core/common/ArkValueTransformer.ts"],"names":[],"mappings":"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"}
|