arkanalyzer 1.0.76 → 1.0.78

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts +12 -9
  2. package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts.map +1 -1
  3. package/lib/callgraph/pointerAnalysis/PTAUtils.js +19 -9
  4. package/lib/callgraph/pointerAnalysis/Pag.d.ts +10 -0
  5. package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
  6. package/lib/callgraph/pointerAnalysis/Pag.js +124 -4
  7. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +24 -7
  8. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
  9. package/lib/callgraph/pointerAnalysis/PagBuilder.js +163 -42
  10. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
  11. package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +3 -1
  12. package/lib/callgraph/pointerAnalysis/context/Context.d.ts +1 -0
  13. package/lib/callgraph/pointerAnalysis/context/Context.d.ts.map +1 -1
  14. package/lib/callgraph/pointerAnalysis/context/Context.js +5 -1
  15. package/lib/callgraph/pointerAnalysis/context/ContextSelector.d.ts +1 -1
  16. package/lib/callgraph/pointerAnalysis/context/ContextSelector.d.ts.map +1 -1
  17. package/lib/callgraph/pointerAnalysis/context/ContextSelector.js +1 -2
  18. package/lib/callgraph/pointerAnalysis/plugins/ContainerPlugin.d.ts.map +1 -1
  19. package/lib/callgraph/pointerAnalysis/plugins/ContainerPlugin.js +11 -9
  20. package/lib/core/common/ArkIRTransformer.js +1 -1
  21. package/lib/core/common/Builtin.d.ts +2 -0
  22. package/lib/core/common/Builtin.d.ts.map +1 -1
  23. package/lib/core/common/Builtin.js +2 -0
  24. package/lib/core/common/IRInference.d.ts +4 -0
  25. package/lib/core/common/IRInference.d.ts.map +1 -1
  26. package/lib/core/common/IRInference.js +100 -0
  27. package/lib/core/common/ModelUtils.d.ts +3 -2
  28. package/lib/core/common/ModelUtils.d.ts.map +1 -1
  29. package/lib/core/common/ModelUtils.js +28 -13
  30. package/lib/core/graph/builder/CfgBuilder.d.ts +24 -0
  31. package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
  32. package/lib/core/graph/builder/CfgBuilder.js +179 -0
  33. package/lib/core/graph/builder/ConditionBuilder.d.ts +4 -4
  34. package/lib/core/graph/builder/ConditionBuilder.d.ts.map +1 -1
  35. package/lib/core/graph/builder/ConditionBuilder.js +27 -61
  36. package/lib/core/graph/builder/SwitchBuilder.d.ts.map +1 -1
  37. package/lib/core/graph/builder/SwitchBuilder.js +5 -15
  38. package/lib/core/graph/builder/TrapBuilder.d.ts.map +1 -1
  39. package/lib/core/graph/builder/TrapBuilder.js +18 -54
  40. package/lib/core/inference/ValueInference.d.ts +1 -3
  41. package/lib/core/inference/ValueInference.d.ts.map +1 -1
  42. package/lib/core/inference/ValueInference.js +23 -76
  43. package/lib/core/model/ArkMethod.d.ts +2 -1
  44. package/lib/core/model/ArkMethod.d.ts.map +1 -1
  45. package/lib/core/model/ArkMethod.js +5 -1
  46. package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
  47. package/lib/core/model/builder/ArkMethodBuilder.js +5 -1
  48. package/package.json +2 -2
@@ -71,11 +71,12 @@ export declare function getArkFile(im: FromInfo): ArkFile | null | undefined;
71
71
  /**
72
72
  * find from info's export
73
73
  * @param fromInfo importInfo or exportInfo
74
+ * @param visited
74
75
  */
75
- export declare function findExportInfo(fromInfo: FromInfo): ExportInfo | null;
76
+ export declare function findExportInfo(fromInfo: FromInfo, visited?: Set<ArkFile>): ExportInfo | null;
76
77
  export declare function findArkExport(exportInfo: ExportInfo | undefined): ArkExport | null;
77
78
  export declare function findArkExportInFile(name: string, declaringArkFile: ArkFile): ArkExport | null;
