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
|
@@ -42,6 +42,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
42
42
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
43
|
exports.CxxModelUtils = exports.setTs2CxxFuncMapOfClass = exports.shouldAddCxxHeaderImport = exports.findExportInfo = exports.getArkFile = void 0;
|
|
44
44
|
const ArkFile_1 = require("../../../core/model/ArkFile");
|
|
45
|
+
const SdkUtils_1 = require("../../../core/common/SdkUtils");
|
|
45
46
|
const ArkSignature_1 = require("../../../core/model/ArkSignature");
|
|
46
47
|
const ArkExport_1 = require("../../../core/model/ArkExport");
|
|
47
48
|
const logger_1 = __importStar(require("../../../utils/logger"));
|
|
@@ -56,6 +57,7 @@ const Const_1 = require("../../../core/common/Const");
|
|
|
56
57
|
const Type_1 = require("../../../core/base/Type");
|
|
57
58
|
const ArkNamespace_1 = require("../../../core/model/ArkNamespace");
|
|
58
59
|
const ModelUtils_1 = require("../../../core/common/ModelUtils");
|
|
60
|
+
const Const_2 = require("../../../core/common/Const");
|
|
59
61
|
const TypeInference_1 = require("../../../core/common/TypeInference");
|
|
60
62
|
const Type_2 = require("../base/Type");
|
|
61
63
|
// Common C++standard library header files (excluding the .h suffix)
|
|
@@ -424,7 +426,7 @@ class CxxModelUtils {
|
|
|
424
426
|
const clsDeclareSignature = arkClass.getDeclareSignature();
|
|
425
427
|
let declClass;
|
|
426
428
|
if (clsDeclareSignature) {
|
|
427
|
-
declClass = (_e = arkClass.getDeclaringArkFile().getScene().getFile(clsDeclareSignature.
|
|
429
|
+
declClass = (_e = arkClass.getDeclaringArkFile().getScene().getFile(clsDeclareSignature.getDeclaringFileSigID())) === null || _e === void 0 ? void 0 : _e.getClass(clsDeclareSignature);
|
|
428
430
|
}
|
|
429
431
|
const heritageClasses = arkClass.getAllHeritageClasses();
|
|
430
432
|
if (declClass) {
|
|
@@ -440,7 +442,7 @@ class CxxModelUtils {
|
|
|
440
442
|
return property;
|
|
441
443
|
}
|
|
442
444
|
}
|
|
443
|
-
const objectClass =
|
|
445
|
+
const objectClass = SdkUtils_1.SdkUtils.getSdkGlobal('Object');
|
|
444
446
|
if (objectClass instanceof ArkClass_1.ArkClass && arkClass !== objectClass) {
|
|
445
447
|
return this.findPropertyInClass(name, objectClass);
|
|
446
448
|
}
|
|
@@ -459,7 +461,7 @@ class CxxModelUtils {
|
|
|
459
461
|
static getStaticMethodWithName(methodName, thisClass) {
|
|
460
462
|
const thisNamespace = thisClass.getDeclaringArkNamespace();
|
|
461
463
|
if (thisNamespace) {
|
|
462
|
-
const defaultClass = thisNamespace.
|
|
464
|
+
const defaultClass = thisNamespace.getDefaultClass();
|
|
463
465
|
if (defaultClass) {
|
|
464
466
|
const method = defaultClass.getMethodWithName(methodName);
|
|
465
467
|
if (method) {
|
|
@@ -507,6 +509,79 @@ class CxxModelUtils {
|
|
|
507
509
|
}
|
|
508
510
|
return undefined;
|
|
509
511
|
}
|
|
512
|
+
/**
|
|
513
|
+
* Resolve a nested class / local class referenced by its short (unqualified) name.
|
|
514
|
+
*
|
|
515
|
+
* C++ name lookup makes nested classes visible by their bare name inside the
|
|
516
|
+
* enclosing class, but the analyzer stores them under a composed top-level name
|
|
517
|
+
* (`Inner$Outer`, multi-level chains like `I$I2$Outer`, method-local classes as
|
|
518
|
+
* `L$Cls.m`). Instead of fuzzy prefix matching on the container's class list,
|
|
519
|
+
* this walks the enclosing-name chain of the context class and resolves each
|
|
520
|
+
* candidate by an exact ClassSignature lookup (O(1) per candidate).
|
|
521
|
+
*
|
|
522
|
+
* Candidate order follows C++ scoping (innermost first), so a same-name nested
|
|
523
|
+
* class correctly shadows an outer/top-level class.
|
|
524
|
+
* @param shortName - the bare source name of the nested class
|
|
525
|
+
* @param ctxClass - the class where the reference occurs (scope context)
|
|
526
|
+
* @param ctxMethod - optional; the method where the reference occurs. When present,
|
|
527
|
+
* classes declared inside the method body (`L$Cls.m`) are also considered.
|
|
528
|
+
* @returns The matching ArkClass, or null when no candidate resolves.
|
|
529
|
+
*/
|
|
530
|
+
static findClassByShortName(shortName, ctxClass, ctxMethod) {
|
|
531
|
+
if (!shortName || shortName.includes(Const_1.NAME_DELIMITER)) {
|
|
532
|
+
return null;
|
|
533
|
+
}
|
|
534
|
+
// Enclosing-name chain: 'I2$Outer' -> ['I2$Outer', 'Outer']; top-level 'Outer' -> ['Outer']. `%dflt`(file 级函数的容器)放行——cpp 方法局部类
|
|
535
|
+
// 挂载约定为 `short$%dflt.method`,排除它会使顶层函数上下文的局部类候选链恒空(structBinding Person %unk 实证)。其余 % 前缀合成名
|
|
536
|
+
// (%AC0 匿名类等)仍排除;%dflt 无 $ 分隔符,下钻循环自然终止。
|
|
537
|
+
const enclosingChain = [];
|
|
538
|
+
let scopeName = ctxClass.getName();
|
|
539
|
+
while (scopeName && scopeName.length > 0 && (!scopeName.startsWith('%') || scopeName === Const_2.DEFAULT_ARK_CLASS_NAME)) {
|
|
540
|
+
enclosingChain.push(scopeName);
|
|
541
|
+
const idx = scopeName.indexOf(Const_1.NAME_DELIMITER);
|
|
542
|
+
if (idx <= 0) {
|
|
543
|
+
break;
|
|
544
|
+
}
|
|
545
|
+
scopeName = scopeName.substring(idx + 1);
|
|
546
|
+
}
|
|
547
|
+
if (enclosingChain.length === 0) {
|
|
548
|
+
return null;
|
|
549
|
+
}
|
|
550
|
+
const file = ctxClass.getDeclaringArkFile();
|
|
551
|
+
const ns = ctxClass.getDeclaringArkNamespace();
|
|
552
|
+
const fileID = ns ? ns.getDeclaringFileID() : file.getFileSigID();
|
|
553
|
+
const nsSigID = ns ? ns.getNamespaceSigID() : undefined;
|
|
554
|
+
const tryCandidates = (candidates) => {
|
|
555
|
+
for (const candidate of candidates) {
|
|
556
|
+
const cls = ns ? ns.getClass(new ArkSignature_1.ClassSignature(candidate, fileID, nsSigID)) : file.getClass(new ArkSignature_1.ClassSignature(candidate, fileID));
|
|
557
|
+
if (cls) {
|
|
558
|
+
return cls;
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
return null;
|
|
562
|
+
};
|
|
563
|
+
// 1. Nested classes inside the enclosing chain (innermost scope first).
|
|
564
|
+
const nestedCandidates = [];
|
|
565
|
+
for (const enclosing of enclosingChain) {
|
|
566
|
+
nestedCandidates.push(shortName + Const_1.NAME_DELIMITER + enclosing);
|
|
567
|
+
}
|
|
568
|
+
const nested = tryCandidates(nestedCandidates);
|
|
569
|
+
if (nested) {
|
|
570
|
+
return nested;
|
|
571
|
+
}
|
|
572
|
+
// 2. Method-local classes (composed with '.' as the method separator).
|
|
573
|
+
if (ctxMethod) {
|
|
574
|
+
const methodLocalCandidates = [];
|
|
575
|
+
for (const enclosing of enclosingChain) {
|
|
576
|
+
methodLocalCandidates.push(shortName + Const_1.NAME_DELIMITER + enclosing + '.' + ctxMethod.getName());
|
|
577
|
+
}
|
|
578
|
+
const local = tryCandidates(methodLocalCandidates);
|
|
579
|
+
if (local) {
|
|
580
|
+
return local;
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
return null;
|
|
584
|
+
}
|
|
510
585
|
static findSymbolInFileWithName(symbolName, arkClass, onlyType = false) {
|
|
511
586
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
512
587
|
// find symbol from enum value
|
|
@@ -516,6 +591,12 @@ class CxxModelUtils {
|
|
|
516
591
|
return new Local_1.Local(symbolName, (_a = TypeInference_1.TypeInference.getEnumValueType(field)) !== null && _a !== void 0 ? _a : field.getType());
|
|
517
592
|
}
|
|
518
593
|
}
|
|
594
|
+
// Nested classes are visible by their bare name inside the enclosing class scope;
|
|
595
|
+
// resolve them first (inner scope shadows outer) before the container-level search.
|
|
596
|
+
const nestedByShortName = this.findClassByShortName(symbolName, arkClass);
|
|
597
|
+
if (nestedByShortName) {
|
|
598
|
+
return nestedByShortName;
|
|
599
|
+
}
|
|
519
600
|
// look up symbol from inner to outer
|
|
520
601
|
let currNamespace = arkClass.getDeclaringArkNamespace();
|
|
521
602
|
let result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeInference.d.ts","sourceRoot":"","sources":["../../../../src/frontend/cppFrontend/common/TypeInference.ts"],"names":[],"mappings":"AAgBA,OAAO,EAA0F,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"TypeInference.d.ts","sourceRoot":"","sources":["../../../../src/frontend/cppFrontend/common/TypeInference.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,7 +65,9 @@ const Builtin_2 = require("./Builtin");
|
|
|
65
65
|
const ModelUtils_2 = require("./ModelUtils");
|
|
66
66
|
const ArkFile_1 = require("../../../core/model/ArkFile");
|
|
67
67
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'TypeInference');
|
|
68
|
-
|
|
68
|
+
// Builtin stub signatures carry FileSignature.DEFAULT whose fileName is UNKNOWN_FILE_NAME,
|
|
69
|
+
// so a single entry covers both unresolved references and builtin stubs.
|
|
70
|
+
const unknownFileName = [Const_1.UNKNOWN_FILE_NAME];
|
|
69
71
|
class TypeInference {
|
|
70
72
|
static inferTypeInArkField(arkField) {
|
|
71
73
|
var _a, _b;
|
|
@@ -96,11 +98,12 @@ class TypeInference {
|
|
|
96
98
|
}
|
|
97
99
|
if (fieldType) {
|
|
98
100
|
arkField.getSignature().setType(fieldType);
|
|
99
|
-
|
|
101
|
+
// A2 快路径:定义点 canonical 回写(ID 直读,graduateToFormal)。
|
|
102
|
+
fieldRef === null || fieldRef === void 0 ? void 0 : fieldRef.graduateToFormal(arkField.getFieldSigID());
|
|
100
103
|
}
|
|
101
104
|
else if (rightType && this.isUnclearType(beforeType) && !this.isUnclearType(rightType)) {
|
|
102
105
|
arkField.getSignature().setType(rightType);
|
|
103
|
-
fieldRef === null || fieldRef === void 0 ? void 0 : fieldRef.
|
|
106
|
+
fieldRef === null || fieldRef === void 0 ? void 0 : fieldRef.graduateToFormal(arkField.getFieldSigID());
|
|
104
107
|
}
|
|
105
108
|
}
|
|
106
109
|
/**
|
|
@@ -177,7 +180,10 @@ class TypeInference {
|
|
|
177
180
|
}
|
|
178
181
|
}
|
|
179
182
|
else if (leftOpType instanceof Type_1.AliasType) {
|
|
180
|
-
const defArkClass = (_a = declaringArkClass
|
|
183
|
+
const defArkClass = (_a = declaringArkClass
|
|
184
|
+
.getDeclaringArkFile()
|
|
185
|
+
.getScene()
|
|
186
|
+
.getMethod(leftOpType.getSignature().getDeclaringMethodSignature())) === null || _a === void 0 ? void 0 : _a.getDeclaringArkClass();
|
|
181
187
|
let baseType = this.inferUnclearedType(leftOpType.getOriginalType(), defArkClass !== null && defArkClass !== void 0 ? defArkClass : declaringArkClass, visited);
|
|
182
188
|
if (baseType) {
|
|
183
189
|
leftOpType.setOriginalType(baseType);
|
|
@@ -191,7 +197,7 @@ class TypeInference {
|
|
|
191
197
|
* @param arkMethod Ark method object for type inference
|
|
192
198
|
*/
|
|
193
199
|
static inferTypeInMethod(arkMethod) {
|
|
194
|
-
var _a
|
|
200
|
+
var _a;
|
|
195
201
|
const arkClass = arkMethod.getDeclaringArkClass();
|
|
196
202
|
this.inferGenericType(arkMethod.getGenericTypes(), arkClass);
|
|
197
203
|
const signatures = [];
|
|
@@ -212,15 +218,24 @@ class TypeInference {
|
|
|
212
218
|
signatures.forEach(s => this.inferSignatureReturnType(s, arkMethod));
|
|
213
219
|
return;
|
|
214
220
|
}
|
|
215
|
-
|
|
216
|
-
|
|
221
|
+
const usedGlobals = body.getUsedGlobals();
|
|
222
|
+
if (usedGlobals !== undefined) {
|
|
223
|
+
for (const key of usedGlobals.keys()) {
|
|
224
|
+
const value = usedGlobals.get(key);
|
|
225
|
+
if (!(value instanceof Ref_1.GlobalRef) || value.getRef()) {
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
217
228
|
const arkExport = ModelUtils_1.ModelUtils.findGlobalRef(key, arkMethod);
|
|
218
|
-
if (arkExport instanceof Local_1.Local) {
|
|
219
|
-
|
|
220
|
-
value.setRef(arkExport);
|
|
229
|
+
if (!(arkExport instanceof Local_1.Local)) {
|
|
230
|
+
continue;
|
|
221
231
|
}
|
|
232
|
+
const usedStmts = value.getUsedStmts();
|
|
233
|
+
for (let i = 0; i < usedStmts.length; i++) {
|
|
234
|
+
arkExport.addUsedStmt(usedStmts[i]);
|
|
235
|
+
}
|
|
236
|
+
value.setRef(arkExport);
|
|
222
237
|
}
|
|
223
|
-
}
|
|
238
|
+
}
|
|
224
239
|
const cfg = body.getCfg();
|
|
225
240
|
for (const block of cfg.getBlocks()) {
|
|
226
241
|
for (const stmt of block.getStmts()) {
|
|
@@ -517,7 +532,8 @@ class TypeInference {
|
|
|
517
532
|
leftType = rightType;
|
|
518
533
|
}
|
|
519
534
|
}
|
|
520
|
-
else if (baseType instanceof Type_1.FunctionType &&
|
|
535
|
+
else if (baseType instanceof Type_1.FunctionType &&
|
|
536
|
+
!this.isUnclearType(rightType) &&
|
|
521
537
|
baseType.getMethodSignature().getMethodSubSignature().getMethodName().startsWith(Const_1.ANONYMOUS_METHOD_PREFIX)) {
|
|
522
538
|
leftType = rightType;
|
|
523
539
|
}
|
|
@@ -546,40 +562,10 @@ class TypeInference {
|
|
|
546
562
|
* @returns true if the type is unclear, otherwise false
|
|
547
563
|
*/
|
|
548
564
|
static isUnclearType(type) {
|
|
549
|
-
|
|
550
|
-
//
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
type instanceof Type_1.UnclearReferenceType ||
|
|
554
|
-
type instanceof Type_1.NullType ||
|
|
555
|
-
type instanceof Type_1.UndefinedType ||
|
|
556
|
-
type instanceof Type_1.GenericType) {
|
|
557
|
-
return true;
|
|
558
|
-
}
|
|
559
|
-
else if (type instanceof Type_1.ClassType &&
|
|
560
|
-
(type.getClassSignature().getDeclaringFileSignature().getFileName() === Const_1.UNKNOWN_FILE_NAME ||
|
|
561
|
-
(type.getClassSignature().getClassName() === TSConst_1.PROMISE && !type.getRealGenericTypes()) ||
|
|
562
|
-
(type.getClassSignature().getDeclaringFileSignature().getFileName() === Builtin_1.Builtin.DUMMY_FILE_NAME &&
|
|
563
|
-
((_a = type.getRealGenericTypes()) === null || _a === void 0 ? void 0 : _a.find(t => t instanceof Type_1.GenericType))))) {
|
|
564
|
-
return true;
|
|
565
|
-
}
|
|
566
|
-
else if (type instanceof Type_1.UnionType || type instanceof Type_1.IntersectionType || type instanceof Type_1.TupleType) {
|
|
567
|
-
return !!type.getTypes().find(t => this.checkType(t, e => e instanceof Type_1.UnclearReferenceType || e instanceof Type_1.GenericType));
|
|
568
|
-
}
|
|
569
|
-
else if (type instanceof Type_1.ArrayType) {
|
|
570
|
-
const baseType = type.getBaseType();
|
|
571
|
-
return this.checkType(baseType, t => t instanceof Type_1.UnclearReferenceType || baseType instanceof Type_1.GenericType);
|
|
572
|
-
}
|
|
573
|
-
else if (type instanceof Type_1.AliasType) {
|
|
574
|
-
return this.isUnclearType(type.getOriginalType());
|
|
575
|
-
}
|
|
576
|
-
else if (type instanceof TypeExpr_1.KeyofTypeExpr) {
|
|
577
|
-
return this.isUnclearType(type.getOpType());
|
|
578
|
-
}
|
|
579
|
-
else if (type instanceof TypeExpr_1.TypeQueryExpr) {
|
|
580
|
-
return this.isUnclearType(type.getType());
|
|
581
|
-
}
|
|
582
|
-
return false;
|
|
565
|
+
// Thin delegate to the polymorphic Type.isUnclear() — the cpp-specific instanceof chain (including the PointerType/ReferenceType recursion,
|
|
566
|
+
// now owned by those classes) has converged with the core semantics. The unified implementation checks TypeQueryExpr.generateTypes
|
|
567
|
+
// (intentional convergence with core semantics).
|
|
568
|
+
return type === null || type === undefined ? true : type.isUnclear();
|
|
583
569
|
}
|
|
584
570
|
/**
|
|
585
571
|
* This is the temporal function to check Type recursively and can be removed after typeInfer supports multiple candidate types.
|
|
@@ -870,7 +856,7 @@ class TypeInference {
|
|
|
870
856
|
const types = Array.from(typeMap.values());
|
|
871
857
|
let returnType = types.length === 1 ? types[0] : new Type_1.UnionType(types);
|
|
872
858
|
if (arkMethod.containsModifier(ArkBaseModel_1.ModifierType.ASYNC)) {
|
|
873
|
-
const promise =
|
|
859
|
+
const promise = SdkUtils_1.SdkUtils.getSdkGlobal(TSConst_1.PROMISE);
|
|
874
860
|
if (promise instanceof ArkClass_1.ArkClass) {
|
|
875
861
|
returnType = new Type_1.ClassType(promise.getSignature(), [returnType]);
|
|
876
862
|
}
|
|
@@ -990,7 +976,8 @@ class TypeInference {
|
|
|
990
976
|
}
|
|
991
977
|
if (typeWithoutPtrOrRef instanceof Type_1.ClassType) {
|
|
992
978
|
if (fieldName === Builtin_1.Builtin.ITERATOR_RESULT_VALUE &&
|
|
993
|
-
typeWithoutPtrOrRef.
|
|
979
|
+
typeWithoutPtrOrRef.getClassSigID() === -1 &&
|
|
980
|
+
typeWithoutPtrOrRef.getClassSignature().getClassName() === Builtin_2.BuiltinCxx.ITERATOR_RESULT) {
|
|
994
981
|
const types = typeWithoutPtrOrRef.getRealGenericTypes();
|
|
995
982
|
if (types && types.length > 0) {
|
|
996
983
|
return [null, types[0]];
|
|
@@ -1072,7 +1059,7 @@ class TypeInference {
|
|
|
1072
1059
|
return enumValueType;
|
|
1073
1060
|
}
|
|
1074
1061
|
static inferArrayFieldType(declareClass, fieldName) {
|
|
1075
|
-
const arrayClass =
|
|
1062
|
+
const arrayClass = SdkUtils_1.SdkUtils.getSdkGlobal(Builtin_1.Builtin.ARRAY);
|
|
1076
1063
|
if (arrayClass instanceof ArkClass_1.ArkClass) {
|
|
1077
1064
|
const property = ModelUtils_2.CxxModelUtils.findPropertyInClass(fieldName, arrayClass);
|
|
1078
1065
|
if (property instanceof ArkField_1.ArkField) {
|
|
@@ -1098,7 +1085,7 @@ class TypeInference {
|
|
|
1098
1085
|
}
|
|
1099
1086
|
let arkExport = (_b = ModelUtils_2.CxxModelUtils.findSymbolInFileWithName(baseName, arkClass)) !== null && _b !== void 0 ? _b : ModelUtils_2.CxxModelUtils.getArkExportInImportInfoWithName(baseName, arkClass.getDeclaringArkFile(), arkClass);
|
|
1100
1087
|
if (!arkExport && !arkClass.getDeclaringArkFile().getImportInfoBy(baseName)) {
|
|
1101
|
-
arkExport =
|
|
1088
|
+
arkExport = SdkUtils_1.SdkUtils.getSdkGlobal(baseName);
|
|
1102
1089
|
}
|
|
1103
1090
|
return this.parseArkExport2Type(arkExport);
|
|
1104
1091
|
}
|
|
@@ -1116,7 +1103,7 @@ class TypeInference {
|
|
|
1116
1103
|
//if not found or local in built-in then look up global in sdks
|
|
1117
1104
|
if ((!arkExport || (arkExport instanceof Local_1.Local && declaredArkFile.getProjectName() === SdkUtils_1.SdkUtils.BUILT_IN_NAME)) &&
|
|
1118
1105
|
!declaredArkFile.getImportInfoBy(typeName)) {
|
|
1119
|
-
const globalVal =
|
|
1106
|
+
const globalVal = SdkUtils_1.SdkUtils.getSdkGlobal(typeName);
|
|
1120
1107
|
if (globalVal) {
|
|
1121
1108
|
arkExport = globalVal;
|
|
1122
1109
|
}
|
|
@@ -1332,14 +1319,17 @@ class TypeInference {
|
|
|
1332
1319
|
return null;
|
|
1333
1320
|
}
|
|
1334
1321
|
static inferNestedClassType(declareClass, baseType, fieldName) {
|
|
1335
|
-
var _a;
|
|
1336
1322
|
const arkClass = declareClass.getDeclaringArkFile().getScene().getClass(baseType.getClassSignature());
|
|
1337
1323
|
if (!arkClass) {
|
|
1338
1324
|
return null;
|
|
1339
1325
|
}
|
|
1340
|
-
|
|
1326
|
+
// 嵌套类以完整存储名 'field$Outer' 挂在 baseType 类的声明作用域顶层,
|
|
1327
|
+
// 拼归属签名直查(查询名含 $,原前缀模糊匹配本就不可命中,精确等价)
|
|
1341
1328
|
const nestedClassName = fieldName + Const_1.NAME_DELIMITER + baseType.getClassSignature().getClassName();
|
|
1342
|
-
const
|
|
1329
|
+
const declNamespace = arkClass.getDeclaringArkNamespace();
|
|
1330
|
+
const nestedClass = declNamespace
|
|
1331
|
+
? declNamespace.getClass(new ArkSignature_1.ClassSignature(nestedClassName, declNamespace.getDeclaringFileID(), declNamespace.getNamespaceSigID()))
|
|
1332
|
+
: arkClass.getDeclaringArkFile().getClass(new ArkSignature_1.ClassSignature(nestedClassName, arkClass.getDeclaringArkFile().getFileSigID()));
|
|
1343
1333
|
if (!nestedClass) {
|
|
1344
1334
|
return null;
|
|
1345
1335
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CfgBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/frontend/cppFrontend/graph/builder/CfgBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"CfgBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/frontend/cppFrontend/graph/builder/CfgBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.CfgBuilder = exports.TryStatementBuilder = exports.SwitchStatementBuilder = exports.StatementBuilder = exports.Case = exports.BlockBuilder = void 0;
|
|
18
18
|
const Local_1 = require("../../../../core/base/Local");
|
|
19
|
+
const SdkUtils_1 = require("../../../../core/common/SdkUtils");
|
|
19
20
|
const Stmt_1 = require("../../../../core/base/Stmt");
|
|
20
21
|
const BasicBlock_1 = require("../../../../core/graph/BasicBlock");
|
|
21
22
|
const Cfg_1 = require("../../../../core/graph/Cfg");
|
|
@@ -1406,7 +1407,7 @@ class CfgBuilder {
|
|
|
1406
1407
|
}
|
|
1407
1408
|
if (this.declaringMethod.getSubSignature().getReturnType() instanceof Type_1.UnknownType && !this.declaringMethod.getAsteriskToken()) {
|
|
1408
1409
|
if (this.declaringMethod.containsModifier(ArkBaseModel_1.ModifierType.ASYNC)) {
|
|
1409
|
-
const promise =
|
|
1410
|
+
const promise = SdkUtils_1.SdkUtils.getSdkGlobal(TSConst_1.PROMISE);
|
|
1410
1411
|
if (promise instanceof ArkClass_1.ArkClass) {
|
|
1411
1412
|
this.declaringMethod.getSubSignature().setReturnType(new Type_1.ClassType(promise.getSignature()));
|
|
1412
1413
|
}
|
|
@@ -23,6 +23,6 @@ export declare class CxxMethodInference extends MethodInference {
|
|
|
23
23
|
}
|
|
24
24
|
export declare class CxxStmtInference extends StmtInference {
|
|
25
25
|
constructor(valueInferences: ValueInference<Value>[]);
|
|
26
|
-
typeSpread(stmt: Stmt, method: ArkMethod):
|
|
26
|
+
typeSpread(stmt: Stmt, method: ArkMethod): Stmt[] | undefined;
|
|
27
27
|
}
|
|
28
28
|
//# sourceMappingURL=CxxModelInference.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CxxModelInference.d.ts","sourceRoot":"","sources":["../../../../src/frontend/cppFrontend/inference/CxxModelInference.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAC5I,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAA0B,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAEvE,qBAAa,gBAAiB,SAAQ,aAAa;IAC/C,OAAO,CAAC,uBAAuB,CAAc;IAEtC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;CASvC;AAED,qBAAa,kBAAmB,SAAQ,mBAAmB;IAChD,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,IAAI;IAIpC,KAAK,CAAC,QAAQ,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI;CAGxD;AAED,qBAAa,iBAAkB,SAAQ,cAAc;IAC1C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;CAY5C;AAED,qBAAa,kBAAmB,SAAQ,eAAe;IAC5C,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;CAiB9C;AAED,qBAAa,gBAAiB,SAAQ,aAAa;gBACnC,eAAe,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE;IAI7C,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAG,
|
|
1
|
+
{"version":3,"file":"CxxModelInference.d.ts","sourceRoot":"","sources":["../../../../src/frontend/cppFrontend/inference/CxxModelInference.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAC5I,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAA0B,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAEvE,qBAAa,gBAAiB,SAAQ,aAAa;IAC/C,OAAO,CAAC,uBAAuB,CAAc;IAEtC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;CASvC;AAED,qBAAa,kBAAmB,SAAQ,mBAAmB;IAChD,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,IAAI;IAIpC,KAAK,CAAC,QAAQ,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI;CAGxD;AAED,qBAAa,iBAAkB,SAAQ,cAAc;IAC1C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;CAY5C;AAED,qBAAa,kBAAmB,SAAQ,eAAe;IAC5C,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;CAiB9C;AAED,qBAAa,gBAAiB,SAAQ,aAAa;gBACnC,eAAe,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE;IAI7C,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,SAAS;CASvE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CxxValueInference.d.ts","sourceRoot":"","sources":["../../../../src/frontend/cppFrontend/inference/CxxValueInference.ts"],"names":[],"mappings":"AAeA,OAAO,EAAuB,UAAU,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACjG,OAAO,EAAE,mBAAmB,EAAqB,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAE/C,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"CxxValueInference.d.ts","sourceRoot":"","sources":["../../../../src/frontend/cppFrontend/inference/CxxValueInference.ts"],"names":[],"mappings":"AAeA,OAAO,EAAuB,UAAU,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACjG,OAAO,EAAE,mBAAmB,EAAqB,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAE/C,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AAaxH,qBAAa,oBAAqB,SAAQ,iBAAiB;IAChD,YAAY,IAAI,MAAM;IAItB,KAAK,CAAC,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,GAAG,SAAS;CA4C1E;AAED,qBAAa,8BAA+B,SAAQ,2BAA2B;IACpE,QAAQ,CAAC,KAAK,EAAE,qBAAqB,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO;IAO5D,KAAK,CAAC,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,GAAG,SAAS;CAwB5E;AAED,qBAAa,sBAAuB,SAAQ,cAAc,CAAC,UAAU,CAAC;IAC3D,YAAY,IAAI,MAAM;IAItB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IAIpC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,GAAG,SAAS;CA4BjE;AAED,wBAAgB,qBAAqB,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAM/D"}
|
|
@@ -24,6 +24,8 @@ const IRInference_1 = require("../../../core/common/IRInference");
|
|
|
24
24
|
const ModelUtils_1 = require("../../../core/common/ModelUtils");
|
|
25
25
|
const TypeInference_1 = require("../../../core/common/TypeInference");
|
|
26
26
|
const Local_1 = require("../../../core/base/Local");
|
|
27
|
+
const ArkSignature_1 = require("../../../core/model/ArkSignature");
|
|
28
|
+
const SignatureCanonicalizerRegistry_1 = require("../../../core/common/SignatureCanonicalizerRegistry");
|
|
27
29
|
const TypeInference_2 = require("../common/TypeInference");
|
|
28
30
|
const IRInference_2 = require("../common/IRInference");
|
|
29
31
|
const ModelUtils_2 = require("../common/ModelUtils");
|
|
@@ -33,13 +35,47 @@ class CxxFieldRefInference extends ValueInference_1.FieldRefInference {
|
|
|
33
35
|
return 'ArkCxxInstanceFieldRef';
|
|
34
36
|
}
|
|
35
37
|
infer(value, stmt) {
|
|
38
|
+
var _a;
|
|
36
39
|
const baseType = TypeInference_2.TypeInference.replaceAliasType(value.getBase().getType());
|
|
37
40
|
const arkMethod = stmt.getCfg().getDeclaringMethod();
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
// 判别联合消费——保持原语义顺序(先更新 value 再判 static)。
|
|
42
|
+
const resolution = IRInference_2.IRInference.generateNewFieldSignature(value, arkMethod.getDeclaringArkClass(), baseType);
|
|
43
|
+
if (resolution === null) {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
if (resolution.kind === 'formal') {
|
|
47
|
+
const formalId = (_a = resolution.formalId) !== null && _a !== void 0 ? _a : 0;
|
|
48
|
+
if (formalId > 0) {
|
|
49
|
+
value.graduateToFormal(formalId);
|
|
50
|
+
if (resolution.staticFlag) {
|
|
51
|
+
// 替换埋葬:graduateToFormal 已 retire(formal 分支本就正确)——此处返回的 static ref 产物为 canonical。
|
|
52
|
+
const canonical = SignatureCanonicalizerRegistry_1.SignatureCanonicalizerRegistry.getInstance().fieldSigCanonicalizer.get(formalId);
|
|
53
|
+
return new Ref_1.ArkStaticFieldRef(canonical);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
const params = resolution;
|
|
59
|
+
value.updateFieldSignature(params.fieldName, params.declaringOrID, params.type, params.staticFlag, params.namespaceDeclared);
|
|
60
|
+
if (params.staticFlag) {
|
|
61
|
+
let staticSig;
|
|
62
|
+
if (typeof params.declaringOrID === 'number') {
|
|
63
|
+
staticSig = params.namespaceDeclared
|
|
64
|
+
? new ArkSignature_1.FieldSignature(params.fieldName, params.declaringOrID, params.type, params.staticFlag, true)
|
|
65
|
+
: new ArkSignature_1.FieldSignature(params.fieldName, params.declaringOrID, params.type, params.staticFlag);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
staticSig = new ArkSignature_1.FieldSignature(params.fieldName, params.declaringOrID, params.type, params.staticFlag);
|
|
69
|
+
}
|
|
70
|
+
// probe:miss 时 params 携带值空间成员(ns 导出的 class/enum 等,字段
|
|
71
|
+
// 空间无 formal 归宿)——转换会走 clear+miss error 路由并多占一个
|
|
72
|
+
// slot;miss 保持 update 就地演进后的 value(不 retire、不转换)。
|
|
73
|
+
if (SignatureCanonicalizerRegistry_1.SignatureCanonicalizerRegistry.getInstance().fieldSigCanonicalizer.getExistingId(staticSig) !== -1) {
|
|
74
|
+
// 替换埋葬:static params 形态——value 的 temp 行已被 update
|
|
75
|
+
// (就地演进保持),但 value 即将被返回的 static ref 替换(IR 层
|
|
76
|
+
// 替换)——纯 retire(params 值非 formal,无归宿记录)。
|
|
77
|
+
value.retireTemp();
|
|
78
|
+
return new Ref_1.ArkStaticFieldRef(staticSig);
|
|
43
79
|
}
|
|
44
80
|
}
|
|
45
81
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArkClassBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/frontend/cppFrontend/model/builder/ArkClassBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAEnE,OAAO,EAAE,QAAQ,EAAwC,MAAM,iCAAiC,CAAC;AAUjG,OAAO,
|
|
1
|
+
{"version":3,"file":"ArkClassBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/frontend/cppFrontend/model/builder/ArkClassBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAEnE,OAAO,EAAE,QAAQ,EAAwC,MAAM,iCAAiC,CAAC;AAUjG,OAAO,EAAE,UAAU,EAAgF,MAAM,2BAA2B,CAAC;AAerI,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI,CAOnJ;AAED,wBAAgB,8BAA8B,CAC1C,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,QAAQ,EACb,UAAU,EAAE,UAAU,EACtB,SAAS,CAAC,EAAE,SAAS,GAAG,QAAQ,GACjC,IAAI,CAIN;AAED,wBAAgB,mCAAmC,CAC/C,OAAO,EAAE,UAAU,EACnB,YAAY,EAAE,YAAY,EAC1B,GAAG,EAAE,QAAQ,EACb,UAAU,EAAE,UAAU,EACtB,SAAS,CAAC,EAAE,SAAS,GAAG,QAAQ,GACjC,IAAI,CAIN;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI,CAwBtI;AAkPD,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAGnH"}
|