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
package/lib/core/base/Expr.js
CHANGED
|
@@ -13,11 +13,37 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
19
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
20
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
21
|
+
}
|
|
22
|
+
Object.defineProperty(o, k2, desc);
|
|
23
|
+
}) : (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
o[k2] = m[k];
|
|
26
|
+
}));
|
|
27
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
28
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
29
|
+
}) : function(o, v) {
|
|
30
|
+
o["default"] = v;
|
|
31
|
+
});
|
|
32
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
16
39
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
40
|
exports.AliasTypeExpr = exports.ArkUnopExpr = exports.UnaryOperator = exports.ArkPhiExpr = exports.ArkCastExpr = exports.ArkInstanceOfExpr = exports.ArkTypeOfExpr = exports.ArkNormalBinopExpr = exports.ArkConditionExpr = exports.AbstractBinopExpr = exports.RelationalBinaryOperator = exports.NormalBinaryOperator = exports.ArkYieldExpr = exports.ArkAwaitExpr = exports.ArkDeleteExpr = exports.ArkNewArrayExpr = exports.ArkNewExpr = exports.ArkPtrInvokeExpr = exports.ArkStaticInvokeExpr = exports.ArkInstanceInvokeExpr = exports.AbstractInvokeExpr = exports.AbstractExpr = void 0;
|
|
18
41
|
const TypeInference_1 = require("../common/TypeInference");
|
|
42
|
+
const SignatureCanonicalizerRegistry_1 = require("../common/SignatureCanonicalizerRegistry");
|
|
43
|
+
const SdkUtils_1 = require("../common/SdkUtils");
|
|
19
44
|
const Local_1 = require("./Local");
|
|
20
45
|
const Type_1 = require("./Type");
|
|
46
|
+
const Value_1 = require("./Value");
|
|
21
47
|
const Ref_1 = require("./Ref");
|
|
22
48
|
const ValueUtil_1 = require("../common/ValueUtil");
|
|
23
49
|
const ArkMethod_1 = require("../model/ArkMethod");
|
|
@@ -30,6 +56,8 @@ const ModelUtils_1 = require("../common/ModelUtils");
|
|
|
30
56
|
const Type_2 = require("../../frontend/cppFrontend/base/Type");
|
|
31
57
|
const cppUtils_1 = require("../../frontend/cppFrontend/utils/cppUtils");
|
|
32
58
|
const Stmt_1 = require("./Stmt");
|
|
59
|
+
const logger_1 = __importStar(require("../../utils/logger"));
|
|
60
|
+
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'Expr');
|
|
33
61
|
const CXX_SOURCE_EXTENSION_SET = (0, cppUtils_1.getCxxSourceFileExtensionSet)();
|
|
34
62
|
function isCxxLikeFileName(fileName) {
|
|
35
63
|
const normalized = fileName.toLowerCase();
|
|
@@ -43,6 +71,7 @@ function isCxxLikeFileName(fileName) {
|
|
|
43
71
|
/**
|
|
44
72
|
* @category core/base/expr
|
|
45
73
|
*/
|
|
74
|
+
const IS_GENERIC_OR_ANY = (t) => t instanceof Type_1.GenericType || t instanceof Type_1.AnyType;
|
|
46
75
|
class AbstractExpr {
|
|
47
76
|
inferType(arkMethod) {
|
|
48
77
|
return this;
|
|
@@ -52,10 +81,41 @@ exports.AbstractExpr = AbstractExpr;
|
|
|
52
81
|
class AbstractInvokeExpr extends AbstractExpr {
|
|
53
82
|
constructor(methodSignature, args, realGenericTypes, spreadFlags) {
|
|
54
83
|
super();
|
|
55
|
-
this.methodSignature = methodSignature;
|
|
56
84
|
this.args = args;
|
|
57
85
|
this.realGenericTypes = realGenericTypes;
|
|
58
86
|
this.spreadFlags = spreadFlags;
|
|
87
|
+
this.route(methodSignature);
|
|
88
|
+
}
|
|
89
|
+
route(methodSignature) {
|
|
90
|
+
const reg = SignatureCanonicalizerRegistry_1.SignatureCanonicalizerRegistry.getInstance();
|
|
91
|
+
if (methodSignature.isUnclear()) {
|
|
92
|
+
this.methodSigID = -1;
|
|
93
|
+
this.tempMethodSigID = reg.tempMethodSigCanonicalizer.register(methodSignature);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const existingId = reg.methodSigCanonicalizer.getExistingId(methodSignature);
|
|
97
|
+
if (existingId !== -1) {
|
|
98
|
+
if (this.tempMethodSigID !== undefined) {
|
|
99
|
+
reg.tempMethodSigCanonicalizer.retireWithReplacement(this.tempMethodSigID, existingId);
|
|
100
|
+
}
|
|
101
|
+
this.methodSigID = existingId;
|
|
102
|
+
this.tempMethodSigID = undefined;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
logger.error(`AbstractInvokeExpr: clear MethodSignature not interned (route) — routing to temp defensively: ${methodSignature.toString()}`);
|
|
106
|
+
this.methodSigID = -1;
|
|
107
|
+
this.tempMethodSigID = reg.tempMethodSigCanonicalizer.register(methodSignature);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Returns the absolute full position of `methodName(...)` captured from the AST,
|
|
112
|
+
* or undefined when this invoke was synthesized during IR construction.
|
|
113
|
+
*/
|
|
114
|
+
getInvokeFullPosition() {
|
|
115
|
+
return this.invokeFullPosition;
|
|
116
|
+
}
|
|
117
|
+
setInvokeFullPosition(invokeFullPosition) {
|
|
118
|
+
this.invokeFullPosition = invokeFullPosition;
|
|
59
119
|
}
|
|
60
120
|
/**
|
|
61
121
|
* Get method Signature. The method signature is consist of ClassSignature and MethodSubSignature.
|
|
@@ -72,10 +132,42 @@ class AbstractInvokeExpr extends AbstractExpr {
|
|
|
72
132
|
```
|
|
73
133
|
*/
|
|
74
134
|
getMethodSignature() {
|
|
75
|
-
|
|
135
|
+
const reg = SignatureCanonicalizerRegistry_1.SignatureCanonicalizerRegistry.getInstance();
|
|
136
|
+
if (this.methodSigID >= 0) {
|
|
137
|
+
return reg.methodSigCanonicalizer.get(this.methodSigID);
|
|
138
|
+
}
|
|
139
|
+
if (this.tempMethodSigID !== undefined) {
|
|
140
|
+
const sig = reg.tempMethodSigCanonicalizer.get(this.tempMethodSigID);
|
|
141
|
+
if (sig !== undefined) {
|
|
142
|
+
return sig;
|
|
143
|
+
}
|
|
144
|
+
const formalId = reg.tempMethodSigCanonicalizer.getReplacement(this.tempMethodSigID);
|
|
145
|
+
if (formalId !== -1) {
|
|
146
|
+
const formalSig = reg.methodSigCanonicalizer.get(formalId);
|
|
147
|
+
if (formalSig !== undefined) {
|
|
148
|
+
this.methodSigID = formalId;
|
|
149
|
+
return formalSig;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
throw new Error('AbstractInvokeExpr has no signature');
|
|
76
154
|
}
|
|
77
155
|
setMethodSignature(newMethodSignature) {
|
|
78
|
-
this.
|
|
156
|
+
this.route(newMethodSignature);
|
|
157
|
+
}
|
|
158
|
+
/** @internal Get the formal MethodSigID. Returns -1 if not interned (temp-held). */
|
|
159
|
+
getMethodSigID() {
|
|
160
|
+
return this.methodSigID;
|
|
161
|
+
}
|
|
162
|
+
/** @internal Get the temp MethodSigID for the unresolved-signature registration. */
|
|
163
|
+
getTempSigID() {
|
|
164
|
+
return this.tempMethodSigID;
|
|
165
|
+
}
|
|
166
|
+
/** @internal 纯 retire,新签名依旧是temp,且会在别处构造。*/
|
|
167
|
+
retireTemp() {
|
|
168
|
+
if (this.methodSigID === -1 && this.tempMethodSigID !== undefined) {
|
|
169
|
+
SignatureCanonicalizerRegistry_1.SignatureCanonicalizerRegistry.getInstance().tempMethodSigCanonicalizer.retire(this.tempMethodSigID);
|
|
170
|
+
}
|
|
79
171
|
}
|
|
80
172
|
/**
|
|
81
173
|
* Returns an argument used in the expression according to its index.
|
|
@@ -114,8 +206,8 @@ class AbstractInvokeExpr extends AbstractExpr {
|
|
|
114
206
|
this.args = newArgs;
|
|
115
207
|
}
|
|
116
208
|
getType() {
|
|
117
|
-
const type = this.
|
|
118
|
-
if (TypeInference_1.TypeInference.checkType(type,
|
|
209
|
+
const type = this.getMethodSignature().getType();
|
|
210
|
+
if (TypeInference_1.TypeInference.checkType(type, IS_GENERIC_OR_ANY) && this.realGenericTypes) {
|
|
119
211
|
return TypeInference_1.TypeInference.replaceTypeWithReal(type, this.realGenericTypes);
|
|
120
212
|
}
|
|
121
213
|
return type;
|
|
@@ -131,13 +223,15 @@ class AbstractInvokeExpr extends AbstractExpr {
|
|
|
131
223
|
getSpreadFlags() {
|
|
132
224
|
return this.spreadFlags;
|
|
133
225
|
}
|
|
134
|
-
getUses() {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
uses.push(...arg.getUses());
|
|
226
|
+
getUses(acc = []) {
|
|
227
|
+
const args = this.args;
|
|
228
|
+
for (let i = 0; i < args.length; i++) {
|
|
229
|
+
acc.push(args[i]);
|
|
139
230
|
}
|
|
140
|
-
|
|
231
|
+
for (let i = 0; i < args.length; i++) {
|
|
232
|
+
args[i].getUses(acc);
|
|
233
|
+
}
|
|
234
|
+
return acc;
|
|
141
235
|
}
|
|
142
236
|
/**
|
|
143
237
|
*Convert parameter list to string representation
|
|
@@ -182,15 +276,17 @@ class ArkInstanceInvokeExpr extends AbstractInvokeExpr {
|
|
|
182
276
|
* For {@link ArkInstanceInvokeExpr}, the return also contains the caller base and uses of base.
|
|
183
277
|
* @returns An **array** of arguments used in the invoke expression.
|
|
184
278
|
*/
|
|
185
|
-
getUses() {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
279
|
+
getUses(acc = []) {
|
|
280
|
+
acc.push(this.base);
|
|
281
|
+
this.base.getUses(acc);
|
|
282
|
+
const args = this.getArgs();
|
|
283
|
+
for (let i = 0; i < args.length; i++) {
|
|
284
|
+
acc.push(args[i]);
|
|
285
|
+
}
|
|
286
|
+
for (let i = 0; i < args.length; i++) {
|
|
287
|
+
args[i].getUses(acc);
|
|
192
288
|
}
|
|
193
|
-
return
|
|
289
|
+
return acc;
|
|
194
290
|
}
|
|
195
291
|
toString() {
|
|
196
292
|
let strs = [];
|
|
@@ -293,9 +389,9 @@ class ArkPtrInvokeExpr extends AbstractInvokeExpr {
|
|
|
293
389
|
}
|
|
294
390
|
const fileName = sig.getDeclaringClassSignature().getDeclaringFileSignature().getFileName().toLowerCase();
|
|
295
391
|
const isCxxFile = isCxxLikeFileName(fileName);
|
|
296
|
-
const ptrDeclFileName = this.funPtr instanceof Local_1.Local
|
|
297
|
-
(_d = (_c = (_b = (_a = this.funPtr.getDeclaringStmt()) === null || _a === void 0 ? void 0 : _a.getCfg()) === null || _b === void 0 ? void 0 : _b.getDeclaringMethod()) === null || _c === void 0 ? void 0 : _c.getDeclaringArkFile().getName().toLowerCase()) !== null && _d !== void 0 ? _d : ''
|
|
298
|
-
'';
|
|
392
|
+
const ptrDeclFileName = this.funPtr instanceof Local_1.Local
|
|
393
|
+
? ((_d = (_c = (_b = (_a = this.funPtr.getDeclaringStmt()) === null || _a === void 0 ? void 0 : _a.getCfg()) === null || _b === void 0 ? void 0 : _b.getDeclaringMethod()) === null || _c === void 0 ? void 0 : _c.getDeclaringArkFile().getName().toLowerCase()) !== null && _d !== void 0 ? _d : '')
|
|
394
|
+
: '';
|
|
299
395
|
const isCxxPtrDecl = isCxxLikeFileName(ptrDeclFileName);
|
|
300
396
|
const isUnknownCxxLike = sigFileName === Const_1.UNKNOWN_FILE_NAME && isCxxPtrDecl;
|
|
301
397
|
let ptrName = '';
|
|
@@ -325,14 +421,16 @@ class ArkPtrInvokeExpr extends AbstractInvokeExpr {
|
|
|
325
421
|
strs.push(super.argsToString());
|
|
326
422
|
return strs.join('');
|
|
327
423
|
}
|
|
328
|
-
getUses() {
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
424
|
+
getUses(acc = []) {
|
|
425
|
+
acc.push(this.getFuncPtrLocal());
|
|
426
|
+
const args = this.getArgs();
|
|
427
|
+
for (let i = 0; i < args.length; i++) {
|
|
428
|
+
acc.push(args[i]);
|
|
429
|
+
}
|
|
430
|
+
for (let i = 0; i < args.length; i++) {
|
|
431
|
+
args[i].getUses(acc);
|
|
334
432
|
}
|
|
335
|
-
return
|
|
433
|
+
return acc;
|
|
336
434
|
}
|
|
337
435
|
}
|
|
338
436
|
exports.ArkPtrInvokeExpr = ArkPtrInvokeExpr;
|
|
@@ -344,8 +442,8 @@ class ArkNewExpr extends AbstractExpr {
|
|
|
344
442
|
getClassType() {
|
|
345
443
|
return this.classType;
|
|
346
444
|
}
|
|
347
|
-
getUses() {
|
|
348
|
-
return
|
|
445
|
+
getUses(acc) {
|
|
446
|
+
return acc !== null && acc !== void 0 ? acc : Value_1.EMPTY_USES;
|
|
349
447
|
}
|
|
350
448
|
getType() {
|
|
351
449
|
return this.classType;
|
|
@@ -359,13 +457,21 @@ class ArkNewExpr extends AbstractExpr {
|
|
|
359
457
|
*@ returns the ArkNewExpr instance of the current object
|
|
360
458
|
*/
|
|
361
459
|
inferType(arkMethod) {
|
|
362
|
-
var _a
|
|
460
|
+
var _a;
|
|
363
461
|
const classSignature = this.classType.getClassSignature();
|
|
364
462
|
if (classSignature.getDeclaringFileSignature().getFileName() === Const_1.UNKNOWN_FILE_NAME) {
|
|
365
463
|
const className = classSignature.getClassName();
|
|
366
|
-
let type =
|
|
464
|
+
let type = ModelUtils_1.ModelUtils.findDeclaredLocalType(className, arkMethod, 1);
|
|
465
|
+
if (TypeInference_1.TypeInference.isUnclearType(type)) {
|
|
466
|
+
// Deterministic local-class resolution along the method scope chain before
|
|
467
|
+
// the file-level fuzzy name search.
|
|
468
|
+
const localClass = ModelUtils_1.ModelUtils.findLocalClassInMethodChain(className, arkMethod);
|
|
469
|
+
if (localClass) {
|
|
470
|
+
type = new Type_1.ClassType(localClass.getSignature());
|
|
471
|
+
}
|
|
472
|
+
}
|
|
367
473
|
if (TypeInference_1.TypeInference.isUnclearType(type)) {
|
|
368
|
-
type = TypeInference_1.TypeInference.inferUnclearRefName(className, arkMethod.getDeclaringArkClass());
|
|
474
|
+
type = TypeInference_1.TypeInference.inferUnclearRefName(className, arkMethod.getDeclaringArkClass(), arkMethod);
|
|
369
475
|
}
|
|
370
476
|
// If the type is an alias type, replace with the original type
|
|
371
477
|
if (type instanceof Type_1.AliasType) {
|
|
@@ -378,7 +484,7 @@ class ArkNewExpr extends AbstractExpr {
|
|
|
378
484
|
}
|
|
379
485
|
}
|
|
380
486
|
if (type && type instanceof Type_1.ClassType) {
|
|
381
|
-
const instanceType = (
|
|
487
|
+
const instanceType = (_a = this.constructorSignature(type, arkMethod)) !== null && _a !== void 0 ? _a : type;
|
|
382
488
|
this.classType.setClassSignature(instanceType.getClassSignature());
|
|
383
489
|
TypeInference_1.TypeInference.inferRealGenericTypes(this.classType.getRealGenericTypes(), arkMethod.getDeclaringArkClass());
|
|
384
490
|
}
|
|
@@ -387,12 +493,17 @@ class ArkNewExpr extends AbstractExpr {
|
|
|
387
493
|
}
|
|
388
494
|
constructorSignature(type, arkMethod) {
|
|
389
495
|
var _a;
|
|
390
|
-
const
|
|
496
|
+
const scene = arkMethod.getDeclaringArkFile().getScene();
|
|
497
|
+
const classConstructor = scene.getClass(type.getClassSignature());
|
|
391
498
|
if ((classConstructor === null || classConstructor === void 0 ? void 0 : classConstructor.getCategory()) === ArkClass_1.ClassCategory.INTERFACE) {
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
499
|
+
// interface 的 construct-signature 可能在 var 侧构造器类上(如interface Object 的构造签名在 ObjectConstructor)——多实体探测
|
|
500
|
+
const candidates = [classConstructor, ...SdkUtils_1.SdkUtils.getSdkGlobalMemberClasses(classConstructor.getName())];
|
|
501
|
+
for (const candidate of candidates) {
|
|
502
|
+
const returnType = (_a = candidate.getMethodWithName(Const_1.CONSTRUCT_SIGNATURE_NAME)) === null || _a === void 0 ? void 0 : _a.getReturnType();
|
|
503
|
+
if (returnType) {
|
|
504
|
+
const replaced = TypeInference_1.TypeInference.replaceAliasType(returnType);
|
|
505
|
+
return replaced instanceof Type_1.ClassType ? replaced : undefined;
|
|
506
|
+
}
|
|
396
507
|
}
|
|
397
508
|
}
|
|
398
509
|
return undefined;
|
|
@@ -431,10 +542,10 @@ class ArkNewArrayExpr extends AbstractExpr {
|
|
|
431
542
|
}
|
|
432
543
|
return this;
|
|
433
544
|
}
|
|
434
|
-
getUses() {
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
return
|
|
545
|
+
getUses(acc = []) {
|
|
546
|
+
acc.push(this.size);
|
|
547
|
+
this.size.getUses(acc);
|
|
548
|
+
return acc;
|
|
438
549
|
}
|
|
439
550
|
toString() {
|
|
440
551
|
return 'newarray (' + this.baseType + ')[' + this.size + ']';
|
|
@@ -460,11 +571,10 @@ class ArkDeleteExpr extends AbstractExpr {
|
|
|
460
571
|
getType() {
|
|
461
572
|
return Type_1.BooleanType.getInstance();
|
|
462
573
|
}
|
|
463
|
-
getUses() {
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
return uses;
|
|
574
|
+
getUses(acc = []) {
|
|
575
|
+
acc.push(this.field);
|
|
576
|
+
this.field.getUses(acc);
|
|
577
|
+
return acc;
|
|
468
578
|
}
|
|
469
579
|
toString() {
|
|
470
580
|
return 'delete ' + this.field;
|
|
@@ -489,11 +599,10 @@ class ArkAwaitExpr extends AbstractExpr {
|
|
|
489
599
|
TypeInference_1.TypeInference.inferValueType(this.promise, arkMethod);
|
|
490
600
|
return this;
|
|
491
601
|
}
|
|
492
|
-
getUses() {
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
return uses;
|
|
602
|
+
getUses(acc = []) {
|
|
603
|
+
acc.push(this.promise);
|
|
604
|
+
this.promise.getUses(acc);
|
|
605
|
+
return acc;
|
|
497
606
|
}
|
|
498
607
|
toString() {
|
|
499
608
|
const str = 'await ' + this.promise;
|
|
@@ -515,11 +624,10 @@ class ArkYieldExpr extends AbstractExpr {
|
|
|
515
624
|
getType() {
|
|
516
625
|
return this.yieldValue.getType();
|
|
517
626
|
}
|
|
518
|
-
getUses() {
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
return uses;
|
|
627
|
+
getUses(acc = []) {
|
|
628
|
+
acc.push(this.yieldValue);
|
|
629
|
+
this.yieldValue.getUses(acc);
|
|
630
|
+
return acc;
|
|
523
631
|
}
|
|
524
632
|
toString() {
|
|
525
633
|
const str = 'yield ' + this.yieldValue;
|
|
@@ -616,13 +724,12 @@ class AbstractBinopExpr extends AbstractExpr {
|
|
|
616
724
|
}
|
|
617
725
|
return this.type;
|
|
618
726
|
}
|
|
619
|
-
getUses() {
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
return uses;
|
|
727
|
+
getUses(acc = []) {
|
|
728
|
+
acc.push(this.op1);
|
|
729
|
+
this.op1.getUses(acc);
|
|
730
|
+
acc.push(this.op2);
|
|
731
|
+
this.op2.getUses(acc);
|
|
732
|
+
return acc;
|
|
626
733
|
}
|
|
627
734
|
toString() {
|
|
628
735
|
return this.op1 + ' ' + this.operator + ' ' + this.op2;
|
|
@@ -813,11 +920,10 @@ class ArkTypeOfExpr extends AbstractExpr {
|
|
|
813
920
|
setOp(newOp) {
|
|
814
921
|
this.op = newOp;
|
|
815
922
|
}
|
|
816
|
-
getUses() {
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
return uses;
|
|
923
|
+
getUses(acc = []) {
|
|
924
|
+
acc.push(this.op);
|
|
925
|
+
this.op.getUses(acc);
|
|
926
|
+
return acc;
|
|
821
927
|
}
|
|
822
928
|
getType() {
|
|
823
929
|
return this.op.getType();
|
|
@@ -854,11 +960,10 @@ class ArkInstanceOfExpr extends AbstractExpr {
|
|
|
854
960
|
getType() {
|
|
855
961
|
return Type_1.BooleanType.getInstance();
|
|
856
962
|
}
|
|
857
|
-
getUses() {
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
return uses;
|
|
963
|
+
getUses(acc = []) {
|
|
964
|
+
acc.push(this.op);
|
|
965
|
+
this.op.getUses(acc);
|
|
966
|
+
return acc;
|
|
862
967
|
}
|
|
863
968
|
toString() {
|
|
864
969
|
return this.op + ' instanceof ' + this.checkType;
|
|
@@ -888,11 +993,10 @@ class ArkCastExpr extends AbstractExpr {
|
|
|
888
993
|
setOp(newOp) {
|
|
889
994
|
this.op = newOp;
|
|
890
995
|
}
|
|
891
|
-
getUses() {
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
return uses;
|
|
996
|
+
getUses(acc = []) {
|
|
997
|
+
acc.push(this.op);
|
|
998
|
+
this.op.getUses(acc);
|
|
999
|
+
return acc;
|
|
896
1000
|
}
|
|
897
1001
|
getType() {
|
|
898
1002
|
return this.type;
|
|
@@ -922,10 +1026,12 @@ class ArkPhiExpr extends AbstractExpr {
|
|
|
922
1026
|
this.args = [];
|
|
923
1027
|
this.argToBlock = new Map();
|
|
924
1028
|
}
|
|
925
|
-
getUses() {
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
1029
|
+
getUses(acc = []) {
|
|
1030
|
+
const args = this.args;
|
|
1031
|
+
for (let i = 0; i < args.length; i++) {
|
|
1032
|
+
acc.push(args[i]);
|
|
1033
|
+
}
|
|
1034
|
+
return acc;
|
|
929
1035
|
}
|
|
930
1036
|
getArgs() {
|
|
931
1037
|
return this.args;
|
|
@@ -973,11 +1079,10 @@ class ArkUnopExpr extends AbstractExpr {
|
|
|
973
1079
|
this.op = op;
|
|
974
1080
|
this.operator = operator;
|
|
975
1081
|
}
|
|
976
|
-
getUses() {
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
return uses;
|
|
1082
|
+
getUses(acc = []) {
|
|
1083
|
+
acc.push(this.op);
|
|
1084
|
+
this.op.getUses(acc);
|
|
1085
|
+
return acc;
|
|
981
1086
|
}
|
|
982
1087
|
getOp() {
|
|
983
1088
|
return this.op;
|
|
@@ -1045,7 +1150,7 @@ class AliasTypeExpr extends AbstractExpr {
|
|
|
1045
1150
|
return this.originalType;
|
|
1046
1151
|
}
|
|
1047
1152
|
setOriginalType(type) {
|
|
1048
|
-
return this.originalType = type;
|
|
1153
|
+
return (this.originalType = type);
|
|
1049
1154
|
}
|
|
1050
1155
|
getType() {
|
|
1051
1156
|
function getTypeOfImportInfo(importInfo) {
|
|
@@ -1095,11 +1200,12 @@ class AliasTypeExpr extends AbstractExpr {
|
|
|
1095
1200
|
* Returns all used values which mainly used for def-use chain analysis.
|
|
1096
1201
|
* @returns Always returns empty array because her is the alias type definition which has no relationship with value flow.
|
|
1097
1202
|
*/
|
|
1098
|
-
getUses() {
|
|
1203
|
+
getUses(acc = []) {
|
|
1099
1204
|
if (this.originalObject instanceof Local_1.Local) {
|
|
1100
|
-
|
|
1205
|
+
acc.push(this.originalObject);
|
|
1206
|
+
return acc;
|
|
1101
1207
|
}
|
|
1102
|
-
return
|
|
1208
|
+
return acc;
|
|
1103
1209
|
}
|
|
1104
1210
|
toString() {
|
|
1105
1211
|
let typeOf = '';
|
|
@@ -1111,6 +1217,12 @@ class AliasTypeExpr extends AbstractExpr {
|
|
|
1111
1217
|
return `${typeOf}${typeObject.getSignature().toString()}<${this.getRealGenericTypes().join(',')}>`;
|
|
1112
1218
|
}
|
|
1113
1219
|
if (typeObject instanceof Type_1.Type) {
|
|
1220
|
+
// Prefer the inferred original type when available: unresolved stub types (e.g. builtin Object stubs living in the temp canonicalizer)
|
|
1221
|
+
// are replaced by the real signatures during type inference, and the display should reflect that.
|
|
1222
|
+
const inferred = this.getOriginalType();
|
|
1223
|
+
if (inferred && inferred !== typeObject) {
|
|
1224
|
+
return `${typeOf}${inferred.toString()}`;
|
|
1225
|
+
}
|
|
1114
1226
|
return `${typeOf}${typeObject.toString()}`;
|
|
1115
1227
|
}
|
|
1116
1228
|
if (typeObject instanceof ArkImport_1.ImportInfo) {
|
package/lib/core/base/Local.d.ts
CHANGED
|
@@ -13,29 +13,12 @@ export declare class Local implements Value, ArkExport {
|
|
|
13
13
|
private type;
|
|
14
14
|
private originalValue;
|
|
15
15
|
private declaringStmt;
|
|
16
|
-
private
|
|
16
|
+
private _usedStmts?;
|
|
17
17
|
private signature?;
|
|
18
18
|
private constFlag?;
|
|
19
19
|
constructor(name: string, type?: Type);
|
|
20
20
|
inferType(arkMethod: ArkMethod): Local;
|
|
21
|
-
/**
|
|
22
|
-
* Returns the name of local value.
|
|
23
|
-
* @returns The name of local value.
|
|
24
|
-
* @example
|
|
25
|
-
* 1. get the name of local value.
|
|
26
|
-
|
|
27
|
-
```typescript
|
|
28
|
-
arkClass.getDefaultArkMethod()?.getBody().getLocals().forEach(local => {
|
|
29
|
-
const arkField = new ArkField();
|
|
30
|
-
arkField.setFieldType(ArkField.DEFAULT_ARK_Field);
|
|
31
|
-
arkField.setDeclaringClass(defaultClass);
|
|
32
|
-
arkField.setType(local.getType());
|
|
33
|
-
arkField.setName(local.getName());
|
|
34
|
-
arkField.genSignature();
|
|
35
|
-
defaultClass.addField(arkField);
|
|
36
|
-
});
|
|
37
|
-
```
|
|
38
|
-
*/
|
|
21
|
+
/** Returns the name of local value. */
|
|
39
22
|
getName(): string;
|
|
40
23
|
setName(name: string): void;
|
|
41
24
|
/**
|
|
@@ -70,13 +53,20 @@ export declare class Local implements Value, ArkExport {
|
|
|
70
53
|
* Returns an **array** of values which are contained in this local.
|
|
71
54
|
* @returns An **array** of values used by this local.
|
|
72
55
|
*/
|
|
73
|
-
getUses(): Value[];
|
|
56
|
+
getUses(acc?: Value[]): Value[];
|
|
74
57
|
addUsedStmt(usedStmt: Stmt): void;
|
|
58
|
+
/**
|
|
59
|
+
* The statements using this local, exposed as a property so that consumers reading the field
|
|
60
|
+
* directly keep seeing an array; same value as {@link getUsedStmts}.
|
|
61
|
+
*/
|
|
62
|
+
get usedStmts(): Stmt[];
|
|
75
63
|
/**
|
|
76
64
|
* Returns an array of statements used by the local, i.e., the statements in which the local participate.
|
|
77
65
|
* For example, if the code snippet is `let dd = cc + 5;` where `cc` is a local and `cc` only appears once,
|
|
78
66
|
* then the length of **array** returned is 1 and `Stmts[0]` will be same as the example described
|
|
79
67
|
* in the `Local.getDeclaringStmt()`.
|
|
68
|
+
* The backing list is allocated on the first {@link addUsedStmt}, so a local nobody uses yields
|
|
69
|
+
* the shared read-only empty array instead of allocating one.
|
|
80
70
|
* @returns An array of statements used by the local.
|
|
81
71
|
*/
|
|
82
72
|
getUsedStmts(): Stmt[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Local.d.ts","sourceRoot":"","sources":["../../../src/core/base/Local.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAA2B,IAAI,EAAe,MAAM,QAAQ,CAAC;AACpE,OAAO,
|
|
1
|
+
{"version":3,"file":"Local.d.ts","sourceRoot":"","sources":["../../../src/core/base/Local.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAA2B,IAAI,EAAe,MAAM,QAAQ,CAAC;AACpE,OAAO,EAAgC,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAI/C;;GAEG;AACH,qBAAa,KAAM,YAAW,KAAK,EAAE,SAAS;IAC1C,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAO;IAEnB,OAAO,CAAC,aAAa,CAAe;IAEpC,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAC,CAAiB;IACnC,OAAO,CAAC,SAAS,CAAC,CAAU;gBAEhB,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,IAAgC;IAQzD,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,KAAK;IAqB7C,uCAAuC;IAChC,OAAO,IAAI,MAAM;IAIjB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC;;;OAGG;IACI,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI;IAI5B,gBAAgB,IAAI,KAAK,GAAG,IAAI;IAIhC,gBAAgB,CAAC,aAAa,EAAE,KAAK,GAAG,IAAI;IAInD;;;;;;;;;;;;;;;;;OAiBG;IACI,gBAAgB,IAAI,IAAI,GAAG,IAAI;IAI/B,gBAAgB,CAAC,aAAa,EAAE,IAAI,GAAG,IAAI;IAIlD;;;OAGG;IACI,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE;IAI/B,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IAIxC;;;OAGG;IACH,IAAW,SAAS,IAAI,IAAI,EAAE,CAE7B;IAED;;;;;;;;OAQG;IACI,YAAY,IAAI,IAAI,EAAE;IAI7B;;;;;;;;;;;;OAYG;IACI,QAAQ,IAAI,MAAM;IAIlB,aAAa,IAAI,UAAU;IAI3B,YAAY,IAAI,MAAM;IAItB,gBAAgB,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO;IAOrD,YAAY,IAAI,cAAc;IAI9B,YAAY,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI7C,YAAY,IAAI,OAAO;IAOvB,YAAY,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI;CAGnD"}
|