78
- export declare function findExportInfoInfile(fromInfo: FromInfo, file: ArkFile): ExportInfo | undefined;
79
+ export declare function findExportInfoInfile(fromInfo: FromInfo, file: ArkFile, visited?: Set<ArkFile>): ExportInfo | undefined;
79
80
  export declare function initModulePathMap(ohPkgContentMap: Map<string, {
80
81
  [k: string]: unknown;
81
82
  }>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"ModelUtils.d.ts","sourceRoot":"","sources":["../../../src/core/common/ModelUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ModelUtils.d.ts","sourceRoot":"","sources":["../../../src/core/common/ModelUtils.ts"],"names":[],"mappings":"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"}
@@ -700,27 +700,30 @@ exports.getArkFile = getArkFile;
700
700
  /**
701
701
  * find from info's export
702
702
  * @param fromInfo importInfo or exportInfo
703
+ * @param visited
703
704
  */
704
- function findExportInfo(fromInfo) {
705
- var _a, _b;
705
+ function findExportInfo(fromInfo, visited = new Set([fromInfo.getDeclaringArkFile()])) {
706
+ var _a, _b, _c, _d;
706
707
  let file = getArkFile(fromInfo);
707
708
  if (!file) {
708
709
  logger.warn(`${fromInfo.getOriginName()} ${fromInfo.getFrom()} file not found: ${(_b = (_a = fromInfo.getDeclaringArkFile()) === null || _a === void 0 ? void 0 : _a.getFileSignature()) === null || _b === void 0 ? void 0 : _b.toString()}`);
709
710
  return null;
710
711
  }
711
- // expand export *
712
- if (fromInfo.getOriginName().startsWith(TSConst_1.TEMP_EXPORT_ALL_PREFIX) && fromInfo instanceof ArkExport_1.ExportInfo) {
713
- const declaringArkFile = fromInfo.getDeclaringArkFile();
714
- if (declaringArkFile !== file) {
715
- file.getExportInfos().filter(f => f.getExportClauseName().startsWith(TSConst_1.TEMP_EXPORT_ALL_PREFIX)).forEach(e => findExportInfo(e));
716
- file.getExportInfos().filter(f => !f.isDefault()).forEach(exportInfo => declaringArkFile.addExportInfo(exportInfo));
717
- }
718
- declaringArkFile.removeExportInfo(fromInfo);
712
+ if (fromInfo.getOriginName() === TSConst_1.ALL) {
713
+ const exportInfo = (0, ArkExportBuilder_1.buildDefaultExportInfo)(fromInfo, file);
714
+ file.addExportInfo(exportInfo, TSConst_1.ALL);
715
+ return exportInfo;
716
+ }
717
+ //check cycle
718
+ if (visited.has(file)) {
719
+ logger.warn(`It existed a cycle in: ${(_d = (_c = fromInfo.getDeclaringArkFile()) === null || _c === void 0 ? void 0 : _c.getFileSignature()) === null || _d === void 0 ? void 0 : _d.toString()}`);
719
720
  return null;
720
721
  }
721
- let exportInfo = findExportInfoInfile(fromInfo, file) || null;
722
+ else {
723
+ visited.add(file);
724
+ }
725
+ let exportInfo = findExportInfoInfile(fromInfo, file, visited) || null;
722
726
  if (exportInfo === null) {
723
- logger.warn('export info not found, ' + fromInfo.getFrom() + ' in file: ' + fromInfo.getDeclaringArkFile().getFileSignature().toString());
724
727
  return null;
725
728
  }
726
729
  const arkExport = findArkExport(exportInfo);
@@ -820,7 +823,19 @@ function getArkFileFormMap(projectName, filePath, scene) {
820
823
  }
821
824
  return null;
822
825
  }
823
- function findExportInfoInfile(fromInfo, file) {
826
+ function findExportInfoInfile(fromInfo, file, visited = new Set([fromInfo.getDeclaringArkFile()])) {
827
+ // expand export *
828
+ file.getExportInfos().filter(f => f.getExportClauseName().startsWith(TSConst_1.TEMP_EXPORT_ALL_PREFIX))
829
+ .forEach(e => {
830
+ findExportInfo(e, visited);
831
+ file.removeExportInfo(e);
832
+ });
833
+ if (fromInfo.getOriginName().startsWith(TSConst_1.TEMP_EXPORT_ALL_PREFIX) && fromInfo instanceof ArkExport_1.ExportInfo) {
834
+ const declaringArkFile = fromInfo.getDeclaringArkFile();
835
+ file.getExportInfos().filter(f => !f.isDefault()).forEach(exportInfo => declaringArkFile.addExportInfo(exportInfo));
836
+ declaringArkFile.removeExportInfo(fromInfo);
837
+ return undefined;
838
+ }
824
839
  const exportName = fromInfo.isDefault() ? TSConst_1.DEFAULT : fromInfo.getOriginName();
825
840
  let exportInfo = file.getExportInfoBy(exportName);
826
841
  if (exportInfo) {
@@ -1,6 +1,7 @@
1
1
  import * as ts from 'ohos-typescript';
2
2
  import { Local } from '../../base/Local';
3
3
  import { ArkAliasTypeDefineStmt } from '../../base/Stmt';
4
+ import { BasicBlock } from '../BasicBlock';
4
5
  import { Cfg } from '../Cfg';
5
6
  import { ArkClass } from '../../model/ArkClass';
6
7
  import { ArkMethod } from '../../model/ArkMethod';
@@ -80,6 +81,8 @@ export declare class BlockBuilder {
80
81
  lasts: BlockBuilder[];
81
82
  walked: boolean;
82
83
  constructor(id: number, stmts: StatementBuilder[]);
84
+ removePredecessorBlock(block: BlockBuilder): boolean;
85
+ removeSuccessorBlock(block: BlockBuilder): boolean;
83
86
  }
84
87
  declare class Catch {
85
88
  errorName: string;
@@ -176,6 +179,27 @@ export declare class CfgBuilder {
176
179
  private createCfg;
177
180
  private topologicalSortBlock;
178
181
  private linkBasicBlocks;
182
+ static replaceBlockBuilderAndBasicBlock(blockBuilderToCfgBlock: Map<BlockBuilder, BasicBlock>, oldBlockBuilder: BlockBuilder, newBlockBuilder: BlockBuilder): void;
183
+ static replaceBlockBuilder(oldBlockBuilder: BlockBuilder, newBlockBuilder: BlockBuilder): void;
184
+ static replaceBlockBuilderInPredecessors(oldBlockBuilder: BlockBuilder, newBlockBuilder: BlockBuilder): void;
185
+ static replaceBlockBuilderInSuccessors(oldBlockBuilder: BlockBuilder, newBlockBuilder: BlockBuilder): void;
186
+ static unlinkPredecessorsOfBlockBuilder(blockBuilder: BlockBuilder): void;
187
+ static unlinkSuccessorsOfBlockBuilder(blockBuilder: BlockBuilder): void;
188
+ static unlinkBlockBuilder(predecessor: BlockBuilder, successor: BlockBuilder): void;
189
+ static unlinkPredecessorsAndSuccessorsOfBlockBuilder(blockBuilder: BlockBuilder): void;
190
+ static pruneBlockBuilder(blockBuilder: BlockBuilder): boolean;
191
+ static replaceBasicBlock(oldBasicBlock: BasicBlock, newBasicBlock: BasicBlock): void;
192
+ static replaceBasicBlockInPredecessors(oldBasicBlock: BasicBlock, newBasicBlock: BasicBlock): void;
193
+ static replaceBasicBlockInSuccessors(oldBasicBlock: BasicBlock, newBasicBlocks: BasicBlock[]): void;
194
+ static linkPredecessorsOfBasicBlock(basicBlock: BasicBlock, predecessors: BasicBlock[]): void;
195
+ static unlinkPredecessorsOfBasicBlock(basicBlock: BasicBlock): void;
196
+ static unlinkSuccessorsOfBasicBlock(basicBlock: BasicBlock): void;
197
+ static linkSuccessorOfIfBasicBlock(ifBasicBlock: BasicBlock, trueBranchSuccessor: BasicBlock, falseBranchSuccessor: BasicBlock): void;
198
+ static unlinkPredecessorsAndSuccessorsOfBasicBlock(basicBlock: BasicBlock): void;
199
+ static pruneBasicBlock(basicBlock: BasicBlock): boolean;
200
+ static linkBasicBlock(predecessor: BasicBlock, successor: BasicBlock): void;
201
+ static unlinkBasicBlock(predecessor: BasicBlock, successor: BasicBlock): void;
202
+ static linkExceptionalBasicBlock(predecessor: BasicBlock, exceptionalSuccessor: BasicBlock): void;
179
203
  }
180
204
  export {};
181
205
  //# sourceMappingURL=CfgBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CfgBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/CfgBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CfgBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/CfgBuilder.ts"],"names":[],"mappings":"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"}
@@ -53,6 +53,8 @@ const ConditionBuilder_1 = require("./ConditionBuilder");
53
53
  const TrapBuilder_1 = require("./TrapBuilder");
54
54
  const TSConst_1 = require("../../common/TSConst");
55
55
  const ArkBaseModel_1 = require("../../model/ArkBaseModel");
56
+ const logger_1 = __importStar(require("../../../utils/logger"));
57
+ const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'CfgBuilder');
56
58
  class StatementBuilder {
57
59
  constructor(type, code, astNode, scopeID) {
58
60
  this.addressCode3 = [];
@@ -139,6 +141,22 @@ class BlockBuilder {
139
141
  this.id = id;
140
142
  this.stmts = stmts;
141
143
  }
144
+ removePredecessorBlock(block) {
145
+ let index = this.lasts.indexOf(block);
146
+ if (index < 0) {
147
+ return false;
148
+ }
149
+ this.lasts.splice(index, 1);
150
+ return true;
151
+ }
152
+ removeSuccessorBlock(block) {
153
+ let index = this.nexts.indexOf(block);
154
+ if (index < 0) {
155
+ return false;
156
+ }
157
+ this.nexts.splice(index, 1);
158
+ return true;
159
+ }
142
160
  }
143
161
  exports.BlockBuilder = BlockBuilder;
144
162
  class Catch {
@@ -1242,5 +1260,166 @@ class CfgBuilder {
1242
1260
  }
1243
1261
  }
1244
1262
  }
1263
+ static replaceBlockBuilderAndBasicBlock(blockBuilderToCfgBlock, oldBlockBuilder, newBlockBuilder) {
1264
+ CfgBuilder.replaceBlockBuilder(oldBlockBuilder, newBlockBuilder);
1265
+ const oldBasicBlock = blockBuilderToCfgBlock.get(oldBlockBuilder);
1266
+ const newBasicBlock = blockBuilderToCfgBlock.get(newBlockBuilder);
1267
+ if (!oldBasicBlock || !newBasicBlock) {
1268
+ return;
1269
+ }
1270
+ CfgBuilder.replaceBasicBlock(oldBasicBlock, newBasicBlock);
1271
+ }
1272
+ static replaceBlockBuilder(oldBlockBuilder, newBlockBuilder) {
1273
+ CfgBuilder.replaceBlockBuilderInPredecessors(oldBlockBuilder, newBlockBuilder);
1274
+ CfgBuilder.replaceBlockBuilderInSuccessors(oldBlockBuilder, newBlockBuilder);
1275
+ }
1276
+ static replaceBlockBuilderInPredecessors(oldBlockBuilder, newBlockBuilder) {
1277
+ const predecessors = [...oldBlockBuilder.lasts];
1278
+ for (let predecessorIndex = 0; predecessorIndex < predecessors.length; predecessorIndex++) {
1279
+ const predecessor = predecessors[predecessorIndex];
1280
+ const successorIndex = predecessor.nexts.indexOf(oldBlockBuilder);
1281
+ if (successorIndex !== -1) {
1282
+ predecessor.nexts[successorIndex] = newBlockBuilder;
1283
+ oldBlockBuilder.lasts.splice(predecessorIndex, 1);
1284
+ newBlockBuilder.lasts.push(predecessor);
1285
+ }
1286
+ else {
1287
+ logger.trace(`replaceBlockBuilderInPredecessors: ${oldBlockBuilder.id} not found in ${predecessor.id}'s successors`);
1288
+ }
1289
+ }
1290
+ }
1291
+ static replaceBlockBuilderInSuccessors(oldBlockBuilder, newBlockBuilder) {
1292
+ const successors = [...oldBlockBuilder.nexts];
1293
+ for (let successorIndex = 0; successorIndex < successors.length; successorIndex++) {
1294
+ const successor = successors[successorIndex];
1295
+ const predecessorIndex = successor.lasts.indexOf(oldBlockBuilder);
1296
+ if (predecessorIndex !== -1) {
1297
+ successor.lasts[predecessorIndex] = newBlockBuilder;
1298
+ oldBlockBuilder.nexts.splice(successorIndex, 1);
1299
+ newBlockBuilder.nexts.push(successor);
1300
+ }
1301
+ else {
1302
+ logger.trace(`replaceBlockBuilderInSuccessors: ${oldBlockBuilder.id} not found in ${successor.id}'s predecessors`);
1303
+ }
1304
+ }
1305
+ }
1306
+ static unlinkPredecessorsOfBlockBuilder(blockBuilder) {
1307
+ const predecessors = [...blockBuilder.lasts];
1308
+ predecessors.forEach(predecessor => {
1309
+ CfgBuilder.unlinkBlockBuilder(predecessor, blockBuilder);
1310
+ });
1311
+ }
1312
+ static unlinkSuccessorsOfBlockBuilder(blockBuilder) {
1313
+ const successors = [...blockBuilder.nexts];
1314
+ successors.forEach(successor => {
1315
+ CfgBuilder.unlinkBlockBuilder(blockBuilder, successor);
1316
+ });
1317
+ }
1318
+ static unlinkBlockBuilder(predecessor, successor) {
1319
+ predecessor.removeSuccessorBlock(successor);
1320
+ successor.removePredecessorBlock(predecessor);
1321
+ }
1322
+ static unlinkPredecessorsAndSuccessorsOfBlockBuilder(blockBuilder) {
1323
+ CfgBuilder.unlinkPredecessorsOfBlockBuilder(blockBuilder);
1324
+ CfgBuilder.unlinkSuccessorsOfBlockBuilder(blockBuilder);
1325
+ }
1326
+ static pruneBlockBuilder(blockBuilder) {
1327
+ const successors = [...blockBuilder.nexts];
1328
+ if (successors.length > 1) {
1329
+ // can not handle multi successors
1330
+ return false;
1331
+ }
1332
+ else if (successors.length === 1) {
1333
+ CfgBuilder.replaceBlockBuilderInPredecessors(blockBuilder, successors[0]);
1334
+ }
1335
+ CfgBuilder.unlinkPredecessorsAndSuccessorsOfBlockBuilder(blockBuilder);
1336
+ return true;
1337
+ }
1338
+ static replaceBasicBlock(oldBasicBlock, newBasicBlock) {
1339
+ CfgBuilder.replaceBasicBlockInPredecessors(oldBasicBlock, newBasicBlock);
1340
+ CfgBuilder.replaceBasicBlockInSuccessors(oldBasicBlock, [newBasicBlock]);
1341
+ }
1342
+ // only 1 to 1
1343
+ static replaceBasicBlockInPredecessors(oldBasicBlock, newBasicBlock) {
1344
+ const predecessors = [...oldBasicBlock.getPredecessors()];
1345
+ for (const predecessor of predecessors) {
1346
+ const successorIndex = predecessor.getSuccessors().indexOf(oldBasicBlock);
1347
+ if (successorIndex !== -1) {
1348
+ // can not change positon in successors of predecessor
1349
+ predecessor.setSuccessorBlock(successorIndex, newBasicBlock);
1350
+ oldBasicBlock.removePredecessorBlock(predecessor);
1351
+ newBasicBlock.addPredecessorBlock(predecessor);
1352
+ }
1353
+ else {
1354
+ logger.trace(`replaceBasicBlockInPredecessors: ${oldBasicBlock.getId()} not found in ${predecessor.getId()}'s successors`);
1355
+ }
1356
+ }
1357
+ }
1358
+ static replaceBasicBlockInSuccessors(oldBasicBlock, newBasicBlocks) {
1359
+ const successors = [...oldBasicBlock.getSuccessors()];
1360
+ for (const successor of successors) {
1361
+ const predecessorIndex = successor.getPredecessors().indexOf(oldBasicBlock);
1362
+ if (predecessorIndex !== -1) {
1363
+ successor.removePredecessorBlock(oldBasicBlock);
1364
+ oldBasicBlock.removeSuccessorBlock(successor);
1365
+ newBasicBlocks.forEach(newBasicBlock => {
1366
+ newBasicBlock.addSuccessorBlock(successor);
1367
+ successor.addPredecessorBlock(newBasicBlock);
1368
+ });
1369
+ }
1370
+ else {
1371
+ logger.trace(`replaceBasicBlockInSuccessors: ${oldBasicBlock.getId()} not found in ${successor.getId()}'s predecessors`);
1372
+ }
1373
+ }
1374
+ }
1375
+ static linkPredecessorsOfBasicBlock(basicBlock, predecessors) {
1376
+ predecessors.forEach(predecessor => {
1377
+ CfgBuilder.linkBasicBlock(predecessor, basicBlock);
1378
+ });
1379
+ }
1380
+ static unlinkPredecessorsOfBasicBlock(basicBlock) {
1381
+ const predecessors = [...basicBlock.getPredecessors()];
1382
+ predecessors.forEach(predecessor => {
1383
+ CfgBuilder.unlinkBasicBlock(predecessor, basicBlock);
1384
+ });
1385
+ }
1386
+ static unlinkSuccessorsOfBasicBlock(basicBlock) {
1387
+ const successors = [...basicBlock.getSuccessors()];
1388
+ successors.forEach(successor => {
1389
+ CfgBuilder.unlinkBasicBlock(basicBlock, successor);
1390
+ });
1391
+ }
1392
+ static linkSuccessorOfIfBasicBlock(ifBasicBlock, trueBranchSuccessor, falseBranchSuccessor) {
1393
+ CfgBuilder.linkBasicBlock(ifBasicBlock, trueBranchSuccessor);
1394
+ CfgBuilder.linkBasicBlock(ifBasicBlock, falseBranchSuccessor);
1395
+ }
1396
+ static unlinkPredecessorsAndSuccessorsOfBasicBlock(basicBlock) {
1397
+ CfgBuilder.unlinkPredecessorsOfBasicBlock(basicBlock);
1398
+ CfgBuilder.unlinkSuccessorsOfBasicBlock(basicBlock);
1399
+ }
1400
+ static pruneBasicBlock(basicBlock) {
1401
+ const successors = [...basicBlock.getSuccessors()];
1402
+ if (successors.length > 1) {
1403
+ // can not handle multi successors
1404
+ return false;
1405
+ }
1406
+ else if (successors.length === 1) {
1407
+ CfgBuilder.replaceBasicBlockInPredecessors(basicBlock, successors[0]);
1408
+ }
1409
+ CfgBuilder.unlinkPredecessorsAndSuccessorsOfBasicBlock(basicBlock);
1410
+ return true;
1411
+ }
1412
+ static linkBasicBlock(predecessor, successor) {
1413
+ predecessor.addSuccessorBlock(successor);
1414
+ successor.addPredecessorBlock(predecessor);
1415
+ }
1416
+ static unlinkBasicBlock(predecessor, successor) {
1417
+ predecessor.removeSuccessorBlock(successor);
1418
+ successor.removePredecessorBlock(predecessor);
1419
+ }
1420
+ static linkExceptionalBasicBlock(predecessor, exceptionalSuccessor) {
1421
+ predecessor.addExceptionalSuccessorBlock(exceptionalSuccessor);
1422
+ exceptionalSuccessor.addExceptionalPredecessorBlock(predecessor);
1423
+ }
1245
1424
  }
1246
1425
  exports.CfgBuilder = CfgBuilder;
@@ -5,10 +5,10 @@ import { BlockBuilder } from './CfgBuilder';
5
5
  */
6
6
  export declare class ConditionBuilder {
7
7
  rebuildBlocksContainConditionalOperator(blockBuilderToCfgBlock: Map<BlockBuilder, BasicBlock>, basicBlockSet: Set<BasicBlock>, isArkUIBuilder: boolean): void;
8
- private relinkPrevAndSuccOfBlockContainConditionalOperator;
9
- private generateBlocksContainConditionalOperatorGroup;
10
- private generateBlocksContainSingleConditionalOperator;
11
- private generateBlockWithoutConditionalOperator;
8
+ private updateBasicBlockInContainConditionalOperator;
9
+ private generateBlocksInConditionalOperatorGroup;
10
+ private generateBlocksInSingleConditionalOperator;
11
+ private generateBlockOutConditionalOperator;
12
12
  private deleteDummyConditionalOperatorStmt;
13
13
  private findFirstConditionalOperator;
14
14
  private removeUnnecessaryBlocksInConditionalOperator;
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/ConditionBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAK3C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C;;GAEG;AACH,qBAAa,gBAAgB;IAClB,uCAAuC,CAC1C,sBAAsB,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,EACrD,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,EAC9B,cAAc,EAAE,OAAO,GACxB,IAAI;IAgDP,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;IAoCpD,OAAO,CAAC,sBAAsB;CAuDjC"}
1
+ {"version":3,"file":"ConditionBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/ConditionBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAK3C,OAAO,EAAE,YAAY,EAAc,MAAM,cAAc,CAAC;AAGxD;;GAEG;AACH,qBAAa,gBAAgB;IAClB,uCAAuC,CAC1C,sBAAsB,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,EACrD,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,EAC9B,cAAc,EAAE,OAAO,GACxB,IAAI;IA6CP,OAAO,CAAC,4CAA4C;IASpD,OAAO,CAAC,wCAAwC;IAiChD,OAAO,CAAC,yCAAyC;IA4CjD,OAAO,CAAC,mCAAmC;IAc3C,OAAO,CAAC,kCAAkC;IAW1C,OAAO,CAAC,4BAA4B;IAyBpC,OAAO,CAAC,4CAA4C;IA8BpD,OAAO,CAAC,sBAAsB;CAoDjC"}
@@ -20,6 +20,7 @@ const ArkIRTransformer_1 = require("../../common/ArkIRTransformer");
20
20
  const Stmt_1 = require("../../base/Stmt");
21
21
  const Local_1 = require("../../base/Local");
22
22
  const IRUtils_1 = require("../../common/IRUtils");
23
+ const CfgBuilder_1 = require("./CfgBuilder");
23
24
  /**
24
25
  * Builder for condition in CFG
25
26
  */
@@ -45,18 +46,15 @@ class ConditionBuilder {
45
46
  if (conditionalOperatorEndPos === -1) {
46
47
  continue;
47
48
  }
48
- let { generatedTopBlock: generatedTopBlock, generatedBottomBlocks: generatedBottomBlocks } = this.generateBlocksContainConditionalOperatorGroup(stmtsInCurrBasicBlock.slice(0, conditionalOperatorEndPos + 1), basicBlockSet);
49
+ let { generatedTopBlock: generatedTopBlock, generatedBottomBlocks: generatedBottomBlocks, } = this.generateBlocksInConditionalOperatorGroup(stmtsInCurrBasicBlock.slice(0, conditionalOperatorEndPos + 1), basicBlockSet);
49
50
  if (conditionalOperatorEndPos !== stmtsCnt - 1) {
50
51
  // need create a new basic block for rest statements
51
- const { generatedTopBlock: extraBlock } = this.generateBlockWithoutConditionalOperator(stmtsInCurrBasicBlock.slice(conditionalOperatorEndPos + 1));
52
- generatedBottomBlocks.forEach(generatedBottomBlock => {
53
- generatedBottomBlock.addSuccessorBlock(extraBlock);
54
- extraBlock.addPredecessorBlock(generatedBottomBlock);
55
- });
52
+ const { generatedTopBlock: extraBlock } = this.generateBlockOutConditionalOperator(stmtsInCurrBasicBlock.slice(conditionalOperatorEndPos + 1));
53
+ CfgBuilder_1.CfgBuilder.linkPredecessorsOfBasicBlock(extraBlock, generatedBottomBlocks);
56
54
  basicBlockSet.add(extraBlock);
57
55
  generatedBottomBlocks = this.removeUnnecessaryBlocksInConditionalOperator(extraBlock, basicBlockSet);
58
56
  }
59
- this.relinkPrevAndSuccOfBlockContainConditionalOperator(currBasicBlock, generatedTopBlock, generatedBottomBlocks);
57
+ this.updateBasicBlockInContainConditionalOperator(currBasicBlock, generatedTopBlock, generatedBottomBlocks);
60
58
  basicBlockSet.delete(currBasicBlock);
61
59
  blockPairsToSet.push([currBlockBuilder, generatedTopBlock]);
62
60
  }
@@ -64,78 +62,55 @@ class ConditionBuilder {
64
62
  blockBuilderToCfgBlock.set(currBlockBuilder, generatedTopBlock);
65
63
  }
66
64
  }
67
- relinkPrevAndSuccOfBlockContainConditionalOperator(currBasicBlock, generatedTopBlock, generatedBottomBlocks) {
68
- const predecessorsOfCurrBasicBlock = Array.from(currBasicBlock.getPredecessors());
69
- predecessorsOfCurrBasicBlock.forEach(predecessor => {
70
- predecessor.removeSuccessorBlock(currBasicBlock);
71
- currBasicBlock.removePredecessorBlock(predecessor);
72
- generatedTopBlock.addPredecessorBlock(predecessor);
73
- predecessor.addSuccessorBlock(generatedTopBlock);
74
- });
75
- const successorsOfCurrBasicBlock = Array.from(currBasicBlock.getSuccessors());
76
- successorsOfCurrBasicBlock.forEach(successor => {
77
- successor.removePredecessorBlock(currBasicBlock);
78
- currBasicBlock.removeSuccessorBlock(successor);
79
- generatedBottomBlocks.forEach(generatedBottomBlock => {
80
- generatedBottomBlock.addSuccessorBlock(successor);
81
- successor.addPredecessorBlock(generatedBottomBlock);
82
- });
83
- });
65
+ updateBasicBlockInContainConditionalOperator(currBasicBlock, generatedTopBlock, generatedBottomBlocks) {
66
+ CfgBuilder_1.CfgBuilder.replaceBasicBlockInPredecessors(currBasicBlock, generatedTopBlock);
67
+ CfgBuilder_1.CfgBuilder.replaceBasicBlockInSuccessors(currBasicBlock, generatedBottomBlocks);
84
68
  }
85
- generateBlocksContainConditionalOperatorGroup(sourceStmts, basicBlockSet) {
69
+ generateBlocksInConditionalOperatorGroup(sourceStmts, basicBlockSet) {
86
70
  const { firstEndPos: firstEndPos } = this.findFirstConditionalOperator(sourceStmts);
87
71
  if (firstEndPos === -1) {
88
- return this.generateBlockWithoutConditionalOperator(sourceStmts);
72
+ return this.generateBlockOutConditionalOperator(sourceStmts);
89
73
  }
90
- const { generatedTopBlock: firstGeneratedTopBlock, generatedBottomBlocks: firstGeneratedBottomBlocks, generatedAllBlocks: firstGeneratedAllBlocks, } = this.generateBlocksContainSingleConditionalOperator(sourceStmts.slice(0, firstEndPos + 1));
74
+ const { generatedTopBlock: firstGeneratedTopBlock, generatedBottomBlocks: firstGeneratedBottomBlocks, generatedAllBlocks: firstGeneratedAllBlocks, } = this.generateBlocksInSingleConditionalOperator(sourceStmts.slice(0, firstEndPos + 1));
91
75
  const generatedTopBlock = firstGeneratedTopBlock;
92
76
  let generatedBottomBlocks = firstGeneratedBottomBlocks;
93
77
  firstGeneratedAllBlocks.forEach(block => basicBlockSet.add(block));
94
78
  const stmtsCnt = sourceStmts.length;
95
79
  if (firstEndPos !== stmtsCnt - 1) {
96
80
  // need handle other conditional operators
97
- const { generatedTopBlock: restGeneratedTopBlock, generatedBottomBlocks: restGeneratedBottomBlocks } = this.generateBlocksContainConditionalOperatorGroup(sourceStmts.slice(firstEndPos + 1, stmtsCnt), basicBlockSet);
98
- firstGeneratedBottomBlocks.forEach(firstGeneratedBottomBlock => {
99
- firstGeneratedBottomBlock.addSuccessorBlock(restGeneratedTopBlock);
100
- restGeneratedTopBlock.addPredecessorBlock(firstGeneratedBottomBlock);
101
- });
81
+ const { generatedTopBlock: restGeneratedTopBlock, generatedBottomBlocks: restGeneratedBottomBlocks } = this.generateBlocksInConditionalOperatorGroup(sourceStmts.slice(firstEndPos + 1, stmtsCnt), basicBlockSet);
82
+ CfgBuilder_1.CfgBuilder.linkPredecessorsOfBasicBlock(restGeneratedTopBlock, generatedBottomBlocks);
102
83
  restGeneratedBottomBlocks.forEach(block => basicBlockSet.add(block));
103
84
  this.removeUnnecessaryBlocksInConditionalOperator(restGeneratedTopBlock, basicBlockSet);
104
85
  generatedBottomBlocks = restGeneratedBottomBlocks;
105
86
  }
106
87
  return { generatedTopBlock, generatedBottomBlocks };
107
88
  }
108
- generateBlocksContainSingleConditionalOperator(sourceStmts) {
89
+ generateBlocksInSingleConditionalOperator(sourceStmts) {
109
90
  const { firstIfTruePos: ifTruePos, firstIfFalsePos: ifFalsePos, firstEndPos: endPos } = this.findFirstConditionalOperator(sourceStmts);
110
91
  if (endPos === -1) {
111
- return this.generateBlockWithoutConditionalOperator(sourceStmts);
92
+ return this.generateBlockOutConditionalOperator(sourceStmts);
112
93
  }
113
- const { generatedTopBlock: generatedTopBlock, generatedAllBlocks: generatedAllBlocks } = this.generateBlockWithoutConditionalOperator(sourceStmts.slice(0, ifTruePos));
94
+ const { generatedTopBlock: generatedTopBlock, generatedAllBlocks: generatedAllBlocks, } = this.generateBlockOutConditionalOperator(sourceStmts.slice(0, ifTruePos));
114
95
  let generatedBottomBlocks = [];
115
- const { generatedTopBlock: generatedTopBlockOfTrueBranch, generatedBottomBlocks: generatedBottomBlocksOfTrueBranch, generatedAllBlocks: generatedAllBlocksOfTrueBranch, } = this.generateBlocksContainSingleConditionalOperator(sourceStmts.slice(ifTruePos + 1, ifFalsePos));
96
+ const { generatedTopBlock: generatedTopBlockOfTrueBranch, generatedBottomBlocks: generatedBottomBlocksOfTrueBranch, generatedAllBlocks: generatedAllBlocksOfTrueBranch, } = this.generateBlocksInSingleConditionalOperator(sourceStmts.slice(ifTruePos + 1, ifFalsePos));
116
97
  generatedBottomBlocks.push(...generatedBottomBlocksOfTrueBranch);
117
98
  generatedAllBlocks.push(...generatedAllBlocksOfTrueBranch);
118
- const { generatedTopBlock: generatedTopBlockOfFalseBranch, generatedBottomBlocks: generatedBottomBlocksOfFalseBranch, generatedAllBlocks: generatedAllBlocksOfFalseBranch, } = this.generateBlocksContainSingleConditionalOperator(sourceStmts.slice(ifFalsePos + 1, endPos));
99
+ const { generatedTopBlock: generatedTopBlockOfFalseBranch, generatedBottomBlocks: generatedBottomBlocksOfFalseBranch, generatedAllBlocks: generatedAllBlocksOfFalseBranch, } = this.generateBlocksInSingleConditionalOperator(sourceStmts.slice(ifFalsePos + 1, endPos));
119
100
  generatedBottomBlocks.push(...generatedBottomBlocksOfFalseBranch);
120
101
  generatedAllBlocks.push(...generatedAllBlocksOfFalseBranch);
121
- generatedTopBlock.addSuccessorBlock(generatedTopBlockOfTrueBranch);
122
- generatedTopBlockOfTrueBranch.addPredecessorBlock(generatedTopBlock);
123
- generatedTopBlock.addSuccessorBlock(generatedTopBlockOfFalseBranch);
124
- generatedTopBlockOfFalseBranch.addPredecessorBlock(generatedTopBlock);
102
+ CfgBuilder_1.CfgBuilder.linkSuccessorOfIfBasicBlock(generatedTopBlock, generatedTopBlockOfTrueBranch, generatedTopBlockOfFalseBranch);
125
103
  const stmtsCnt = sourceStmts.length;
126
104
  if (endPos !== stmtsCnt - 1) {
127
105
  // need create a new basic block for rest statements
128
- const { generatedTopBlock: extraBlock } = this.generateBlockWithoutConditionalOperator(sourceStmts.slice(endPos + 1));
129
- generatedBottomBlocks.forEach(generatedBottomBlock => {
130
- generatedBottomBlock.addSuccessorBlock(extraBlock);
131
- extraBlock.addPredecessorBlock(generatedBottomBlock);
132
- });
106
+ const { generatedTopBlock: extraBlock } = this.generateBlockOutConditionalOperator(sourceStmts.slice(endPos + 1));
107
+ CfgBuilder_1.CfgBuilder.linkPredecessorsOfBasicBlock(extraBlock, generatedBottomBlocks);
133
108
  generatedBottomBlocks = [extraBlock];
134
109
  generatedAllBlocks.push(extraBlock);
135
110
  }
136
111
  return { generatedTopBlock, generatedBottomBlocks, generatedAllBlocks };
137
112
  }
138
- generateBlockWithoutConditionalOperator(sourceStmts) {
113
+ generateBlockOutConditionalOperator(sourceStmts) {
139
114
  const generatedBlock = new BasicBlock_1.BasicBlock();
140
115
  sourceStmts.forEach(stmt => generatedBlock.addStmt(stmt));
141
116
  return {
@@ -192,22 +167,16 @@ class ConditionBuilder {
192
167
  const oldPredecessors = Array.from(bottomBlock.getPredecessors());
193
168
  const newPredecessors = [];
194
169
  for (const predecessor of oldPredecessors) {
195
- predecessor.removeSuccessorBlock(bottomBlock);
196
170
  newPredecessors.push(...this.replaceTempRecursively(predecessor, targetValue, tempResultValue, allBlocks, targetValuePosition));
197
171
  }
172
+ CfgBuilder_1.CfgBuilder.unlinkPredecessorsOfBasicBlock(bottomBlock);
198
173
  bottomBlock.remove(firstStmtInBottom);
199
174
  if (bottomBlock.getStmts().length === 0) {
200
175
  // must be a new block without successors
201
176
  allBlocks.delete(bottomBlock);
202
177
  return newPredecessors;
203
178
  }
204
- oldPredecessors.forEach(oldPredecessor => {
205
- bottomBlock.removePredecessorBlock(oldPredecessor);
206
- });
207
- newPredecessors.forEach(newPredecessor => {
208
- bottomBlock.addPredecessorBlock(newPredecessor);
209
- newPredecessor.addSuccessorBlock(bottomBlock);
210
- });
179
+ CfgBuilder_1.CfgBuilder.linkPredecessorsOfBasicBlock(bottomBlock, newPredecessors);
211
180
  return [bottomBlock];
212
181
  }
213
182
  replaceTempRecursively(currBottomBlock, targetLocal, tempResultLocal, allBlocks, targetValuePosition) {
@@ -234,13 +203,13 @@ class ConditionBuilder {
234
203
  }
235
204
  let newBottomBlocks = [];
236
205
  if (tempResultReassignStmt) {
237
- const oldPredecessors = currBottomBlock.getPredecessors();
206
+ const oldPredecessors = Array.from(currBottomBlock.getPredecessors());
238
207
  const newPredecessors = [];
239
208
  const prevTempResultLocal = tempResultReassignStmt.getRightOp();
240
209
  for (const predecessor of oldPredecessors) {
241
- predecessor.removeSuccessorBlock(currBottomBlock);
242
210
  newPredecessors.push(...this.replaceTempRecursively(predecessor, targetLocal, prevTempResultLocal, allBlocks, targetValuePosition));
243
211
  }
212
+ CfgBuilder_1.CfgBuilder.unlinkPredecessorsOfBasicBlock(currBottomBlock);
244
213
  currBottomBlock.remove(tempResultReassignStmt);
245
214
  if (currBottomBlock.getStmts().length === 0) {
246
215
  // remove this block
@@ -248,10 +217,7 @@ class ConditionBuilder {
248
217
  allBlocks.delete(currBottomBlock);
249
218
  }
250
219
  else {
251
- currBottomBlock.getPredecessors().splice(0, oldPredecessors.length, ...newPredecessors);
252
- newPredecessors.forEach(newPredecessor => {
253
- newPredecessor.addSuccessorBlock(currBottomBlock);
254
- });
220
+ CfgBuilder_1.CfgBuilder.linkPredecessorsOfBasicBlock(currBottomBlock, newPredecessors);
255
221
  newBottomBlocks = [currBottomBlock];
256
222
  }
257
223
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SwitchBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/SwitchBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEhF,OAAO,EAAE,YAAY,EAA0B,MAAM,cAAc,CAAC;AAKpE;;GAEG;AACH,qBAAa,aAAa;IACf,WAAW,CACd,sBAAsB,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,EACrD,0BAA0B,EAAE,YAAY,EAAE,EAC1C,gCAAgC,EAAE,aAAa,EAAE,EAAE,EACnD,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,GAC/B,IAAI;IA0CP,OAAO,CAAC,wBAAwB;IAwChC,OAAO,CAAC,uBAAuB;CAmDlC"}
1
+ {"version":3,"file":"SwitchBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/SwitchBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEhF,OAAO,EAAE,YAAY,EAAsC,MAAM,cAAc,CAAC;AAKhF;;GAEG;AACH,qBAAa,aAAa;IACf,WAAW,CACd,sBAAsB,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,EACrD,0BAA0B,EAAE,YAAY,EAAE,EAC1C,gCAAgC,EAAE,aAAa,EAAE,EAAE,EACnD,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,GAC/B,IAAI;IA0CP,OAAO,CAAC,wBAAwB;IAwChC,OAAO,CAAC,uBAAuB;CAyClC"}
@@ -39,6 +39,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
39
39
  Object.defineProperty(exports, "__esModule", { value: true });
40
40
  exports.SwitchBuilder = void 0;
41
41
  const BasicBlock_1 = require("../BasicBlock");
42
+ const CfgBuilder_1 = require("./CfgBuilder");
42
43
  const logger_1 = __importStar(require("../../../utils/logger"));
43
44
  const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'SwitchBuilder');
44
45
  /**
@@ -131,23 +132,12 @@ class SwitchBuilder {
131
132
  }
132
133
  }
133
134
  expectedSuccessorsOfCaseIfBlock.reverse();
134
- blockContainSwitch.getSuccessors().forEach(successor => {
135
- successor.getPredecessors().splice(0, 1);
136
- });
137
- blockContainSwitch.getSuccessors().splice(0);
135
+ CfgBuilder_1.CfgBuilder.unlinkSuccessorsOfBasicBlock(blockContainSwitch);
138
136
  for (let j = 0; j < caseCnt; j++) {
137
+ const trueBranchBlock = expectedSuccessorsOfCaseIfBlock[j];
138
+ const falseBranchBlock = j === caseCnt - 1 ? expectedSuccessorsOfCaseIfBlock[j + 1] : caseIfBlocks[j + 1];
139
139
  const caseIfBlock = caseIfBlocks[j];
140
- caseIfBlock.addSuccessorBlock(expectedSuccessorsOfCaseIfBlock[j]);
141
- expectedSuccessorsOfCaseIfBlock[j].addPredecessorBlock(caseIfBlock);
142
- if (j === caseCnt - 1) {
143
- // the false branch of last case should be default or block after switch statement
144
- caseIfBlock.addSuccessorBlock(expectedSuccessorsOfCaseIfBlock[j + 1]);
145
- expectedSuccessorsOfCaseIfBlock[j + 1].addPredecessorBlock(caseIfBlock);
146
- }
147
- else {
148
- caseIfBlock.addSuccessorBlock(caseIfBlocks[j + 1]);
149
- caseIfBlocks[j + 1].addPredecessorBlock(caseIfBlock);
150
- }
140
+ CfgBuilder_1.CfgBuilder.linkSuccessorOfIfBasicBlock(caseIfBlock, trueBranchBlock, falseBranchBlock);
151
141
  }
152
142
  return true;
153
143
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TrapBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/TrapBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAcvC,OAAO,EAAE,YAAY,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,EACxG,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC;IAQ3B,UAAU,IAAI,IAAI,EAAE;IAS3B,OAAO,CAAC,cAAc;IA6CtB,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,gBAAgB;IA6BxB,OAAO,CAAC,qBAAqB;IAkC7B,OAAO,CAAC,yBAAyB;IAyBjC,OAAO,CAAC,+BAA+B;IAMvC,OAAO,CAAC,qBAAqB;IAgD7B,OAAO,CAAC,wBAAwB;IAiDhC,OAAO,CAAC,eAAe;IAmCvB,OAAO,CAAC,iBAAiB;IA4BzB,OAAO,CAAC,UAAU;IAgClB,OAAO,CAAC,QAAQ;CAoBnB"}
1
+ {"version":3,"file":"TrapBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/TrapBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAcvC,OAAO,EAAE,YAAY,EAAmC,MAAM,cAAc,CAAC;AAK7E;;GAEG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,+BAA+B,CAAoB;IAC3D,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,sBAAsB,CAAgC;IAC9D,OAAO,CAAC,sBAAsB,CAAoB;gBAEtC,sBAAsB,EAAE,GAAG,CAAC,YAAY,CAAC,EAAE,sBAAsB,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,EACxG,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC;IAQ3B,UAAU,IAAI,IAAI,EAAE;IAS3B,OAAO,CAAC,cAAc;IA6CtB,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,gBAAgB;IA6BxB,OAAO,CAAC,qBAAqB;IAkC7B,OAAO,CAAC,yBAAyB;IAYjC,OAAO,CAAC,+BAA+B;IAMvC,OAAO,CAAC,qBAAqB;IA+B7B,OAAO,CAAC,wBAAwB;IA+ChC,OAAO,CAAC,eAAe;IAmCvB,OAAO,CAAC,iBAAiB;IA0BzB,OAAO,CAAC,UAAU;IAgClB,OAAO,CAAC,QAAQ;CAoBnB"}