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.
Files changed (110) hide show
  1. package/config/arkanalyzer.json +1 -2
  2. package/lib/Scene.d.ts.map +1 -1
  3. package/lib/Scene.js +52 -38
  4. package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts +11 -5
  5. package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts.map +1 -1
  6. package/lib/callgraph/pointerAnalysis/PTAUtils.js +42 -24
  7. package/lib/callgraph/pointerAnalysis/Pag.d.ts +6 -11
  8. package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
  9. package/lib/callgraph/pointerAnalysis/Pag.js +26 -23
  10. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +11 -63
  11. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
  12. package/lib/callgraph/pointerAnalysis/PagBuilder.js +72 -499
  13. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
  14. package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +4 -2
  15. package/lib/callgraph/pointerAnalysis/plugins/ContainerPlugin.d.ts +24 -0
  16. package/lib/callgraph/pointerAnalysis/plugins/ContainerPlugin.d.ts.map +1 -0
  17. package/lib/callgraph/pointerAnalysis/plugins/ContainerPlugin.js +167 -0
  18. package/lib/callgraph/pointerAnalysis/plugins/FunctionPlugin.d.ts +26 -0
  19. package/lib/callgraph/pointerAnalysis/plugins/FunctionPlugin.d.ts.map +1 -0
  20. package/lib/callgraph/pointerAnalysis/plugins/FunctionPlugin.js +151 -0
  21. package/lib/callgraph/pointerAnalysis/plugins/IPagPlugin.d.ts +15 -0
  22. package/lib/callgraph/pointerAnalysis/plugins/IPagPlugin.d.ts.map +1 -0
  23. package/lib/callgraph/pointerAnalysis/plugins/IPagPlugin.js +16 -0
  24. package/lib/callgraph/pointerAnalysis/plugins/PluginManager.d.ts +25 -0
  25. package/lib/callgraph/pointerAnalysis/plugins/PluginManager.d.ts.map +1 -0
  26. package/lib/callgraph/pointerAnalysis/plugins/PluginManager.js +66 -0
  27. package/lib/callgraph/pointerAnalysis/plugins/SdkPlugin.d.ts +37 -0
  28. package/lib/callgraph/pointerAnalysis/plugins/SdkPlugin.d.ts.map +1 -0
  29. package/lib/callgraph/pointerAnalysis/plugins/SdkPlugin.js +160 -0
  30. package/lib/callgraph/pointerAnalysis/plugins/StoragePlugin.d.ts +68 -0
  31. package/lib/callgraph/pointerAnalysis/plugins/StoragePlugin.d.ts.map +1 -0
  32. package/lib/callgraph/pointerAnalysis/plugins/StoragePlugin.js +288 -0
  33. package/lib/core/base/Expr.d.ts +1 -0
  34. package/lib/core/base/Expr.d.ts.map +1 -1
  35. package/lib/core/base/Expr.js +9 -0
  36. package/lib/core/common/DummyMainCreater.js +1 -1
  37. package/lib/core/common/IRInference.d.ts +1 -1
  38. package/lib/core/common/IRInference.d.ts.map +1 -1
  39. package/lib/core/common/IRInference.js +7 -3
  40. package/lib/core/common/ModelUtils.js +1 -1
  41. package/lib/core/common/SdkUtils.d.ts +3 -2
  42. package/lib/core/common/SdkUtils.d.ts.map +1 -1
  43. package/lib/core/common/SdkUtils.js +30 -30
  44. package/lib/core/common/TypeInference.d.ts.map +1 -1
  45. package/lib/core/common/TypeInference.js +7 -5
  46. package/lib/core/dataflow/DataflowSolver.js +3 -3
  47. package/lib/core/dataflow/UndefinedVariable.js +2 -2
  48. package/lib/core/graph/BasicBlock.d.ts.map +1 -1
  49. package/lib/core/graph/BasicBlock.js +9 -4
  50. package/lib/core/graph/Cfg.d.ts.map +1 -1
  51. package/lib/core/graph/Cfg.js +4 -1
  52. package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
  53. package/lib/core/graph/builder/CfgBuilder.js +4 -4
  54. package/lib/core/graph/builder/ConditionBuilder.d.ts +2 -1
  55. package/lib/core/graph/builder/ConditionBuilder.d.ts.map +1 -1
  56. package/lib/core/graph/builder/ConditionBuilder.js +8 -4
  57. package/lib/core/graph/builder/TrapBuilder.d.ts +19 -1
  58. package/lib/core/graph/builder/TrapBuilder.d.ts.map +1 -1
  59. package/lib/core/graph/builder/TrapBuilder.js +195 -68
  60. package/lib/core/model/ArkClass.d.ts.map +1 -1
  61. package/lib/core/model/ArkClass.js +2 -1
  62. package/lib/core/model/ArkMethod.d.ts.map +1 -1
  63. package/lib/core/model/ArkMethod.js +3 -4
  64. package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
  65. package/lib/core/model/builder/ArkClassBuilder.js +24 -20
  66. package/lib/core/model/builder/ArkImportBuilder.js +28 -25
  67. package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
  68. package/lib/core/model/builder/ArkMethodBuilder.js +1 -2
  69. package/lib/core/model/builder/BodyBuilder.js +1 -1
  70. package/lib/pass/Context.d.ts +47 -0
  71. package/lib/pass/Context.d.ts.map +1 -0
  72. package/lib/pass/Context.js +72 -0
  73. package/lib/pass/Dispatcher.d.ts +102 -0
  74. package/lib/pass/Dispatcher.d.ts.map +1 -0
  75. package/lib/pass/Dispatcher.js +202 -0
  76. package/lib/pass/Pass.d.ts +83 -0
  77. package/lib/pass/Pass.d.ts.map +1 -0
  78. package/lib/pass/Pass.js +95 -0
  79. package/lib/pass/ScenePassMgr.d.ts +73 -0
  80. package/lib/pass/ScenePassMgr.d.ts.map +1 -0
  81. package/lib/pass/ScenePassMgr.js +156 -0
  82. package/lib/pass/validators/Exprs.d.ts +9 -0
  83. package/lib/pass/validators/Exprs.d.ts.map +1 -0
  84. package/lib/pass/validators/Exprs.js +40 -0
  85. package/lib/pass/validators/Models.d.ts +14 -0
  86. package/lib/pass/validators/Models.d.ts.map +1 -0
  87. package/lib/pass/validators/Models.js +42 -0
  88. package/lib/pass/validators/SceneValidator.d.ts +19 -0
  89. package/lib/pass/validators/SceneValidator.d.ts.map +1 -0
  90. package/lib/pass/validators/SceneValidator.js +77 -0
  91. package/lib/pass/validators/Stmts.d.ts +7 -0
  92. package/lib/pass/validators/Stmts.d.ts.map +1 -0
  93. package/lib/pass/validators/Stmts.js +36 -0
  94. package/lib/pass/validators/Validator.d.ts +207 -0
  95. package/lib/pass/validators/Validator.d.ts.map +1 -0
  96. package/lib/pass/validators/Validator.js +343 -0
  97. package/lib/pass/validators/Values.d.ts +7 -0
  98. package/lib/pass/validators/Values.d.ts.map +1 -0
  99. package/lib/pass/validators/Values.js +34 -0
  100. package/lib/save/JsonPrinter.d.ts.map +1 -1
  101. package/lib/save/JsonPrinter.js +26 -102
  102. package/lib/save/source/SourceStmt.d.ts +1 -0
  103. package/lib/save/source/SourceStmt.d.ts.map +1 -1
  104. package/lib/save/source/SourceStmt.js +5 -8
  105. package/lib/utils/FileUtils.d.ts.map +1 -1
  106. package/lib/utils/FileUtils.js +13 -6
  107. package/lib/utils/ValueAsserts.d.ts +9 -0
  108. package/lib/utils/ValueAsserts.d.ts.map +1 -0
  109. package/lib/utils/ValueAsserts.js +89 -0
  110. 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
