arkanalyzer 1.0.41 → 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/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +10 -4
- 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/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 +31 -31
- 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/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.map +1 -1
- package/lib/core/graph/builder/CfgBuilder.js +3 -3
- 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 +24 -20
- 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/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/source/SourceStmt.d.ts +1 -0
- package/lib/save/source/SourceStmt.d.ts.map +1 -1
- package/lib/save/source/SourceStmt.js +4 -7
- 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
|
@@ -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":"AAeA,OAAO,EAAE,eAAe,EAAc,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAgC,IAAI,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAKH,WAAW,EAEX,IAAI,EAEP,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAiB,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAuB,OAAO,EAAmB,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAgB,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAgB,MAAM,oBAAoB,CAAC;AAG5D,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG7D,eAAO,MAAM,iBAAiB,UAW7B,CAAC;AAEF;;GAEG;AACH,qBAAa,SAAU,SAAQ,YAAa,YAAW,SAAS;IAC5D,OAAO,CAAC,IAAI,CAAC,CAAS;IACtB,OAAO,CAAC,iBAAiB,CAAY;IAErC,OAAO,CAAC,WAAW,CAAC,CAAY;IAEhC,OAAO,CAAC,YAAY,CAAC,CAAgB;IAErC,OAAO,CAAC,uBAAuB,CAAC,CAAoB;IACpD,OAAO,CAAC,qBAAqB,CAAC,CAAY;IAE1C,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,OAAO,CAAC,CAAU;IAE1B,OAAO,CAAC,IAAI,CAAC,CAAU;IACvB,OAAO,CAAC,QAAQ,CAAC,CAAW;IAE5B,OAAO,CAAC,WAAW,CAAC,CAAc;IAElC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,aAAa,CAAkB;;IAMvC;;OAEG;IACI,WAAW,IAAI,QAAQ;IAIvB,aAAa,IAAI,UAAU;IAI3B,OAAO,IAAI,MAAM;IAIxB;;;OAGG;IACI,OAAO,IAAI,MAAM,GAAG,SAAS;IAI7B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC;;;OAGG;IACI,eAAe,IAAI,MAAM,EAAE,GAAG,IAAI;IAWzC;;;OAGG;IACI,iBAAiB,IAAI,MAAM,EAAE,GAAG,IAAI;IAW3C;;;;;;OAMG;IACI,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAavE;;;;OAIG;IACI,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI;IAIpD;;;OAGG;IACI,kBAAkB,IAAI,OAAO,EAAE,GAAG,IAAI;IAI7C;;;OAGG;IACI,OAAO,IAAI,MAAM,GAAG,IAAI;IAO/B;;;;;OAKG;IACI,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOlC;;;OAGG;IACI,SAAS,IAAI,MAAM,GAAG,IAAI;IAOjC;;;;;OAKG;IACI,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAOtC;;;OAGG;IACI,UAAU,IAAI,OAAO,GAAG,IAAI;IAInC;;;;OAIG;IACI,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIzC;;;OAGG;IACI,oBAAoB,IAAI,QAAQ;IAIhC,oBAAoB,CAAC,iBAAiB,EAAE,QAAQ,GAAG,IAAI;IAIvD,mBAAmB,IAAI,OAAO;IAI9B,kBAAkB,IAAI,OAAO;IAI7B,iBAAiB,IAAI,OAAO;IAI5B,aAAa,IAAI,eAAe,EAAE;IAIlC,aAAa,IAAI,IAAI;IAI5B;;;;OAIG;IACI,oBAAoB,IAAI,eAAe,EAAE,GAAG,IAAI;IAIvD;;;;;OAKG;IACI,wBAAwB,CAAC,eAAe,EAAE,eAAe,GAAG,MAAM;IAazE;;;;OAIG;IACI,0BAA0B,IAAI,eAAe,GAAG,IAAI;IAI3D;;;;;;;;;;;;;;OAcG;IACI,YAAY,IAAI,eAAe;IAItC;;;;;OAKG;IACI,oBAAoB,CAAC,UAAU,EAAE,eAAe,GAAG,eAAe,EAAE,GAAG,IAAI;IAQlF;;;;;;OAMG;IACI,4BAA4B,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAOpF;;;;;OAKG;IACI,0BAA0B,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAI5D,eAAe,IAAI,kBAAkB;IAIrC,eAAe,IAAI,WAAW,EAAE,GAAG,SAAS;IAI5C,gBAAgB,IAAI,OAAO;IAI3B,eAAe,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI;IAIlD,cAAc,IAAI,WAAW,GAAG,SAAS;IAIhD;;;;;;;;;;;;;;;;;;;;OAoBG;IACI,OAAO,IAAI,OAAO,GAAG,SAAS;IAI9B,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAInC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACI,MAAM,IAAI,GAAG,GAAG,SAAS;IAIzB,cAAc,IAAI,GAAG,GAAG,SAAS;IAIjC,gBAAgB,IAAI,eAAe,EAAE,GAAG,IAAI;IAc5C,qBAAqB,IAAI,KAAK,EAAE;IAqBhC,eAAe,IAAI,KAAK,GAAG,IAAI;IAiB/B,eAAe,IAAI,KAAK,EAAE;IAa1B,aAAa,IAAI,IAAI,EAAE;IAMvB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAIrC,WAAW,IAAI,QAAQ,GAAG,SAAS;IAInC,WAAW,IAAI,OAAO;IAItB,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAO9C,eAAe,IAAI,IAAI;IAIvB,SAAS,IAAI,IAAI;IAajB,WAAW,IAAI,OAAO;IAItB,kBAAkB,CAAC,eAAe,EAAE,OAAO,GAAG,IAAI;IAIlD,gBAAgB,IAAI,OAAO;IAI3B,gBAAgB,CAAC,aAAa,EAAE,OAAO,GAAG,IAAI;IAI9C,QAAQ,IAAI,QAAQ;IAiCpB,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,eAAe;IAiB3D,OAAO,CAAC,SAAS;IAgBjB,OAAO,CAAC,UAAU;IAuClB,OAAO,CAAC,MAAM,CAAC,QAAQ;IAahB,cAAc,IAAI,SAAS,GAAG,SAAS;IAIvC,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAIvC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAK5C,gBAAgB,CAAC,aAAa,EAAE,OAAO,GAAG,IAAI;IAI9C,gBAAgB,IAAI,OAAO;IAK3B,QAAQ,IAAI,OAAO;CAe7B"}
|
|
@@ -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"}
|
|
@@ -316,32 +316,28 @@ function buildArkClassMembers(clsNode, cls, sourceFile) {
|
|
|
316
316
|
const instanceInitStmts = [];
|
|
317
317
|
let staticBlockId = 0;
|
|
318
318
|
clsNode.members.forEach(member => {
|
|
319
|
-
if (
|
|
320
|
-
ohos_typescript_1.default.isConstructorDeclaration(member) ||
|
|
321
|
-
ohos_typescript_1.default.isMethodSignature(member) ||
|
|
322
|
-
ohos_typescript_1.default.isConstructSignatureDeclaration(member) ||
|
|
323
|
-
ohos_typescript_1.default.isAccessor(member) ||
|
|
324
|
-
ohos_typescript_1.default.isCallSignatureDeclaration(member)) {
|
|
319
|
+
if (isClassMethod(member)) {
|
|
325
320
|
// these node types have been handled at the beginning of this function by calling buildMethodsForClass
|
|
326
321
|
return;
|
|
327
322
|
}
|
|
328
|
-
|
|
323
|
+
if (ohos_typescript_1.default.isPropertyDeclaration(member) || ohos_typescript_1.default.isPropertySignature(member)) {
|
|
329
324
|
const arkField = (0, ArkFieldBuilder_1.buildProperty2ArkField)(member, sourceFile, cls);
|
|
330
|
-
if (ohos_typescript_1.default.isClassDeclaration(clsNode)
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
arkField.getInitializer().forEach(stmt => instanceInitStmts.push(stmt));
|
|
341
|
-
}
|
|
325
|
+
if (!ohos_typescript_1.default.isClassDeclaration(clsNode) && !ohos_typescript_1.default.isClassExpression(clsNode) && !ohos_typescript_1.default.isStructDeclaration(clsNode)) {
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
if (arkField.isStatic()) {
|
|
329
|
+
getInitStmts(staticIRTransformer, arkField, member.initializer);
|
|
330
|
+
arkField.getInitializer().forEach(stmt => staticInitStmts.push(stmt));
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
if (!instanceIRTransformer) {
|
|
334
|
+
console.log(clsNode.getText(sourceFile));
|
|
342
335
|
}
|
|
336
|
+
getInitStmts(instanceIRTransformer, arkField, member.initializer);
|
|
337
|
+
arkField.getInitializer().forEach(stmt => instanceInitStmts.push(stmt));
|
|
338
|
+
return;
|
|
343
339
|
}
|
|
344
|
-
|
|
340
|
+
if (ohos_typescript_1.default.isEnumMember(member)) {
|
|
345
341
|
const arkField = (0, ArkFieldBuilder_1.buildProperty2ArkField)(member, sourceFile, cls);
|
|
346
342
|
getInitStmts(staticIRTransformer, arkField, member.initializer);
|
|
347
343
|
arkField.getInitializer().forEach(stmt => staticInitStmts.push(stmt));
|
|
@@ -369,6 +365,14 @@ function buildArkClassMembers(clsNode, cls, sourceFile) {
|
|
|
369
365
|
(0, ArkMethodBuilder_1.buildInitMethod)(cls.getStaticInitMethod(), staticInitStmts, staticIRTransformer.getThisLocal());
|
|
370
366
|
}
|
|
371
367
|
}
|
|
368
|
+
function isClassMethod(member) {
|
|
369
|
+
return (ohos_typescript_1.default.isMethodDeclaration(member) ||
|
|
370
|
+
ohos_typescript_1.default.isConstructorDeclaration(member) ||
|
|
371
|
+
ohos_typescript_1.default.isMethodSignature(member) ||
|
|
372
|
+
ohos_typescript_1.default.isConstructSignatureDeclaration(member) ||
|
|
373
|
+
ohos_typescript_1.default.isAccessor(member) ||
|
|
374
|
+
ohos_typescript_1.default.isCallSignatureDeclaration(member));
|
|
375
|
+
}
|
|
372
376
|
function buildMethodsForClass(clsNode, cls, sourceFile) {
|
|
373
377
|
clsNode.members.forEach(member => {
|
|
374
378
|
if (ohos_typescript_1.default.isMethodDeclaration(member) ||
|
|
@@ -54,9 +54,10 @@ function buildImportDeclarationNode(node, sourceFile, arkFile) {
|
|
|
54
54
|
importInfo.setTsSourceCode(tsSourceCode);
|
|
55
55
|
IRUtils_1.IRUtils.setComments(importInfo, node, sourceFile, arkFile.getScene().getOptions());
|
|
56
56
|
importInfos.push(importInfo);
|
|
57
|
+
return importInfos;
|
|
57
58
|
}
|
|
58
59
|
//just like: import fs from 'fs'
|
|
59
|
-
if (node.importClause
|
|
60
|
+
if (node.importClause.name && ohos_typescript_1.default.isIdentifier(node.importClause.name)) {
|
|
60
61
|
let importClauseName = node.importClause.name.text;
|
|
61
62
|
const pos = Position_1.LineColPosition.buildFromNode(node.importClause.name, sourceFile);
|
|
62
63
|
let importType = 'Identifier';
|
|
@@ -66,34 +67,36 @@ function buildImportDeclarationNode(node, sourceFile, arkFile) {
|
|
|
66
67
|
IRUtils_1.IRUtils.setComments(importInfo, node, sourceFile, arkFile.getScene().getOptions());
|
|
67
68
|
importInfos.push(importInfo);
|
|
68
69
|
}
|
|
70
|
+
if (node.importClause.namedBindings === undefined) {
|
|
71
|
+
return importInfos;
|
|
72
|
+
}
|
|
69
73
|
// just like: import {xxx} from './yyy'
|
|
70
|
-
if (
|
|
71
|
-
|
|
72
|
-
if (
|
|
73
|
-
|
|
74
|
-
if (element.name && ohos_typescript_1.default.isIdentifier(element.name)) {
|
|
75
|
-
let importClauseName = element.name.text;
|
|
76
|
-
const pos = Position_1.LineColPosition.buildFromNode(element, sourceFile);
|
|
77
|
-
if (element.propertyName && ohos_typescript_1.default.isIdentifier(element.propertyName)) {
|
|
78
|
-
let importInfo = new ArkImport_1.ImportInfo();
|
|
79
|
-
importInfo.build(importClauseName, importType, importFrom, pos, modifiers, element.propertyName.text);
|
|
80
|
-
importInfo.setTsSourceCode(tsSourceCode);
|
|
81
|
-
IRUtils_1.IRUtils.setComments(importInfo, node, sourceFile, arkFile.getScene().getOptions());
|
|
82
|
-
importInfos.push(importInfo);
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
let importInfo = new ArkImport_1.ImportInfo();
|
|
86
|
-
importInfo.build(importClauseName, importType, importFrom, pos, modifiers);
|
|
87
|
-
importInfo.setTsSourceCode(tsSourceCode);
|
|
88
|
-
IRUtils_1.IRUtils.setComments(importInfo, node, sourceFile, arkFile.getScene().getOptions());
|
|
89
|
-
importInfos.push(importInfo);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
});
|
|
74
|
+
if (ohos_typescript_1.default.isNamedImports(node.importClause.namedBindings)) {
|
|
75
|
+
const elements = node.importClause.namedBindings.elements;
|
|
76
|
+
if (elements === undefined) {
|
|
77
|
+
return importInfos;
|
|
93
78
|
}
|
|
79
|
+
let importType = 'NamedImports';
|
|
80
|
+
elements.forEach(element => {
|
|
81
|
+
if (element.name === undefined || !ohos_typescript_1.default.isIdentifier(element.name)) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
let importClauseName = element.name.text;
|
|
85
|
+
const pos = Position_1.LineColPosition.buildFromNode(element, sourceFile);
|
|
86
|
+
let importInfo = new ArkImport_1.ImportInfo();
|
|
87
|
+
if (element.propertyName && ohos_typescript_1.default.isIdentifier(element.propertyName)) {
|
|
88
|
+
importInfo.build(importClauseName, importType, importFrom, pos, modifiers, element.propertyName.text);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
importInfo.build(importClauseName, importType, importFrom, pos, modifiers);
|
|
92
|
+
}
|
|
93
|
+
importInfo.setTsSourceCode(tsSourceCode);
|
|
94
|
+
IRUtils_1.IRUtils.setComments(importInfo, node, sourceFile, arkFile.getScene().getOptions());
|
|
95
|
+
importInfos.push(importInfo);
|
|
96
|
+
});
|
|
94
97
|
}
|
|
95
98
|
// just like: import * as ts from 'ohos-typescript'
|
|
96
|
-
if (
|
|
99
|
+
if (ohos_typescript_1.default.isNamespaceImport(node.importClause.namedBindings)) {
|
|
97
100
|
let importType = 'NamespaceImport';
|
|
98
101
|
if (node.importClause.namedBindings.name && ohos_typescript_1.default.isIdentifier(node.importClause.namedBindings.name)) {
|
|
99
102
|
let importClauseName = node.importClause.namedBindings.name.text;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArkMethodBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkMethodBuilder.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ArkMethodBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkMethodBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -391,8 +391,7 @@ function addInitInConstructor(constructor) {
|
|
|
391
391
|
if (cfg === undefined) {
|
|
392
392
|
return;
|
|
393
393
|
}
|
|
394
|
-
const
|
|
395
|
-
const firstBlockStmts = [...blocks][0].getStmts();
|
|
394
|
+
const firstBlockStmts = cfg.getStartingBlock().getStmts();
|
|
396
395
|
let index = 0;
|
|
397
396
|
for (let i = 0; i < firstBlockStmts.length; i++) {
|
|
398
397
|
const stmt = firstBlockStmts[i];
|