arkanalyzer 1.0.40 → 1.0.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/arkanalyzer.json +1 -2
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +9 -2
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.js +3 -4
- package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/RapidTypeAnalysis.js +7 -8
- package/lib/callgraph/model/CallGraph.d.ts +5 -5
- package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
- package/lib/callgraph/model/CallGraph.js +18 -21
- package/lib/callgraph/model/CallSite.d.ts +16 -6
- package/lib/callgraph/model/CallSite.d.ts.map +1 -1
- package/lib/callgraph/model/CallSite.js +48 -8
- package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +0 -1
- package/lib/callgraph/model/builder/CallGraphBuilder.d.ts.map +1 -1
- package/lib/callgraph/model/builder/CallGraphBuilder.js +0 -8
- package/lib/callgraph/pointerAnalysis/Pag.d.ts +3 -6
- package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.js +6 -29
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +6 -15
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +63 -81
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +2 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +12 -8
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts +9 -3
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.js +12 -5
- package/lib/callgraph/pointerAnalysis/context/Context.d.ts +69 -0
- package/lib/callgraph/pointerAnalysis/context/Context.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/context/Context.js +202 -0
- package/lib/callgraph/pointerAnalysis/context/ContextItem.d.ts +40 -0
- package/lib/callgraph/pointerAnalysis/context/ContextItem.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/context/ContextItem.js +99 -0
- package/lib/callgraph/pointerAnalysis/context/ContextSelector.d.ts +46 -0
- package/lib/callgraph/pointerAnalysis/context/ContextSelector.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/context/ContextSelector.js +138 -0
- package/lib/core/base/Expr.d.ts +1 -0
- package/lib/core/base/Expr.d.ts.map +1 -1
- package/lib/core/base/Expr.js +9 -0
- package/lib/core/common/ArkIRTransformer.d.ts +1 -0
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkIRTransformer.js +58 -2
- package/lib/core/common/ArkValueTransformer.d.ts +1 -1
- package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
- package/lib/core/common/IRInference.d.ts +1 -1
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +7 -3
- package/lib/core/common/ModelUtils.js +1 -1
- package/lib/core/common/SdkUtils.d.ts +2 -1
- package/lib/core/common/SdkUtils.d.ts.map +1 -1
- package/lib/core/common/SdkUtils.js +33 -23
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +5 -3
- package/lib/core/dataflow/DataflowSolver.js +3 -3
- package/lib/core/dataflow/UndefinedVariable.js +2 -2
- package/lib/core/graph/BaseExplicitGraph.d.ts +1 -0
- package/lib/core/graph/BaseExplicitGraph.d.ts.map +1 -1
- package/lib/core/graph/BaseExplicitGraph.js +3 -0
- package/lib/core/graph/BasicBlock.d.ts.map +1 -1
- package/lib/core/graph/BasicBlock.js +9 -4
- package/lib/core/graph/Cfg.d.ts.map +1 -1
- package/lib/core/graph/Cfg.js +4 -1
- package/lib/core/graph/builder/CfgBuilder.d.ts +2 -1
- package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/CfgBuilder.js +54 -10
- package/lib/core/graph/builder/ConditionBuilder.d.ts +2 -1
- package/lib/core/graph/builder/ConditionBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/ConditionBuilder.js +7 -3
- package/lib/core/graph/builder/TrapBuilder.d.ts +19 -1
- package/lib/core/graph/builder/TrapBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/TrapBuilder.js +195 -68
- package/lib/core/model/ArkMethod.d.ts.map +1 -1
- package/lib/core/model/ArkMethod.js +3 -4
- package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkClassBuilder.js +42 -21
- package/lib/core/model/builder/ArkImportBuilder.js +28 -25
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +1 -2
- package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.js +2 -1
- package/lib/index.d.ts +0 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -4
- package/lib/pass/Context.d.ts +47 -0
- package/lib/pass/Context.d.ts.map +1 -0
- package/lib/pass/Context.js +72 -0
- package/lib/pass/Dispatcher.d.ts +102 -0
- package/lib/pass/Dispatcher.d.ts.map +1 -0
- package/lib/pass/Dispatcher.js +202 -0
- package/lib/pass/Pass.d.ts +83 -0
- package/lib/pass/Pass.d.ts.map +1 -0
- package/lib/pass/Pass.js +95 -0
- package/lib/pass/ScenePassMgr.d.ts +73 -0
- package/lib/pass/ScenePassMgr.d.ts.map +1 -0
- package/lib/pass/ScenePassMgr.js +156 -0
- package/lib/pass/SceneValidator.d.ts +215 -0
- package/lib/pass/SceneValidator.d.ts.map +1 -0
- package/lib/pass/SceneValidator.js +339 -0
- package/lib/save/JsonPrinter.d.ts.map +1 -1
- package/lib/save/JsonPrinter.js +26 -102
- package/lib/save/arkir/ArkIRMethodPrinter.d.ts.map +1 -1
- package/lib/save/arkir/ArkIRMethodPrinter.js +13 -5
- package/lib/save/source/SourceStmt.d.ts +1 -0
- package/lib/save/source/SourceStmt.d.ts.map +1 -1
- package/lib/save/source/SourceStmt.js +13 -8
- package/lib/utils/FileUtils.d.ts.map +1 -1
- package/lib/utils/FileUtils.js +13 -6
- package/lib/utils/ValueAsserts.d.ts +9 -0
- package/lib/utils/ValueAsserts.d.ts.map +1 -0
- package/lib/utils/ValueAsserts.js +89 -0
- package/package.json +2 -2
- package/lib/callgraph/pointerAnalysis/Context.d.ts +0 -38
- package/lib/callgraph/pointerAnalysis/Context.d.ts.map +0 -1
- package/lib/callgraph/pointerAnalysis/Context.js +0 -154
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"CfgBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/CfgBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -639,6 +639,9 @@ class CfgBuilder {
|
|
|
639
639
|
for (let i = stmt.nexts.length - 1; i >= 0; i--) {
|
|
640
640
|
stmtQueue.push(stmt.nexts[i]);
|
|
641
641
|
}
|
|
642
|
+
if (stmt.afterSwitch && stmt.afterSwitch.lasts.size === 0) {
|
|
643
|
+
stmtQueue.push(stmt.afterSwitch);
|
|
644
|
+
}
|
|
642
645
|
}
|
|
643
646
|
else if (stmt instanceof TryStatementBuilder) {
|
|
644
647
|
if (stmt.finallyStatement) {
|
|
@@ -922,11 +925,11 @@ class CfgBuilder {
|
|
|
922
925
|
s.next = this.exit;
|
|
923
926
|
this.exit.lasts = new Set([s]);
|
|
924
927
|
}
|
|
925
|
-
|
|
928
|
+
getParamNodeWithInitializerOrModifier(paramNodes) {
|
|
926
929
|
let stmts = [];
|
|
927
|
-
|
|
928
|
-
if (
|
|
929
|
-
stmts.push(
|
|
930
|
+
paramNodes.forEach(param => {
|
|
931
|
+
if (param.initializer !== undefined || param.modifiers !== undefined) {
|
|
932
|
+
stmts.push(param);
|
|
930
933
|
}
|
|
931
934
|
});
|
|
932
935
|
return stmts;
|
|
@@ -959,9 +962,9 @@ class CfgBuilder {
|
|
|
959
962
|
else if (ts.isModuleDeclaration(this.astRoot) && ts.isModuleBlock(this.astRoot.body)) {
|
|
960
963
|
stmts = [...this.astRoot.body.statements];
|
|
961
964
|
}
|
|
962
|
-
//
|
|
963
|
-
if (ts.
|
|
964
|
-
stmts = [...this.
|
|
965
|
+
// Add param node with initializer or modifier to stmts which can be used when build body to create class field and initializer stmts.
|
|
966
|
+
if (!this.emptyBody && ts.isFunctionLike(this.astRoot)) {
|
|
967
|
+
stmts = [...this.getParamNodeWithInitializerOrModifier(this.astRoot.parameters), ...stmts];
|
|
965
968
|
}
|
|
966
969
|
if (!ModelUtils_1.ModelUtils.isArkUIBuilderMethod(this.declaringMethod)) {
|
|
967
970
|
this.walkAST(this.entry, this.exit, stmts);
|
|
@@ -1045,8 +1048,9 @@ class CfgBuilder {
|
|
|
1045
1048
|
const currBlockId = this.blocks.length;
|
|
1046
1049
|
this.linkBasicBlocks(blockBuilderToCfgBlock);
|
|
1047
1050
|
this.adjustBlocks(blockBuilderToCfgBlock, blocksContainLoopCondition, basicBlockSet, blockBuildersContainSwitch, valueAndStmtsOfSwitchAndCasesAll, arkIRTransformer);
|
|
1048
|
-
const trapBuilder = new TrapBuilder_1.TrapBuilder();
|
|
1049
|
-
const traps = trapBuilder.buildTraps(
|
|
1051
|
+
const trapBuilder = new TrapBuilder_1.TrapBuilder(blockBuildersBeforeTry, blockBuilderToCfgBlock, arkIRTransformer, basicBlockSet);
|
|
1052
|
+
const traps = trapBuilder.buildTraps();
|
|
1053
|
+
this.removeEmptyBlocks(basicBlockSet);
|
|
1050
1054
|
const cfg = this.createCfg(blockBuilderToCfgBlock, basicBlockSet, currBlockId);
|
|
1051
1055
|
return {
|
|
1052
1056
|
cfg,
|
|
@@ -1056,6 +1060,46 @@ class CfgBuilder {
|
|
|
1056
1060
|
traps,
|
|
1057
1061
|
};
|
|
1058
1062
|
}
|
|
1063
|
+
removeEmptyBlocks(basicBlockSet) {
|
|
1064
|
+
for (const bb of basicBlockSet) {
|
|
1065
|
+
if (bb.getStmts().length > 0) {
|
|
1066
|
+
continue;
|
|
1067
|
+
}
|
|
1068
|
+
const predecessors = bb.getPredecessors();
|
|
1069
|
+
const successors = bb.getSuccessors();
|
|
1070
|
+
// the empty basic block with neither predecessor nor successor could be deleted directly
|
|
1071
|
+
if (predecessors.length === 0 && successors.length === 0) {
|
|
1072
|
+
basicBlockSet.delete(bb);
|
|
1073
|
+
continue;
|
|
1074
|
+
}
|
|
1075
|
+
// the empty basic block with predecessor but no successor could be deleted directly and remove its ID from the predecessor blocks
|
|
1076
|
+
if (predecessors.length > 0 && successors.length === 0) {
|
|
1077
|
+
for (const predecessor of predecessors) {
|
|
1078
|
+
predecessor.removeSuccessorBlock(bb);
|
|
1079
|
+
}
|
|
1080
|
+
basicBlockSet.delete(bb);
|
|
1081
|
+
continue;
|
|
1082
|
+
}
|
|
1083
|
+
// the empty basic block with successor but no predecessor could be deleted directly and remove its ID from the successor blocks
|
|
1084
|
+
if (predecessors.length === 0 && successors.length > 0) {
|
|
1085
|
+
for (const successor of successors) {
|
|
1086
|
+
successor.removePredecessorBlock(bb);
|
|
1087
|
+
}
|
|
1088
|
+
basicBlockSet.delete(bb);
|
|
1089
|
+
continue;
|
|
1090
|
+
}
|
|
1091
|
+
// the rest case is the empty basic block both with predecessor and successor, should relink its predecessor and successor
|
|
1092
|
+
for (const predecessor of predecessors) {
|
|
1093
|
+
predecessor.removeSuccessorBlock(bb);
|
|
1094
|
+
successors.forEach(successor => predecessor.addSuccessorBlock(successor));
|
|
1095
|
+
}
|
|
1096
|
+
for (const successor of successors) {
|
|
1097
|
+
successor.removePredecessorBlock(bb);
|
|
1098
|
+
predecessors.forEach(predecessor => successor.addPredecessorBlock(predecessor));
|
|
1099
|
+
}
|
|
1100
|
+
basicBlockSet.delete(bb);
|
|
1101
|
+
}
|
|
1102
|
+
}
|
|
1059
1103
|
initializeBuild() {
|
|
1060
1104
|
const blockBuilderToCfgBlock = new Map();
|
|
1061
1105
|
const basicBlockSet = new Set();
|
|
@@ -1135,7 +1179,7 @@ class CfgBuilder {
|
|
|
1135
1179
|
const switchBuilder = new SwitchBuilder_1.SwitchBuilder();
|
|
1136
1180
|
switchBuilder.buildSwitch(blockBuilderToCfgBlock, blockBuildersContainSwitch, valueAndStmtsOfSwitchAndCasesAll, arkIRTransformer, basicBlockSet);
|
|
1137
1181
|
const conditionalBuilder = new ConditionBuilder_1.ConditionBuilder();
|
|
1138
|
-
conditionalBuilder.rebuildBlocksContainConditionalOperator(basicBlockSet, ModelUtils_1.ModelUtils.isArkUIBuilderMethod(this.declaringMethod));
|
|
1182
|
+
conditionalBuilder.rebuildBlocksContainConditionalOperator(blockBuilderToCfgBlock, basicBlockSet, ModelUtils_1.ModelUtils.isArkUIBuilderMethod(this.declaringMethod));
|
|
1139
1183
|
}
|
|
1140
1184
|
createCfg(blockBuilderToCfgBlock, basicBlockSet, prevBlockId) {
|
|
1141
1185
|
let currBlockId = prevBlockId;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { BasicBlock } from '../BasicBlock';
|
|
2
|
+
import { BlockBuilder } from './CfgBuilder';
|
|
2
3
|
/**
|
|
3
4
|
* Builder for condition in CFG
|
|
4
5
|
*/
|
|
5
6
|
export declare class ConditionBuilder {
|
|
6
|
-
rebuildBlocksContainConditionalOperator(basicBlockSet: Set<BasicBlock>, isArkUIBuilder: boolean): void;
|
|
7
|
+
rebuildBlocksContainConditionalOperator(blockBuilderToCfgBlock: Map<BlockBuilder, BasicBlock>, basicBlockSet: Set<BasicBlock>, isArkUIBuilder: boolean): void;
|
|
7
8
|
private relinkPrevAndSuccOfBlockContainConditionalOperator;
|
|
8
9
|
private generateBlocksContainConditionalOperatorGroup;
|
|
9
10
|
private generateBlocksContainSingleConditionalOperator;
|
|
@@ -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;
|
|
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,EAAE,MAAM,cAAc,CAAC;AAE5C;;GAEG;AACH,qBAAa,gBAAgB;IAClB,uCAAuC,CAAC,sBAAsB,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,EACrD,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,EAAE,cAAc,EAAE,OAAO,GAAG,IAAI;IAgD7G,OAAO,CAAC,kDAAkD;IAuB1D,OAAO,CAAC,6CAA6C;IAmCrD,OAAO,CAAC,8CAA8C;IA8CtD,OAAO,CAAC,uCAAuC;IAc/C,OAAO,CAAC,kCAAkC;IAW1C,OAAO,CAAC,4BAA4B;IAyBpC,OAAO,CAAC,4CAA4C;IAmCpD,OAAO,CAAC,sBAAsB;CA0CjC"}
|
|
@@ -24,14 +24,14 @@ const IRUtils_1 = require("../../common/IRUtils");
|
|
|
24
24
|
* Builder for condition in CFG
|
|
25
25
|
*/
|
|
26
26
|
class ConditionBuilder {
|
|
27
|
-
rebuildBlocksContainConditionalOperator(basicBlockSet, isArkUIBuilder) {
|
|
27
|
+
rebuildBlocksContainConditionalOperator(blockBuilderToCfgBlock, basicBlockSet, isArkUIBuilder) {
|
|
28
28
|
var _a;
|
|
29
29
|
if (isArkUIBuilder) {
|
|
30
30
|
this.deleteDummyConditionalOperatorStmt(basicBlockSet);
|
|
31
31
|
return;
|
|
32
32
|
}
|
|
33
|
-
const
|
|
34
|
-
for (const currBasicBlock of
|
|
33
|
+
const blockPairsToSet = [];
|
|
34
|
+
for (const [currBlockBuilder, currBasicBlock] of blockBuilderToCfgBlock) {
|
|
35
35
|
const stmtsInCurrBasicBlock = Array.from(currBasicBlock.getStmts());
|
|
36
36
|
const stmtsCnt = stmtsInCurrBasicBlock.length;
|
|
37
37
|
let conditionalOperatorEndPos = -1;
|
|
@@ -58,6 +58,10 @@ class ConditionBuilder {
|
|
|
58
58
|
}
|
|
59
59
|
this.relinkPrevAndSuccOfBlockContainConditionalOperator(currBasicBlock, generatedTopBlock, generatedBottomBlocks);
|
|
60
60
|
basicBlockSet.delete(currBasicBlock);
|
|
61
|
+
blockPairsToSet.push([currBlockBuilder, generatedTopBlock]);
|
|
62
|
+
}
|
|
63
|
+
for (const [currBlockBuilder, generatedTopBlock] of blockPairsToSet) {
|
|
64
|
+
blockBuilderToCfgBlock.set(currBlockBuilder, generatedTopBlock);
|
|
61
65
|
}
|
|
62
66
|
}
|
|
63
67
|
relinkPrevAndSuccOfBlockContainConditionalOperator(currBasicBlock, generatedTopBlock, generatedBottomBlocks) {
|
|
@@ -6,7 +6,25 @@ import { BlockBuilder } from './CfgBuilder';
|
|
|
6
6
|
* Builder for traps from try...catch
|
|
7
7
|
*/
|
|
8
8
|
export declare class TrapBuilder {
|
|
9
|
-
|
|
9
|
+
private processedBlockBuildersBeforeTry;
|
|
10
|
+
private arkIRTransformer;
|
|
11
|
+
private basicBlockSet;
|
|
12
|
+
private blockBuilderToCfgBlock;
|
|
13
|
+
private blockBuildersBeforeTry;
|
|
14
|
+
constructor(blockBuildersBeforeTry: Set<BlockBuilder>, blockBuilderToCfgBlock: Map<BlockBuilder, BasicBlock>, arkIRTransformer: ArkIRTransformer, basicBlockSet: Set<BasicBlock>);
|
|
15
|
+
buildTraps(): Trap[];
|
|
16
|
+
private buildTrapGroup;
|
|
17
|
+
private shouldSkipProcessing;
|
|
18
|
+
private getTryStatementBuilder;
|
|
19
|
+
private getFinallyBlock;
|
|
20
|
+
private prepareHeadBlock;
|
|
21
|
+
private processTryBlock;
|
|
22
|
+
private processCatchBlock;
|
|
23
|
+
private getAfterFinallyBlock;
|
|
24
|
+
private buildSingleTraps;
|
|
25
|
+
private buildTrapsRecursively;
|
|
26
|
+
private removeEmptyBlockBeforeTry;
|
|
27
|
+
private shouldRemoveEmptyBlockBeforeTry;
|
|
10
28
|
private buildTrapsIfNoFinally;
|
|
11
29
|
private buildTrapsIfFinallyExist;
|
|
12
30
|
private getAllBlocksBFS;
|
|
@@ -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;AAavC,OAAO,EAAE,YAAY,EAAuB,MAAM,cAAc,CAAC;AAKjE;;GAEG;AACH,qBAAa,WAAW;
|
|
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;AAavC,OAAO,EAAE,YAAY,EAAuB,MAAM,cAAc,CAAC;AAKjE;;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,EAChG,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC;IAQnC,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;IAyBjC,OAAO,CAAC,+BAA+B;IAMvC,OAAO,CAAC,qBAAqB;IA8C7B,OAAO,CAAC,wBAAwB;IA8ChC,OAAO,CAAC,eAAe;IAmCvB,OAAO,CAAC,iBAAiB;IA4BzB,OAAO,CAAC,UAAU;IAgClB,OAAO,CAAC,QAAQ;CAgBnB"}
|
|
@@ -50,64 +50,189 @@ const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER,
|
|
|
50
50
|
* Builder for traps from try...catch
|
|
51
51
|
*/
|
|
52
52
|
class TrapBuilder {
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
constructor(blockBuildersBeforeTry, blockBuilderToCfgBlock, arkIRTransformer, basicBlockSet) {
|
|
54
|
+
this.blockBuildersBeforeTry = blockBuildersBeforeTry;
|
|
55
|
+
this.processedBlockBuildersBeforeTry = new Set();
|
|
56
|
+
this.arkIRTransformer = arkIRTransformer;
|
|
57
|
+
this.basicBlockSet = basicBlockSet;
|
|
58
|
+
this.blockBuilderToCfgBlock = blockBuilderToCfgBlock;
|
|
59
|
+
}
|
|
60
|
+
buildTraps() {
|
|
55
61
|
const traps = [];
|
|
62
|
+
const blockBuildersBeforeTry = Array.from(this.blockBuildersBeforeTry);
|
|
56
63
|
for (const blockBuilderBeforeTry of blockBuildersBeforeTry) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
traps.push(...this.buildTrapGroup(blockBuilderBeforeTry).traps);
|
|
65
|
+
}
|
|
66
|
+
return traps;
|
|
67
|
+
}
|
|
68
|
+
buildTrapGroup(blockBuilderBeforeTry) {
|
|
69
|
+
if (this.shouldSkipProcessing(blockBuilderBeforeTry)) {
|
|
70
|
+
return { traps: [], headBlockBuilder: null };
|
|
71
|
+
}
|
|
72
|
+
const tryStmtBuilder = this.getTryStatementBuilder(blockBuilderBeforeTry);
|
|
73
|
+
if (!tryStmtBuilder) {
|
|
74
|
+
return { traps: [], headBlockBuilder: null };
|
|
75
|
+
}
|
|
76
|
+
const finallyBlockBuilder = this.getFinallyBlock(tryStmtBuilder);
|
|
77
|
+
if (!finallyBlockBuilder) {
|
|
78
|
+
return { traps: [], headBlockBuilder: null };
|
|
79
|
+
}
|
|
80
|
+
const headBlockBuilderWithinTry = this.prepareHeadBlock(blockBuilderBeforeTry);
|
|
81
|
+
const traps = [];
|
|
82
|
+
const tryResult = this.processTryBlock(headBlockBuilderWithinTry, finallyBlockBuilder);
|
|
83
|
+
traps.push(...tryResult.traps);
|
|
84
|
+
const updatedHeadBlock = tryResult.newStartBlockBuilder;
|
|
85
|
+
const catchResult = this.processCatchBlock(tryStmtBuilder);
|
|
86
|
+
traps.push(...catchResult.traps);
|
|
87
|
+
const blockBuilderAfterFinally = this.getAfterFinallyBlock(tryStmtBuilder);
|
|
88
|
+
if (!blockBuilderAfterFinally) {
|
|
89
|
+
return { traps: [], headBlockBuilder: null };
|
|
90
|
+
}
|
|
91
|
+
const singleTraps = this.buildSingleTraps(tryResult.bfsBlocks, tryResult.tailBlocks, catchResult.bfsBlocks, catchResult.tailBlocks, finallyBlockBuilder, blockBuilderAfterFinally);
|
|
92
|
+
traps.push(...singleTraps);
|
|
93
|
+
return { traps, headBlockBuilder: updatedHeadBlock };
|
|
94
|
+
}
|
|
95
|
+
shouldSkipProcessing(blockBuilderBeforeTry) {
|
|
96
|
+
if (this.processedBlockBuildersBeforeTry.has(blockBuilderBeforeTry)) {
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
this.processedBlockBuildersBeforeTry.add(blockBuilderBeforeTry);
|
|
100
|
+
if (blockBuilderBeforeTry.nexts.length === 0) {
|
|
101
|
+
logger.error(`can't find try block.`);
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
getTryStatementBuilder(blockBuilderBeforeTry) {
|
|
107
|
+
const stmtsCnt = blockBuilderBeforeTry.stmts.length;
|
|
108
|
+
const tryStmtBuilder = blockBuilderBeforeTry.stmts[stmtsCnt - 1];
|
|
109
|
+
return tryStmtBuilder;
|
|
110
|
+
}
|
|
111
|
+
getFinallyBlock(tryStmtBuilder) {
|
|
112
|
+
var _a;
|
|
113
|
+
const finallyBlockBuilder = (_a = tryStmtBuilder.finallyStatement) === null || _a === void 0 ? void 0 : _a.block;
|
|
114
|
+
if (!finallyBlockBuilder) {
|
|
115
|
+
logger.error(`can't find finally block or dummy finally block.`);
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
return finallyBlockBuilder;
|
|
119
|
+
}
|
|
120
|
+
prepareHeadBlock(blockBuilderBeforeTry) {
|
|
121
|
+
const headBlockBuilderWithinTry = blockBuilderBeforeTry.nexts[0];
|
|
122
|
+
this.removeEmptyBlockBeforeTry(blockBuilderBeforeTry);
|
|
123
|
+
return headBlockBuilderWithinTry;
|
|
124
|
+
}
|
|
125
|
+
processTryBlock(headBlockBuilderWithinTry, finallyBlockBuilder) {
|
|
126
|
+
const result = this.buildTrapsRecursively(headBlockBuilderWithinTry, finallyBlockBuilder);
|
|
127
|
+
const { bfsBlocks, tailBlocks } = this.getAllBlocksBFS(result.newStartBlockBuilder, finallyBlockBuilder);
|
|
128
|
+
return {
|
|
129
|
+
traps: result.traps,
|
|
130
|
+
newStartBlockBuilder: result.newStartBlockBuilder,
|
|
131
|
+
bfsBlocks,
|
|
132
|
+
tailBlocks
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
processCatchBlock(tryStmtBuilder) {
|
|
136
|
+
var _a;
|
|
137
|
+
const catchBlockBuilder = (_a = tryStmtBuilder.catchStatement) === null || _a === void 0 ? void 0 : _a.block;
|
|
138
|
+
if (!catchBlockBuilder) {
|
|
139
|
+
return { traps: [], bfsBlocks: [], tailBlocks: [] };
|
|
140
|
+
}
|
|
141
|
+
const result = this.buildTrapsRecursively(catchBlockBuilder);
|
|
142
|
+
const { bfsBlocks, tailBlocks } = this.getAllBlocksBFS(result.newStartBlockBuilder);
|
|
143
|
+
return {
|
|
144
|
+
traps: result.traps,
|
|
145
|
+
bfsBlocks,
|
|
146
|
+
tailBlocks
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
getAfterFinallyBlock(tryStmtBuilder) {
|
|
150
|
+
var _a;
|
|
151
|
+
const blockBuilderAfterFinally = (_a = tryStmtBuilder.afterFinal) === null || _a === void 0 ? void 0 : _a.block;
|
|
152
|
+
if (!blockBuilderAfterFinally) {
|
|
153
|
+
logger.error(`can't find block after try...catch.`);
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
return blockBuilderAfterFinally;
|
|
157
|
+
}
|
|
158
|
+
buildSingleTraps(tryBfsBlocks, tryTailBlocks, catchBfsBlocks, catchTailBlocks, finallyBlockBuilder, blockBuilderAfterFinally) {
|
|
159
|
+
const finallyStmts = finallyBlockBuilder.stmts;
|
|
160
|
+
if (finallyStmts.length === 1 && finallyStmts[0].code === 'dummyFinally') {
|
|
161
|
+
return this.buildTrapsIfNoFinally(tryBfsBlocks, tryTailBlocks, catchBfsBlocks, catchTailBlocks, finallyBlockBuilder);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
return this.buildTrapsIfFinallyExist(tryBfsBlocks, tryTailBlocks, catchBfsBlocks, catchTailBlocks, finallyBlockBuilder, blockBuilderAfterFinally);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
buildTrapsRecursively(startBlockBuilder, endBlockBuilder) {
|
|
168
|
+
const queue = [];
|
|
169
|
+
const visitedBlockBuilders = new Set();
|
|
170
|
+
queue.push(startBlockBuilder);
|
|
171
|
+
while (queue.length !== 0) {
|
|
172
|
+
const currBlockBuilder = queue.splice(0, 1)[0];
|
|
173
|
+
if (visitedBlockBuilders.has(currBlockBuilder)) {
|
|
67
174
|
continue;
|
|
68
175
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
76
|
-
const finallyStmts = finallyBlockBuilder.stmts;
|
|
77
|
-
const blockBuilderAfterFinally = (_c = tryStmtBuilder.afterFinal) === null || _c === void 0 ? void 0 : _c.block;
|
|
78
|
-
if (!blockBuilderAfterFinally) {
|
|
79
|
-
logger.error(`can't find block after try...catch.`);
|
|
80
|
-
continue;
|
|
176
|
+
visitedBlockBuilders.add(currBlockBuilder);
|
|
177
|
+
const childList = currBlockBuilder.nexts;
|
|
178
|
+
for (const child of childList) {
|
|
179
|
+
if (child !== endBlockBuilder) {
|
|
180
|
+
queue.push(child);
|
|
181
|
+
}
|
|
81
182
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
183
|
+
}
|
|
184
|
+
const allTraps = [];
|
|
185
|
+
for (const blockBuilder of visitedBlockBuilders) {
|
|
186
|
+
if (this.blockBuildersBeforeTry.has(blockBuilder)) {
|
|
187
|
+
const { traps, headBlockBuilder } = this.buildTrapGroup(blockBuilder);
|
|
188
|
+
allTraps.push(...traps);
|
|
189
|
+
if (blockBuilder === startBlockBuilder && this.shouldRemoveEmptyBlockBeforeTry(blockBuilder)) {
|
|
190
|
+
startBlockBuilder = headBlockBuilder;
|
|
87
191
|
}
|
|
88
192
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
193
|
+
}
|
|
194
|
+
return { traps: allTraps, newStartBlockBuilder: startBlockBuilder };
|
|
195
|
+
}
|
|
196
|
+
removeEmptyBlockBeforeTry(blockBuilderBeforeTry) {
|
|
197
|
+
if (!this.shouldRemoveEmptyBlockBeforeTry(blockBuilderBeforeTry)) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const headBlockBuilderWithinTry = blockBuilderBeforeTry.nexts[0];
|
|
201
|
+
const headBlockWithinTry = this.blockBuilderToCfgBlock.get(headBlockBuilderWithinTry);
|
|
202
|
+
headBlockWithinTry.getPredecessors().splice(0, 1);
|
|
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
|
+
}
|
|
92
212
|
}
|
|
213
|
+
headBlockWithinTry.addPredecessorBlock(prevBlock);
|
|
93
214
|
}
|
|
94
|
-
|
|
215
|
+
headBlockBuilderWithinTry.lasts.splice(0, 1, ...prevsOfBlockBuilderBeforeTry);
|
|
216
|
+
this.basicBlockSet.delete(this.blockBuilderToCfgBlock.get(blockBuilderBeforeTry));
|
|
217
|
+
this.blockBuilderToCfgBlock.delete(blockBuilderBeforeTry);
|
|
95
218
|
}
|
|
96
|
-
|
|
219
|
+
shouldRemoveEmptyBlockBeforeTry(blockBuilderBeforeTry) {
|
|
220
|
+
const stmtsCnt = blockBuilderBeforeTry.stmts.length;
|
|
221
|
+
// This BlockBuilder contains only one redundant TryStatementBuilder, so the BlockBuilder can be deleted.
|
|
222
|
+
return stmtsCnt === 1;
|
|
223
|
+
}
|
|
224
|
+
buildTrapsIfNoFinally(tryBfsBlocks, tryTailBlocks, catchBfsBlocks, catchTailBlocks, finallyBlockBuilder) {
|
|
97
225
|
if (catchBfsBlocks.length === 0) {
|
|
98
226
|
logger.error(`catch block expected.`);
|
|
99
|
-
return
|
|
100
|
-
}
|
|
101
|
-
if (!blockBuilderToCfgBlock.has(blockBuilderAfterFinally)) {
|
|
102
|
-
logger.error(`can't find basicBlock corresponding to the blockBuilder.`);
|
|
103
|
-
return null;
|
|
227
|
+
return [];
|
|
104
228
|
}
|
|
105
|
-
|
|
106
|
-
|
|
229
|
+
const blockBuilderAfterFinally = finallyBlockBuilder.nexts[0];
|
|
230
|
+
let blockAfterFinally = this.blockBuilderToCfgBlock.get(blockBuilderAfterFinally);
|
|
231
|
+
if (!this.blockBuilderToCfgBlock.has(finallyBlockBuilder)) {
|
|
107
232
|
logger.error(`can't find basicBlock corresponding to the blockBuilder.`);
|
|
108
|
-
return
|
|
233
|
+
return [];
|
|
109
234
|
}
|
|
110
|
-
const finallyBlock = blockBuilderToCfgBlock.get(finallyBlockBuilder);
|
|
235
|
+
const finallyBlock = this.blockBuilderToCfgBlock.get(finallyBlockBuilder);
|
|
111
236
|
let dummyFinallyIdxInPredecessors = -1;
|
|
112
237
|
for (let i = 0; i < blockAfterFinally.getPredecessors().length; i++) {
|
|
113
238
|
if (blockAfterFinally.getPredecessors()[i] === finallyBlock) {
|
|
@@ -116,14 +241,15 @@ class TrapBuilder {
|
|
|
116
241
|
}
|
|
117
242
|
}
|
|
118
243
|
if (dummyFinallyIdxInPredecessors === -1) {
|
|
119
|
-
|
|
244
|
+
logger.error(`Dummy finally block isn't a predecessor of block after finally block.`);
|
|
245
|
+
return [];
|
|
120
246
|
}
|
|
121
247
|
blockAfterFinally.getPredecessors().splice(dummyFinallyIdxInPredecessors, 1);
|
|
122
248
|
for (const tryTailBlock of tryTailBlocks) {
|
|
123
249
|
tryTailBlock.setSuccessorBlock(0, blockAfterFinally);
|
|
124
250
|
blockAfterFinally.addPredecessorBlock(tryTailBlock);
|
|
125
251
|
}
|
|
126
|
-
basicBlockSet.delete(finallyBlock);
|
|
252
|
+
this.basicBlockSet.delete(finallyBlock);
|
|
127
253
|
for (const catchTailBlock of catchTailBlocks) {
|
|
128
254
|
catchTailBlock.addSuccessorBlock(blockAfterFinally);
|
|
129
255
|
blockAfterFinally.addPredecessorBlock(catchTailBlock);
|
|
@@ -133,10 +259,14 @@ class TrapBuilder {
|
|
|
133
259
|
}
|
|
134
260
|
return [new Trap_1.Trap(tryBfsBlocks, catchBfsBlocks)];
|
|
135
261
|
}
|
|
136
|
-
buildTrapsIfFinallyExist(tryBfsBlocks, tryTailBlocks, catchBfsBlocks, catchTailBlocks, finallyBlockBuilder, blockBuilderAfterFinally
|
|
137
|
-
const { bfsBlocks: finallyBfsBlocks, tailBlocks: finallyTailBlocks } = this.getAllBlocksBFS(blockBuilderToCfgBlock, finallyBlockBuilder, blockBuilderAfterFinally);
|
|
138
|
-
const copyFinallyBfsBlocks = this.copyFinallyBlocks(finallyBfsBlocks, finallyTailBlocks, basicBlockSet, arkIRTransformer, blockBuilderToCfgBlock);
|
|
262
|
+
buildTrapsIfFinallyExist(tryBfsBlocks, tryTailBlocks, catchBfsBlocks, catchTailBlocks, finallyBlockBuilder, blockBuilderAfterFinally) {
|
|
139
263
|
const traps = [];
|
|
264
|
+
const { traps: trapsInFinally, newStartBlockBuilder: newStartBlockBuilder, } = this.buildTrapsRecursively(finallyBlockBuilder, blockBuilderAfterFinally);
|
|
265
|
+
traps.push(...trapsInFinally);
|
|
266
|
+
// May update head blockBuilder with catch statement.
|
|
267
|
+
finallyBlockBuilder = newStartBlockBuilder;
|
|
268
|
+
const { bfsBlocks: finallyBfsBlocks, tailBlocks: finallyTailBlocks } = this.getAllBlocksBFS(finallyBlockBuilder, blockBuilderAfterFinally);
|
|
269
|
+
const copyFinallyBfsBlocks = this.copyFinallyBlocks(finallyBfsBlocks, finallyTailBlocks);
|
|
140
270
|
if (catchBfsBlocks.length !== 0) {
|
|
141
271
|
for (const catchTailBlock of catchTailBlocks) {
|
|
142
272
|
catchTailBlock.addSuccessorBlock(finallyBfsBlocks[0]);
|
|
@@ -162,33 +292,30 @@ class TrapBuilder {
|
|
|
162
292
|
}
|
|
163
293
|
return traps;
|
|
164
294
|
}
|
|
165
|
-
getAllBlocksBFS(
|
|
295
|
+
getAllBlocksBFS(startBlockBuilder, endBlockBuilder) {
|
|
166
296
|
const bfsBlocks = [];
|
|
167
297
|
const tailBlocks = [];
|
|
298
|
+
const startBlock = this.blockBuilderToCfgBlock.get(startBlockBuilder);
|
|
299
|
+
const endBlock = endBlockBuilder ? this.blockBuilderToCfgBlock.get(endBlockBuilder) : undefined;
|
|
168
300
|
const queue = [];
|
|
169
|
-
const
|
|
170
|
-
queue.push(
|
|
301
|
+
const visitedBlocks = new Set();
|
|
302
|
+
queue.push(startBlock);
|
|
171
303
|
while (queue.length !== 0) {
|
|
172
|
-
const
|
|
173
|
-
if (
|
|
304
|
+
const currBlock = queue.splice(0, 1)[0];
|
|
305
|
+
if (visitedBlocks.has(currBlock)) {
|
|
174
306
|
continue;
|
|
175
307
|
}
|
|
176
|
-
|
|
177
|
-
if (!blockBuilderToCfgBlock.has(currBlockBuilder)) {
|
|
178
|
-
logger.error(`can't find basicBlock corresponding to the blockBuilder.`);
|
|
179
|
-
continue;
|
|
180
|
-
}
|
|
181
|
-
const currBlock = blockBuilderToCfgBlock.get(currBlockBuilder);
|
|
308
|
+
visitedBlocks.add(currBlock);
|
|
182
309
|
bfsBlocks.push(currBlock);
|
|
183
|
-
const
|
|
184
|
-
if (
|
|
185
|
-
for (const
|
|
186
|
-
|
|
187
|
-
if (child === endBlockBuilder) {
|
|
310
|
+
const successors = currBlock.getSuccessors();
|
|
311
|
+
if (successors.length !== 0) {
|
|
312
|
+
for (const successor of successors) {
|
|
313
|
+
if (successor === endBlock) {
|
|
188
314
|
tailBlocks.push(currBlock);
|
|
189
315
|
}
|
|
190
316
|
else {
|
|
191
|
-
|
|
317
|
+
// A tail block's successor may be within the traversal range
|
|
318
|
+
queue.push(successor);
|
|
192
319
|
}
|
|
193
320
|
}
|
|
194
321
|
}
|
|
@@ -198,10 +325,10 @@ class TrapBuilder {
|
|
|
198
325
|
}
|
|
199
326
|
return { bfsBlocks, tailBlocks };
|
|
200
327
|
}
|
|
201
|
-
copyFinallyBlocks(finallyBfsBlocks, finallyTailBlocks
|
|
328
|
+
copyFinallyBlocks(finallyBfsBlocks, finallyTailBlocks) {
|
|
202
329
|
const copyFinallyBfsBlocks = this.copyBlocks(finallyBfsBlocks);
|
|
203
330
|
const caughtExceptionRef = new Ref_1.ArkCaughtExceptionRef(Type_1.UnknownType.getInstance());
|
|
204
|
-
const { value: exceptionValue, stmts: exceptionAssignStmts } = arkIRTransformer.generateAssignStmtForValue(caughtExceptionRef, [Position_1.FullPosition.DEFAULT]);
|
|
331
|
+
const { value: exceptionValue, stmts: exceptionAssignStmts, } = this.arkIRTransformer.generateAssignStmtForValue(caughtExceptionRef, [Position_1.FullPosition.DEFAULT]);
|
|
205
332
|
copyFinallyBfsBlocks[0].addHead(exceptionAssignStmts);
|
|
206
333
|
const finallyPredecessorsCnt = copyFinallyBfsBlocks[0].getPredecessors().length;
|
|
207
334
|
copyFinallyBfsBlocks[0].getPredecessors().splice(0, finallyPredecessorsCnt);
|
|
@@ -219,7 +346,7 @@ class TrapBuilder {
|
|
|
219
346
|
copyFinallyTailBlocks[0].addStmt(throwStmt);
|
|
220
347
|
copyFinallyBfsBlocks.push(...copyFinallyTailBlocks);
|
|
221
348
|
copyFinallyBfsBlocks.forEach((copyFinallyBfsBlock) => {
|
|
222
|
-
basicBlockSet.add(copyFinallyBfsBlock);
|
|
349
|
+
this.basicBlockSet.add(copyFinallyBfsBlock);
|
|
223
350
|
});
|
|
224
351
|
return copyFinallyBfsBlocks;
|
|
225
352
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArkMethod.d.ts","sourceRoot":"","sources":["../../../src/core/model/ArkMethod.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ArkMethod.d.ts","sourceRoot":"","sources":["../../../src/core/model/ArkMethod.ts"],"names":[],"mappings":"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"}
|
|
@@ -397,13 +397,12 @@ class ArkMethod extends ArkBaseModel_1.ArkBaseModel {
|
|
|
397
397
|
return undefined;
|
|
398
398
|
}
|
|
399
399
|
getParameterRefs() {
|
|
400
|
-
var _a;
|
|
400
|
+
var _a, _b;
|
|
401
401
|
let paramRefs = [];
|
|
402
|
-
const
|
|
403
|
-
if (
|
|
402
|
+
const stmts = (_b = (_a = this.getBody()) === null || _a === void 0 ? void 0 : _a.getCfg().getStartingBlock()) === null || _b === void 0 ? void 0 : _b.getStmts();
|
|
403
|
+
if (stmts === undefined) {
|
|
404
404
|
return null;
|
|
405
405
|
}
|
|
406
|
-
const stmts = Array.from(blocks)[0].getStmts();
|
|
407
406
|
for (let stmt of stmts) {
|
|
408
407
|
if (stmt instanceof Stmt_1.ArkAssignStmt && stmt.getRightOp() instanceof Ref_1.ArkParameterRef) {
|
|
409
408
|
paramRefs.push(stmt.getRightOp());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArkClassBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkClassBuilder.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,
|
|
1
|
+
{"version":3,"file":"ArkClassBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkClassBuilder.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAmE,MAAM,iBAAiB,CAAC;AAClG,OAAO,EAAE,QAAQ,EAAiB,MAAM,aAAa,CAAC;AAyBtD,MAAM,MAAM,aAAa,GACnB,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,oBAAoB,GACvB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,uBAAuB,CAAC;AAUjC,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,UAAU,GAAG,IAAI,CAItH;AAED,wBAAgB,oCAAoC,CAChD,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,QAAQ,EACtB,MAAM,EAAE,EAAE,CAAC,iBAAiB,EAC5B,UAAU,EAAE,EAAE,CAAC,UAAU,GAC1B,IAAI,CAIN;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,SAAS,GAAG,IAAI,CAOpJ;AAED,wBAAgB,8BAA8B,CAC1C,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,QAAQ,EACb,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,eAAe,CAAC,EAAE,SAAS,GAC5B,IAAI,CASN;AAED,wBAAgB,mCAAmC,CAC/C,OAAO,EAAE,aAAa,EACtB,YAAY,EAAE,YAAY,EAC1B,GAAG,EAAE,QAAQ,EACb,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,eAAe,CAAC,EAAE,SAAS,GAC5B,IAAI,CAUN;AAmBD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,SAAS,GAAG,IAAI,CA0BvI"}
|