arkanalyzer 1.0.94 → 2.0.0-beta1
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/lib/Config.d.ts +7 -0
- package/lib/Config.d.ts.map +1 -1
- package/lib/Scene.d.ts +134 -170
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +412 -976
- package/lib/callgraph/algorithm/AbstractAnalysis.js +3 -2
- package/lib/callgraph/algorithm/RapidTypeAnalysis.js +1 -1
- package/lib/callgraph/model/CallGraph.js +1 -1
- package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts +1 -3
- package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PTAUtils.js +17 -7
- package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.js +4 -14
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +2 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +1 -2
- package/lib/callgraph/pointerAnalysis/plugins/WorkerPlugin.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/plugins/WorkerPlugin.js +0 -1
- package/lib/cli/commands/cg.d.ts +1 -0
- package/lib/cli/commands/cg.d.ts.map +1 -1
- package/lib/cli/commands/cg.js +22 -18
- package/lib/cli/commands/ir.d.ts +1 -0
- package/lib/cli/commands/ir.d.ts.map +1 -1
- package/lib/cli/commands/ir.js +5 -2
- package/lib/core/base/Constant.d.ts +5 -5
- package/lib/core/base/Constant.d.ts.map +1 -1
- package/lib/core/base/Constant.js +12 -9
- package/lib/core/base/Expr.d.ts +36 -20
- package/lib/core/base/Expr.d.ts.map +1 -1
- package/lib/core/base/Expr.js +206 -94
- package/lib/core/base/Local.d.ts +10 -20
- package/lib/core/base/Local.d.ts.map +1 -1
- package/lib/core/base/Local.js +25 -28
- package/lib/core/base/Position.d.ts +6 -0
- package/lib/core/base/Position.d.ts.map +1 -1
- package/lib/core/base/Position.js +37 -11
- package/lib/core/base/Ref.d.ts +45 -33
- package/lib/core/base/Ref.d.ts.map +1 -1
- package/lib/core/base/Ref.js +225 -51
- package/lib/core/base/Stmt.d.ts +19 -9
- package/lib/core/base/Stmt.d.ts.map +1 -1
- package/lib/core/base/Stmt.js +135 -52
- package/lib/core/base/Type.d.ts +67 -4
- package/lib/core/base/Type.d.ts.map +1 -1
- package/lib/core/base/Type.js +391 -20
- package/lib/core/base/TypeExpr.d.ts +6 -4
- package/lib/core/base/TypeExpr.d.ts.map +1 -1
- package/lib/core/base/TypeExpr.js +34 -10
- package/lib/core/base/Value.d.ts +20 -2
- package/lib/core/base/Value.d.ts.map +1 -1
- package/lib/core/base/Value.js +12 -0
- package/lib/core/common/ArkIRTransformer.d.ts +18 -0
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkIRTransformer.js +94 -75
- package/lib/core/common/ArkValueTransformer.d.ts +21 -3
- package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkValueTransformer.js +455 -265
- package/lib/core/common/Builtin.d.ts +48 -24
- package/lib/core/common/Builtin.d.ts.map +1 -1
- package/lib/core/common/Builtin.js +90 -52
- package/lib/core/common/CanonicalizerValidator.d.ts +308 -0
- package/lib/core/common/CanonicalizerValidator.d.ts.map +1 -0
- package/lib/core/common/CanonicalizerValidator.js +888 -0
- package/lib/core/common/Const.d.ts +3 -3
- package/lib/core/common/Const.d.ts.map +1 -1
- package/lib/core/common/Const.js +3 -3
- package/lib/core/common/DummyMainCreater.d.ts +2 -21
- package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
- package/lib/core/common/DummyMainCreater.js +8 -105
- package/lib/core/common/IRInference.d.ts +55 -3
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +407 -126
- package/lib/core/common/IRUtils.d.ts +1 -0
- package/lib/core/common/IRUtils.d.ts.map +1 -1
- package/lib/core/common/IRUtils.js +44 -13
- package/lib/core/common/ModelUtils.d.ts +44 -20
- package/lib/core/common/ModelUtils.d.ts.map +1 -1
- package/lib/core/common/ModelUtils.js +378 -208
- package/lib/core/common/SdkUtils.d.ts +35 -5
- package/lib/core/common/SdkUtils.d.ts.map +1 -1
- package/lib/core/common/SdkUtils.js +181 -53
- package/lib/core/common/SignatureCanonicalizer.d.ts +95 -0
- package/lib/core/common/SignatureCanonicalizer.d.ts.map +1 -0
- package/lib/core/common/SignatureCanonicalizer.js +116 -0
- package/lib/core/common/SignatureCanonicalizerRegistry.d.ts +176 -0
- package/lib/core/common/SignatureCanonicalizerRegistry.d.ts.map +1 -0
- package/lib/core/common/SignatureCanonicalizerRegistry.js +343 -0
- package/lib/core/common/SignatureModelCanonicalizer.d.ts +69 -0
- package/lib/core/common/SignatureModelCanonicalizer.d.ts.map +1 -0
- package/lib/core/common/SignatureModelCanonicalizer.js +109 -0
- package/lib/core/common/StmtUseReplacer.d.ts +1 -0
- package/lib/core/common/StmtUseReplacer.d.ts.map +1 -1
- package/lib/core/common/StmtUseReplacer.js +9 -0
- package/lib/core/common/StringUtils.d.ts +12 -1
- package/lib/core/common/StringUtils.d.ts.map +1 -1
- package/lib/core/common/StringUtils.js +36 -17
- package/lib/core/common/TempSignatureCanonicalizer.d.ts +82 -0
- package/lib/core/common/TempSignatureCanonicalizer.d.ts.map +1 -0
- package/lib/core/common/TempSignatureCanonicalizer.js +177 -0
- package/lib/core/common/TypeInference.d.ts +24 -6
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +243 -117
- package/lib/core/common/ValueUtil.d.ts +2 -1
- package/lib/core/common/ValueUtil.d.ts.map +1 -1
- package/lib/core/common/ValueUtil.js +4 -1
- package/lib/core/graph/Cfg.d.ts.map +1 -1
- package/lib/core/graph/Cfg.js +21 -6
- package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/CfgBuilder.js +46 -33
- package/lib/core/graph/builder/IfBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/IfBuilder.js +6 -2
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/ViewTreeBuilder.js +6 -2
- package/lib/core/inference/ModelInference.d.ts +24 -4
- package/lib/core/inference/ModelInference.d.ts.map +1 -1
- package/lib/core/inference/ModelInference.js +273 -79
- package/lib/core/inference/ValueInference.d.ts +3 -2
- package/lib/core/inference/ValueInference.d.ts.map +1 -1
- package/lib/core/inference/ValueInference.js +90 -40
- package/lib/core/inference/abc/AbcInference.d.ts.map +1 -1
- package/lib/core/inference/abc/AbcInference.js +28 -15
- package/lib/core/inference/arkts/ArkTsInference.d.ts +9 -3
- package/lib/core/inference/arkts/ArkTsInference.d.ts.map +1 -1
- package/lib/core/inference/arkts/ArkTsInference.js +54 -16
- package/lib/core/model/ArkClass.d.ts +192 -18
- package/lib/core/model/ArkClass.d.ts.map +1 -1
- package/lib/core/model/ArkClass.js +852 -122
- package/lib/core/model/ArkExport.d.ts.map +1 -1
- package/lib/core/model/ArkExport.js +1 -2
- package/lib/core/model/ArkField.d.ts +34 -2
- package/lib/core/model/ArkField.d.ts.map +1 -1
- package/lib/core/model/ArkField.js +89 -14
- package/lib/core/model/ArkFile.d.ts +72 -12
- package/lib/core/model/ArkFile.d.ts.map +1 -1
- package/lib/core/model/ArkFile.js +275 -65
- package/lib/core/model/ArkImport.d.ts.map +1 -1
- package/lib/core/model/ArkImport.js +1 -2
- package/lib/core/model/ArkMethod.d.ts +101 -15
- package/lib/core/model/ArkMethod.d.ts.map +1 -1
- package/lib/core/model/ArkMethod.js +252 -39
- package/lib/core/model/ArkModule.d.ts +1 -1
- package/lib/core/model/ArkModule.js +1 -1
- package/lib/core/model/ArkNamespace.d.ts +80 -10
- package/lib/core/model/ArkNamespace.d.ts.map +1 -1
- package/lib/core/model/ArkNamespace.js +309 -76
- package/lib/core/model/ArkSignature.d.ts +242 -18
- package/lib/core/model/ArkSignature.d.ts.map +1 -1
- package/lib/core/model/ArkSignature.js +725 -95
- package/lib/core/model/builder/ArkClassBuilder.d.ts +6 -3
- package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkClassBuilder.js +116 -71
- package/lib/core/model/builder/ArkExportBuilder.d.ts +1 -1
- package/lib/core/model/builder/ArkExportBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkExportBuilder.js +1 -1
- package/lib/core/model/builder/ArkFieldBuilder.d.ts +0 -2
- package/lib/core/model/builder/ArkFieldBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkFieldBuilder.js +9 -43
- package/lib/core/model/builder/ArkFileBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkFileBuilder.js +32 -33
- package/lib/core/model/builder/ArkMethodBuilder.d.ts +10 -3
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +40 -26
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts +3 -2
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkNamespaceBuilder.js +45 -77
- package/lib/core/model/builder/ArkSignatureBuilder.d.ts +9 -0
- package/lib/core/model/builder/ArkSignatureBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkSignatureBuilder.js +26 -3
- package/lib/core/model/builder/BodyBuilder.d.ts +1 -0
- package/lib/core/model/builder/BodyBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/BodyBuilder.js +37 -11
- package/lib/core/model/builder/builderUtils.d.ts +11 -1
- package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.js +124 -90
- package/lib/frontend/FrontendBuilder.d.ts +10 -6
- package/lib/frontend/FrontendBuilder.d.ts.map +1 -1
- package/lib/frontend/FrontendBuilder.js +19 -45
- package/lib/frontend/ModuleScene.d.ts +43 -0
- package/lib/frontend/ModuleScene.d.ts.map +1 -0
- package/lib/frontend/ModuleScene.js +143 -0
- package/lib/frontend/SceneBuildStage.d.ts +15 -0
- package/lib/frontend/SceneBuildStage.d.ts.map +1 -0
- package/lib/frontend/SceneBuildStage.js +32 -0
- package/lib/frontend/SceneBuilder.d.ts +153 -0
- package/lib/frontend/SceneBuilder.d.ts.map +1 -0
- package/lib/frontend/SceneBuilder.js +859 -0
- package/lib/frontend/arktsFrontend/ArktsFrontend.d.ts +0 -2
- package/lib/frontend/arktsFrontend/ArktsFrontend.d.ts.map +1 -1
- package/lib/frontend/arktsFrontend/ArktsFrontend.js +0 -18
- package/lib/frontend/arktsFrontend/FileBodyRemount.d.ts +17 -0
- package/lib/frontend/arktsFrontend/FileBodyRemount.d.ts.map +1 -0
- package/lib/frontend/arktsFrontend/FileBodyRemount.js +187 -0
- package/lib/frontend/common/ModuleBuilder.d.ts +4 -2
- package/lib/frontend/common/ModuleBuilder.d.ts.map +1 -1
- package/lib/frontend/common/ModuleBuilder.js +19 -9
- package/lib/frontend/cppFrontend/CppFrontend.d.ts +0 -6
- package/lib/frontend/cppFrontend/CppFrontend.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/CppFrontend.js +0 -56
- package/lib/frontend/cppFrontend/base/Type.d.ts +7 -0
- package/lib/frontend/cppFrontend/base/Type.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/base/Type.js +29 -0
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.js +56 -56
- 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 +124 -113
- package/lib/frontend/cppFrontend/common/Builtin.d.ts +29 -19
- package/lib/frontend/cppFrontend/common/Builtin.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/Builtin.js +56 -35
- package/lib/frontend/cppFrontend/common/IRInference.d.ts +7 -2
- package/lib/frontend/cppFrontend/common/IRInference.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/IRInference.js +61 -28
- package/lib/frontend/cppFrontend/common/IRUtils.d.ts +1 -0
- package/lib/frontend/cppFrontend/common/IRUtils.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/IRUtils.js +22 -10
- package/lib/frontend/cppFrontend/common/ModelUtils.d.ts +19 -0
- package/lib/frontend/cppFrontend/common/ModelUtils.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/ModelUtils.js +84 -3
- package/lib/frontend/cppFrontend/common/TypeInference.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/TypeInference.js +44 -54
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.js +2 -1
- package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts +1 -1
- package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/inference/CxxValueInference.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/inference/CxxValueInference.js +41 -5
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.js +18 -28
- package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.js +2 -3
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts +2 -2
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.js +31 -24
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.js +10 -16
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts +0 -2
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.js +19 -37
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts +1 -0
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.js +30 -3
- package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/builderUtils.js +8 -4
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +10 -2
- package/lib/save/json/JsonSerialization.js +2 -2
- package/lib/save/source/SourceStmt.js +1 -1
- package/lib/save/source/SourceTransformer.d.ts.map +1 -1
- package/lib/save/source/SourceTransformer.js +0 -9
- package/lib/statistics/StageStatistics.d.ts +195 -0
- package/lib/statistics/StageStatistics.d.ts.map +1 -0
- package/lib/statistics/StageStatistics.js +346 -0
- package/lib/statistics/StageStatisticsReporter.d.ts +58 -0
- package/lib/statistics/StageStatisticsReporter.d.ts.map +1 -0
- package/lib/statistics/StageStatisticsReporter.js +255 -0
- package/lib/utils/Canonicalizer.d.ts +9 -2
- package/lib/utils/Canonicalizer.d.ts.map +1 -1
- package/lib/utils/Canonicalizer.js +19 -2
- package/lib/utils/CxxSceneUtils.d.ts +7 -0
- package/lib/utils/CxxSceneUtils.d.ts.map +1 -1
- package/lib/utils/CxxSceneUtils.js +10 -1
- package/lib/utils/FileUtils.d.ts +0 -1
- package/lib/utils/FileUtils.d.ts.map +1 -1
- package/lib/utils/FileUtils.js +1 -9
- package/lib/utils/HashUtils.d.ts +9 -0
- package/lib/utils/HashUtils.d.ts.map +1 -0
- package/lib/utils/HashUtils.js +65 -0
- package/lib/utils/ModuleUtils.d.ts.map +1 -1
- package/lib/utils/ModuleUtils.js +24 -5
- package/lib/utils/VisitedSegment.d.ts +23 -0
- package/lib/utils/VisitedSegment.d.ts.map +1 -0
- package/lib/utils/VisitedSegment.js +64 -0
- package/lib/utils/callGraphUtils.d.ts.map +1 -1
- package/lib/utils/callGraphUtils.js +7 -7
- package/lib/utils/getAllFiles.d.ts.map +1 -1
- package/lib/utils/getAllFiles.js +11 -8
- package/lib/utils/logger.d.ts +4 -0
- package/lib/utils/logger.d.ts.map +1 -1
- package/lib/utils/logger.js +16 -0
- package/lib/utils/parseArkSourceFile.d.ts +33 -0
- package/lib/utils/parseArkSourceFile.d.ts.map +1 -0
- package/lib/utils/parseArkSourceFile.js +131 -0
- package/package.json +1 -1
- package/lib/utils/DependenciesSort.d.ts +0 -3
- package/lib/utils/DependenciesSort.d.ts.map +0 -1
- package/lib/utils/DependenciesSort.js +0 -72
- package/lib/utils/crypto_utils.d.ts +0 -6
- package/lib/utils/crypto_utils.d.ts.map +0 -1
- package/lib/utils/crypto_utils.js +0 -57
|
@@ -52,6 +52,7 @@ const ArkCxxAstNode_1 = require("../../utils/ArkCxxAstNode");
|
|
|
52
52
|
const IRUtils_1 = require("../../common/IRUtils");
|
|
53
53
|
const Ref_2 = require("../../base/Ref");
|
|
54
54
|
const logger_1 = __importStar(require("../../../../utils/logger"));
|
|
55
|
+
const SignatureCanonicalizerRegistry_1 = require("../../../../core/common/SignatureCanonicalizerRegistry");
|
|
55
56
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'BodyBuilder');
|
|
56
57
|
class CxxBodyBuilder {
|
|
57
58
|
constructor(methodSignature, sourceAstNode, declaringMethod, sourceFile) {
|
|
@@ -363,7 +364,7 @@ class CxxBodyBuilder {
|
|
|
363
364
|
const outerGlobals = (_c = outerMethod.getBody()) === null || _c === void 0 ? void 0 : _c.getUsedGlobals();
|
|
364
365
|
const callGlobal = (_d = outerGlobals === null || outerGlobals === void 0 ? void 0 : outerGlobals.get(nestedMethodName)) !== null && _d !== void 0 ? _d : outerGlobals === null || outerGlobals === void 0 ? void 0 : outerGlobals.get(originalMethodName);
|
|
365
366
|
if (callGlobal !== undefined && callGlobal instanceof Ref_1.GlobalRef && callGlobal.getRef() === null) {
|
|
366
|
-
const fieldSignature = new ArkSignature_1.FieldSignature(nestedMethodName, nestedMethod.getDeclaringArkClass().
|
|
367
|
+
const fieldSignature = new ArkSignature_1.FieldSignature(nestedMethodName, nestedMethod.getDeclaringArkClass().getClassSigID(), new Type_1.FunctionType(nestedMethod.getSignature()));
|
|
367
368
|
callGlobal.setRef(new Ref_1.ArkStaticFieldRef(fieldSignature));
|
|
368
369
|
}
|
|
369
370
|
const childrenChains = nestedChain.children;
|
|
@@ -378,16 +379,42 @@ class CxxBodyBuilder {
|
|
|
378
379
|
if (!(closuresLocal.getType() instanceof Type_1.LexicalEnvType)) {
|
|
379
380
|
return;
|
|
380
381
|
}
|
|
382
|
+
// A declare entry can be value-equal to the implementation signature (they then share
|
|
383
|
+
// one canonical instance). Injecting it here AND in the impl path below would unshift
|
|
384
|
+
// the closure param twice onto the same shared params array — skip it and let the impl
|
|
385
|
+
// path handle the shared instance exactly once.
|
|
386
|
+
const implSigID = nestedMethod.getMethodSigID();
|
|
387
|
+
const canonicalizer = SignatureCanonicalizerRegistry_1.SignatureCanonicalizerRegistry.getInstance().methodSigCanonicalizer;
|
|
381
388
|
const declareSignatures = nestedMethod.getDeclareSignatures();
|
|
382
389
|
declareSignatures === null || declareSignatures === void 0 ? void 0 : declareSignatures.forEach((signature, index) => {
|
|
390
|
+
if (implSigID !== undefined && canonicalizer.getExistingId(signature) === implSigID) {
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
383
393
|
nestedMethod.setDeclareSignatureWithIndex(this.createNewSignatureWithClosures(closuresLocal, signature), index);
|
|
384
394
|
});
|
|
395
|
+
const oldSigID = nestedMethod.getMethodSigID();
|
|
385
396
|
const implementSignature = nestedMethod.getImplementationSignature();
|
|
386
397
|
if (implementSignature !== null) {
|
|
387
398
|
nestedMethod.setImplementationSignature(this.createNewSignatureWithClosures(closuresLocal, implementSignature));
|
|
399
|
+
// Rebuilding the signature interns a new MethodSigID. Direct children reference the
|
|
400
|
+
// outer method by its (now stale) SigID, so re-point them to the new one.
|
|
401
|
+
const newSigID = nestedMethod.getMethodSigID();
|
|
402
|
+
if (newSigID !== oldSigID) {
|
|
403
|
+
this.syncChildrenOuterMethodSigID(nestedMethod, oldSigID, newSigID);
|
|
404
|
+
}
|
|
388
405
|
}
|
|
389
406
|
this.addClosureParamsAssignStmts(closuresLocal, nestedMethod);
|
|
390
407
|
}
|
|
408
|
+
syncChildrenOuterMethodSigID(parent, oldSigID, newSigID) {
|
|
409
|
+
if (oldSigID === undefined || oldSigID <= 0 || newSigID === undefined) {
|
|
410
|
+
return;
|
|
411
|
+
}
|
|
412
|
+
for (const method of parent.getDeclaringArkClass().getMethods()) {
|
|
413
|
+
if (method !== parent && method.getOuterMethodSigID() === oldSigID) {
|
|
414
|
+
method.setOuterMethodSigID(newSigID);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
391
418
|
updateOuterMethodWithClosures(outerMethod, nestedMethod, closuresLocal) {
|
|
392
419
|
var _a, _b, _c, _d, _e, _f;
|
|
393
420
|
const nestedMethodName = nestedMethod.getName();
|
|
@@ -437,7 +464,7 @@ class CxxBodyBuilder {
|
|
|
437
464
|
if (!(lexicalEnv instanceof Type_1.LexicalEnvType)) {
|
|
438
465
|
return;
|
|
439
466
|
}
|
|
440
|
-
const fieldSignature = new ArkSignature_1.FieldSignature(methodSignature.getMethodSubSignature().getMethodName(), methodSignature.
|
|
467
|
+
const fieldSignature = new ArkSignature_1.FieldSignature(methodSignature.getMethodSubSignature().getMethodName(), methodSignature.getDeclaringClassSigID(), new Type_1.ClosureType(lexicalEnv, methodSignature));
|
|
441
468
|
globalRef.setRef(new Ref_1.ArkStaticFieldRef(fieldSignature));
|
|
442
469
|
this.updateAbstractInvokeExprWithClosures(globalRef, outerMethod.getSignature(), nestedMethod.getSignature(), closuresLocal);
|
|
443
470
|
}
|
|
@@ -498,7 +525,7 @@ class CxxBodyBuilder {
|
|
|
498
525
|
closuresParam.setType(closuresLocal.getType());
|
|
499
526
|
params.unshift(closuresParam);
|
|
500
527
|
let newSubSignature = new ArkSignature_1.MethodSubSignature(oldSubSignature.getMethodName(), params, oldSubSignature.getReturnType(), oldSubSignature.isStatic());
|
|
501
|
-
return new ArkSignature_1.MethodSignature(oldSignature.
|
|
528
|
+
return new ArkSignature_1.MethodSignature(oldSignature.getDeclaringClassSigID(), newSubSignature);
|
|
502
529
|
}
|
|
503
530
|
updateSignatureAndArgsInArkInvokeExpr(stmt, methodSignature, closuresLocal) {
|
|
504
531
|
let expr;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builderUtils.d.ts","sourceRoot":"","sources":["../../../../../src/frontend/cppFrontend/model/builder/builderUtils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"builderUtils.d.ts","sourceRoot":"","sources":["../../../../../src/frontend/cppFrontend/model/builder/builderUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -320,8 +320,8 @@ function isCxxFunctionPointer(type) {
|
|
|
320
320
|
}
|
|
321
321
|
exports.isCxxFunctionPointer = isCxxFunctionPointer;
|
|
322
322
|
function buildFuncPtrType(funcPtrNode, arkMtd, sourceFile) {
|
|
323
|
-
const anonymousMethod = new ArkMethod_1.ArkMethod();
|
|
324
323
|
const declaringClass = arkMtd.getDeclaringArkClass();
|
|
324
|
+
const anonymousMethod = new ArkMethod_1.ArkMethod(declaringClass.getClassSigID());
|
|
325
325
|
(0, ArkMethodBuilder_2.buildArkMethodFromArkClass)(funcPtrNode, declaringClass, anonymousMethod, sourceFile);
|
|
326
326
|
const funcType = new Type_1.FunctionType(anonymousMethod.getSignature());
|
|
327
327
|
return new Type_2.PointerType(funcType, 1);
|
|
@@ -508,7 +508,7 @@ function isCxxBasicString(qualType) {
|
|
|
508
508
|
}
|
|
509
509
|
exports.isCxxBasicString = isCxxBasicString;
|
|
510
510
|
function buildTypeFromDerivedType(preStr, node, arkInstance) {
|
|
511
|
-
var _a, _b, _c, _d, _e, _f;
|
|
511
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
512
512
|
const { typeStr, innerPart } = CxxTypeStringCache.parseDerivedTypeParts(preStr);
|
|
513
513
|
let innerType = innerPart === null ? [] : [buildTypeFromPreStr(innerPart, node, arkInstance)];
|
|
514
514
|
if (arkInstance instanceof ArkMethod_1.ArkMethod) {
|
|
@@ -521,9 +521,13 @@ function buildTypeFromDerivedType(preStr, node, arkInstance) {
|
|
|
521
521
|
let arkClass = null;
|
|
522
522
|
if (arkInstance instanceof ArkMethod_1.ArkMethod || arkInstance instanceof ArkClass_1.ArkClass) {
|
|
523
523
|
const file = (_b = arkInstance.getDeclaringArkFile) === null || _b === void 0 ? void 0 : _b.call(arkInstance);
|
|
524
|
-
|
|
524
|
+
// Nested classes are referenced by their bare short name inside the enclosing
|
|
525
|
+
// class scope; resolve via the enclosing-name candidate chain first.
|
|
526
|
+
const ctxClass = arkInstance instanceof ArkClass_1.ArkClass ? arkInstance : arkInstance.getDeclaringArkClass();
|
|
527
|
+
arkClass =
|
|
528
|
+
(_e = (_c = ModelUtils_1.CxxModelUtils.findClassByShortName(typeStr, ctxClass, arkInstance instanceof ArkMethod_1.ArkMethod ? arkInstance : undefined)) !== null && _c !== void 0 ? _c : (_d = file === null || file === void 0 ? void 0 : file.getClassWithName) === null || _d === void 0 ? void 0 : _d.call(file, typeStr)) !== null && _e !== void 0 ? _e : ModelUtils_1.CxxModelUtils.getClassFromAnonymousNamespaceByName(typeStr, file);
|
|
525
529
|
// Obtain the use of alias types
|
|
526
|
-
let aliasType = (
|
|
530
|
+
let aliasType = (_g = (_f = file === null || file === void 0 ? void 0 : file.getDefaultClass().getDefaultArkMethod()) === null || _f === void 0 ? void 0 : _f.getBody()) === null || _g === void 0 ? void 0 : _g.getAliasTypeByName(typeStr);
|
|
527
531
|
if (aliasType) {
|
|
528
532
|
return aliasType;
|
|
529
533
|
}
|
package/lib/index.d.ts
CHANGED
|
@@ -34,6 +34,7 @@ export * from './core/common/TSConst';
|
|
|
34
34
|
export { TypeInference } from './core/common/TypeInference';
|
|
35
35
|
export { ValueUtil } from './core/common/ValueUtil';
|
|
36
36
|
export { VisibleValue, Scope } from './core/common/VisibleValue';
|
|
37
|
+
export { SignatureCanonicalizerRegistry } from './core/common/SignatureCanonicalizerRegistry';
|
|
37
38
|
export { ReachingDefProblem, ReachingDefTransferFunction } from './core/dataflow/ReachingDef';
|
|
38
39
|
export { FlowGraph, TransferFunction, DataFlowProblem, Solution, MFPDataFlowSolver } from './core/dataflow/GenericDataFlow';
|
|
39
40
|
export { BasicBlock } from './core/graph/BasicBlock';
|
|
@@ -62,6 +63,8 @@ export * from './core/model/ArkSignature';
|
|
|
62
63
|
export * from './core/model/builder/ArkSignatureBuilder';
|
|
63
64
|
export { SceneConfig, SceneOptions, buildSceneConfigFromProject, LanguageOptions, SceneLanguagesOptions } from './Config';
|
|
64
65
|
export { Scene } from './Scene';
|
|
66
|
+
export { StageName, StageStatistics, StageStatisticsData, StageStatEntry, MemorySnapshot } from './statistics/StageStatistics';
|
|
67
|
+
export { StageStatisticsReporter, StageStatisticsReport } from './statistics/StageStatisticsReporter';
|
|
65
68
|
export { FrontendBuilder, FrontendParseFailure, FrontendParseResult } from './frontend/FrontendBuilder';
|
|
66
69
|
export { ArktsFrontend } from './frontend/arktsFrontend/ArktsFrontend';
|
|
67
70
|
export { CppFrontend } from './frontend/cppFrontend/CppFrontend';
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAG5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAGzE,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAG9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAChF,cAAc,iCAAiC,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACrE,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG1C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/index.js
CHANGED
|
@@ -31,8 +31,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
31
31
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
32
32
|
};
|
|
33
33
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
-
exports.
|
|
35
|
-
exports.ts = exports.Canonicalizer = exports.PackedSparseMap = exports.IntWorkList = exports.IntMap = exports.Logger = exports.LOG_MODULE_TYPE = exports.LOG_LEVEL = exports.ViewTreePrinter = exports.GraphPrinter = exports.JsonPrinter = exports.SourceFilePrinter = exports.SourceNamespacePrinter = exports.SourceClassPrinter = exports.SourceMethodPrinter = exports.DotFilePrinter = exports.DotNamespacePrinter = exports.DotClassPrinter = exports.DotMethodPrinter = exports.PrinterBuilder = exports.Printer = exports.getCxxSourceFileExtensions = exports.getCxxSourceFileExtensionSet = exports.getCxxImplementationFileExtensions = exports.getCxxImplementationFileExtensionSet = exports.CppFrontend = exports.ArktsFrontend = exports.FrontendBuilder = exports.Scene = exports.buildSceneConfigFromProject = exports.SceneConfig = exports.ArkBody = exports.ImportInfo = exports.ExportInfo = exports.ArkField = exports.ArkMethod = exports.ArkClass = exports.ArkNamespace = exports.ModuleBuilder = exports.ModuleAnalysisConfig = exports.ModuleDepthLevel = exports.ModuleType = exports.ModuleLoadState = void 0;
|
|
34
|
+
exports.ArkFile = exports.FileDepGraph = exports.DependencyType = exports.ModuleDepGraph = exports.SCCDetection = exports.BaseImplicitGraph = exports.BaseExplicitGraph = exports.BaseNode = exports.BaseEdge = exports.DominanceTree = exports.DominanceFinder = exports.Cfg = exports.BasicBlock = exports.MFPDataFlowSolver = exports.Solution = exports.ReachingDefTransferFunction = exports.ReachingDefProblem = exports.SignatureCanonicalizerRegistry = exports.Scope = exports.VisibleValue = exports.ValueUtil = exports.TypeInference = exports.StmtUseReplacer = exports.RefUseReplacer = exports.IRUtils = exports.ExprUseReplacer = exports.DummyMainCreater = exports.ModelUtils = exports.FullPosition = exports.LineColPosition = exports.Local = exports.DefUseChain = exports.Decorator = exports.Constant = exports.DVFGBuilder = exports.DVFG = exports.DiffPTData = exports.PtsSet = exports.PointerAnalysisConfig = exports.PointerAnalysis = exports.PagBuilder = exports.CSFuncID = exports.DummyCallCreator = exports.CallGraphBuilder = exports.CGStat = exports.PAGStat = exports.PTAStat = exports.RapidTypeAnalysis = exports.ClassHierarchyAnalysis = exports.AbstractAnalysis = void 0;
|
|
35
|
+
exports.ts = exports.Canonicalizer = exports.PackedSparseMap = exports.IntWorkList = exports.IntMap = exports.Logger = exports.LOG_MODULE_TYPE = exports.LOG_LEVEL = exports.ViewTreePrinter = exports.GraphPrinter = exports.JsonPrinter = exports.SourceFilePrinter = exports.SourceNamespacePrinter = exports.SourceClassPrinter = exports.SourceMethodPrinter = exports.DotFilePrinter = exports.DotNamespacePrinter = exports.DotClassPrinter = exports.DotMethodPrinter = exports.PrinterBuilder = exports.Printer = exports.getCxxSourceFileExtensions = exports.getCxxSourceFileExtensionSet = exports.getCxxImplementationFileExtensions = exports.getCxxImplementationFileExtensionSet = exports.CppFrontend = exports.ArktsFrontend = exports.FrontendBuilder = exports.StageStatisticsReporter = exports.StageStatistics = exports.StageName = exports.Scene = exports.buildSceneConfigFromProject = exports.SceneConfig = exports.ArkBody = exports.ImportInfo = exports.ExportInfo = exports.ArkField = exports.ArkMethod = exports.ArkClass = exports.ArkNamespace = exports.ModuleBuilder = exports.ModuleAnalysisConfig = exports.ModuleDepthLevel = exports.ModuleType = exports.ModuleLoadState = exports.ArkModule = void 0;
|
|
36
36
|
// callgraph/algorithm
|
|
37
37
|
var AbstractAnalysis_1 = require("./callgraph/algorithm/AbstractAnalysis");
|
|
38
38
|
Object.defineProperty(exports, "AbstractAnalysis", { enumerable: true, get: function () { return AbstractAnalysis_1.AbstractAnalysis; } });
|
|
@@ -106,6 +106,8 @@ Object.defineProperty(exports, "ValueUtil", { enumerable: true, get: function ()
|
|
|
106
106
|
var VisibleValue_1 = require("./core/common/VisibleValue");
|
|
107
107
|
Object.defineProperty(exports, "VisibleValue", { enumerable: true, get: function () { return VisibleValue_1.VisibleValue; } });
|
|
108
108
|
Object.defineProperty(exports, "Scope", { enumerable: true, get: function () { return VisibleValue_1.Scope; } });
|
|
109
|
+
var SignatureCanonicalizerRegistry_1 = require("./core/common/SignatureCanonicalizerRegistry");
|
|
110
|
+
Object.defineProperty(exports, "SignatureCanonicalizerRegistry", { enumerable: true, get: function () { return SignatureCanonicalizerRegistry_1.SignatureCanonicalizerRegistry; } });
|
|
109
111
|
// core/dataflow
|
|
110
112
|
var ReachingDef_1 = require("./core/dataflow/ReachingDef");
|
|
111
113
|
Object.defineProperty(exports, "ReachingDefProblem", { enumerable: true, get: function () { return ReachingDef_1.ReachingDefProblem; } });
|
|
@@ -169,6 +171,12 @@ Object.defineProperty(exports, "SceneConfig", { enumerable: true, get: function
|
|
|
169
171
|
Object.defineProperty(exports, "buildSceneConfigFromProject", { enumerable: true, get: function () { return Config_1.buildSceneConfigFromProject; } });
|
|
170
172
|
var Scene_1 = require("./Scene");
|
|
171
173
|
Object.defineProperty(exports, "Scene", { enumerable: true, get: function () { return Scene_1.Scene; } });
|
|
174
|
+
// statistics
|
|
175
|
+
var StageStatistics_1 = require("./statistics/StageStatistics");
|
|
176
|
+
Object.defineProperty(exports, "StageName", { enumerable: true, get: function () { return StageStatistics_1.StageName; } });
|
|
177
|
+
Object.defineProperty(exports, "StageStatistics", { enumerable: true, get: function () { return StageStatistics_1.StageStatistics; } });
|
|
178
|
+
var StageStatisticsReporter_1 = require("./statistics/StageStatisticsReporter");
|
|
179
|
+
Object.defineProperty(exports, "StageStatisticsReporter", { enumerable: true, get: function () { return StageStatisticsReporter_1.StageStatisticsReporter; } });
|
|
172
180
|
// frontends
|
|
173
181
|
var FrontendBuilder_1 = require("./frontend/FrontendBuilder");
|
|
174
182
|
Object.defineProperty(exports, "FrontendBuilder", { enumerable: true, get: function () { return FrontendBuilder_1.FrontendBuilder; } });
|
|
@@ -276,7 +276,7 @@ function serializeFunctionTypeDto(type, active) {
|
|
|
276
276
|
console.warn('Detected recursive function type, replacing return type with UnknownType');
|
|
277
277
|
const sig = type.getMethodSignature();
|
|
278
278
|
const sub = sig.getMethodSubSignature();
|
|
279
|
-
const sig2 = new __1.MethodSignature(sig.
|
|
279
|
+
const sig2 = new __1.MethodSignature(sig.getDeclaringClassSigID(), new __1.MethodSubSignature(sub.getMethodName(), sub.getParameters(), __1.UnknownType.getInstance(), sub.isStatic()));
|
|
280
280
|
return (0, JsonDto_1.polymorphic)('FunctionType', {
|
|
281
281
|
signature: serializeMethodSignature(sig2),
|
|
282
282
|
typeParameters: (_a = type.getRealGenericTypes()) === null || _a === void 0 ? void 0 : _a.map(t => serializeType(t, active)),
|
|
@@ -379,7 +379,7 @@ const TYPE_SERIALIZERS = [
|
|
|
379
379
|
}
|
|
380
380
|
const m = type.getNestedMethod();
|
|
381
381
|
const s = m.getMethodSubSignature();
|
|
382
|
-
const sig = new __1.MethodSignature(m.
|
|
382
|
+
const sig = new __1.MethodSignature(m.getDeclaringClassSigID(), new __1.MethodSubSignature(s.getMethodName(), [], __1.UnknownType.getInstance()));
|
|
383
383
|
return (0, JsonDto_1.polymorphic)('LexicalEnvType', {
|
|
384
384
|
method: serializeMethodSignature(sig),
|
|
385
385
|
closures: type.getClosures().map(closure => serializeLocal(closure)),
|
|
@@ -471,7 +471,7 @@ class SourceWhileStmt extends SourceStmt {
|
|
|
471
471
|
if (!(done instanceof Ref_1.ArkInstanceFieldRef)) {
|
|
472
472
|
return false;
|
|
473
473
|
}
|
|
474
|
-
if (done.getFieldSignature().toString() !== '
|
|
474
|
+
if (done.getFieldSignature().toString() !== '@%unk/%unk: IteratorResult.done') {
|
|
475
475
|
return false;
|
|
476
476
|
}
|
|
477
477
|
let temp2 = done.getBase();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SourceTransformer.d.ts","sourceRoot":"","sources":["../../../src/save/source/SourceTransformer.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAMH,qBAAqB,EAKrB,mBAAmB,EAKtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAiB,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"SourceTransformer.d.ts","sourceRoot":"","sources":["../../../src/save/source/SourceTransformer.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAMH,qBAAqB,EAKrB,mBAAmB,EAKtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAiB,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAI7C,OAAO,EAGH,SAAS,EAQT,IAAI,EAKP,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAmE,MAAM,qBAAqB,CAAC;AACnH,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAInD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAU7D,MAAM,WAAW,kBAAkB;IAC/B,UAAU,IAAI,OAAO,CAAC;IAEtB,wBAAwB,IAAI,YAAY,GAAG,SAAS,CAAC;IAErD,SAAS,CAAC,SAAS,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,CAAC;IAExD,QAAQ,CAAC,SAAS,EAAE,cAAc,GAAG,QAAQ,GAAG,IAAI,CAAC;IAErD,UAAU,IAAI,aAAa,CAAC;IAE5B,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAEvD,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAElD,iBAAiB,IAAI,OAAO,CAAC;CAChC;AAED,qBAAa,iBAAiB;IAC1B,SAAS,CAAC,OAAO,EAAE,kBAAkB,CAAC;gBAE1B,OAAO,EAAE,kBAAkB;IAIvC,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,sBAAsB;IAKvB,0BAA0B,CAAC,UAAU,EAAE,qBAAqB,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM;IAuB7F,OAAO,CAAC,kBAAkB;IAuCnB,wBAAwB,CAAC,UAAU,EAAE,mBAAmB,GAAG,MAAM;IA8BxE,OAAO,CAAC,oBAAoB;IAYrB,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,GAAE,MAAa,GAAG,MAAM;WASvD,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM;IAQpD,OAAO,CAAC,YAAY;IA4Db,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM;IA0BvC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,GAAE,OAAe,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAqBxF,OAAO,CAAC,aAAa;IA4Bd,qBAAqB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IAW9C,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IA+DvC,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,2BAA2B;IAQnC,OAAO,CAAC,gBAAgB;CAkB3B"}
|
|
@@ -43,7 +43,6 @@ const Expr_1 = require("../../core/base/Expr");
|
|
|
43
43
|
const Local_1 = require("../../core/base/Local");
|
|
44
44
|
const ArkClass_1 = require("../../core/model/ArkClass");
|
|
45
45
|
const ArkMethod_1 = require("../../core/model/ArkMethod");
|
|
46
|
-
const ArkSignature_1 = require("../../core/model/ArkSignature");
|
|
47
46
|
const logger_1 = __importStar(require("../../utils/logger"));
|
|
48
47
|
const PrinterUtils_1 = require("../base/PrinterUtils");
|
|
49
48
|
const SourceMethod_1 = require("./SourceMethod");
|
|
@@ -92,14 +91,6 @@ class SourceTransformer {
|
|
|
92
91
|
if (methodName === TSConst_1.CONSTRUCTOR_NAME) {
|
|
93
92
|
return `super(${args.join(', ')})`;
|
|
94
93
|
}
|
|
95
|
-
// If base type is not match the method declaring class, here take it as super.foo() even though the source code may be this.foo().
|
|
96
|
-
// Because it can not distinguish exactly whether it's this.foo() or super.foo() when foo is only defined in super class.
|
|
97
|
-
const baseType = base.getType();
|
|
98
|
-
if (baseType instanceof Type_1.ClassType) {
|
|
99
|
-
if (!(0, ArkSignature_1.classSignatureCompare)(baseType.getClassSignature(), invokeExpr.getMethodSignature().getDeclaringClassSignature())) {
|
|
100
|
-
return `super.${methodName}${genericCode}(${args.join(', ')})`;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
94
|
}
|
|
104
95
|
return `${this.valueToString(base)}.${methodName}${genericCode}(${args.join(', ')})`;
|
|
105
96
|
}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { TempSpaceStats } from '../core/common/SignatureCanonicalizerRegistry';
|
|
2
|
+
/**
|
|
3
|
+
* Stage Statistics Module
|
|
4
|
+
*
|
|
5
|
+
* Collects time and memory metrics for execution stages (e.g. builder, inferTypes).
|
|
6
|
+
* Designed as a generic, stage-name-agnostic collector so that future modules
|
|
7
|
+
* (CG, PTA, etc.) can plug in via `startStage(name)` without interface changes.
|
|
8
|
+
*
|
|
9
|
+
* Key design points:
|
|
10
|
+
* - `enabled` switch: every public method early-returns when disabled (zero overhead).
|
|
11
|
+
* - Named timers via `startStage(name)` / `endStage(name)`; repeated names auto-suffix
|
|
12
|
+
* with `#2`, `#3`, ... so multiple `inferTypes()` calls are distinguished.
|
|
13
|
+
* - Stage nesting: a stage started while another is still running becomes its child
|
|
14
|
+
* (stack top at start time = parent); the report renders children indented.
|
|
15
|
+
* - Memory peak tracked via synchronous checkpoint sampling at key points
|
|
16
|
+
* (`start`, `startStage`, `endStage`, `finish`, and `recordMemoryCheckpoint`).
|
|
17
|
+
* No `setInterval` is used — Node.js single-threaded event loop cannot schedule
|
|
18
|
+
* timer callbacks during CPU-intensive synchronous operations (AST parsing, IR
|
|
19
|
+
* construction, type inference), making interval-based sampling unreliable.
|
|
20
|
+
* - `customCounters` Map for extensible, module-specific counters.
|
|
21
|
+
* - `recordSignatureStats(label)`: signature-space snapshots (formal canonicalizer
|
|
22
|
+
* sizes + temp index-table stats) at checkpoints like post-build / post-infer.
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Built-in stage names used by ArkAnalyzer's core pipeline.
|
|
26
|
+
*
|
|
27
|
+
* `startStage` / `endStage` accept any `string`, so external modules and
|
|
28
|
+
* future stages (e.g. CG, PTA) can pass their own names or extend this enum.
|
|
29
|
+
* Using the enum provides compile-time safety and IDE autocompletion for
|
|
30
|
+
* well-known stages, while the string overload keeps the interface open.
|
|
31
|
+
*
|
|
32
|
+
* Hierarchy: a stage started while another stage is still running becomes its
|
|
33
|
+
* child (nesting is captured automatically; the report renders indentation).
|
|
34
|
+
*/
|
|
35
|
+
export declare enum StageName {
|
|
36
|
+
/** 构建总阶段(Scene 构建入口整体,含其下全部细分阶段)。 */
|
|
37
|
+
Builder = "builder",
|
|
38
|
+
/** 细分:构建期配置解析(build-profile / oh-package / tsconfig,SceneBuilder.parseProjectConfigs)。 */
|
|
39
|
+
BuilderParseConfigs = "builderParseConfigs",
|
|
40
|
+
/** 细分:SDK 构建与推断阶段(SceneBuilder.buildSdkStage)。 */
|
|
41
|
+
BuilderSdk = "builderSdk",
|
|
42
|
+
/** 细分(BuilderSdk 子阶段):SDK 源文件注册构建(buildSdk 逐文件解析注册)。 */
|
|
43
|
+
BuilderSdkFiles = "builderSdkFiles",
|
|
44
|
+
/** 细分(BuilderSdk 子阶段):SDK 类型推导与 global API 合并(doInfer + mergeGlobalAPI + postInferredSdk)。 */
|
|
45
|
+
BuilderSdkInfer = "builderSdkInfer",
|
|
46
|
+
/** 细分:project 文件 DFS 构建(SceneBuilder.buildProjectFiles)。 */
|
|
47
|
+
BuilderFiles = "builderFiles",
|
|
48
|
+
/** 细分:方法体构建(SceneBuilder.buildAllMethodBodies)。 */
|
|
49
|
+
BuilderBodies = "builderBodies",
|
|
50
|
+
/** 推断单轮(inferTypes 的每轮遍历,多轮自动 #2/#3 后缀)。 */
|
|
51
|
+
InferTypes = "inferTypes",
|
|
52
|
+
/** 推断收尾(buildStage 推进 + temp 完整性检查 + validate + 各 dispose)。 */
|
|
53
|
+
InferTypesFinalize = "inferTypesFinalize"
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Snapshot of signature-space sizes at a checkpoint (e.g. post-build / post-infer).
|
|
57
|
+
* - formal: entry count (size) of each formal canonicalizer (dense ID space = total interned).
|
|
58
|
+
* - temp: index-table stats per space (live = non-retired, retired = migrated;
|
|
59
|
+
* three-number invariant total = live + retired, see TempSignatureCanonicalizer).
|
|
60
|
+
*/
|
|
61
|
+
export interface SignatureStatsSnapshot {
|
|
62
|
+
label: string;
|
|
63
|
+
formal: {
|
|
64
|
+
file: number;
|
|
65
|
+
class: number;
|
|
66
|
+
namespace: number;
|
|
67
|
+
field: number;
|
|
68
|
+
method: number;
|
|
69
|
+
};
|
|
70
|
+
temp: {
|
|
71
|
+
class: TempSpaceStats;
|
|
72
|
+
method: TempSpaceStats;
|
|
73
|
+
field: TempSpaceStats;
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Memory snapshot captured at a point in time (all values in MB).
|
|
78
|
+
*/
|
|
79
|
+
export interface MemorySnapshot {
|
|
80
|
+
rssMB: number;
|
|
81
|
+
heapUsedMB: number;
|
|
82
|
+
heapTotalMB: number;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Statistics for a single named stage.
|
|
86
|
+
*/
|
|
87
|
+
export interface StageStatEntry {
|
|
88
|
+
name: string;
|
|
89
|
+
/** Unique name of the enclosing running stage at start time (undefined = top level). */
|
|
90
|
+
parent?: string;
|
|
91
|
+
durationMs: number;
|
|
92
|
+
memBefore: MemorySnapshot;
|
|
93
|
+
memPeak: MemorySnapshot;
|
|
94
|
+
memAfter: MemorySnapshot;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Complete statistics data collected by {@link StageStatistics}.
|
|
98
|
+
*/
|
|
99
|
+
export interface StageStatisticsData {
|
|
100
|
+
stages: StageStatEntry[];
|
|
101
|
+
totalDurationMs: number;
|
|
102
|
+
globalMemBefore: MemorySnapshot;
|
|
103
|
+
globalMemPeak: MemorySnapshot;
|
|
104
|
+
globalMemAfter: MemorySnapshot;
|
|
105
|
+
customCounters: Map<string, number>;
|
|
106
|
+
/** Signature-space snapshots at checkpoints (post-build / post-infer), in record order. */
|
|
107
|
+
signatureSnapshots: SignatureStatsSnapshot[];
|
|
108
|
+
}
|
|
109
|
+
export declare class StageStatistics {
|
|
110
|
+
private enabled;
|
|
111
|
+
private startTime;
|
|
112
|
+
private endTime;
|
|
113
|
+
private globalSampledPeak;
|
|
114
|
+
private globalMemBefore;
|
|
115
|
+
private globalMemAfter;
|
|
116
|
+
private finished;
|
|
117
|
+
private readonly runningStages;
|
|
118
|
+
private readonly stageNameCounts;
|
|
119
|
+
private readonly completedStages;
|
|
120
|
+
private readonly customCounters;
|
|
121
|
+
private readonly signatureSnapshots;
|
|
122
|
+
constructor(enabled?: boolean);
|
|
123
|
+
enable(): void;
|
|
124
|
+
disable(): void;
|
|
125
|
+
isEnabled(): boolean;
|
|
126
|
+
/**
|
|
127
|
+
* Start global timing and memory sampling.
|
|
128
|
+
*/
|
|
129
|
+
start(): void;
|
|
130
|
+
/**
|
|
131
|
+
* Start a named stage. If the same name has been used before, a suffix `#N` is appended.
|
|
132
|
+
*
|
|
133
|
+
* Nesting: the most recently started still-running stage (stack top) becomes
|
|
134
|
+
* this stage's parent — the report renders children indented under it.
|
|
135
|
+
*/
|
|
136
|
+
startStage(name: string): void;
|
|
137
|
+
/**
|
|
138
|
+
* End a named stage and record its entry.
|
|
139
|
+
* Looks up the running stage whose unique name equals `name` or matches the `name#N` pattern.
|
|
140
|
+
*/
|
|
141
|
+
endStage(name: string): void;
|
|
142
|
+
/**
|
|
143
|
+
* Record a memory checkpoint inside the current running stage.
|
|
144
|
+
*
|
|
145
|
+
* Synchronously captures memory and updates both the global peak and the
|
|
146
|
+
* current running stage's peak. Use this at fine-grained points within
|
|
147
|
+
* long-running stages (e.g. inside per-method or per-file loops) to track
|
|
148
|
+
* memory growth that `startStage`/`endStage` alone would miss.
|
|
149
|
+
*/
|
|
150
|
+
recordMemoryCheckpoint(): void;
|
|
151
|
+
/**
|
|
152
|
+
* Finish global timing and records final memory.
|
|
153
|
+
*/
|
|
154
|
+
finish(): void;
|
|
155
|
+
/**
|
|
156
|
+
* Increment a custom counter (extensible for future modules).
|
|
157
|
+
*/
|
|
158
|
+
incrementCustomCounter(name: string, value?: number): void;
|
|
159
|
+
getCustomCounter(name: string): number;
|
|
160
|
+
/**
|
|
161
|
+
* Snapshot the signature-space sizes at a checkpoint (e.g. 'post-build' /
|
|
162
|
+
* 'post-infer'): formal canonicalizer entry counts per space + temp
|
|
163
|
+
* index-table stats (live/retired/replaced). Read-only against the registry.
|
|
164
|
+
*/
|
|
165
|
+
recordSignatureStats(label: string): void;
|
|
166
|
+
/**
|
|
167
|
+
* Get the complete statistics data. Auto-finishes if still running.
|
|
168
|
+
*/
|
|
169
|
+
getStatistics(): StageStatisticsData;
|
|
170
|
+
/**
|
|
171
|
+
* Reset all collected data.
|
|
172
|
+
*/
|
|
173
|
+
reset(): void;
|
|
174
|
+
/**
|
|
175
|
+
* Export statistics as a JSON string (Map is converted to a plain object).
|
|
176
|
+
*/
|
|
177
|
+
exportToJson(): string;
|
|
178
|
+
/**
|
|
179
|
+
* Resolve a unique stage name by appending `#N` if the name was used before.
|
|
180
|
+
* The first use keeps the original name; subsequent uses get `#2`, `#3`, ...
|
|
181
|
+
*/
|
|
182
|
+
private resolveUniqueName;
|
|
183
|
+
/**
|
|
184
|
+
* The most recently started still-running stage (Map insertion order = start
|
|
185
|
+
* order; the last key is the stack top). The stage being started itself is
|
|
186
|
+
* excluded from the candidate set.
|
|
187
|
+
*/
|
|
188
|
+
private currentStackTop;
|
|
189
|
+
/**
|
|
190
|
+
* Find the unique name of a currently running stage that matches the given base name.
|
|
191
|
+
* Matches `name` exactly or the `name#N` pattern. Returns the most recently started match.
|
|
192
|
+
*/
|
|
193
|
+
private findRunningStageName;
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=StageStatistics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StageStatistics.d.ts","sourceRoot":"","sources":["../../src/statistics/StageStatistics.ts"],"names":[],"mappings":"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"}
|