arkanalyzer 1.0.77 → 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/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 +2 -8
- package/lib/core/common/ArkIRTransformer.js +1 -1
- 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/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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextSelector.d.ts","sourceRoot":"","sources":["../../../../src/callgraph/pointerAnalysis/context/ContextSelector.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAmB,OAAO,EAAE,YAAY,EAAE,SAAS,EAAsC,MAAM,WAAW,CAAC;AAClH,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAInD;;GAEG;AAEH,eAAO,
|
|
1
|
+
{"version":3,"file":"ContextSelector.d.ts","sourceRoot":"","sources":["../../../../src/callgraph/pointerAnalysis/context/ContextSelector.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAmB,OAAO,EAAE,YAAY,EAAE,SAAS,EAAsC,MAAM,WAAW,CAAC;AAClH,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAInD;;GAEG;AAEH,eAAO,MAAM,OAAO,EAAE,MAAW,CAAC;AAClC,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,aAAa,CAAC,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3G,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI,CAAC;CAC3C;AAED,qBAAa,wBAAyB,YAAW,eAAe;IAC5D,OAAO,CAAC,CAAC,CAAS;IAClB,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,EAAE,kBAAkB,CAAC;gBAEnB,CAAC,EAAE,MAAM;IAMd,aAAa,CAAC,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS;IAWtG,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS;IAKnC,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS;IAIzC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI;CAKhD;AAGD,qBAAa,mBAAoB,YAAW,eAAe;IACvD,OAAO,CAAC,CAAC,CAAS;IAClB,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,EAAE,kBAAkB,CAAC;gBAEnB,CAAC,EAAE,MAAM;IAMd,aAAa,CAAC,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS;IActG,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS;IAKnC,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS;IAIzC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI;CAChD;AAED,qBAAa,oBAAqB,YAAW,eAAe;IACxD,OAAO,CAAC,CAAC,CAAS;IAClB,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,EAAE,kBAAkB,CAAC;gBAEnB,CAAC,EAAE,MAAM;IAMd,aAAa,CAAC,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS;IAUtG,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAMvC,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS;IAIzC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI;CAKhD"}
|
|
@@ -103,8 +103,7 @@ class KObjContextSelector {
|
|
|
103
103
|
getContextID(context) {
|
|
104
104
|
return this.ctxCache.getOrNewContextID(context);
|
|
105
105
|
}
|
|
106
|
-
dump(dir, cg) {
|
|
107
|
-
}
|
|
106
|
+
dump(dir, cg) { }
|
|
108
107
|
}
|
|
109
108
|
exports.KObjContextSelector = KObjContextSelector;
|
|
110
109
|
class KFuncContextSelector {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContainerPlugin.d.ts","sourceRoot":"","sources":["../../../../src/callgraph/pointerAnalysis/plugins/ContainerPlugin.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAU,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAiD,MAAM,QAAQ,CAAC;AAC5E,OAAO,EAAY,UAAU,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"ContainerPlugin.d.ts","sourceRoot":"","sources":["../../../../src/callgraph/pointerAnalysis/plugins/ContainerPlugin.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAU,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAiD,MAAM,QAAQ,CAAC;AAC5E,OAAO,EAAY,UAAU,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAQ1C;;GAEG;AACH,qBAAa,eAAgB,YAAW,UAAU;IAC9C,GAAG,EAAE,GAAG,CAAC;IACT,UAAU,EAAE,UAAU,CAAC;IACvB,EAAE,EAAE,SAAS,CAAC;gBAEF,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS;IAM3D,OAAO,IAAI,MAAM;IAIjB,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO;IAWxD,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;IAkC5E,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,cAAc;CAmCzB"}
|
|
@@ -21,13 +21,7 @@ const PTAUtils_1 = require("../PTAUtils");
|
|
|
21
21
|
const Stmt_1 = require("../../../core/base/Stmt");
|
|
22
22
|
const Type_1 = require("../../../core/base/Type");
|
|
23
23
|
// built-in container APIs
|
|
24
|
-
const containerApiList = [
|
|
25
|
-
PTAUtils_1.BuiltApiType.ArrayPush,
|
|
26
|
-
PTAUtils_1.BuiltApiType.MapSet,
|
|
27
|
-
PTAUtils_1.BuiltApiType.MapGet,
|
|
28
|
-
PTAUtils_1.BuiltApiType.SetAdd,
|
|
29
|
-
PTAUtils_1.BuiltApiType.Foreach,
|
|
30
|
-
];
|
|
24
|
+
const containerApiList = [PTAUtils_1.BuiltApiType.ArrayPush, PTAUtils_1.BuiltApiType.MapSet, PTAUtils_1.BuiltApiType.MapGet, PTAUtils_1.BuiltApiType.SetAdd, PTAUtils_1.BuiltApiType.Foreach];
|
|
31
25
|
/**
|
|
32
26
|
* ContainerPlugin processes built-in container APIs like Array, Set, and Map.
|
|
33
27
|
*/
|
|
@@ -72,12 +66,12 @@ class ContainerPlugin {
|
|
|
72
66
|
break;
|
|
73
67
|
case PTAUtils_1.BuiltApiType.MapGet:
|
|
74
68
|
this.processMapGet(cs, cid, basePTNode, baseValue, srcNodes);
|
|
69
|
+
break;
|
|
75
70
|
case PTAUtils_1.BuiltApiType.Foreach:
|
|
76
71
|
this.processForeach(cs, cid, basePTNode, baseValue, srcNodes, calleeMethod);
|
|
77
72
|
break;
|
|
78
73
|
default:
|
|
79
74
|
}
|
|
80
|
-
;
|
|
81
75
|
return srcNodes;
|
|
82
76
|
}
|
|
83
77
|
processArrayPush(cs, cid, basePt, baseValue, srcNodes) {
|
|
@@ -563,7 +563,7 @@ class ArkIRTransformer {
|
|
|
563
563
|
const { value: doneFlag, valueOriginalPositions: doneFlagPositions, stmts: doneFlagStmts, } = this.generateAssignStmtForValue(doneFieldRef, doneFieldRefPositions);
|
|
564
564
|
doneFlagStmts.forEach(stmt => stmts.push(stmt));
|
|
565
565
|
doneFlag.setType(Type_1.BooleanType.getInstance());
|
|
566
|
-
const conditionExpr = new Expr_1.ArkConditionExpr(doneFlag, ValueUtil_1.ValueUtil.getBooleanConstant(true), Expr_1.RelationalBinaryOperator.
|
|
566
|
+
const conditionExpr = new Expr_1.ArkConditionExpr(doneFlag, ValueUtil_1.ValueUtil.getBooleanConstant(true), Expr_1.RelationalBinaryOperator.InEquality);
|
|
567
567
|
const conditionExprPositions = [doneFlagPositions[0], ...doneFlagPositions, Position_1.FullPosition.DEFAULT];
|
|
568
568
|
const ifStmt = new Stmt_1.ArkIfStmt(conditionExpr);
|
|
569
569
|
ifStmt.setOperandOriginalPositions(conditionExprPositions);
|
|
@@ -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"}
|
|
@@ -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];
|
|
@@ -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":"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;AAUzC,MAAM,MAAM,cAAc,GACpB,EAAE,CAAC,mBAAmB,GACtB,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,sBAAsB,GACzB,EAAE,CAAC,aAAa,GAChB,EAAE,CAAC,mBAAmB,GACtB,EAAE,CAAC,kBAAkB,GACrB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,6BAA6B,GAChC,EAAE,CAAC,wBAAwB,GAC3B,EAAE,CAAC,gBAAgB,CAAC;AAE1B,wBAAgB,iCAAiC,CAAC,cAAc,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,GAAG,IAAI,CAYxJ;AAED,wBAAgB,0BAA0B,CACtC,UAAU,EAAE,cAAc,EAC1B,cAAc,EAAE,QAAQ,EACxB,GAAG,EAAE,SAAS,EACd,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,eAAe,CAAC,EAAE,SAAS,GAC5B,IAAI,CAwDN;AAwDD,qBAAa,6BAA6B;IACtC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,QAAQ,CAAkB;;IAI3B,OAAO,IAAI,MAAM;IAIjB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,eAAe,IAAI,MAAM;IAIzB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAI3C,UAAU,IAAI,OAAO;IAIrB,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;CAG9C;AAED,qBAAa,4BAA4B;IACrC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,QAAQ,CAAkB;;IAI3B,OAAO,IAAI,MAAM;IAIjB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,eAAe,IAAI,MAAM;IAIzB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAI3C,UAAU,IAAI,OAAO;IAIrB,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;CAG9C;AAED,qBAAa,eAAgB,YAAW,KAAK;IACzC,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,WAAW,CAAuC;IAC1D,OAAO,CAAC,aAAa,CAAsC;;IAIpD,OAAO,IAAI,MAAM;IAIjB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIzB,UAAU,IAAI,OAAO;IAIrB,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAIpC,MAAM,IAAI,OAAO;IAIjB,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAIpC,aAAa,CAAC,OAAO,EAAE,6BAA6B,GAAG,IAAI;IAI3D,cAAc,IAAI,6BAA6B,EAAE;IAIjD,cAAc,CAAC,WAAW,EAAE,6BAA6B,EAAE,GAAG,IAAI;IAIlE,eAAe,CAAC,OAAO,EAAE,4BAA4B,GAAG,IAAI;IAI5D,gBAAgB,IAAI,4BAA4B,EAAE;IAIlD,gBAAgB,CAAC,aAAa,EAAE,4BAA4B,EAAE,GAAG,IAAI;IAIrE,OAAO,IAAI,KAAK,EAAE;CAG5B;AAsBD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAwDnE;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,SAAS,EAAE,qBAAqB,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,GAAG,IAAI,CAuB5G;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,SAAS,GAAG,IAAI,CA+BjE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAepE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,CAsC3E;AAED,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,SAAS,GAAG,IAAI,CAqCrE"}
|
|
@@ -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);
|