arkanalyzer 1.0.41 → 1.0.43
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 +52 -38
- package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts +11 -5
- package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PTAUtils.js +42 -24
- package/lib/callgraph/pointerAnalysis/Pag.d.ts +6 -11
- package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.js +26 -23
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +11 -63
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +72 -499
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +4 -2
- package/lib/callgraph/pointerAnalysis/plugins/ContainerPlugin.d.ts +24 -0
- package/lib/callgraph/pointerAnalysis/plugins/ContainerPlugin.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/plugins/ContainerPlugin.js +167 -0
- package/lib/callgraph/pointerAnalysis/plugins/FunctionPlugin.d.ts +26 -0
- package/lib/callgraph/pointerAnalysis/plugins/FunctionPlugin.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/plugins/FunctionPlugin.js +151 -0
- package/lib/callgraph/pointerAnalysis/plugins/IPagPlugin.d.ts +15 -0
- package/lib/callgraph/pointerAnalysis/plugins/IPagPlugin.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/plugins/IPagPlugin.js +16 -0
- package/lib/callgraph/pointerAnalysis/plugins/PluginManager.d.ts +25 -0
- package/lib/callgraph/pointerAnalysis/plugins/PluginManager.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/plugins/PluginManager.js +66 -0
- package/lib/callgraph/pointerAnalysis/plugins/SdkPlugin.d.ts +37 -0
- package/lib/callgraph/pointerAnalysis/plugins/SdkPlugin.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/plugins/SdkPlugin.js +160 -0
- package/lib/callgraph/pointerAnalysis/plugins/StoragePlugin.d.ts +68 -0
- package/lib/callgraph/pointerAnalysis/plugins/StoragePlugin.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/plugins/StoragePlugin.js +288 -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/DummyMainCreater.js +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 +3 -2
- package/lib/core/common/SdkUtils.d.ts.map +1 -1
- package/lib/core/common/SdkUtils.js +30 -30
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +7 -5
- 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 +4 -4
- 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 +8 -4
- 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/ArkClass.d.ts.map +1 -1
- package/lib/core/model/ArkClass.js +2 -1
- 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/core/model/builder/BodyBuilder.js +1 -1
- 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/validators/Exprs.d.ts +9 -0
- package/lib/pass/validators/Exprs.d.ts.map +1 -0
- package/lib/pass/validators/Exprs.js +40 -0
- package/lib/pass/validators/Models.d.ts +14 -0
- package/lib/pass/validators/Models.d.ts.map +1 -0
- package/lib/pass/validators/Models.js +42 -0
- package/lib/pass/validators/SceneValidator.d.ts +19 -0
- package/lib/pass/validators/SceneValidator.d.ts.map +1 -0
- package/lib/pass/validators/SceneValidator.js +77 -0
- package/lib/pass/validators/Stmts.d.ts +7 -0
- package/lib/pass/validators/Stmts.d.ts.map +1 -0
- package/lib/pass/validators/Stmts.js +36 -0
- package/lib/pass/validators/Validator.d.ts +207 -0
- package/lib/pass/validators/Validator.d.ts.map +1 -0
- package/lib/pass/validators/Validator.js +343 -0
- package/lib/pass/validators/Values.d.ts +7 -0
- package/lib/pass/validators/Values.d.ts.map +1 -0
- package/lib/pass/validators/Values.js +34 -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 +5 -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
|
@@ -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":"ArkClass.d.ts","sourceRoot":"","sources":["../../../src/core/model/ArkClass.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ArkClass.d.ts","sourceRoot":"","sources":["../../../src/core/model/ArkClass.ts"],"names":[],"mappings":"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"}
|
|
@@ -166,12 +166,13 @@ class ArkClass extends ArkBaseModel_1.ArkBaseModel {
|
|
|
166
166
|
return null;
|
|
167
167
|
}
|
|
168
168
|
getHeritageClass(heritageClassName) {
|
|
169
|
+
var _a;
|
|
169
170
|
if (!heritageClassName) {
|
|
170
171
|
return null;
|
|
171
172
|
}
|
|
172
173
|
let superClass = this.heritageClasses.get(heritageClassName);
|
|
173
174
|
if (superClass === undefined) {
|
|
174
|
-
let type = TypeInference_1.TypeInference.inferUnclearRefName(heritageClassName, this);
|
|
175
|
+
let type = (_a = TypeInference_1.TypeInference.inferUnclearRefName(heritageClassName, this)) !== null && _a !== void 0 ? _a : TypeInference_1.TypeInference.inferUnclearRefName(heritageClassName, this.getDeclaringArkFile().getDefaultClass());
|
|
175
176
|
if (type) {
|
|
176
177
|
type = TypeInference_1.TypeInference.replaceAliasType(type);
|
|
177
178
|
}
|
|
@@ -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"}
|
|
@@ -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];
|
|
@@ -512,7 +512,7 @@ class BodyBuilder {
|
|
|
512
512
|
if (body === undefined) {
|
|
513
513
|
return;
|
|
514
514
|
}
|
|
515
|
-
let stmts =
|
|
515
|
+
let stmts = body.getCfg().getStartingBlock().getStmts();
|
|
516
516
|
let index = 0;
|
|
517
517
|
const parameterRef = new Ref_1.ArkParameterRef(index, lexicalEnv);
|
|
518
518
|
const closuresLocal = new Local_1.Local(closuresParam.getName(), lexicalEnv);
|