arkanalyzer 1.0.76 → 1.0.78
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/callgraph/pointerAnalysis/PTAUtils.d.ts +12 -9
- package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PTAUtils.js +19 -9
- package/lib/callgraph/pointerAnalysis/Pag.d.ts +10 -0
- package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.js +124 -4
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +24 -7
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +163 -42
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +3 -1
- package/lib/callgraph/pointerAnalysis/context/Context.d.ts +1 -0
- package/lib/callgraph/pointerAnalysis/context/Context.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/context/Context.js +5 -1
- package/lib/callgraph/pointerAnalysis/context/ContextSelector.d.ts +1 -1
- package/lib/callgraph/pointerAnalysis/context/ContextSelector.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/context/ContextSelector.js +1 -2
- package/lib/callgraph/pointerAnalysis/plugins/ContainerPlugin.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/plugins/ContainerPlugin.js +11 -9
- package/lib/core/common/ArkIRTransformer.js +1 -1
- package/lib/core/common/Builtin.d.ts +2 -0
- package/lib/core/common/Builtin.d.ts.map +1 -1
- package/lib/core/common/Builtin.js +2 -0
- package/lib/core/common/IRInference.d.ts +4 -0
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +100 -0
- package/lib/core/common/ModelUtils.d.ts +3 -2
- package/lib/core/common/ModelUtils.d.ts.map +1 -1
- package/lib/core/common/ModelUtils.js +28 -13
- package/lib/core/graph/builder/CfgBuilder.d.ts +24 -0
- package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/CfgBuilder.js +179 -0
- package/lib/core/graph/builder/ConditionBuilder.d.ts +4 -4
- package/lib/core/graph/builder/ConditionBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/ConditionBuilder.js +27 -61
- package/lib/core/graph/builder/SwitchBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/SwitchBuilder.js +5 -15
- package/lib/core/graph/builder/TrapBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/TrapBuilder.js +18 -54
- package/lib/core/inference/ValueInference.d.ts +1 -3
- package/lib/core/inference/ValueInference.d.ts.map +1 -1
- package/lib/core/inference/ValueInference.js +23 -76
- package/lib/core/model/ArkMethod.d.ts +2 -1
- package/lib/core/model/ArkMethod.d.ts.map +1 -1
- package/lib/core/model/ArkMethod.js +5 -1
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +5 -1
- package/package.json +2 -2
|
@@ -44,6 +44,7 @@ const Ref_1 = require("../../base/Ref");
|
|
|
44
44
|
const Type_1 = require("../../base/Type");
|
|
45
45
|
const Position_1 = require("../../base/Position");
|
|
46
46
|
const Stmt_1 = require("../../base/Stmt");
|
|
47
|
+
const CfgBuilder_1 = require("./CfgBuilder");
|
|
47
48
|
const logger_1 = __importStar(require("../../../utils/logger"));
|
|
48
49
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'TrapBuilder');
|
|
49
50
|
/**
|
|
@@ -197,22 +198,9 @@ class TrapBuilder {
|
|
|
197
198
|
if (!this.shouldRemoveEmptyBlockBeforeTry(blockBuilderBeforeTry)) {
|
|
198
199
|
return;
|
|
199
200
|
}
|
|
200
|
-
const
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
const prevsOfBlockBuilderBeforeTry = blockBuilderBeforeTry.lasts;
|
|
204
|
-
for (const prevBlockBuilder of prevsOfBlockBuilderBeforeTry) {
|
|
205
|
-
const prevBlock = this.blockBuilderToCfgBlock.get(prevBlockBuilder);
|
|
206
|
-
for (let j = 0; j < prevBlockBuilder.nexts.length; j++) {
|
|
207
|
-
if (prevBlockBuilder.nexts[j] === blockBuilderBeforeTry) {
|
|
208
|
-
prevBlockBuilder.nexts[j] = headBlockBuilderWithinTry;
|
|
209
|
-
prevBlock.setSuccessorBlock(j, headBlockWithinTry);
|
|
210
|
-
break;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
headBlockWithinTry.addPredecessorBlock(prevBlock);
|
|
214
|
-
}
|
|
215
|
-
headBlockBuilderWithinTry.lasts.splice(0, 1, ...prevsOfBlockBuilderBeforeTry);
|
|
201
|
+
const blockBeforeTry = this.blockBuilderToCfgBlock.get(blockBuilderBeforeTry);
|
|
202
|
+
CfgBuilder_1.CfgBuilder.pruneBlockBuilder(blockBuilderBeforeTry);
|
|
203
|
+
CfgBuilder_1.CfgBuilder.pruneBasicBlock(blockBeforeTry);
|
|
216
204
|
this.basicBlockSet.delete(this.blockBuilderToCfgBlock.get(blockBuilderBeforeTry));
|
|
217
205
|
this.blockBuilderToCfgBlock.delete(blockBuilderBeforeTry);
|
|
218
206
|
}
|
|
@@ -221,43 +209,25 @@ class TrapBuilder {
|
|
|
221
209
|
// This BlockBuilder contains only one redundant TryStatementBuilder, so the BlockBuilder can be deleted.
|
|
222
210
|
return stmtsCnt === 1;
|
|
223
211
|
}
|
|
224
|
-
buildTrapsIfNoFinally(tryBfsBlocks, tryTailBlocks, catchBfsBlocks, catchTailBlocks,
|
|
212
|
+
buildTrapsIfNoFinally(tryBfsBlocks, tryTailBlocks, catchBfsBlocks, catchTailBlocks, dummyFinallyBlockBuilder) {
|
|
225
213
|
if (catchBfsBlocks.length === 0) {
|
|
226
214
|
logger.error(`catch block expected.`);
|
|
227
215
|
return [];
|
|
228
216
|
}
|
|
229
|
-
const
|
|
217
|
+
const dummyFinallyBlock = this.blockBuilderToCfgBlock.get(dummyFinallyBlockBuilder);
|
|
218
|
+
CfgBuilder_1.CfgBuilder.pruneBasicBlock(dummyFinallyBlock);
|
|
219
|
+
this.basicBlockSet.delete(dummyFinallyBlock);
|
|
220
|
+
const blockBuilderAfterFinally = dummyFinallyBlockBuilder.nexts[0];
|
|
230
221
|
let blockAfterFinally = this.blockBuilderToCfgBlock.get(blockBuilderAfterFinally);
|
|
231
|
-
if (!this.blockBuilderToCfgBlock.has(
|
|
222
|
+
if (!this.blockBuilderToCfgBlock.has(dummyFinallyBlockBuilder)) {
|
|
232
223
|
logger.error(`can't find basicBlock corresponding to the blockBuilder.`);
|
|
233
224
|
return [];
|
|
234
225
|
}
|
|
235
|
-
const finallyBlock = this.blockBuilderToCfgBlock.get(finallyBlockBuilder);
|
|
236
|
-
let dummyFinallyIdxInPredecessors = -1;
|
|
237
|
-
for (let i = 0; i < blockAfterFinally.getPredecessors().length; i++) {
|
|
238
|
-
if (blockAfterFinally.getPredecessors()[i] === finallyBlock) {
|
|
239
|
-
dummyFinallyIdxInPredecessors = i;
|
|
240
|
-
break;
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
if (dummyFinallyIdxInPredecessors === -1) {
|
|
244
|
-
logger.error(`Dummy finally block isn't a predecessor of block after finally block.`);
|
|
245
|
-
return [];
|
|
246
|
-
}
|
|
247
|
-
blockAfterFinally.getPredecessors().splice(dummyFinallyIdxInPredecessors, 1);
|
|
248
|
-
for (const tryTailBlock of tryTailBlocks) {
|
|
249
|
-
const finallyIndex = tryTailBlock.getSuccessors().findIndex(succ => succ === finallyBlock);
|
|
250
|
-
tryTailBlock.setSuccessorBlock(finallyIndex, blockAfterFinally);
|
|
251
|
-
blockAfterFinally.addPredecessorBlock(tryTailBlock);
|
|
252
|
-
}
|
|
253
|
-
this.basicBlockSet.delete(finallyBlock);
|
|
254
226
|
for (const catchTailBlock of catchTailBlocks) {
|
|
255
|
-
|
|
256
|
-
blockAfterFinally.addPredecessorBlock(catchTailBlock);
|
|
227
|
+
CfgBuilder_1.CfgBuilder.linkBasicBlock(catchTailBlock, blockAfterFinally);
|
|
257
228
|
}
|
|
258
229
|
for (const tryTailBlock of tryTailBlocks) {
|
|
259
|
-
|
|
260
|
-
catchBfsBlocks[0].addExceptionalPredecessorBlock(tryTailBlock);
|
|
230
|
+
CfgBuilder_1.CfgBuilder.linkExceptionalBasicBlock(tryTailBlock, catchBfsBlocks[0]);
|
|
261
231
|
}
|
|
262
232
|
return [new Trap_1.Trap(tryBfsBlocks, catchBfsBlocks)];
|
|
263
233
|
}
|
|
@@ -271,27 +241,23 @@ class TrapBuilder {
|
|
|
271
241
|
const copyFinallyBfsBlocks = this.copyFinallyBlocks(finallyBfsBlocks, finallyTailBlocks);
|
|
272
242
|
if (catchBfsBlocks.length !== 0) {
|
|
273
243
|
for (const catchTailBlock of catchTailBlocks) {
|
|
274
|
-
|
|
275
|
-
finallyBfsBlocks[0].addPredecessorBlock(catchTailBlock);
|
|
244
|
+
CfgBuilder_1.CfgBuilder.linkBasicBlock(catchTailBlock, finallyBfsBlocks[0]);
|
|
276
245
|
}
|
|
277
246
|
// try -> catch trap
|
|
278
247
|
for (const tryTailBlock of tryTailBlocks) {
|
|
279
|
-
|
|
280
|
-
catchBfsBlocks[0].addExceptionalPredecessorBlock(tryTailBlock);
|
|
248
|
+
CfgBuilder_1.CfgBuilder.linkExceptionalBasicBlock(tryTailBlock, catchBfsBlocks[0]);
|
|
281
249
|
}
|
|
282
250
|
traps.push(new Trap_1.Trap(tryBfsBlocks, catchBfsBlocks));
|
|
283
251
|
// catch -> finally trap
|
|
284
252
|
for (const catchTailBlock of catchTailBlocks) {
|
|
285
|
-
|
|
286
|
-
copyFinallyBfsBlocks[0].addExceptionalPredecessorBlock(catchTailBlock);
|
|
253
|
+
CfgBuilder_1.CfgBuilder.linkExceptionalBasicBlock(catchTailBlock, copyFinallyBfsBlocks[0]);
|
|
287
254
|
}
|
|
288
255
|
traps.push(new Trap_1.Trap(catchBfsBlocks, copyFinallyBfsBlocks));
|
|
289
256
|
}
|
|
290
257
|
else {
|
|
291
258
|
// try -> finally trap
|
|
292
259
|
for (const tryTailBlock of tryTailBlocks) {
|
|
293
|
-
|
|
294
|
-
copyFinallyBfsBlocks[0].addExceptionalPredecessorBlock(tryTailBlock);
|
|
260
|
+
CfgBuilder_1.CfgBuilder.linkExceptionalBasicBlock(tryTailBlock, copyFinallyBfsBlocks[0]);
|
|
295
261
|
}
|
|
296
262
|
traps.push(new Trap_1.Trap(tryBfsBlocks, copyFinallyBfsBlocks));
|
|
297
263
|
}
|
|
@@ -335,15 +301,13 @@ class TrapBuilder {
|
|
|
335
301
|
const caughtExceptionRef = new Ref_1.ArkCaughtExceptionRef(Type_1.UnknownType.getInstance());
|
|
336
302
|
const { value: exceptionValue, stmts: exceptionAssignStmts, } = this.arkIRTransformer.generateAssignStmtForValue(caughtExceptionRef, [Position_1.FullPosition.DEFAULT]);
|
|
337
303
|
copyFinallyBfsBlocks[0].addHead(exceptionAssignStmts);
|
|
338
|
-
|
|
339
|
-
copyFinallyBfsBlocks[0].getPredecessors().splice(0, finallyPredecessorsCnt);
|
|
304
|
+
CfgBuilder_1.CfgBuilder.unlinkPredecessorsOfBasicBlock(copyFinallyBfsBlocks[0]);
|
|
340
305
|
const throwStmt = new Stmt_1.ArkThrowStmt(exceptionValue);
|
|
341
306
|
let copyFinallyTailBlocks = copyFinallyBfsBlocks.splice(copyFinallyBfsBlocks.length - finallyTailBlocks.length, finallyTailBlocks.length);
|
|
342
307
|
if (copyFinallyTailBlocks.length > 1) {
|
|
343
308
|
const newCopyFinallyTailBlock = new BasicBlock_1.BasicBlock();
|
|
344
309
|
copyFinallyTailBlocks.forEach((copyFinallyTailBlock) => {
|
|
345
|
-
|
|
346
|
-
newCopyFinallyTailBlock.addPredecessorBlock(copyFinallyTailBlock);
|
|
310
|
+
CfgBuilder_1.CfgBuilder.linkBasicBlock(copyFinallyTailBlock, newCopyFinallyTailBlock);
|
|
347
311
|
});
|
|
348
312
|
copyFinallyBfsBlocks.push(...copyFinallyTailBlocks);
|
|
349
313
|
copyFinallyTailBlocks = [newCopyFinallyTailBlock];
|
|
@@ -6,7 +6,6 @@ import { Type } from '../base/Type';
|
|
|
6
6
|
import { ArkMethod } from '../model/ArkMethod';
|
|
7
7
|
import { AbstractInvokeExpr, AliasTypeExpr, ArkCastExpr, ArkConditionExpr, ArkInstanceInvokeExpr, ArkInstanceOfExpr, ArkNewArrayExpr, ArkNewExpr, ArkNormalBinopExpr, ArkPtrInvokeExpr, ArkStaticInvokeExpr } from '../base/Expr';
|
|
8
8
|
import { Local } from '../base/Local';
|
|
9
|
-
import { Scene } from '../../Scene';
|
|
10
9
|
export declare enum InferLanguage {
|
|
11
10
|
UNKNOWN = -1,
|
|
12
11
|
COMMON = 0,
|
|
@@ -167,8 +166,7 @@ export declare class InstanceInvokeExprInference extends ValueInference<ArkInsta
|
|
|
167
166
|
*/
|
|
168
167
|
postInfer(value: ArkInstanceInvokeExpr, newValue: Value, stmt: Stmt): void;
|
|
169
168
|
getMethodName(expr: AbstractInvokeExpr, arkMethod: ArkMethod): string;
|
|
170
|
-
static inferInvokeExpr(baseType: Type, expr: AbstractInvokeExpr, arkMethod: ArkMethod
|
|
171
|
-
static inferMethodFromBase(baseType: Type, expr: AbstractInvokeExpr, scene: Scene, methodName: string): AbstractInvokeExpr | null;
|
|
169
|
+
static inferInvokeExpr(baseType: Type, expr: AbstractInvokeExpr, arkMethod: ArkMethod): AbstractInvokeExpr | null;
|
|
172
170
|
}
|
|
173
171
|
export declare class StaticInvokeExprInference extends InstanceInvokeExprInference {
|
|
174
172
|
getValueName(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ValueInference.d.ts","sourceRoot":"","sources":["../../../src/core/inference/ValueInference.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,
|
|
1
|
+
{"version":3,"file":"ValueInference.d.ts","sourceRoot":"","sources":["../../../src/core/inference/ValueInference.ts"],"names":[],"mappings":"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"}
|
|
@@ -56,13 +56,13 @@ const TSConst_1 = require("../common/TSConst");
|
|
|
56
56
|
const Expr_1 = require("../base/Expr");
|
|
57
57
|
const ModelUtils_1 = require("../common/ModelUtils");
|
|
58
58
|
const Local_1 = require("../base/Local");
|
|
59
|
-
const Builtin_1 = require("../common/Builtin");
|
|
60
59
|
const ArkClass_1 = require("../model/ArkClass");
|
|
61
60
|
const Constant_1 = require("../base/Constant");
|
|
62
61
|
const logger_1 = __importStar(require("../../utils/logger"));
|
|
63
62
|
const ArkSignature_1 = require("../model/ArkSignature");
|
|
64
63
|
const ArkImport_1 = require("../model/ArkImport");
|
|
65
64
|
const ArkField_1 = require("../model/ArkField");
|
|
65
|
+
const Builtin_1 = require("../common/Builtin");
|
|
66
66
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'ValueInference');
|
|
67
67
|
var InferLanguage;
|
|
68
68
|
(function (InferLanguage) {
|
|
@@ -225,27 +225,11 @@ let FieldRefInference = class FieldRefInference extends ValueInference {
|
|
|
225
225
|
* or undefined for regular instance fields
|
|
226
226
|
*/
|
|
227
227
|
infer(value, stmt) {
|
|
228
|
-
const baseType =
|
|
228
|
+
const baseType = value.getBase().getType();
|
|
229
229
|
const arkMethod = stmt.getCfg().getDeclaringMethod();
|
|
230
|
-
// Special handling for array types with dynamic field access
|
|
231
|
-
if (baseType instanceof Type_1.ArrayType && value.isDynamic()) {
|
|
232
|
-
const index = TypeInference_1.TypeInference.getLocalFromMethodBody(value.getFieldName(), arkMethod);
|
|
233
|
-
if (index) {
|
|
234
|
-
return new Ref_1.ArkArrayRef(value.getBase(), index);
|
|
235
|
-
}
|
|
236
|
-
else {
|
|
237
|
-
return new Ref_1.ArkArrayRef(value.getBase(), ValueUtil_1.ValueUtil.createConst(value.getFieldName()));
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
230
|
// Generate updated field signature based on current context
|
|
241
|
-
const
|
|
242
|
-
|
|
243
|
-
value.setFieldSignature(newFieldSignature);
|
|
244
|
-
if (newFieldSignature.isStatic()) {
|
|
245
|
-
return new Ref_1.ArkStaticFieldRef(newFieldSignature);
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
return undefined;
|
|
231
|
+
const result = IRInference_1.IRInference.inferInstanceMember(baseType, value, arkMethod, IRInference_1.IRInference.updateRefSignature);
|
|
232
|
+
return !result || result === value ? undefined : result;
|
|
249
233
|
}
|
|
250
234
|
};
|
|
251
235
|
FieldRefInference = __decorate([
|
|
@@ -277,19 +261,13 @@ let StaticFieldRefInference = class StaticFieldRefInference extends ValueInferen
|
|
|
277
261
|
infer(value, stmt) {
|
|
278
262
|
const baseSignature = value.getFieldSignature().getDeclaringSignature();
|
|
279
263
|
const baseName = baseSignature instanceof ArkSignature_1.ClassSignature ? baseSignature.getClassName() : baseSignature.getNamespaceName();
|
|
280
|
-
const
|
|
281
|
-
const baseType = TypeInference_1.TypeInference.inferBaseType(baseName,
|
|
264
|
+
const arkMethod = stmt.getCfg().getDeclaringMethod();
|
|
265
|
+
const baseType = TypeInference_1.TypeInference.inferBaseType(baseName, arkMethod.getDeclaringArkClass());
|
|
282
266
|
if (!baseType) {
|
|
283
267
|
return undefined;
|
|
284
268
|
}
|
|
285
|
-
const
|
|
286
|
-
|
|
287
|
-
value.setFieldSignature(newFieldSignature);
|
|
288
|
-
if (newFieldSignature.isStatic()) {
|
|
289
|
-
return new Ref_1.ArkStaticFieldRef(newFieldSignature);
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
return undefined;
|
|
269
|
+
const result = IRInference_1.IRInference.inferInstanceMember(baseType, value, arkMethod, IRInference_1.IRInference.updateRefSignature);
|
|
270
|
+
return !result || result === value ? undefined : result;
|
|
293
271
|
}
|
|
294
272
|
};
|
|
295
273
|
StaticFieldRefInference = __decorate([
|
|
@@ -320,7 +298,7 @@ let InstanceInvokeExprInference = InstanceInvokeExprInference_1 = class Instance
|
|
|
320
298
|
*/
|
|
321
299
|
infer(value, stmt) {
|
|
322
300
|
const arkMethod = stmt.getCfg().getDeclaringMethod();
|
|
323
|
-
const result =
|
|
301
|
+
const result = IRInference_1.IRInference.inferInstanceMember(value.getBase().getType(), value, arkMethod, InstanceInvokeExprInference_1.inferInvokeExpr);
|
|
324
302
|
return !result || result === value ? undefined : result;
|
|
325
303
|
}
|
|
326
304
|
/**
|
|
@@ -344,49 +322,21 @@ let InstanceInvokeExprInference = InstanceInvokeExprInference_1 = class Instance
|
|
|
344
322
|
getMethodName(expr, arkMethod) {
|
|
345
323
|
return expr.getMethodSignature().getMethodSubSignature().getMethodName();
|
|
346
324
|
}
|
|
347
|
-
static inferInvokeExpr(baseType, expr, arkMethod
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
if (baseType instanceof Type_1.
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
if (type instanceof Type_1.UndefinedType || type instanceof Type_1.NullType) {
|
|
356
|
-
continue;
|
|
357
|
-
}
|
|
358
|
-
let result = this.inferInvokeExpr(type, expr, arkMethod, methodName);
|
|
359
|
-
if (result) {
|
|
360
|
-
return result;
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
else if (baseType instanceof Type_1.ArrayType) {
|
|
365
|
-
const arrayClass = arkMethod.getDeclaringArkFile().getScene().getSdkGlobal(Builtin_1.Builtin.ARRAY);
|
|
366
|
-
if (arrayClass instanceof ArkClass_1.ArkClass) {
|
|
367
|
-
baseType = new Type_1.ClassType(arrayClass.getSignature(), [baseType.getBaseType()]);
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
else if (baseType instanceof Type_1.GenericType) {
|
|
371
|
-
const newType = (_a = baseType.getDefaultType()) !== null && _a !== void 0 ? _a : baseType.getConstraint();
|
|
372
|
-
if (!newType) {
|
|
373
|
-
return null;
|
|
325
|
+
static inferInvokeExpr(baseType, expr, arkMethod) {
|
|
326
|
+
const methodName = expr.getMethodSignature().getMethodSubSignature().getMethodName();
|
|
327
|
+
const scene = arkMethod.getDeclaringArkFile().getScene();
|
|
328
|
+
if (baseType instanceof Type_1.ArrayType || baseType instanceof Type_1.TupleType) {
|
|
329
|
+
const arrayInterface = scene.getSdkGlobal(Builtin_1.Builtin.ARRAY);
|
|
330
|
+
const realTypes = baseType instanceof Type_1.ArrayType ? [baseType.getBaseType()] : undefined;
|
|
331
|
+
if (arrayInterface instanceof ArkClass_1.ArkClass) {
|
|
332
|
+
baseType = new Type_1.ClassType(arrayInterface.getSignature(), realTypes);
|
|
374
333
|
}
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
const name = baseType.getName();
|
|
380
|
-
const className = name.charAt(0).toUpperCase() + name.slice(1);
|
|
381
|
-
const arrayClass = arkMethod.getDeclaringArkFile().getScene().getSdkGlobal(className);
|
|
382
|
-
if (arrayClass instanceof ArkClass_1.ArkClass) {
|
|
383
|
-
baseType = new Type_1.ClassType(arrayClass.getSignature());
|
|
334
|
+
else if (methodName === Builtin_1.Builtin.ITERATOR_FUNCTION) {
|
|
335
|
+
expr.getMethodSignature().getMethodSubSignature().setReturnType(Builtin_1.Builtin.ITERATOR_CLASS_TYPE);
|
|
336
|
+
expr.setRealGenericTypes(realTypes !== null && realTypes !== void 0 ? realTypes : expr.getRealGenericTypes());
|
|
337
|
+
return expr;
|
|
384
338
|
}
|
|
385
339
|
}
|
|
386
|
-
const scene = arkMethod.getDeclaringArkFile().getScene();
|
|
387
|
-
return this.inferMethodFromBase(baseType, expr, scene, methodName);
|
|
388
|
-
}
|
|
389
|
-
static inferMethodFromBase(baseType, expr, scene, methodName) {
|
|
390
340
|
// Dispatch to appropriate inference method based on resolved base type
|
|
391
341
|
if (baseType instanceof Type_1.ClassType) {
|
|
392
342
|
return IRInference_1.IRInference.inferInvokeExprWithDeclaredClass(expr, baseType, methodName, scene);
|
|
@@ -406,9 +356,6 @@ let InstanceInvokeExprInference = InstanceInvokeExprInference_1 = class Instance
|
|
|
406
356
|
else if (baseType instanceof Type_1.FunctionType) {
|
|
407
357
|
return IRInference_1.IRInference.inferInvokeExprWithFunction(methodName, expr, baseType, scene);
|
|
408
358
|
}
|
|
409
|
-
else if (baseType instanceof Type_1.ArrayType) {
|
|
410
|
-
return IRInference_1.IRInference.inferInvokeExprWithArray(methodName, expr, baseType, scene);
|
|
411
|
-
}
|
|
412
359
|
return null;
|
|
413
360
|
}
|
|
414
361
|
};
|
|
@@ -447,7 +394,7 @@ let StaticInvokeExprInference = class StaticInvokeExprInference extends Instance
|
|
|
447
394
|
return undefined;
|
|
448
395
|
}
|
|
449
396
|
const baseType = this.getBaseType(expr, arkMethod);
|
|
450
|
-
const result = baseType ?
|
|
397
|
+
const result = baseType ? IRInference_1.IRInference.inferInstanceMember(baseType, expr, arkMethod, InstanceInvokeExprInference.inferInvokeExpr) :
|
|
451
398
|
IRInference_1.IRInference.inferStaticInvokeExprByMethodName(methodName, arkMethod, expr);
|
|
452
399
|
return !result || result === expr ? undefined : result;
|
|
453
400
|
}
|
|
@@ -690,7 +637,7 @@ let ArkTsInstanceInvokeExprInference = class ArkTsInstanceInvokeExprInference ex
|
|
|
690
637
|
var _a;
|
|
691
638
|
const arkMethod = stmt.getCfg().getDeclaringMethod();
|
|
692
639
|
TypeInference_1.TypeInference.inferRealGenericTypes(value.getRealGenericTypes(), arkMethod.getDeclaringArkClass());
|
|
693
|
-
const result = (_a =
|
|
640
|
+
const result = (_a = IRInference_1.IRInference.inferInstanceMember(value.getBase().getType(), value, arkMethod, InstanceInvokeExprInference.inferInvokeExpr)) !== null && _a !== void 0 ? _a : IRInference_1.IRInference.processExtendFunc(value, arkMethod, super.getMethodName(value, arkMethod));
|
|
694
641
|
return !result || result === value ? undefined : result;
|
|
695
642
|
}
|
|
696
643
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ArkParameterRef } from '../base/Ref';
|
|
2
|
-
import { Stmt } from '../base/Stmt';
|
|
2
|
+
import { ArkReturnVoidStmt, Stmt } from '../base/Stmt';
|
|
3
3
|
import { GenericType, Type } from '../base/Type';
|
|
4
4
|
import { Value } from '../base/Value';
|
|
5
5
|
import { Cfg } from '../graph/Cfg';
|
|
@@ -249,6 +249,7 @@ export declare class ArkMethod extends ArkBaseModel implements ArkExport {
|
|
|
249
249
|
getThisInstance(): Value | null;
|
|
250
250
|
getReturnValues(): Value[];
|
|
251
251
|
getReturnStmt(): Stmt[];
|
|
252
|
+
getReturnVoidStmt(): ArkReturnVoidStmt[];
|
|
252
253
|
setViewTree(viewTree: ViewTree): void;
|
|
253
254
|
getViewTree(): ViewTree | undefined;
|
|
254
255
|
hasViewTree(): boolean;
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
1
|
+
{"version":3,"file":"ArkMethod.d.ts","sourceRoot":"","sources":["../../../src/core/model/ArkMethod.ts"],"names":[],"mappings":"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"}
|
|
@@ -456,7 +456,11 @@ class ArkMethod extends ArkBaseModel_1.ArkBaseModel {
|
|
|
456
456
|
}
|
|
457
457
|
getReturnStmt() {
|
|
458
458
|
var _a, _b;
|
|
459
|
-
return (_b = (_a = this.getCfg()) === null || _a === void 0 ? void 0 : _a.getStmts().filter(stmt => stmt instanceof Stmt_1.ArkReturnStmt)) !== null && _b !== void 0 ? _b : [];
|
|
459
|
+
return ((_b = (_a = this.getCfg()) === null || _a === void 0 ? void 0 : _a.getStmts().filter(stmt => stmt instanceof Stmt_1.ArkReturnStmt)) !== null && _b !== void 0 ? _b : []);
|
|
460
|
+
}
|
|
461
|
+
getReturnVoidStmt() {
|
|
462
|
+
var _a, _b;
|
|
463
|
+
return ((_b = (_a = this.getCfg()) === null || _a === void 0 ? void 0 : _a.getStmts().filter(stmt => stmt instanceof Stmt_1.ArkReturnVoidStmt)) !== null && _b !== void 0 ? _b : []);
|
|
460
464
|
}
|
|
461
465
|
setViewTree(viewTree) {
|
|
462
466
|
this.viewTree = viewTree;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArkMethodBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkMethodBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAa,IAAI,EAAe,MAAM,iBAAiB,CAAC;AAG/D,OAAO,EAAE,QAAQ,EAAiB,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAgBjC,OAAO,EAAkE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvG,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"ArkMethodBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkMethodBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -76,7 +76,11 @@ function buildDefaultArkMethodFromArkClass(declaringClass, mtd, sourceFile, node
|
|
|
76
76
|
exports.buildDefaultArkMethodFromArkClass = buildDefaultArkMethodFromArkClass;
|
|
77
77
|
function buildArkMethodFromArkClass(methodNode, declaringClass, mtd, sourceFile, declaringMethod) {
|
|
78
78
|
mtd.setDeclaringArkClass(declaringClass);
|
|
79
|
-
declaringMethod !== undefined &&
|
|
79
|
+
if (declaringMethod !== undefined && !declaringMethod.isGenerated() && !declaringMethod.isDefaultArkMethod()) {
|
|
80
|
+
// If declaringMethod is %dflt, %instInit, %statInit, then the method should be taken as nested method of them.
|
|
81
|
+
// Otherwise, it will fail to handle global vars of this method or failed to do the free of bodyBuilder.
|
|
82
|
+
mtd.setOuterMethod(declaringMethod);
|
|
83
|
+
}
|
|
80
84
|
ohos_typescript_1.default.isFunctionDeclaration(methodNode) && mtd.setAsteriskToken(methodNode.asteriskToken !== undefined);
|
|
81
85
|
// All MethodLikeNode except FunctionTypeNode have questionToken.
|
|
82
86
|
!ohos_typescript_1.default.isFunctionTypeNode(methodNode) && mtd.setQuestionToken(methodNode.questionToken !== undefined);
|