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
|
@@ -71,11 +71,12 @@ export declare function getArkFile(im: FromInfo): ArkFile | null | undefined;
|
|
|
71
71
|
/**
|
|
72
72
|
* find from info's export
|
|
73
73
|
* @param fromInfo importInfo or exportInfo
|
|
74
|
+
* @param visited
|
|
74
75
|
*/
|
|
75
|
-
export declare function findExportInfo(fromInfo: FromInfo): ExportInfo | null;
|
|
76
|
+
export declare function findExportInfo(fromInfo: FromInfo, visited?: Set<ArkFile>): ExportInfo | null;
|
|
76
77
|
export declare function findArkExport(exportInfo: ExportInfo | undefined): ArkExport | null;
|
|
77
78
|
export declare function findArkExportInFile(name: string, declaringArkFile: ArkFile): ArkExport | null;
|
|
78
|
-
export declare function findExportInfoInfile(fromInfo: FromInfo, file: ArkFile): ExportInfo | undefined;
|
|
79
|
+
export declare function findExportInfoInfile(fromInfo: FromInfo, file: ArkFile, visited?: Set<ArkFile>): ExportInfo | undefined;
|
|
79
80
|
export declare function initModulePathMap(ohPkgContentMap: Map<string, {
|
|
80
81
|
[k: string]: unknown;
|
|
81
82
|
}>): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelUtils.d.ts","sourceRoot":"","sources":["../../../src/core/common/ModelUtils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ModelUtils.d.ts","sourceRoot":"","sources":["../../../src/core/common/ModelUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -700,27 +700,30 @@ exports.getArkFile = getArkFile;
|
|
|
700
700
|
/**
|
|
701
701
|
* find from info's export
|
|
702
702
|
* @param fromInfo importInfo or exportInfo
|
|
703
|
+
* @param visited
|
|
703
704
|
*/
|
|
704
|
-
function findExportInfo(fromInfo) {
|
|
705
|
-
var _a, _b;
|
|
705
|
+
function findExportInfo(fromInfo, visited = new Set([fromInfo.getDeclaringArkFile()])) {
|
|
706
|
+
var _a, _b, _c, _d;
|
|
706
707
|
let file = getArkFile(fromInfo);
|
|
707
708
|
if (!file) {
|
|
708
709
|
logger.warn(`${fromInfo.getOriginName()} ${fromInfo.getFrom()} file not found: ${(_b = (_a = fromInfo.getDeclaringArkFile()) === null || _a === void 0 ? void 0 : _a.getFileSignature()) === null || _b === void 0 ? void 0 : _b.toString()}`);
|
|
709
710
|
return null;
|
|
710
711
|
}
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
712
|
+
if (fromInfo.getOriginName() === TSConst_1.ALL) {
|
|
713
|
+
const exportInfo = (0, ArkExportBuilder_1.buildDefaultExportInfo)(fromInfo, file);
|
|
714
|
+
file.addExportInfo(exportInfo, TSConst_1.ALL);
|
|
715
|
+
return exportInfo;
|
|
716
|
+
}
|
|
717
|
+
//check cycle
|
|
718
|
+
if (visited.has(file)) {
|
|
719
|
+
logger.warn(`It existed a cycle in: ${(_d = (_c = fromInfo.getDeclaringArkFile()) === null || _c === void 0 ? void 0 : _c.getFileSignature()) === null || _d === void 0 ? void 0 : _d.toString()}`);
|
|
719
720
|
return null;
|
|
720
721
|
}
|
|
721
|
-
|
|
722
|
+
else {
|
|
723
|
+
visited.add(file);
|
|
724
|
+
}
|
|
725
|
+
let exportInfo = findExportInfoInfile(fromInfo, file, visited) || null;
|
|
722
726
|
if (exportInfo === null) {
|
|
723
|
-
logger.warn('export info not found, ' + fromInfo.getFrom() + ' in file: ' + fromInfo.getDeclaringArkFile().getFileSignature().toString());
|
|
724
727
|
return null;
|
|
725
728
|
}
|
|
726
729
|
const arkExport = findArkExport(exportInfo);
|
|
@@ -820,7 +823,19 @@ function getArkFileFormMap(projectName, filePath, scene) {
|
|
|
820
823
|
}
|
|
821
824
|
return null;
|
|
822
825
|
}
|
|
823
|
-
function findExportInfoInfile(fromInfo, file) {
|
|
826
|
+
function findExportInfoInfile(fromInfo, file, visited = new Set([fromInfo.getDeclaringArkFile()])) {
|
|
827
|
+
// expand export *
|
|
828
|
+
file.getExportInfos().filter(f => f.getExportClauseName().startsWith(TSConst_1.TEMP_EXPORT_ALL_PREFIX))
|
|
829
|
+
.forEach(e => {
|
|
830
|
+
findExportInfo(e, visited);
|
|
831
|
+
file.removeExportInfo(e);
|
|
832
|
+
});
|
|
833
|
+
if (fromInfo.getOriginName().startsWith(TSConst_1.TEMP_EXPORT_ALL_PREFIX) && fromInfo instanceof ArkExport_1.ExportInfo) {
|
|
834
|
+
const declaringArkFile = fromInfo.getDeclaringArkFile();
|
|
835
|
+
file.getExportInfos().filter(f => !f.isDefault()).forEach(exportInfo => declaringArkFile.addExportInfo(exportInfo));
|
|
836
|
+
declaringArkFile.removeExportInfo(fromInfo);
|
|
837
|
+
return undefined;
|
|
838
|
+
}
|
|
824
839
|
const exportName = fromInfo.isDefault() ? TSConst_1.DEFAULT : fromInfo.getOriginName();
|
|
825
840
|
let exportInfo = file.getExportInfoBy(exportName);
|
|
826
841
|
if (exportInfo) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as ts from 'ohos-typescript';
|
|
2
2
|
import { Local } from '../../base/Local';
|
|
3
3
|
import { ArkAliasTypeDefineStmt } from '../../base/Stmt';
|
|
4
|
+
import { BasicBlock } from '../BasicBlock';
|
|
4
5
|
import { Cfg } from '../Cfg';
|
|
5
6
|
import { ArkClass } from '../../model/ArkClass';
|
|
6
7
|
import { ArkMethod } from '../../model/ArkMethod';
|
|
@@ -80,6 +81,8 @@ export declare class BlockBuilder {
|
|
|
80
81
|
lasts: BlockBuilder[];
|
|
81
82
|
walked: boolean;
|
|
82
83
|
constructor(id: number, stmts: StatementBuilder[]);
|
|
84
|
+
removePredecessorBlock(block: BlockBuilder): boolean;
|
|
85
|
+
removeSuccessorBlock(block: BlockBuilder): boolean;
|
|
83
86
|
}
|
|
84
87
|
declare class Catch {
|
|
85
88
|
errorName: string;
|
|
@@ -176,6 +179,27 @@ export declare class CfgBuilder {
|
|
|
176
179
|
private createCfg;
|
|
177
180
|
private topologicalSortBlock;
|
|
178
181
|
private linkBasicBlocks;
|
|
182
|
+
static replaceBlockBuilderAndBasicBlock(blockBuilderToCfgBlock: Map<BlockBuilder, BasicBlock>, oldBlockBuilder: BlockBuilder, newBlockBuilder: BlockBuilder): void;
|
|
183
|
+
static replaceBlockBuilder(oldBlockBuilder: BlockBuilder, newBlockBuilder: BlockBuilder): void;
|
|
184
|
+
static replaceBlockBuilderInPredecessors(oldBlockBuilder: BlockBuilder, newBlockBuilder: BlockBuilder): void;
|
|
185
|
+
static replaceBlockBuilderInSuccessors(oldBlockBuilder: BlockBuilder, newBlockBuilder: BlockBuilder): void;
|
|
186
|
+
static unlinkPredecessorsOfBlockBuilder(blockBuilder: BlockBuilder): void;
|
|
187
|
+
static unlinkSuccessorsOfBlockBuilder(blockBuilder: BlockBuilder): void;
|
|
188
|
+
static unlinkBlockBuilder(predecessor: BlockBuilder, successor: BlockBuilder): void;
|
|
189
|
+
static unlinkPredecessorsAndSuccessorsOfBlockBuilder(blockBuilder: BlockBuilder): void;
|
|
190
|
+
static pruneBlockBuilder(blockBuilder: BlockBuilder): boolean;
|
|
191
|
+
static replaceBasicBlock(oldBasicBlock: BasicBlock, newBasicBlock: BasicBlock): void;
|
|
192
|
+
static replaceBasicBlockInPredecessors(oldBasicBlock: BasicBlock, newBasicBlock: BasicBlock): void;
|
|
193
|
+
static replaceBasicBlockInSuccessors(oldBasicBlock: BasicBlock, newBasicBlocks: BasicBlock[]): void;
|
|
194
|
+
static linkPredecessorsOfBasicBlock(basicBlock: BasicBlock, predecessors: BasicBlock[]): void;
|
|
195
|
+
static unlinkPredecessorsOfBasicBlock(basicBlock: BasicBlock): void;
|
|
196
|
+
static unlinkSuccessorsOfBasicBlock(basicBlock: BasicBlock): void;
|
|
197
|
+
static linkSuccessorOfIfBasicBlock(ifBasicBlock: BasicBlock, trueBranchSuccessor: BasicBlock, falseBranchSuccessor: BasicBlock): void;
|
|
198
|
+
static unlinkPredecessorsAndSuccessorsOfBasicBlock(basicBlock: BasicBlock): void;
|
|
199
|
+
static pruneBasicBlock(basicBlock: BasicBlock): boolean;
|
|
200
|
+
static linkBasicBlock(predecessor: BasicBlock, successor: BasicBlock): void;
|
|
201
|
+
static unlinkBasicBlock(predecessor: BasicBlock, successor: BasicBlock): void;
|
|
202
|
+
static linkExceptionalBasicBlock(predecessor: BasicBlock, exceptionalSuccessor: BasicBlock): void;
|
|
179
203
|
}
|
|
180
204
|
export {};
|
|
181
205
|
//# sourceMappingURL=CfgBuilder.d.ts.map
|
|
@@ -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;AAEtC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAA0C,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"CfgBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/CfgBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,6 +53,8 @@ const ConditionBuilder_1 = require("./ConditionBuilder");
|
|
|
53
53
|
const TrapBuilder_1 = require("./TrapBuilder");
|
|
54
54
|
const TSConst_1 = require("../../common/TSConst");
|
|
55
55
|
const ArkBaseModel_1 = require("../../model/ArkBaseModel");
|
|
56
|
+
const logger_1 = __importStar(require("../../../utils/logger"));
|
|
57
|
+
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'CfgBuilder');
|
|
56
58
|
class StatementBuilder {
|
|
57
59
|
constructor(type, code, astNode, scopeID) {
|
|
58
60
|
this.addressCode3 = [];
|
|
@@ -139,6 +141,22 @@ class BlockBuilder {
|
|
|
139
141
|
this.id = id;
|
|
140
142
|
this.stmts = stmts;
|
|
141
143
|
}
|
|
144
|
+
removePredecessorBlock(block) {
|
|
145
|
+
let index = this.lasts.indexOf(block);
|
|
146
|
+
if (index < 0) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
this.lasts.splice(index, 1);
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
removeSuccessorBlock(block) {
|
|
153
|
+
let index = this.nexts.indexOf(block);
|
|
154
|
+
if (index < 0) {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
this.nexts.splice(index, 1);
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
142
160
|
}
|
|
143
161
|
exports.BlockBuilder = BlockBuilder;
|
|
144
162
|
class Catch {
|
|
@@ -1242,5 +1260,166 @@ class CfgBuilder {
|
|
|
1242
1260
|
}
|
|
1243
1261
|
}
|
|
1244
1262
|
}
|
|
1263
|
+
static replaceBlockBuilderAndBasicBlock(blockBuilderToCfgBlock, oldBlockBuilder, newBlockBuilder) {
|
|
1264
|
+
CfgBuilder.replaceBlockBuilder(oldBlockBuilder, newBlockBuilder);
|
|
1265
|
+
const oldBasicBlock = blockBuilderToCfgBlock.get(oldBlockBuilder);
|
|
1266
|
+
const newBasicBlock = blockBuilderToCfgBlock.get(newBlockBuilder);
|
|
1267
|
+
if (!oldBasicBlock || !newBasicBlock) {
|
|
1268
|
+
return;
|
|
1269
|
+
}
|
|
1270
|
+
CfgBuilder.replaceBasicBlock(oldBasicBlock, newBasicBlock);
|
|
1271
|
+
}
|
|
1272
|
+
static replaceBlockBuilder(oldBlockBuilder, newBlockBuilder) {
|
|
1273
|
+
CfgBuilder.replaceBlockBuilderInPredecessors(oldBlockBuilder, newBlockBuilder);
|
|
1274
|
+
CfgBuilder.replaceBlockBuilderInSuccessors(oldBlockBuilder, newBlockBuilder);
|
|
1275
|
+
}
|
|
1276
|
+
static replaceBlockBuilderInPredecessors(oldBlockBuilder, newBlockBuilder) {
|
|
1277
|
+
const predecessors = [...oldBlockBuilder.lasts];
|
|
1278
|
+
for (let predecessorIndex = 0; predecessorIndex < predecessors.length; predecessorIndex++) {
|
|
1279
|
+
const predecessor = predecessors[predecessorIndex];
|
|
1280
|
+
const successorIndex = predecessor.nexts.indexOf(oldBlockBuilder);
|
|
1281
|
+
if (successorIndex !== -1) {
|
|
1282
|
+
predecessor.nexts[successorIndex] = newBlockBuilder;
|
|
1283
|
+
oldBlockBuilder.lasts.splice(predecessorIndex, 1);
|
|
1284
|
+
newBlockBuilder.lasts.push(predecessor);
|
|
1285
|
+
}
|
|
1286
|
+
else {
|
|
1287
|
+
logger.trace(`replaceBlockBuilderInPredecessors: ${oldBlockBuilder.id} not found in ${predecessor.id}'s successors`);
|
|
1288
|
+
}
|
|
1289
|
+
}
|
|
1290
|
+
}
|
|
1291
|
+
static replaceBlockBuilderInSuccessors(oldBlockBuilder, newBlockBuilder) {
|
|
1292
|
+
const successors = [...oldBlockBuilder.nexts];
|
|
1293
|
+
for (let successorIndex = 0; successorIndex < successors.length; successorIndex++) {
|
|
1294
|
+
const successor = successors[successorIndex];
|
|
1295
|
+
const predecessorIndex = successor.lasts.indexOf(oldBlockBuilder);
|
|
1296
|
+
if (predecessorIndex !== -1) {
|
|
1297
|
+
successor.lasts[predecessorIndex] = newBlockBuilder;
|
|
1298
|
+
oldBlockBuilder.nexts.splice(successorIndex, 1);
|
|
1299
|
+
newBlockBuilder.nexts.push(successor);
|
|
1300
|
+
}
|
|
1301
|
+
else {
|
|
1302
|
+
logger.trace(`replaceBlockBuilderInSuccessors: ${oldBlockBuilder.id} not found in ${successor.id}'s predecessors`);
|
|
1303
|
+
}
|
|
1304
|
+
}
|
|
1305
|
+
}
|
|
1306
|
+
static unlinkPredecessorsOfBlockBuilder(blockBuilder) {
|
|
1307
|
+
const predecessors = [...blockBuilder.lasts];
|
|
1308
|
+
predecessors.forEach(predecessor => {
|
|
1309
|
+
CfgBuilder.unlinkBlockBuilder(predecessor, blockBuilder);
|
|
1310
|
+
});
|
|
1311
|
+
}
|
|
1312
|
+
static unlinkSuccessorsOfBlockBuilder(blockBuilder) {
|
|
1313
|
+
const successors = [...blockBuilder.nexts];
|
|
1314
|
+
successors.forEach(successor => {
|
|
1315
|
+
CfgBuilder.unlinkBlockBuilder(blockBuilder, successor);
|
|
1316
|
+
});
|
|
1317
|
+
}
|
|
1318
|
+
static unlinkBlockBuilder(predecessor, successor) {
|
|
1319
|
+
predecessor.removeSuccessorBlock(successor);
|
|
1320
|
+
successor.removePredecessorBlock(predecessor);
|
|
1321
|
+
}
|
|
1322
|
+
static unlinkPredecessorsAndSuccessorsOfBlockBuilder(blockBuilder) {
|
|
1323
|
+
CfgBuilder.unlinkPredecessorsOfBlockBuilder(blockBuilder);
|
|
1324
|
+
CfgBuilder.unlinkSuccessorsOfBlockBuilder(blockBuilder);
|
|
1325
|
+
}
|
|
1326
|
+
static pruneBlockBuilder(blockBuilder) {
|
|
1327
|
+
const successors = [...blockBuilder.nexts];
|
|
1328
|
+
if (successors.length > 1) {
|
|
1329
|
+
// can not handle multi successors
|
|
1330
|
+
return false;
|
|
1331
|
+
}
|
|
1332
|
+
else if (successors.length === 1) {
|
|
1333
|
+
CfgBuilder.replaceBlockBuilderInPredecessors(blockBuilder, successors[0]);
|
|
1334
|
+
}
|
|
1335
|
+
CfgBuilder.unlinkPredecessorsAndSuccessorsOfBlockBuilder(blockBuilder);
|
|
1336
|
+
return true;
|
|
1337
|
+
}
|
|
1338
|
+
static replaceBasicBlock(oldBasicBlock, newBasicBlock) {
|
|
1339
|
+
CfgBuilder.replaceBasicBlockInPredecessors(oldBasicBlock, newBasicBlock);
|
|
1340
|
+
CfgBuilder.replaceBasicBlockInSuccessors(oldBasicBlock, [newBasicBlock]);
|
|
1341
|
+
}
|
|
1342
|
+
// only 1 to 1
|
|
1343
|
+
static replaceBasicBlockInPredecessors(oldBasicBlock, newBasicBlock) {
|
|
1344
|
+
const predecessors = [...oldBasicBlock.getPredecessors()];
|
|
1345
|
+
for (const predecessor of predecessors) {
|
|
1346
|
+
const successorIndex = predecessor.getSuccessors().indexOf(oldBasicBlock);
|
|
1347
|
+
if (successorIndex !== -1) {
|
|
1348
|
+
// can not change positon in successors of predecessor
|
|
1349
|
+
predecessor.setSuccessorBlock(successorIndex, newBasicBlock);
|
|
1350
|
+
oldBasicBlock.removePredecessorBlock(predecessor);
|
|
1351
|
+
newBasicBlock.addPredecessorBlock(predecessor);
|
|
1352
|
+
}
|
|
1353
|
+
else {
|
|
1354
|
+
logger.trace(`replaceBasicBlockInPredecessors: ${oldBasicBlock.getId()} not found in ${predecessor.getId()}'s successors`);
|
|
1355
|
+
}
|
|
1356
|
+
}
|
|
1357
|
+
}
|
|
1358
|
+
static replaceBasicBlockInSuccessors(oldBasicBlock, newBasicBlocks) {
|
|
1359
|
+
const successors = [...oldBasicBlock.getSuccessors()];
|
|
1360
|
+
for (const successor of successors) {
|
|
1361
|
+
const predecessorIndex = successor.getPredecessors().indexOf(oldBasicBlock);
|
|
1362
|
+
if (predecessorIndex !== -1) {
|
|
1363
|
+
successor.removePredecessorBlock(oldBasicBlock);
|
|
1364
|
+
oldBasicBlock.removeSuccessorBlock(successor);
|
|
1365
|
+
newBasicBlocks.forEach(newBasicBlock => {
|
|
1366
|
+
newBasicBlock.addSuccessorBlock(successor);
|
|
1367
|
+
successor.addPredecessorBlock(newBasicBlock);
|
|
1368
|
+
});
|
|
1369
|
+
}
|
|
1370
|
+
else {
|
|
1371
|
+
logger.trace(`replaceBasicBlockInSuccessors: ${oldBasicBlock.getId()} not found in ${successor.getId()}'s predecessors`);
|
|
1372
|
+
}
|
|
1373
|
+
}
|
|
1374
|
+
}
|
|
1375
|
+
static linkPredecessorsOfBasicBlock(basicBlock, predecessors) {
|
|
1376
|
+
predecessors.forEach(predecessor => {
|
|
1377
|
+
CfgBuilder.linkBasicBlock(predecessor, basicBlock);
|
|
1378
|
+
});
|
|
1379
|
+
}
|
|
1380
|
+
static unlinkPredecessorsOfBasicBlock(basicBlock) {
|
|
1381
|
+
const predecessors = [...basicBlock.getPredecessors()];
|
|
1382
|
+
predecessors.forEach(predecessor => {
|
|
1383
|
+
CfgBuilder.unlinkBasicBlock(predecessor, basicBlock);
|
|
1384
|
+
});
|
|
1385
|
+
}
|
|
1386
|
+
static unlinkSuccessorsOfBasicBlock(basicBlock) {
|
|
1387
|
+
const successors = [...basicBlock.getSuccessors()];
|
|
1388
|
+
successors.forEach(successor => {
|
|
1389
|
+
CfgBuilder.unlinkBasicBlock(basicBlock, successor);
|
|
1390
|
+
});
|
|
1391
|
+
}
|
|
1392
|
+
static linkSuccessorOfIfBasicBlock(ifBasicBlock, trueBranchSuccessor, falseBranchSuccessor) {
|
|
1393
|
+
CfgBuilder.linkBasicBlock(ifBasicBlock, trueBranchSuccessor);
|
|
1394
|
+
CfgBuilder.linkBasicBlock(ifBasicBlock, falseBranchSuccessor);
|
|
1395
|
+
}
|
|
1396
|
+
static unlinkPredecessorsAndSuccessorsOfBasicBlock(basicBlock) {
|
|
1397
|
+
CfgBuilder.unlinkPredecessorsOfBasicBlock(basicBlock);
|
|
1398
|
+
CfgBuilder.unlinkSuccessorsOfBasicBlock(basicBlock);
|
|
1399
|
+
}
|
|
1400
|
+
static pruneBasicBlock(basicBlock) {
|
|
1401
|
+
const successors = [...basicBlock.getSuccessors()];
|
|
1402
|
+
if (successors.length > 1) {
|
|
1403
|
+
// can not handle multi successors
|
|
1404
|
+
return false;
|
|
1405
|
+
}
|
|
1406
|
+
else if (successors.length === 1) {
|
|
1407
|
+
CfgBuilder.replaceBasicBlockInPredecessors(basicBlock, successors[0]);
|
|
1408
|
+
}
|
|
1409
|
+
CfgBuilder.unlinkPredecessorsAndSuccessorsOfBasicBlock(basicBlock);
|
|
1410
|
+
return true;
|
|
1411
|
+
}
|
|
1412
|
+
static linkBasicBlock(predecessor, successor) {
|
|
1413
|
+
predecessor.addSuccessorBlock(successor);
|
|
1414
|
+
successor.addPredecessorBlock(predecessor);
|
|
1415
|
+
}
|
|
1416
|
+
static unlinkBasicBlock(predecessor, successor) {
|
|
1417
|
+
predecessor.removeSuccessorBlock(successor);
|
|
1418
|
+
successor.removePredecessorBlock(predecessor);
|
|
1419
|
+
}
|
|
1420
|
+
static linkExceptionalBasicBlock(predecessor, exceptionalSuccessor) {
|
|
1421
|
+
predecessor.addExceptionalSuccessorBlock(exceptionalSuccessor);
|
|
1422
|
+
exceptionalSuccessor.addExceptionalPredecessorBlock(predecessor);
|
|
1423
|
+
}
|
|
1245
1424
|
}
|
|
1246
1425
|
exports.CfgBuilder = CfgBuilder;
|
|
@@ -5,10 +5,10 @@ import { BlockBuilder } from './CfgBuilder';
|
|
|
5
5
|
*/
|
|
6
6
|
export declare class ConditionBuilder {
|
|
7
7
|
rebuildBlocksContainConditionalOperator(blockBuilderToCfgBlock: Map<BlockBuilder, BasicBlock>, basicBlockSet: Set<BasicBlock>, isArkUIBuilder: boolean): void;
|
|
8
|
-
private
|
|
9
|
-
private
|
|
10
|
-
private
|
|
11
|
-
private
|
|
8
|
+
private updateBasicBlockInContainConditionalOperator;
|
|
9
|
+
private generateBlocksInConditionalOperatorGroup;
|
|
10
|
+
private generateBlocksInSingleConditionalOperator;
|
|
11
|
+
private generateBlockOutConditionalOperator;
|
|
12
12
|
private deleteDummyConditionalOperatorStmt;
|
|
13
13
|
private findFirstConditionalOperator;
|
|
14
14
|
private removeUnnecessaryBlocksInConditionalOperator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConditionBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/ConditionBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAK3C,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"ConditionBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/ConditionBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAK3C,OAAO,EAAE,YAAY,EAAc,MAAM,cAAc,CAAC;AAGxD;;GAEG;AACH,qBAAa,gBAAgB;IAClB,uCAAuC,CAC1C,sBAAsB,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,EACrD,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,EAC9B,cAAc,EAAE,OAAO,GACxB,IAAI;IA6CP,OAAO,CAAC,4CAA4C;IASpD,OAAO,CAAC,wCAAwC;IAiChD,OAAO,CAAC,yCAAyC;IA4CjD,OAAO,CAAC,mCAAmC;IAc3C,OAAO,CAAC,kCAAkC;IAW1C,OAAO,CAAC,4BAA4B;IAyBpC,OAAO,CAAC,4CAA4C;IA8BpD,OAAO,CAAC,sBAAsB;CAoDjC"}
|
|
@@ -20,6 +20,7 @@ const ArkIRTransformer_1 = require("../../common/ArkIRTransformer");
|
|
|
20
20
|
const Stmt_1 = require("../../base/Stmt");
|
|
21
21
|
const Local_1 = require("../../base/Local");
|
|
22
22
|
const IRUtils_1 = require("../../common/IRUtils");
|
|
23
|
+
const CfgBuilder_1 = require("./CfgBuilder");
|
|
23
24
|
/**
|
|
24
25
|
* Builder for condition in CFG
|
|
25
26
|
*/
|
|
@@ -45,18 +46,15 @@ class ConditionBuilder {
|
|
|
45
46
|
if (conditionalOperatorEndPos === -1) {
|
|
46
47
|
continue;
|
|
47
48
|
}
|
|
48
|
-
let { generatedTopBlock: generatedTopBlock, generatedBottomBlocks: generatedBottomBlocks } = this.
|
|
49
|
+
let { generatedTopBlock: generatedTopBlock, generatedBottomBlocks: generatedBottomBlocks, } = this.generateBlocksInConditionalOperatorGroup(stmtsInCurrBasicBlock.slice(0, conditionalOperatorEndPos + 1), basicBlockSet);
|
|
49
50
|
if (conditionalOperatorEndPos !== stmtsCnt - 1) {
|
|
50
51
|
// need create a new basic block for rest statements
|
|
51
|
-
const { generatedTopBlock: extraBlock } = this.
|
|
52
|
-
|
|
53
|
-
generatedBottomBlock.addSuccessorBlock(extraBlock);
|
|
54
|
-
extraBlock.addPredecessorBlock(generatedBottomBlock);
|
|
55
|
-
});
|
|
52
|
+
const { generatedTopBlock: extraBlock } = this.generateBlockOutConditionalOperator(stmtsInCurrBasicBlock.slice(conditionalOperatorEndPos + 1));
|
|
53
|
+
CfgBuilder_1.CfgBuilder.linkPredecessorsOfBasicBlock(extraBlock, generatedBottomBlocks);
|
|
56
54
|
basicBlockSet.add(extraBlock);
|
|
57
55
|
generatedBottomBlocks = this.removeUnnecessaryBlocksInConditionalOperator(extraBlock, basicBlockSet);
|
|
58
56
|
}
|
|
59
|
-
this.
|
|
57
|
+
this.updateBasicBlockInContainConditionalOperator(currBasicBlock, generatedTopBlock, generatedBottomBlocks);
|
|
60
58
|
basicBlockSet.delete(currBasicBlock);
|
|
61
59
|
blockPairsToSet.push([currBlockBuilder, generatedTopBlock]);
|
|
62
60
|
}
|
|
@@ -64,78 +62,55 @@ class ConditionBuilder {
|
|
|
64
62
|
blockBuilderToCfgBlock.set(currBlockBuilder, generatedTopBlock);
|
|
65
63
|
}
|
|
66
64
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
predecessor.removeSuccessorBlock(currBasicBlock);
|
|
71
|
-
currBasicBlock.removePredecessorBlock(predecessor);
|
|
72
|
-
generatedTopBlock.addPredecessorBlock(predecessor);
|
|
73
|
-
predecessor.addSuccessorBlock(generatedTopBlock);
|
|
74
|
-
});
|
|
75
|
-
const successorsOfCurrBasicBlock = Array.from(currBasicBlock.getSuccessors());
|
|
76
|
-
successorsOfCurrBasicBlock.forEach(successor => {
|
|
77
|
-
successor.removePredecessorBlock(currBasicBlock);
|
|
78
|
-
currBasicBlock.removeSuccessorBlock(successor);
|
|
79
|
-
generatedBottomBlocks.forEach(generatedBottomBlock => {
|
|
80
|
-
generatedBottomBlock.addSuccessorBlock(successor);
|
|
81
|
-
successor.addPredecessorBlock(generatedBottomBlock);
|
|
82
|
-
});
|
|
83
|
-
});
|
|
65
|
+
updateBasicBlockInContainConditionalOperator(currBasicBlock, generatedTopBlock, generatedBottomBlocks) {
|
|
66
|
+
CfgBuilder_1.CfgBuilder.replaceBasicBlockInPredecessors(currBasicBlock, generatedTopBlock);
|
|
67
|
+
CfgBuilder_1.CfgBuilder.replaceBasicBlockInSuccessors(currBasicBlock, generatedBottomBlocks);
|
|
84
68
|
}
|
|
85
|
-
|
|
69
|
+
generateBlocksInConditionalOperatorGroup(sourceStmts, basicBlockSet) {
|
|
86
70
|
const { firstEndPos: firstEndPos } = this.findFirstConditionalOperator(sourceStmts);
|
|
87
71
|
if (firstEndPos === -1) {
|
|
88
|
-
return this.
|
|
72
|
+
return this.generateBlockOutConditionalOperator(sourceStmts);
|
|
89
73
|
}
|
|
90
|
-
const { generatedTopBlock: firstGeneratedTopBlock, generatedBottomBlocks: firstGeneratedBottomBlocks, generatedAllBlocks: firstGeneratedAllBlocks, } = this.
|
|
74
|
+
const { generatedTopBlock: firstGeneratedTopBlock, generatedBottomBlocks: firstGeneratedBottomBlocks, generatedAllBlocks: firstGeneratedAllBlocks, } = this.generateBlocksInSingleConditionalOperator(sourceStmts.slice(0, firstEndPos + 1));
|
|
91
75
|
const generatedTopBlock = firstGeneratedTopBlock;
|
|
92
76
|
let generatedBottomBlocks = firstGeneratedBottomBlocks;
|
|
93
77
|
firstGeneratedAllBlocks.forEach(block => basicBlockSet.add(block));
|
|
94
78
|
const stmtsCnt = sourceStmts.length;
|
|
95
79
|
if (firstEndPos !== stmtsCnt - 1) {
|
|
96
80
|
// need handle other conditional operators
|
|
97
|
-
const { generatedTopBlock: restGeneratedTopBlock, generatedBottomBlocks: restGeneratedBottomBlocks } = this.
|
|
98
|
-
|
|
99
|
-
firstGeneratedBottomBlock.addSuccessorBlock(restGeneratedTopBlock);
|
|
100
|
-
restGeneratedTopBlock.addPredecessorBlock(firstGeneratedBottomBlock);
|
|
101
|
-
});
|
|
81
|
+
const { generatedTopBlock: restGeneratedTopBlock, generatedBottomBlocks: restGeneratedBottomBlocks } = this.generateBlocksInConditionalOperatorGroup(sourceStmts.slice(firstEndPos + 1, stmtsCnt), basicBlockSet);
|
|
82
|
+
CfgBuilder_1.CfgBuilder.linkPredecessorsOfBasicBlock(restGeneratedTopBlock, generatedBottomBlocks);
|
|
102
83
|
restGeneratedBottomBlocks.forEach(block => basicBlockSet.add(block));
|
|
103
84
|
this.removeUnnecessaryBlocksInConditionalOperator(restGeneratedTopBlock, basicBlockSet);
|
|
104
85
|
generatedBottomBlocks = restGeneratedBottomBlocks;
|
|
105
86
|
}
|
|
106
87
|
return { generatedTopBlock, generatedBottomBlocks };
|
|
107
88
|
}
|
|
108
|
-
|
|
89
|
+
generateBlocksInSingleConditionalOperator(sourceStmts) {
|
|
109
90
|
const { firstIfTruePos: ifTruePos, firstIfFalsePos: ifFalsePos, firstEndPos: endPos } = this.findFirstConditionalOperator(sourceStmts);
|
|
110
91
|
if (endPos === -1) {
|
|
111
|
-
return this.
|
|
92
|
+
return this.generateBlockOutConditionalOperator(sourceStmts);
|
|
112
93
|
}
|
|
113
|
-
const { generatedTopBlock: generatedTopBlock, generatedAllBlocks: generatedAllBlocks } = this.
|
|
94
|
+
const { generatedTopBlock: generatedTopBlock, generatedAllBlocks: generatedAllBlocks, } = this.generateBlockOutConditionalOperator(sourceStmts.slice(0, ifTruePos));
|
|
114
95
|
let generatedBottomBlocks = [];
|
|
115
|
-
const { generatedTopBlock: generatedTopBlockOfTrueBranch, generatedBottomBlocks: generatedBottomBlocksOfTrueBranch, generatedAllBlocks: generatedAllBlocksOfTrueBranch, } = this.
|
|
96
|
+
const { generatedTopBlock: generatedTopBlockOfTrueBranch, generatedBottomBlocks: generatedBottomBlocksOfTrueBranch, generatedAllBlocks: generatedAllBlocksOfTrueBranch, } = this.generateBlocksInSingleConditionalOperator(sourceStmts.slice(ifTruePos + 1, ifFalsePos));
|
|
116
97
|
generatedBottomBlocks.push(...generatedBottomBlocksOfTrueBranch);
|
|
117
98
|
generatedAllBlocks.push(...generatedAllBlocksOfTrueBranch);
|
|
118
|
-
const { generatedTopBlock: generatedTopBlockOfFalseBranch, generatedBottomBlocks: generatedBottomBlocksOfFalseBranch, generatedAllBlocks: generatedAllBlocksOfFalseBranch, } = this.
|
|
99
|
+
const { generatedTopBlock: generatedTopBlockOfFalseBranch, generatedBottomBlocks: generatedBottomBlocksOfFalseBranch, generatedAllBlocks: generatedAllBlocksOfFalseBranch, } = this.generateBlocksInSingleConditionalOperator(sourceStmts.slice(ifFalsePos + 1, endPos));
|
|
119
100
|
generatedBottomBlocks.push(...generatedBottomBlocksOfFalseBranch);
|
|
120
101
|
generatedAllBlocks.push(...generatedAllBlocksOfFalseBranch);
|
|
121
|
-
|
|
122
|
-
generatedTopBlockOfTrueBranch.addPredecessorBlock(generatedTopBlock);
|
|
123
|
-
generatedTopBlock.addSuccessorBlock(generatedTopBlockOfFalseBranch);
|
|
124
|
-
generatedTopBlockOfFalseBranch.addPredecessorBlock(generatedTopBlock);
|
|
102
|
+
CfgBuilder_1.CfgBuilder.linkSuccessorOfIfBasicBlock(generatedTopBlock, generatedTopBlockOfTrueBranch, generatedTopBlockOfFalseBranch);
|
|
125
103
|
const stmtsCnt = sourceStmts.length;
|
|
126
104
|
if (endPos !== stmtsCnt - 1) {
|
|
127
105
|
// need create a new basic block for rest statements
|
|
128
|
-
const { generatedTopBlock: extraBlock } = this.
|
|
129
|
-
|
|
130
|
-
generatedBottomBlock.addSuccessorBlock(extraBlock);
|
|
131
|
-
extraBlock.addPredecessorBlock(generatedBottomBlock);
|
|
132
|
-
});
|
|
106
|
+
const { generatedTopBlock: extraBlock } = this.generateBlockOutConditionalOperator(sourceStmts.slice(endPos + 1));
|
|
107
|
+
CfgBuilder_1.CfgBuilder.linkPredecessorsOfBasicBlock(extraBlock, generatedBottomBlocks);
|
|
133
108
|
generatedBottomBlocks = [extraBlock];
|
|
134
109
|
generatedAllBlocks.push(extraBlock);
|
|
135
110
|
}
|
|
136
111
|
return { generatedTopBlock, generatedBottomBlocks, generatedAllBlocks };
|
|
137
112
|
}
|
|
138
|
-
|
|
113
|
+
generateBlockOutConditionalOperator(sourceStmts) {
|
|
139
114
|
const generatedBlock = new BasicBlock_1.BasicBlock();
|
|
140
115
|
sourceStmts.forEach(stmt => generatedBlock.addStmt(stmt));
|
|
141
116
|
return {
|
|
@@ -192,22 +167,16 @@ class ConditionBuilder {
|
|
|
192
167
|
const oldPredecessors = Array.from(bottomBlock.getPredecessors());
|
|
193
168
|
const newPredecessors = [];
|
|
194
169
|
for (const predecessor of oldPredecessors) {
|
|
195
|
-
predecessor.removeSuccessorBlock(bottomBlock);
|
|
196
170
|
newPredecessors.push(...this.replaceTempRecursively(predecessor, targetValue, tempResultValue, allBlocks, targetValuePosition));
|
|
197
171
|
}
|
|
172
|
+
CfgBuilder_1.CfgBuilder.unlinkPredecessorsOfBasicBlock(bottomBlock);
|
|
198
173
|
bottomBlock.remove(firstStmtInBottom);
|
|
199
174
|
if (bottomBlock.getStmts().length === 0) {
|
|
200
175
|
// must be a new block without successors
|
|
201
176
|
allBlocks.delete(bottomBlock);
|
|
202
177
|
return newPredecessors;
|
|
203
178
|
}
|
|
204
|
-
|
|
205
|
-
bottomBlock.removePredecessorBlock(oldPredecessor);
|
|
206
|
-
});
|
|
207
|
-
newPredecessors.forEach(newPredecessor => {
|
|
208
|
-
bottomBlock.addPredecessorBlock(newPredecessor);
|
|
209
|
-
newPredecessor.addSuccessorBlock(bottomBlock);
|
|
210
|
-
});
|
|
179
|
+
CfgBuilder_1.CfgBuilder.linkPredecessorsOfBasicBlock(bottomBlock, newPredecessors);
|
|
211
180
|
return [bottomBlock];
|
|
212
181
|
}
|
|
213
182
|
replaceTempRecursively(currBottomBlock, targetLocal, tempResultLocal, allBlocks, targetValuePosition) {
|
|
@@ -234,13 +203,13 @@ class ConditionBuilder {
|
|
|
234
203
|
}
|
|
235
204
|
let newBottomBlocks = [];
|
|
236
205
|
if (tempResultReassignStmt) {
|
|
237
|
-
const oldPredecessors = currBottomBlock.getPredecessors();
|
|
206
|
+
const oldPredecessors = Array.from(currBottomBlock.getPredecessors());
|
|
238
207
|
const newPredecessors = [];
|
|
239
208
|
const prevTempResultLocal = tempResultReassignStmt.getRightOp();
|
|
240
209
|
for (const predecessor of oldPredecessors) {
|
|
241
|
-
predecessor.removeSuccessorBlock(currBottomBlock);
|
|
242
210
|
newPredecessors.push(...this.replaceTempRecursively(predecessor, targetLocal, prevTempResultLocal, allBlocks, targetValuePosition));
|
|
243
211
|
}
|
|
212
|
+
CfgBuilder_1.CfgBuilder.unlinkPredecessorsOfBasicBlock(currBottomBlock);
|
|
244
213
|
currBottomBlock.remove(tempResultReassignStmt);
|
|
245
214
|
if (currBottomBlock.getStmts().length === 0) {
|
|
246
215
|
// remove this block
|
|
@@ -248,10 +217,7 @@ class ConditionBuilder {
|
|
|
248
217
|
allBlocks.delete(currBottomBlock);
|
|
249
218
|
}
|
|
250
219
|
else {
|
|
251
|
-
|
|
252
|
-
newPredecessors.forEach(newPredecessor => {
|
|
253
|
-
newPredecessor.addSuccessorBlock(currBottomBlock);
|
|
254
|
-
});
|
|
220
|
+
CfgBuilder_1.CfgBuilder.linkPredecessorsOfBasicBlock(currBottomBlock, newPredecessors);
|
|
255
221
|
newBottomBlocks = [currBottomBlock];
|
|
256
222
|
}
|
|
257
223
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwitchBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/SwitchBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEhF,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"SwitchBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/SwitchBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEhF,OAAO,EAAE,YAAY,EAAsC,MAAM,cAAc,CAAC;AAKhF;;GAEG;AACH,qBAAa,aAAa;IACf,WAAW,CACd,sBAAsB,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,EACrD,0BAA0B,EAAE,YAAY,EAAE,EAC1C,gCAAgC,EAAE,aAAa,EAAE,EAAE,EACnD,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,GAC/B,IAAI;IA0CP,OAAO,CAAC,wBAAwB;IAwChC,OAAO,CAAC,uBAAuB;CAyClC"}
|
|
@@ -39,6 +39,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
39
39
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
40
|
exports.SwitchBuilder = void 0;
|
|
41
41
|
const BasicBlock_1 = require("../BasicBlock");
|
|
42
|
+
const CfgBuilder_1 = require("./CfgBuilder");
|
|
42
43
|
const logger_1 = __importStar(require("../../../utils/logger"));
|
|
43
44
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'SwitchBuilder');
|
|
44
45
|
/**
|
|
@@ -131,23 +132,12 @@ class SwitchBuilder {
|
|
|
131
132
|
}
|
|
132
133
|
}
|
|
133
134
|
expectedSuccessorsOfCaseIfBlock.reverse();
|
|
134
|
-
|
|
135
|
-
successor.getPredecessors().splice(0, 1);
|
|
136
|
-
});
|
|
137
|
-
blockContainSwitch.getSuccessors().splice(0);
|
|
135
|
+
CfgBuilder_1.CfgBuilder.unlinkSuccessorsOfBasicBlock(blockContainSwitch);
|
|
138
136
|
for (let j = 0; j < caseCnt; j++) {
|
|
137
|
+
const trueBranchBlock = expectedSuccessorsOfCaseIfBlock[j];
|
|
138
|
+
const falseBranchBlock = j === caseCnt - 1 ? expectedSuccessorsOfCaseIfBlock[j + 1] : caseIfBlocks[j + 1];
|
|
139
139
|
const caseIfBlock = caseIfBlocks[j];
|
|
140
|
-
|
|
141
|
-
expectedSuccessorsOfCaseIfBlock[j].addPredecessorBlock(caseIfBlock);
|
|
142
|
-
if (j === caseCnt - 1) {
|
|
143
|
-
// the false branch of last case should be default or block after switch statement
|
|
144
|
-
caseIfBlock.addSuccessorBlock(expectedSuccessorsOfCaseIfBlock[j + 1]);
|
|
145
|
-
expectedSuccessorsOfCaseIfBlock[j + 1].addPredecessorBlock(caseIfBlock);
|
|
146
|
-
}
|
|
147
|
-
else {
|
|
148
|
-
caseIfBlock.addSuccessorBlock(caseIfBlocks[j + 1]);
|
|
149
|
-
caseIfBlocks[j + 1].addPredecessorBlock(caseIfBlock);
|
|
150
|
-
}
|
|
140
|
+
CfgBuilder_1.CfgBuilder.linkSuccessorOfIfBasicBlock(caseIfBlock, trueBranchBlock, falseBranchBlock);
|
|
151
141
|
}
|
|
152
142
|
return true;
|
|
153
143
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrapBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/TrapBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAcvC,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"TrapBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/TrapBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAcvC,OAAO,EAAE,YAAY,EAAmC,MAAM,cAAc,CAAC;AAK7E;;GAEG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,+BAA+B,CAAoB;IAC3D,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,sBAAsB,CAAgC;IAC9D,OAAO,CAAC,sBAAsB,CAAoB;gBAEtC,sBAAsB,EAAE,GAAG,CAAC,YAAY,CAAC,EAAE,sBAAsB,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,EACxG,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC;IAQ3B,UAAU,IAAI,IAAI,EAAE;IAS3B,OAAO,CAAC,cAAc;IA6CtB,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,gBAAgB;IA6BxB,OAAO,CAAC,qBAAqB;IAkC7B,OAAO,CAAC,yBAAyB;IAYjC,OAAO,CAAC,+BAA+B;IAMvC,OAAO,CAAC,qBAAqB;IA+B7B,OAAO,CAAC,wBAAwB;IA+ChC,OAAO,CAAC,eAAe;IAmCvB,OAAO,CAAC,iBAAiB;IA0BzB,OAAO,CAAC,UAAU;IAgClB,OAAO,CAAC,QAAQ;CAoBnB"}
|