arkanalyzer 1.0.39 → 1.0.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/arkanalyzer.json +6 -2
- package/lib/Config.d.ts +1 -0
- package/lib/Config.d.ts.map +1 -1
- package/lib/Scene.d.ts +6 -5
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +36 -18
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.js +3 -4
- package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/RapidTypeAnalysis.js +7 -8
- package/lib/callgraph/model/CallGraph.d.ts +5 -5
- package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
- package/lib/callgraph/model/CallGraph.js +18 -21
- package/lib/callgraph/model/CallSite.d.ts +16 -6
- package/lib/callgraph/model/CallSite.d.ts.map +1 -1
- package/lib/callgraph/model/CallSite.js +48 -8
- package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +0 -1
- package/lib/callgraph/model/builder/CallGraphBuilder.d.ts.map +1 -1
- package/lib/callgraph/model/builder/CallGraphBuilder.js +0 -8
- package/lib/callgraph/pointerAnalysis/Pag.d.ts +3 -6
- package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.js +6 -29
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +6 -15
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +61 -85
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +2 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +12 -8
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts +10 -3
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.js +20 -5
- package/lib/callgraph/pointerAnalysis/context/Context.d.ts +69 -0
- package/lib/callgraph/pointerAnalysis/context/Context.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/context/Context.js +202 -0
- package/lib/callgraph/pointerAnalysis/context/ContextItem.d.ts +40 -0
- package/lib/callgraph/pointerAnalysis/context/ContextItem.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/context/ContextItem.js +99 -0
- package/lib/callgraph/pointerAnalysis/context/ContextSelector.d.ts +46 -0
- package/lib/callgraph/pointerAnalysis/context/ContextSelector.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/context/ContextSelector.js +138 -0
- package/lib/core/base/Expr.d.ts.map +1 -1
- package/lib/core/base/Expr.js +11 -1
- package/lib/core/base/Local.js +1 -1
- package/lib/core/common/ArkIRTransformer.d.ts +2 -0
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkIRTransformer.js +90 -0
- package/lib/core/common/ArkValueTransformer.d.ts +1 -1
- package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkValueTransformer.js +48 -33
- package/lib/core/common/Builtin.d.ts.map +1 -1
- package/lib/core/common/Builtin.js +2 -2
- package/lib/core/common/DummyMainCreater.js +1 -1
- package/lib/core/common/IRInference.d.ts +1 -0
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +60 -44
- package/lib/core/common/ModelUtils.d.ts +1 -0
- package/lib/core/common/ModelUtils.d.ts.map +1 -1
- package/lib/core/common/ModelUtils.js +7 -0
- package/lib/core/common/SdkUtils.d.ts +14 -1
- package/lib/core/common/SdkUtils.d.ts.map +1 -1
- package/lib/core/common/SdkUtils.js +118 -24
- package/lib/core/common/TypeInference.d.ts +2 -1
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +21 -12
- package/lib/core/common/ValueUtil.d.ts +1 -0
- package/lib/core/common/ValueUtil.d.ts.map +1 -1
- package/lib/core/common/ValueUtil.js +7 -0
- package/lib/core/graph/BaseExplicitGraph.d.ts +1 -0
- package/lib/core/graph/BaseExplicitGraph.d.ts.map +1 -1
- package/lib/core/graph/BaseExplicitGraph.js +3 -0
- package/lib/core/graph/Scc.js +1 -1
- package/lib/core/graph/builder/CfgBuilder.d.ts +2 -0
- package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/CfgBuilder.js +59 -7
- package/lib/core/model/ArkImport.js +1 -1
- package/lib/core/model/ArkMethod.d.ts.map +1 -1
- package/lib/core/model/ArkMethod.js +8 -2
- package/lib/core/model/builder/ArkClassBuilder.js +21 -1
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +2 -2
- package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.js +2 -1
- package/lib/index.d.ts +0 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -4
- package/lib/save/JsonPrinter.d.ts +1 -0
- package/lib/save/JsonPrinter.d.ts.map +1 -1
- package/lib/save/JsonPrinter.js +15 -5
- package/lib/save/arkir/ArkIRMethodPrinter.d.ts.map +1 -1
- package/lib/save/arkir/ArkIRMethodPrinter.js +13 -5
- package/lib/save/source/SourceBody.d.ts +1 -1
- package/lib/save/source/SourceBody.d.ts.map +1 -1
- package/lib/save/source/SourceBody.js +3 -2
- package/lib/save/source/SourceStmt.d.ts.map +1 -1
- package/lib/save/source/SourceStmt.js +12 -4
- package/lib/save/source/SourceTransformer.d.ts +3 -3
- package/lib/save/source/SourceTransformer.d.ts.map +1 -1
- package/lib/save/source/SourceTransformer.js +11 -10
- package/lib/transformer/StaticSingleAssignmentFormer.js +1 -1
- package/package.json +7 -7
- package/lib/callgraph/pointerAnalysis/Context.d.ts +0 -38
- package/lib/callgraph/pointerAnalysis/Context.d.ts.map +0 -1
- package/lib/callgraph/pointerAnalysis/Context.js +0 -154
|
@@ -47,15 +47,59 @@ const TSConst_1 = require("./TSConst");
|
|
|
47
47
|
const Const_1 = require("./Const");
|
|
48
48
|
const ArkClass_1 = require("../model/ArkClass");
|
|
49
49
|
const ArkSignature_1 = require("../model/ArkSignature");
|
|
50
|
-
const ModelUtils_1 = require("./ModelUtils");
|
|
51
50
|
const Local_1 = require("../base/Local");
|
|
52
51
|
const path_1 = __importDefault(require("path"));
|
|
53
52
|
const Type_1 = require("../base/Type");
|
|
54
53
|
const ArkNamespace_1 = require("../model/ArkNamespace");
|
|
55
|
-
const TypeInference_1 = require("./TypeInference");
|
|
56
54
|
const logger_1 = __importStar(require("../../utils/logger"));
|
|
55
|
+
const ohos_typescript_1 = __importDefault(require("ohos-typescript"));
|
|
56
|
+
const fs_1 = __importDefault(require("fs"));
|
|
57
57
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'SdkUtils');
|
|
58
58
|
class SdkUtils {
|
|
59
|
+
static setEsVersion(buildProfile) {
|
|
60
|
+
const accessChain = 'buildOption.arkOptions.tscConfig.targetESVersion';
|
|
61
|
+
const version = accessChain.split('.').reduce((acc, key) => acc === null || acc === void 0 ? void 0 : acc[key], buildProfile);
|
|
62
|
+
if (version && this.esVersionMap.has(version)) {
|
|
63
|
+
this.esVersion = version;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
static fetchBuiltInFiles() {
|
|
67
|
+
var _a;
|
|
68
|
+
let builtInPath = this.BUILT_IN_PATH;
|
|
69
|
+
try {
|
|
70
|
+
// If arkanalyzer is used as dependency by other project, the base directory should be the module path.
|
|
71
|
+
const moduleRoot = path_1.default.dirname(path_1.default.dirname(require.resolve('arkanalyzer')));
|
|
72
|
+
builtInPath = path_1.default.join(moduleRoot, this.BUILT_IN_PATH);
|
|
73
|
+
logger.debug(`arkanalyzer is used as dependency, so using builtin sdk file in ${builtInPath}.`);
|
|
74
|
+
}
|
|
75
|
+
catch (_b) {
|
|
76
|
+
logger.debug(`use builtin sdk file in ${builtInPath}.`);
|
|
77
|
+
}
|
|
78
|
+
const filePath = path_1.default.resolve(builtInPath, (_a = this.esVersionMap.get(this.esVersion)) !== null && _a !== void 0 ? _a : '');
|
|
79
|
+
this.BUILT_IN_SDK.path = path_1.default.resolve(builtInPath);
|
|
80
|
+
if (!fs_1.default.existsSync(filePath)) {
|
|
81
|
+
logger.error(`built in directory ${filePath} is not exist, please check!`);
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
const result = new Set();
|
|
85
|
+
this.dfsFiles(filePath, result);
|
|
86
|
+
return Array.from(result);
|
|
87
|
+
}
|
|
88
|
+
static dfsFiles(filePath, files) {
|
|
89
|
+
const sourceFile = ohos_typescript_1.default.createSourceFile(filePath, fs_1.default.readFileSync(filePath, 'utf8'), ohos_typescript_1.default.ScriptTarget.Latest);
|
|
90
|
+
const references = sourceFile.libReferenceDirectives;
|
|
91
|
+
references.forEach(ref => {
|
|
92
|
+
this.dfsFiles(path_1.default.join(path_1.default.dirname(filePath), `lib.${ref.fileName}.d.ts`), files);
|
|
93
|
+
});
|
|
94
|
+
files.add(filePath);
|
|
95
|
+
}
|
|
96
|
+
/*
|
|
97
|
+
* Set static field to be null, then all related objects could be freed by GC.
|
|
98
|
+
* Class SdkUtils is only internally used by ArkAnalyzer type inference, the dispose method should be called at the end of type inference.
|
|
99
|
+
*/
|
|
100
|
+
static dispose() {
|
|
101
|
+
this.sdkImportMap.clear();
|
|
102
|
+
}
|
|
59
103
|
static buildSdkImportMap(file) {
|
|
60
104
|
const fileName = path_1.default.basename(file.getName());
|
|
61
105
|
if (fileName.startsWith('@')) {
|
|
@@ -65,7 +109,7 @@ class SdkUtils {
|
|
|
65
109
|
static getImportSdkFile(from) {
|
|
66
110
|
return this.sdkImportMap.get(from);
|
|
67
111
|
}
|
|
68
|
-
static
|
|
112
|
+
static loadGlobalAPI(file, globalMap) {
|
|
69
113
|
var _a, _b, _c, _d;
|
|
70
114
|
const isGlobalPath = (_a = file
|
|
71
115
|
.getScene()
|
|
@@ -74,46 +118,81 @@ class SdkUtils {
|
|
|
74
118
|
if (!isGlobalPath) {
|
|
75
119
|
return;
|
|
76
120
|
}
|
|
77
|
-
|
|
121
|
+
file.getClasses().forEach(cls => {
|
|
78
122
|
if (!cls.isAnonymousClass() && !cls.isDefaultArkClass()) {
|
|
79
|
-
|
|
123
|
+
this.loadAPI(cls, globalMap);
|
|
80
124
|
}
|
|
81
125
|
if (cls.isDefaultArkClass()) {
|
|
82
126
|
cls.getMethods()
|
|
83
127
|
.filter(mtd => !mtd.isDefaultArkMethod() && !mtd.isAnonymousMethod())
|
|
84
|
-
.forEach(mtd =>
|
|
128
|
+
.forEach(mtd => this.loadAPI(mtd, globalMap));
|
|
85
129
|
}
|
|
86
130
|
});
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
131
|
+
(_d = (_c = (_b = file.getDefaultClass().getDefaultArkMethod()) === null || _b === void 0 ? void 0 : _b.getBody()) === null || _c === void 0 ? void 0 : _c.getAliasTypeMap()) === null || _d === void 0 ? void 0 : _d.forEach(a => this.loadAPI(a[0], globalMap, true));
|
|
132
|
+
file.getNamespaces().forEach(ns => this.loadAPI(ns, globalMap));
|
|
133
|
+
}
|
|
134
|
+
static mergeGlobalAPI(file, globalMap) {
|
|
135
|
+
var _a;
|
|
136
|
+
const isGlobalPath = (_a = file
|
|
137
|
+
.getScene()
|
|
138
|
+
.getOptions()
|
|
139
|
+
.sdkGlobalFolders) === null || _a === void 0 ? void 0 : _a.find(x => file.getFilePath().includes(path_1.default.sep + x + path_1.default.sep));
|
|
140
|
+
if (!isGlobalPath) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
file.getClasses().forEach(cls => {
|
|
144
|
+
if (!cls.isAnonymousClass() && !cls.isDefaultArkClass()) {
|
|
145
|
+
this.loadClass(globalMap, cls);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
static loadAPI(api, globalMap, override = false) {
|
|
150
|
+
const old = globalMap.get(api.getName());
|
|
151
|
+
if (!old) {
|
|
152
|
+
globalMap.set(api.getName(), api);
|
|
90
153
|
}
|
|
154
|
+
else if (override) {
|
|
155
|
+
logger.trace(`${old.getSignature()} is override`);
|
|
156
|
+
globalMap.set(api.getName(), api);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
logger.trace(`duplicated api: ${api.getSignature()}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
static postInferredSdk(file, globalMap) {
|
|
163
|
+
var _a, _b;
|
|
164
|
+
const isGlobalPath = (_a = file
|
|
165
|
+
.getScene()
|
|
166
|
+
.getOptions()
|
|
167
|
+
.sdkGlobalFolders) === null || _a === void 0 ? void 0 : _a.find(x => file.getFilePath().includes(path_1.default.sep + x + path_1.default.sep));
|
|
168
|
+
if (!isGlobalPath) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const defaultArkMethod = file.getDefaultClass().getDefaultArkMethod();
|
|
91
172
|
(_b = defaultArkMethod === null || defaultArkMethod === void 0 ? void 0 : defaultArkMethod.getBody()) === null || _b === void 0 ? void 0 : _b.getLocals().forEach(local => {
|
|
92
173
|
const name = local.getName();
|
|
93
174
|
if (name !== TSConst_1.THIS_NAME && !name.startsWith(Const_1.TEMP_LOCAL_PREFIX)) {
|
|
94
175
|
this.loadGlobalLocal(local, defaultArkMethod, globalMap);
|
|
95
176
|
}
|
|
96
177
|
});
|
|
97
|
-
(_d = (_c = defaultArkMethod === null || defaultArkMethod === void 0 ? void 0 : defaultArkMethod.getBody()) === null || _c === void 0 ? void 0 : _c.getAliasTypeMap()) === null || _d === void 0 ? void 0 : _d.forEach(a => globalMap.set(a[0].getName(), a[0]));
|
|
98
|
-
ModelUtils_1.ModelUtils.getAllNamespacesInFile(file).forEach(ns => globalMap.set(ns.getName(), ns));
|
|
99
178
|
}
|
|
100
179
|
static loadClass(globalMap, cls) {
|
|
101
180
|
const old = globalMap.get(cls.getName());
|
|
102
|
-
if (
|
|
103
|
-
|
|
181
|
+
if (cls === old) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
else if (old instanceof ArkClass_1.ArkClass && old.getDeclaringArkFile().getProjectName() === cls.getDeclaringArkFile().getProjectName()) {
|
|
185
|
+
if (old.getCategory() === ArkClass_1.ClassCategory.CLASS || old.getCategory() === ArkClass_1.ClassCategory.INTERFACE) {
|
|
104
186
|
this.copyMembers(cls, old);
|
|
105
187
|
}
|
|
106
188
|
else {
|
|
107
189
|
this.copyMembers(old, cls);
|
|
108
190
|
globalMap.delete(cls.getName());
|
|
109
|
-
|
|
191
|
+
this.loadAPI(cls, globalMap, true);
|
|
110
192
|
}
|
|
111
193
|
}
|
|
112
194
|
else {
|
|
113
|
-
|
|
114
|
-
logger.error(`${old.getSignature()} is override`);
|
|
115
|
-
}
|
|
116
|
-
globalMap.set(cls.getName(), cls);
|
|
195
|
+
this.loadAPI(cls, globalMap, true);
|
|
117
196
|
}
|
|
118
197
|
}
|
|
119
198
|
static loadGlobalLocal(local, defaultArkMethod, globalMap) {
|
|
@@ -130,14 +209,17 @@ class SdkUtils {
|
|
|
130
209
|
}
|
|
131
210
|
}
|
|
132
211
|
const old = globalMap.get(name);
|
|
133
|
-
if (
|
|
134
|
-
globalMap.
|
|
135
|
-
|
|
136
|
-
else if (old instanceof ArkClass_1.ArkClass && local.getType() instanceof Type_1.ClassType) {
|
|
137
|
-
const localConstructor = scene.getClass(local.getType().getClassSignature());
|
|
138
|
-
if (localConstructor) {
|
|
212
|
+
if (old instanceof ArkClass_1.ArkClass && local.getType() instanceof Type_1.ClassType) {
|
|
213
|
+
const localConstructor = globalMap.get(local.getType().getClassSignature().getClassName());
|
|
214
|
+
if (localConstructor instanceof ArkClass_1.ArkClass) {
|
|
139
215
|
this.copyMembers(localConstructor, old);
|
|
140
216
|
}
|
|
217
|
+
else {
|
|
218
|
+
this.loadAPI(local, globalMap, true);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
this.loadAPI(local, globalMap, true);
|
|
141
223
|
}
|
|
142
224
|
}
|
|
143
225
|
static copyMembers(from, to) {
|
|
@@ -171,4 +253,16 @@ class SdkUtils {
|
|
|
171
253
|
}
|
|
172
254
|
}
|
|
173
255
|
exports.SdkUtils = SdkUtils;
|
|
256
|
+
SdkUtils.esVersion = 'ES2017';
|
|
257
|
+
SdkUtils.esVersionMap = new Map([
|
|
258
|
+
['ES2017', 'lib.es2020.d.ts'],
|
|
259
|
+
['ES2021', 'lib.es2021.d.ts']
|
|
260
|
+
]);
|
|
174
261
|
SdkUtils.sdkImportMap = new Map();
|
|
262
|
+
SdkUtils.BUILT_IN_NAME = 'built-in';
|
|
263
|
+
SdkUtils.BUILT_IN_PATH = 'node_modules/ohos-typescript/lib';
|
|
264
|
+
SdkUtils.BUILT_IN_SDK = {
|
|
265
|
+
moduleName: '',
|
|
266
|
+
name: `${SdkUtils.BUILT_IN_NAME}`,
|
|
267
|
+
path: ''
|
|
268
|
+
};
|
|
@@ -51,7 +51,7 @@ export declare class TypeInference {
|
|
|
51
51
|
private static resolveLeftOp;
|
|
52
52
|
private static setValueType;
|
|
53
53
|
static isUnclearType(type: Type | null | undefined): boolean;
|
|
54
|
-
|
|
54
|
+
static checkType(type: Type, check: (t: Type) => boolean, visited?: Set<Type>): boolean;
|
|
55
55
|
static inferSimpleTypeInStmt(stmt: Stmt): void;
|
|
56
56
|
static buildTypeFromStr(typeStr: string): Type;
|
|
57
57
|
static inferValueType(value: Value, arkMethod: ArkMethod): Type | null;
|
|
@@ -99,6 +99,7 @@ export declare class TypeInference {
|
|
|
99
99
|
*/
|
|
100
100
|
static inferBaseType(baseName: string, arkClass: ArkClass): Type | null;
|
|
101
101
|
static inferTypeByName(typeName: string, arkClass: ArkClass): Type | null;
|
|
102
|
+
static getTypeByGlobalName(globalName: string, arkMethod: ArkMethod): Type | null;
|
|
102
103
|
static inferRealGenericTypes(realTypes: Type[] | undefined, arkClass: ArkClass): void;
|
|
103
104
|
static inferDynamicImportType(from: string, arkClass: ArkClass): Type | null;
|
|
104
105
|
static replaceTypeWithReal(type: Type, realTypes?: Type[], visited?: Set<Type>): Type;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeInference.d.ts","sourceRoot":"","sources":["../../../src/core/common/TypeInference.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAwD,IAAI,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EASH,YAAY,EACZ,WAAW,EAOX,IAAI,EACJ,oBAAoB,EAKvB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAiB,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAsBtC,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAsB,MAAM,uBAAuB,CAAC;AAIhG,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAQpE,qBAAa,aAAa;WACR,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAmC3D;;;;;;;;;OASG;WACW,kBAAkB,CAAC,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,GAAE,GAAG,CAAC,IAAI,CAAa,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS;WAsC1H,iBAAiB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAuC3D,OAAO,CAAC,MAAM,CAAC,WAAW;IAY1B;;;OAGG;WACW,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAcjE;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAejC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAMrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAsBrC,OAAO,CAAC,MAAM,CAAC,UAAU;WAgBX,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;IAsBvF;;;;OAIG;WACW,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAmB1E,OAAO,CAAC,MAAM,CAAC,aAAa;IAsC5B,OAAO,CAAC,MAAM,CAAC,YAAY;WAQb,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"TypeInference.d.ts","sourceRoot":"","sources":["../../../src/core/common/TypeInference.ts"],"names":[],"mappings":"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"}
|
|
@@ -395,11 +395,11 @@ class TypeInference {
|
|
|
395
395
|
return true;
|
|
396
396
|
}
|
|
397
397
|
else if (type instanceof Type_1.UnionType || type instanceof Type_1.IntersectionType || type instanceof Type_1.TupleType) {
|
|
398
|
-
return !!type.getTypes().find(t => this.
|
|
398
|
+
return !!type.getTypes().find(t => this.checkType(t, e => e instanceof Type_1.UnclearReferenceType));
|
|
399
399
|
}
|
|
400
400
|
else if (type instanceof Type_1.ArrayType) {
|
|
401
401
|
const baseType = type.getBaseType();
|
|
402
|
-
return this.
|
|
402
|
+
return this.checkType(baseType, t => t instanceof Type_1.UnclearReferenceType) || baseType instanceof Type_1.GenericType;
|
|
403
403
|
}
|
|
404
404
|
else if (type instanceof Type_1.AliasType) {
|
|
405
405
|
return this.isUnclearType(type.getOriginalType());
|
|
@@ -412,31 +412,35 @@ class TypeInference {
|
|
|
412
412
|
}
|
|
413
413
|
return false;
|
|
414
414
|
}
|
|
415
|
-
// This is the temporal function to check
|
|
416
|
-
static
|
|
415
|
+
// This is the temporal function to check Type recursively and can be removed after typeInfer supports multiple candidate types.
|
|
416
|
+
static checkType(type, check, visited = new Set()) {
|
|
417
|
+
var _a;
|
|
417
418
|
if (visited.has(type)) {
|
|
418
419
|
return false;
|
|
419
420
|
}
|
|
420
421
|
else {
|
|
421
422
|
visited.add(type);
|
|
422
423
|
}
|
|
423
|
-
if (type
|
|
424
|
+
if (check(type)) {
|
|
424
425
|
return true;
|
|
425
426
|
}
|
|
427
|
+
else if (type instanceof Type_1.ClassType) {
|
|
428
|
+
return !!((_a = type.getRealGenericTypes()) === null || _a === void 0 ? void 0 : _a.find(t => this.checkType(t, check, visited)));
|
|
429
|
+
}
|
|
426
430
|
else if (type instanceof Type_1.UnionType || type instanceof Type_1.IntersectionType || type instanceof Type_1.TupleType) {
|
|
427
|
-
return !!type.getTypes().find(t => this.
|
|
431
|
+
return !!type.getTypes().find(t => this.checkType(t, check, visited));
|
|
428
432
|
}
|
|
429
433
|
else if (type instanceof Type_1.ArrayType) {
|
|
430
|
-
return this.
|
|
434
|
+
return this.checkType(type.getBaseType(), check, visited);
|
|
431
435
|
}
|
|
432
436
|
else if (type instanceof Type_1.AliasType) {
|
|
433
|
-
return this.
|
|
437
|
+
return this.checkType(type.getOriginalType(), check, visited);
|
|
434
438
|
}
|
|
435
439
|
else if (type instanceof TypeExpr_1.KeyofTypeExpr) {
|
|
436
|
-
return this.
|
|
440
|
+
return this.checkType(type.getOpType(), check, visited);
|
|
437
441
|
}
|
|
438
442
|
else if (type instanceof TypeExpr_1.TypeQueryExpr) {
|
|
439
|
-
return this.
|
|
443
|
+
return this.checkType(type.getType(), check, visited);
|
|
440
444
|
}
|
|
441
445
|
return false;
|
|
442
446
|
}
|
|
@@ -698,7 +702,8 @@ class TypeInference {
|
|
|
698
702
|
if (property instanceof ArkField_1.ArkField) {
|
|
699
703
|
if (arkClass.getCategory() === ArkClass_1.ClassCategory.ENUM) {
|
|
700
704
|
let constant;
|
|
701
|
-
const
|
|
705
|
+
const propertyInitializer = property.getInitializer();
|
|
706
|
+
const lastStmt = propertyInitializer[propertyInitializer.length - 1];
|
|
702
707
|
if (lastStmt instanceof Stmt_1.ArkAssignStmt && lastStmt.getRightOp() instanceof Constant_1.Constant) {
|
|
703
708
|
constant = lastStmt.getRightOp();
|
|
704
709
|
}
|
|
@@ -758,6 +763,10 @@ class TypeInference {
|
|
|
758
763
|
}
|
|
759
764
|
return null;
|
|
760
765
|
}
|
|
766
|
+
static getTypeByGlobalName(globalName, arkMethod) {
|
|
767
|
+
const arkExport = arkMethod.getDeclaringArkFile().getScene().getSdkGlobal(globalName);
|
|
768
|
+
return this.parseArkExport2Type(arkExport);
|
|
769
|
+
}
|
|
761
770
|
static inferRealGenericTypes(realTypes, arkClass) {
|
|
762
771
|
if (!realTypes) {
|
|
763
772
|
return;
|
|
@@ -881,7 +890,7 @@ class TypeInference {
|
|
|
881
890
|
}
|
|
882
891
|
let returnType = arkMethod.getSignature().getType();
|
|
883
892
|
if (returnType instanceof Type_1.ClassType && returnType.getClassSignature().getClassName() === TSConst_1.PROMISE) {
|
|
884
|
-
returnType = (_a = returnType.getRealGenericTypes()) === null || _a === void 0 ? void 0 : _a
|
|
893
|
+
returnType = (_a = returnType.getRealGenericTypes()) === null || _a === void 0 ? void 0 : _a[0];
|
|
885
894
|
}
|
|
886
895
|
if (returnType) {
|
|
887
896
|
IRInference_1.IRInference.inferRightWithSdkType(returnType, stmt.getOp().getType(), arkMethod.getDeclaringArkClass());
|
|
@@ -3,6 +3,7 @@ export declare const EMPTY_STRING = "";
|
|
|
3
3
|
export declare class ValueUtil {
|
|
4
4
|
private static readonly NumberConstantCache;
|
|
5
5
|
static readonly EMPTY_STRING_CONSTANT: StringConstant;
|
|
6
|
+
static dispose(): void;
|
|
6
7
|
static getOrCreateNumberConst(n: number): Constant;
|
|
7
8
|
static createBigIntConst(bigInt: bigint): BigIntConstant;
|
|
8
9
|
static createStringConst(str: string): Constant;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ValueUtil.d.ts","sourceRoot":"","sources":["../../../src/core/common/ValueUtil.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,cAAc,EAAmB,QAAQ,EAAgC,cAAc,EAAqB,MAAM,kBAAkB,CAAC;AAE9I,eAAO,MAAM,YAAY,KAAK,CAAC;AAE/B,qBAAa,SAAS;IAClB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAoC;IAC/E,gBAAuB,qBAAqB,iBAAoC;
|
|
1
|
+
{"version":3,"file":"ValueUtil.d.ts","sourceRoot":"","sources":["../../../src/core/common/ValueUtil.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,cAAc,EAAmB,QAAQ,EAAgC,cAAc,EAAqB,MAAM,kBAAkB,CAAC;AAE9I,eAAO,MAAM,YAAY,KAAK,CAAC;AAE/B,qBAAa,SAAS;IAClB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAoC;IAC/E,gBAAuB,qBAAqB,iBAAoC;WAMlE,OAAO,IAAI,IAAI;WAIf,sBAAsB,CAAC,CAAC,EAAE,MAAM,GAAG,QAAQ;WAS3C,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;WAIjD,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ;WAOxC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ;WAQlC,iBAAiB,IAAI,QAAQ;WAI7B,eAAe,IAAI,QAAQ;WAI3B,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ;CAG7D"}
|
|
@@ -18,6 +18,13 @@ exports.ValueUtil = exports.EMPTY_STRING = void 0;
|
|
|
18
18
|
const Constant_1 = require("../base/Constant");
|
|
19
19
|
exports.EMPTY_STRING = '';
|
|
20
20
|
class ValueUtil {
|
|
21
|
+
/*
|
|
22
|
+
* Set static field to be null, then all related objects could be freed by GC.
|
|
23
|
+
* Class SdkUtils is only internally used by ArkAnalyzer, the dispose method should be called by users themselves before drop Scene.
|
|
24
|
+
*/
|
|
25
|
+
static dispose() {
|
|
26
|
+
this.NumberConstantCache.clear();
|
|
27
|
+
}
|
|
21
28
|
static getOrCreateNumberConst(n) {
|
|
22
29
|
let constant = this.NumberConstantCache.get(n);
|
|
23
30
|
if (constant === undefined) {
|
|
@@ -46,6 +46,7 @@ export declare abstract class BaseExplicitGraph implements GraphTraits<BaseNode>
|
|
|
46
46
|
protected edgeMarkSet: Set<string>;
|
|
47
47
|
constructor();
|
|
48
48
|
getNodeNum(): number;
|
|
49
|
+
getEdgeNum(): number;
|
|
49
50
|
nodesItor(): IterableIterator<BaseNode>;
|
|
50
51
|
addNode(n: BaseNode): void;
|
|
51
52
|
getNode(id: NodeID): BaseNode | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseExplicitGraph.d.ts","sourceRoot":"","sources":["../../../src/core/graph/BaseExplicitGraph.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACxB,8BAAsB,QAAQ;IAC1B,OAAO,CAAC,GAAG,CAAW;IACtB,OAAO,CAAC,GAAG,CAAW;IACtB,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;gBAET,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI;IAMtC,QAAQ,IAAI,MAAM;IAIlB,QAAQ,IAAI,MAAM;IAIlB,UAAU,IAAI,QAAQ;IAItB,UAAU,IAAI,QAAQ;IAItB,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIzB,YAAY,IAAI;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;IAO5C,UAAU,IAAI,MAAM;CAG9B;AAED,8BAAsB,QAAQ;IAC1B,OAAO,CAAC,EAAE,CAAS;IACnB,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;IACrB,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,QAAQ,CAA4B;gBAEhC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI;IAKxB,KAAK,IAAI,MAAM;IAIf,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIzB,gBAAgB,IAAI,OAAO;IAI3B,gBAAgB,IAAI,OAAO;IAI3B,eAAe,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO;IAIrC,eAAe,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO;IAIrC,eAAe,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI;IAIlC,eAAe,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI;IAIlC,kBAAkB,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO;IAIxC,kBAAkB,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO;IAIxC,eAAe,IAAI,GAAG,CAAC,QAAQ,CAAC;IAIhC,gBAAgB,IAAI,GAAG,CAAC,QAAQ,CAAC;IAIjC,UAAU,IAAI,MAAM;aAIX,WAAW,IAAI,MAAM;CACxC;AAED,8BAAsB,iBAAkB,YAAW,WAAW,CAAC,QAAQ,CAAC;IACpE,SAAS,CAAC,OAAO,EAAE,MAAM,CAAK;IAC9B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAK;IAC9B,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7C,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;;IAO5B,UAAU,IAAI,MAAM;IAIpB,SAAS,IAAI,gBAAgB,CAAC,QAAQ,CAAC;IAIvC,OAAO,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI;IAK1B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAQzC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI5B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAQ/B,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO;IAU9C,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO;IAUvC,YAAY,IAAI,gBAAgB,CAAC,QAAQ,CAAC;aAIjC,YAAY,IAAI,MAAM;CACzC"}
|
|
1
|
+
{"version":3,"file":"BaseExplicitGraph.d.ts","sourceRoot":"","sources":["../../../src/core/graph/BaseExplicitGraph.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACxB,8BAAsB,QAAQ;IAC1B,OAAO,CAAC,GAAG,CAAW;IACtB,OAAO,CAAC,GAAG,CAAW;IACtB,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;gBAET,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI;IAMtC,QAAQ,IAAI,MAAM;IAIlB,QAAQ,IAAI,MAAM;IAIlB,UAAU,IAAI,QAAQ;IAItB,UAAU,IAAI,QAAQ;IAItB,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIzB,YAAY,IAAI;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;IAO5C,UAAU,IAAI,MAAM;CAG9B;AAED,8BAAsB,QAAQ;IAC1B,OAAO,CAAC,EAAE,CAAS;IACnB,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;IACrB,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,QAAQ,CAA4B;gBAEhC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI;IAKxB,KAAK,IAAI,MAAM;IAIf,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIzB,gBAAgB,IAAI,OAAO;IAI3B,gBAAgB,IAAI,OAAO;IAI3B,eAAe,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO;IAIrC,eAAe,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO;IAIrC,eAAe,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI;IAIlC,eAAe,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI;IAIlC,kBAAkB,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO;IAIxC,kBAAkB,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO;IAIxC,eAAe,IAAI,GAAG,CAAC,QAAQ,CAAC;IAIhC,gBAAgB,IAAI,GAAG,CAAC,QAAQ,CAAC;IAIjC,UAAU,IAAI,MAAM;aAIX,WAAW,IAAI,MAAM;CACxC;AAED,8BAAsB,iBAAkB,YAAW,WAAW,CAAC,QAAQ,CAAC;IACpE,SAAS,CAAC,OAAO,EAAE,MAAM,CAAK;IAC9B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAK;IAC9B,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7C,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;;IAO5B,UAAU,IAAI,MAAM;IAIpB,UAAU,IAAI,MAAM;IAIpB,SAAS,IAAI,gBAAgB,CAAC,QAAQ,CAAC;IAIvC,OAAO,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI;IAK1B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAQzC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI5B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAQ/B,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO;IAU9C,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO;IAUvC,YAAY,IAAI,gBAAgB,CAAC,QAAQ,CAAC;aAIjC,YAAY,IAAI,MAAM;CACzC"}
|
package/lib/core/graph/Scc.js
CHANGED
|
@@ -124,7 +124,7 @@ class SCCDetection {
|
|
|
124
124
|
if (this.getRep(v) === v) {
|
|
125
125
|
this.setInSCC(v);
|
|
126
126
|
while (this._S.length > 0) {
|
|
127
|
-
let w = this._S
|
|
127
|
+
let w = this._S[this._S.length - 1];
|
|
128
128
|
if (this._D.get(w) <= this._D.get(v)) {
|
|
129
129
|
break;
|
|
130
130
|
}
|
|
@@ -143,6 +143,7 @@ export declare class CfgBuilder {
|
|
|
143
143
|
getDotEdges(stmt: StatementBuilder): void;
|
|
144
144
|
errorTest(stmt: StatementBuilder): void;
|
|
145
145
|
buildStatementBuilder4ArrowFunction(stmt: ts.Node): void;
|
|
146
|
+
private getParamNodeWithInitializerOrModifier;
|
|
146
147
|
buildCfgBuilder(): void;
|
|
147
148
|
private handleBuilder;
|
|
148
149
|
isBodyEmpty(): boolean;
|
|
@@ -167,6 +168,7 @@ export declare class CfgBuilder {
|
|
|
167
168
|
aliasTypeMap: Map<string, [AliasType, ArkAliasTypeDefineStmt]>;
|
|
168
169
|
traps: Trap[];
|
|
169
170
|
};
|
|
171
|
+
private removeEmptyBlocks;
|
|
170
172
|
private initializeBuild;
|
|
171
173
|
private processBlocks;
|
|
172
174
|
private generateReturnStmt;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CfgBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/CfgBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAA0C,MAAM,iBAAiB,CAAC;AAEjG,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIlD,OAAO,EAAE,SAAS,EAA0D,MAAM,iBAAiB,CAAC;AACpG,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"CfgBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/CfgBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -476,7 +476,7 @@ class CfgBuilder {
|
|
|
476
476
|
this.scopes.push(scope);
|
|
477
477
|
for (let i = 0; i < nodes.length; i++) {
|
|
478
478
|
let c = nodes[i];
|
|
479
|
-
if (ts.isVariableStatement(c) || ts.isExpressionStatement(c) || ts.isThrowStatement(c) || ts.isTypeAliasDeclaration(c)) {
|
|
479
|
+
if (ts.isVariableStatement(c) || ts.isExpressionStatement(c) || ts.isThrowStatement(c) || ts.isTypeAliasDeclaration(c) || ts.isParameter(c)) {
|
|
480
480
|
let s = new StatementBuilder('statement', c.getText(this.sourceFile), c, scope.id);
|
|
481
481
|
this.judgeLastType(s, lastStatement);
|
|
482
482
|
lastStatement = s;
|
|
@@ -639,6 +639,9 @@ class CfgBuilder {
|
|
|
639
639
|
for (let i = stmt.nexts.length - 1; i >= 0; i--) {
|
|
640
640
|
stmtQueue.push(stmt.nexts[i]);
|
|
641
641
|
}
|
|
642
|
+
if (stmt.afterSwitch && stmt.afterSwitch.lasts.size === 0) {
|
|
643
|
+
stmtQueue.push(stmt.afterSwitch);
|
|
644
|
+
}
|
|
642
645
|
}
|
|
643
646
|
else if (stmt instanceof TryStatementBuilder) {
|
|
644
647
|
if (stmt.finallyStatement) {
|
|
@@ -922,6 +925,15 @@ class CfgBuilder {
|
|
|
922
925
|
s.next = this.exit;
|
|
923
926
|
this.exit.lasts = new Set([s]);
|
|
924
927
|
}
|
|
928
|
+
getParamNodeWithInitializerOrModifier(paramNodes) {
|
|
929
|
+
let stmts = [];
|
|
930
|
+
paramNodes.forEach(param => {
|
|
931
|
+
if (param.initializer !== undefined || param.modifiers !== undefined) {
|
|
932
|
+
stmts.push(param);
|
|
933
|
+
}
|
|
934
|
+
});
|
|
935
|
+
return stmts;
|
|
936
|
+
}
|
|
925
937
|
buildCfgBuilder() {
|
|
926
938
|
let stmts = [];
|
|
927
939
|
if (ts.isSourceFile(this.astRoot)) {
|
|
@@ -934,12 +946,7 @@ class CfgBuilder {
|
|
|
934
946
|
ts.isSetAccessorDeclaration(this.astRoot) ||
|
|
935
947
|
ts.isFunctionExpression(this.astRoot) ||
|
|
936
948
|
ts.isClassStaticBlockDeclaration(this.astRoot)) {
|
|
937
|
-
|
|
938
|
-
stmts = [...this.astRoot.body.statements];
|
|
939
|
-
}
|
|
940
|
-
else {
|
|
941
|
-
this.emptyBody = true;
|
|
942
|
-
}
|
|
949
|
+
this.astRoot.body ? stmts = [...this.astRoot.body.statements] : this.emptyBody = true;
|
|
943
950
|
}
|
|
944
951
|
else if (ts.isArrowFunction(this.astRoot)) {
|
|
945
952
|
if (ts.isBlock(this.astRoot.body)) {
|
|
@@ -955,6 +962,10 @@ class CfgBuilder {
|
|
|
955
962
|
else if (ts.isModuleDeclaration(this.astRoot) && ts.isModuleBlock(this.astRoot.body)) {
|
|
956
963
|
stmts = [...this.astRoot.body.statements];
|
|
957
964
|
}
|
|
965
|
+
// Add param node with initializer or modifier to stmts which can be used when build body to create class field and initializer stmts.
|
|
966
|
+
if (!this.emptyBody && ts.isFunctionLike(this.astRoot)) {
|
|
967
|
+
stmts = [...this.getParamNodeWithInitializerOrModifier(this.astRoot.parameters), ...stmts];
|
|
968
|
+
}
|
|
958
969
|
if (!ModelUtils_1.ModelUtils.isArkUIBuilderMethod(this.declaringMethod)) {
|
|
959
970
|
this.walkAST(this.entry, this.exit, stmts);
|
|
960
971
|
}
|
|
@@ -1039,6 +1050,7 @@ class CfgBuilder {
|
|
|
1039
1050
|
this.adjustBlocks(blockBuilderToCfgBlock, blocksContainLoopCondition, basicBlockSet, blockBuildersContainSwitch, valueAndStmtsOfSwitchAndCasesAll, arkIRTransformer);
|
|
1040
1051
|
const trapBuilder = new TrapBuilder_1.TrapBuilder();
|
|
1041
1052
|
const traps = trapBuilder.buildTraps(blockBuilderToCfgBlock, blockBuildersBeforeTry, arkIRTransformer, basicBlockSet);
|
|
1053
|
+
this.removeEmptyBlocks(basicBlockSet);
|
|
1042
1054
|
const cfg = this.createCfg(blockBuilderToCfgBlock, basicBlockSet, currBlockId);
|
|
1043
1055
|
return {
|
|
1044
1056
|
cfg,
|
|
@@ -1048,6 +1060,46 @@ class CfgBuilder {
|
|
|
1048
1060
|
traps,
|
|
1049
1061
|
};
|
|
1050
1062
|
}
|
|
1063
|
+
removeEmptyBlocks(basicBlockSet) {
|
|
1064
|
+
for (const bb of basicBlockSet) {
|
|
1065
|
+
if (bb.getStmts().length > 0) {
|
|
1066
|
+
continue;
|
|
1067
|
+
}
|
|
1068
|
+
const predecessors = bb.getPredecessors();
|
|
1069
|
+
const successors = bb.getSuccessors();
|
|
1070
|
+
// the empty basic block with neither predecessor nor successor could be deleted directly
|
|
1071
|
+
if (predecessors.length === 0 && successors.length === 0) {
|
|
1072
|
+
basicBlockSet.delete(bb);
|
|
1073
|
+
continue;
|
|
1074
|
+
}
|
|
1075
|
+
// the empty basic block with predecessor but no successor could be deleted directly and remove its ID from the predecessor blocks
|
|
1076
|
+
if (predecessors.length > 0 && successors.length === 0) {
|
|
1077
|
+
for (const predecessor of predecessors) {
|
|
1078
|
+
predecessor.removeSuccessorBlock(bb);
|
|
1079
|
+
}
|
|
1080
|
+
basicBlockSet.delete(bb);
|
|
1081
|
+
continue;
|
|
1082
|
+
}
|
|
1083
|
+
// the empty basic block with successor but no predecessor could be deleted directly and remove its ID from the successor blocks
|
|
1084
|
+
if (predecessors.length === 0 && successors.length > 0) {
|
|
1085
|
+
for (const successor of successors) {
|
|
1086
|
+
successor.removePredecessorBlock(bb);
|
|
1087
|
+
}
|
|
1088
|
+
basicBlockSet.delete(bb);
|
|
1089
|
+
continue;
|
|
1090
|
+
}
|
|
1091
|
+
// the rest case is the empty basic block both with predecessor and successor, should relink its predecessor and successor
|
|
1092
|
+
for (const predecessor of predecessors) {
|
|
1093
|
+
predecessor.removeSuccessorBlock(bb);
|
|
1094
|
+
successors.forEach(successor => predecessor.addSuccessorBlock(successor));
|
|
1095
|
+
}
|
|
1096
|
+
for (const successor of successors) {
|
|
1097
|
+
successor.removePredecessorBlock(bb);
|
|
1098
|
+
predecessors.forEach(predecessor => successor.addPredecessorBlock(predecessor));
|
|
1099
|
+
}
|
|
1100
|
+
basicBlockSet.delete(bb);
|
|
1101
|
+
}
|
|
1102
|
+
}
|
|
1051
1103
|
initializeBuild() {
|
|
1052
1104
|
const blockBuilderToCfgBlock = new Map();
|
|
1053
1105
|
const basicBlockSet = new Set();
|
|
@@ -52,7 +52,7 @@ class ImportInfo extends ArkBaseModel_1.ArkBaseModel {
|
|
|
52
52
|
* @returns The export information. If there is no export information, the return will be a **null**.
|
|
53
53
|
*/
|
|
54
54
|
getLazyExportInfo() {
|
|
55
|
-
if (this.lazyExportInfo === undefined
|
|
55
|
+
if (this.lazyExportInfo === undefined) {
|
|
56
56
|
this.lazyExportInfo = (0, ModelUtils_1.findExportInfo)(this);
|
|
57
57
|
}
|
|
58
58
|
return this.lazyExportInfo || null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArkMethod.d.ts","sourceRoot":"","sources":["../../../src/core/model/ArkMethod.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ArkMethod.d.ts","sourceRoot":"","sources":["../../../src/core/model/ArkMethod.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,eAAe,EAAc,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAgC,IAAI,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAKH,WAAW,EAEX,IAAI,EAEP,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAiB,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAuB,OAAO,EAAmB,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAgB,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAgB,MAAM,oBAAoB,CAAC;AAG5D,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG7D,eAAO,MAAM,iBAAiB,UAW7B,CAAC;AAEF;;GAEG;AACH,qBAAa,SAAU,SAAQ,YAAa,YAAW,SAAS;IAC5D,OAAO,CAAC,IAAI,CAAC,CAAS;IACtB,OAAO,CAAC,iBAAiB,CAAY;IAErC,OAAO,CAAC,WAAW,CAAC,CAAY;IAEhC,OAAO,CAAC,YAAY,CAAC,CAAgB;IAErC,OAAO,CAAC,uBAAuB,CAAC,CAAoB;IACpD,OAAO,CAAC,qBAAqB,CAAC,CAAY;IAE1C,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,OAAO,CAAC,CAAU;IAE1B,OAAO,CAAC,IAAI,CAAC,CAAU;IACvB,OAAO,CAAC,QAAQ,CAAC,CAAW;IAE5B,OAAO,CAAC,WAAW,CAAC,CAAc;IAElC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,aAAa,CAAkB;;IAMvC;;OAEG;IACI,WAAW,IAAI,QAAQ;IAIvB,aAAa,IAAI,UAAU;IAI3B,OAAO,IAAI,MAAM;IAIxB;;;OAGG;IACI,OAAO,IAAI,MAAM,GAAG,SAAS;IAI7B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC;;;OAGG;IACI,eAAe,IAAI,MAAM,EAAE,GAAG,IAAI;IAWzC;;;OAGG;IACI,iBAAiB,IAAI,MAAM,EAAE,GAAG,IAAI;IAW3C;;;;;;OAMG;IACI,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAavE;;;;OAIG;IACI,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI;IAIpD;;;OAGG;IACI,kBAAkB,IAAI,OAAO,EAAE,GAAG,IAAI;IAI7C;;;OAGG;IACI,OAAO,IAAI,MAAM,GAAG,IAAI;IAO/B;;;;;OAKG;IACI,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOlC;;;OAGG;IACI,SAAS,IAAI,MAAM,GAAG,IAAI;IAOjC;;;;;OAKG;IACI,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAOtC;;;OAGG;IACI,UAAU,IAAI,OAAO,GAAG,IAAI;IAInC;;;;OAIG;IACI,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIzC;;;OAGG;IACI,oBAAoB,IAAI,QAAQ;IAIhC,oBAAoB,CAAC,iBAAiB,EAAE,QAAQ,GAAG,IAAI;IAIvD,mBAAmB,IAAI,OAAO;IAI9B,kBAAkB,IAAI,OAAO;IAI7B,iBAAiB,IAAI,OAAO;IAI5B,aAAa,IAAI,eAAe,EAAE;IAIlC,aAAa,IAAI,IAAI;IAI5B;;;;OAIG;IACI,oBAAoB,IAAI,eAAe,EAAE,GAAG,IAAI;IAIvD;;;;;OAKG;IACI,wBAAwB,CAAC,eAAe,EAAE,eAAe,GAAG,MAAM;IAazE;;;;OAIG;IACI,0BAA0B,IAAI,eAAe,GAAG,IAAI;IAI3D;;;;;;;;;;;;;;OAcG;IACI,YAAY,IAAI,eAAe;IAItC;;;;;OAKG;IACI,oBAAoB,CAAC,UAAU,EAAE,eAAe,GAAG,eAAe,EAAE,GAAG,IAAI;IAQlF;;;;;;OAMG;IACI,4BAA4B,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAOpF;;;;;OAKG;IACI,0BAA0B,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAI5D,eAAe,IAAI,kBAAkB;IAIrC,eAAe,IAAI,WAAW,EAAE,GAAG,SAAS;IAI5C,gBAAgB,IAAI,OAAO;IAI3B,eAAe,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI;IAIlD,cAAc,IAAI,WAAW,GAAG,SAAS;IAIhD;;;;;;;;;;;;;;;;;;;;OAoBG;IACI,OAAO,IAAI,OAAO,GAAG,SAAS;IAI9B,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAInC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACI,MAAM,IAAI,GAAG,GAAG,SAAS;IAIzB,cAAc,IAAI,GAAG,GAAG,SAAS;IAIjC,gBAAgB,IAAI,eAAe,EAAE,GAAG,IAAI;IAe5C,qBAAqB,IAAI,KAAK,EAAE;IAqBhC,eAAe,IAAI,KAAK,GAAG,IAAI;IAiB/B,eAAe,IAAI,KAAK,EAAE;IAa1B,aAAa,IAAI,IAAI,EAAE;IAMvB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAIrC,WAAW,IAAI,QAAQ,GAAG,SAAS;IAInC,WAAW,IAAI,OAAO;IAItB,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAO9C,eAAe,IAAI,IAAI;IAIvB,SAAS,IAAI,IAAI;IAajB,WAAW,IAAI,OAAO;IAItB,kBAAkB,CAAC,eAAe,EAAE,OAAO,GAAG,IAAI;IAIlD,gBAAgB,IAAI,OAAO;IAI3B,gBAAgB,CAAC,aAAa,EAAE,OAAO,GAAG,IAAI;IAI9C,QAAQ,IAAI,QAAQ;IAiCpB,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,eAAe;IAiB3D,OAAO,CAAC,SAAS;IAgBjB,OAAO,CAAC,UAAU;IAuClB,OAAO,CAAC,MAAM,CAAC,QAAQ;IAahB,cAAc,IAAI,SAAS,GAAG,SAAS;IAIvC,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAIvC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAK5C,gBAAgB,CAAC,aAAa,EAAE,OAAO,GAAG,IAAI;IAI9C,gBAAgB,IAAI,OAAO;IAK3B,QAAQ,IAAI,OAAO;CAe7B"}
|
|
@@ -554,16 +554,22 @@ class ArkMethod extends ArkBaseModel_1.ArkBaseModel {
|
|
|
554
554
|
if (!args[i]) {
|
|
555
555
|
return isArrowFunc ? true : parameters[i].isOptional();
|
|
556
556
|
}
|
|
557
|
-
const
|
|
557
|
+
const paramType = parameters[i].getType();
|
|
558
|
+
const isMatched = this.matchParam(paramType, args[i]);
|
|
558
559
|
if (!isMatched) {
|
|
559
560
|
return false;
|
|
560
561
|
}
|
|
562
|
+
else if (paramType instanceof Type_1.EnumValueType || paramType instanceof Type_1.LiteralType) {
|
|
563
|
+
return true;
|
|
564
|
+
}
|
|
561
565
|
}
|
|
562
566
|
return true;
|
|
563
567
|
}
|
|
564
568
|
matchParam(paramType, arg) {
|
|
565
569
|
var _a, _b;
|
|
566
|
-
|
|
570
|
+
if (paramType instanceof Type_1.EnumValueType || paramType instanceof Type_1.LiteralType) {
|
|
571
|
+
arg = ArkMethod.parseArg(arg);
|
|
572
|
+
}
|
|
567
573
|
const argType = arg.getType();
|
|
568
574
|
if (paramType instanceof Type_1.AliasType && !(argType instanceof Type_1.AliasType)) {
|
|
569
575
|
paramType = TypeInference_1.TypeInference.replaceAliasType(paramType);
|