- buildTraps(blockBuilderToCfgBlock, blockBuildersBeforeTry, arkIRTransformer, basicBlockSet) {
54
- var _a, _b, _c;
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
- if (blockBuilderBeforeTry.nexts.length === 0) {
58
- logger.error(`can't find try block.`);
59
- continue;
60
- }
61
- const blockBuilderContainTry = blockBuilderBeforeTry.nexts[0];
62
- const stmtsCnt = blockBuilderBeforeTry.stmts.length;
63
- const tryStmtBuilder = blockBuilderBeforeTry.stmts[stmtsCnt - 1];
64
- const finallyBlockBuilder = (_a = tryStmtBuilder.finallyStatement) === null || _a === void 0 ? void 0 : _a.block;
65
- if (!finallyBlockBuilder) {
66
- logger.error(`can't find finally block or dummy finally block.`);
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
- const { bfsBlocks: tryBfsBlocks, tailBlocks: tryTailBlocks } = this.getAllBlocksBFS(blockBuilderToCfgBlock, blockBuilderContainTry, finallyBlockBuilder);
70
- let catchBfsBlocks = [];
71
- let catchTailBlocks = [];
72
- const catchBlockBuilder = (_b = tryStmtBuilder.catchStatement) === null || _b === void 0 ? void 0 : _b.block;
73
- if (catchBlockBuilder) {
74
- ({ bfsBlocks: catchBfsBlocks, tailBlocks: catchTailBlocks } = this.getAllBlocksBFS(blockBuilderToCfgBlock, catchBlockBuilder));
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
- if (finallyStmts.length === 1 && finallyStmts[0].code === 'dummyFinally') {
83
- // no finally block
84
- const trapsIfNoFinally = this.buildTrapsIfNoFinally(tryBfsBlocks, tryTailBlocks, catchBfsBlocks, catchTailBlocks, finallyBlockBuilder, blockBuilderAfterFinally, basicBlockSet, blockBuilderToCfgBlock);
85
- if (trapsIfNoFinally) {
86
- traps.push(...trapsIfNoFinally);
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
- else {
90
- const trapsIfFinallyExist = this.buildTrapsIfFinallyExist(tryBfsBlocks, tryTailBlocks, catchBfsBlocks, catchTailBlocks, finallyBlockBuilder, blockBuilderAfterFinally, basicBlockSet, arkIRTransformer, blockBuilderToCfgBlock);
91
- traps.push(...trapsIfFinallyExist);
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
- return traps;
215
+ headBlockBuilderWithinTry.lasts.splice(0, 1, ...prevsOfBlockBuilderBeforeTry);
216
+ this.basicBlockSet.delete(this.blockBuilderToCfgBlock.get(blockBuilderBeforeTry));
217
+ this.blockBuilderToCfgBlock.delete(blockBuilderBeforeTry);
95
218
  }
96
- buildTrapsIfNoFinally(tryBfsBlocks, tryTailBlocks, catchBfsBlocks, catchTailBlocks, finallyBlockBuilder, blockBuilderAfterFinally, basicBlockSet, blockBuilderToCfgBlock) {
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 null;
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
- let blockAfterFinally = blockBuilderToCfgBlock.get(blockBuilderAfterFinally);
106
- if (!blockBuilderToCfgBlock.has(finallyBlockBuilder)) {
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 null;
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
- return null;
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, basicBlockSet, arkIRTransformer, blockBuilderToCfgBlock) {
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(blockBuilderToCfgBlock, startBlockBuilder, endBlockBuilder) {
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 visitedBlockBuilders = new Set();
170
- queue.push(startBlockBuilder);
301
+ const visitedBlocks = new Set();
302
+ queue.push(startBlock);
171
303
  while (queue.length !== 0) {
172
- const currBlockBuilder = queue.splice(0, 1)[0];
173
- if (visitedBlockBuilders.has(currBlockBuilder)) {
304
+ const currBlock = queue.splice(0, 1)[0];
305
+ if (visitedBlocks.has(currBlock)) {
174
306
  continue;
175
307
  }
176
- visitedBlockBuilders.add(currBlockBuilder);
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 childList = currBlockBuilder.nexts;
184
- if (childList.length !== 0) {
185
- for (const child of childList) {
186
- // A tail block's successor may be within the traversal range
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
- queue.push(child);
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, basicBlockSet, arkIRTransformer, blockBuilderToCfgBlock) {
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 blocks = (_a = this.getBody()) === null || _a === void 0 ? void 0 : _a.getCfg().getBlocks();
403
- if (blocks === undefined) {
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,EAA4B,MAAM,iBAAiB,CAAC;AAC3D,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"}
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 (ohos_typescript_1.default.isMethodDeclaration(member) ||
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
- else if (ohos_typescript_1.default.isPropertyDeclaration(member) || ohos_typescript_1.default.isPropertySignature(member)) {
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) || ohos_typescript_1.default.isClassExpression(clsNode) || ohos_typescript_1.default.isStructDeclaration(clsNode)) {
331
- if (arkField.isStatic()) {
332
- getInitStmts(staticIRTransformer, arkField, member.initializer);
333
- arkField.getInitializer().forEach(stmt => staticInitStmts.push(stmt));
334
- }
335
- else {
336
- if (!instanceIRTransformer) {
337
- console.log(clsNode.getText(sourceFile));
338
- }
339
- getInitStmts(instanceIRTransformer, arkField, member.initializer);
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
- else if (ohos_typescript_1.default.isEnumMember(member)) {
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 && node.importClause.name && ohos_typescript_1.default.isIdentifier(node.importClause.name)) {
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 (node.importClause && node.importClause.namedBindings && ohos_typescript_1.default.isNamedImports(node.importClause.namedBindings)) {
71
- let importType = 'NamedImports';
72
- if (node.importClause.namedBindings.elements) {
73
- node.importClause.namedBindings.elements.forEach(element => {
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 (node.importClause && node.importClause.namedBindings && ohos_typescript_1.default.isNamespaceImport(node.importClause.namedBindings)) {
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":"AAeA,OAAO,EAAa,IAAI,EAAe,MAAM,iBAAiB,CAAC;AAG/D,OAAO,EAAE,QAAQ,EAAiB,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAgBjC,OAAO,EAAkE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvG,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AASzC,MAAM,MAAM,cAAc,GACpB,EAAE,CAAC,mBAAmB,GACtB,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,sBAAsB,GACzB,EAAE,CAAC,aAAa,GAChB,EAAE,CAAC,mBAAmB,GACtB,EAAE,CAAC,kBAAkB,GACrB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,6BAA6B,GAChC,EAAE,CAAC,wBAAwB,GAC3B,EAAE,CAAC,gBAAgB,CAAC;AAE1B,wBAAgB,iCAAiC,CAAC,cAAc,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,GAAG,IAAI,CAYxJ;AAED,wBAAgB,0BAA0B,CACtC,UAAU,EAAE,cAAc,EAC1B,cAAc,EAAE,QAAQ,EACxB,GAAG,EAAE,SAAS,EACd,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,eAAe,CAAC,EAAE,SAAS,GAC5B,IAAI,CAkDN;AAwDD,qBAAa,6BAA6B;IACtC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,QAAQ,CAAkB;;IAI3B,OAAO,IAAI,MAAM;IAIjB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,eAAe,IAAI,MAAM;IAIzB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAI3C,UAAU,IAAI,OAAO;IAIrB,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;CAG9C;AAED,qBAAa,4BAA4B;IACrC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,QAAQ,CAAkB;;IAI3B,OAAO,IAAI,MAAM;IAIjB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,eAAe,IAAI,MAAM;IAIzB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAI3C,UAAU,IAAI,OAAO;IAIrB,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;CAG9C;AAED,qBAAa,eAAgB,YAAW,KAAK;IACzC,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,WAAW,CAAuC;IAC1D,OAAO,CAAC,aAAa,CAAsC;;IAIpD,OAAO,IAAI,MAAM;IAIjB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIzB,UAAU,IAAI,OAAO;IAIrB,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAIpC,iBAAiB,IAAI,OAAO;IAI5B,iBAAiB,CAAC,cAAc,EAAE,OAAO,GAAG,IAAI;IAIhD,aAAa,CAAC,OAAO,EAAE,6BAA6B,GAAG,IAAI;IAI3D,cAAc,IAAI,6BAA6B,EAAE;IAIjD,cAAc,CAAC,WAAW,EAAE,6BAA6B,EAAE,GAAG,IAAI;IAIlE,eAAe,CAAC,OAAO,EAAE,4BAA4B,GAAG,IAAI;IAI5D,gBAAgB,IAAI,4BAA4B,EAAE;IAIlD,gBAAgB,CAAC,aAAa,EAAE,4BAA4B,EAAE,GAAG,IAAI;IAIrE,OAAO,IAAI,KAAK,EAAE;CAG5B;AAsBD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CA0DnE;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,SAAS,EAAE,qBAAqB,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,GAAG,IAAI,CAuB5G;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,SAAS,GAAG,IAAI,CAgCjE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAepE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,CAsC3E"}
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 blocks = cfg.getBlocks();
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 = Array.from(body.getCfg().getBlocks())[0].getStmts();
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);