arkanalyzer 1.0.40 → 1.0.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/config/arkanalyzer.json +1 -2
  2. package/lib/Scene.d.ts.map +1 -1
  3. package/lib/Scene.js +9 -2
  4. package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts.map +1 -1
  5. package/lib/callgraph/algorithm/ClassHierarchyAnalysis.js +3 -4
  6. package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -1
  7. package/lib/callgraph/algorithm/RapidTypeAnalysis.js +7 -8
  8. package/lib/callgraph/model/CallGraph.d.ts +5 -5
  9. package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
  10. package/lib/callgraph/model/CallGraph.js +18 -21
  11. package/lib/callgraph/model/CallSite.d.ts +16 -6
  12. package/lib/callgraph/model/CallSite.d.ts.map +1 -1
  13. package/lib/callgraph/model/CallSite.js +48 -8
  14. package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +0 -1
  15. package/lib/callgraph/model/builder/CallGraphBuilder.d.ts.map +1 -1
  16. package/lib/callgraph/model/builder/CallGraphBuilder.js +0 -8
  17. package/lib/callgraph/pointerAnalysis/Pag.d.ts +3 -6
  18. package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
  19. package/lib/callgraph/pointerAnalysis/Pag.js +6 -29
  20. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +6 -15
  21. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
  22. package/lib/callgraph/pointerAnalysis/PagBuilder.js +63 -81
  23. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +2 -1
  24. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
  25. package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +12 -8
  26. package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts +9 -3
  27. package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts.map +1 -1
  28. package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.js +12 -5
  29. package/lib/callgraph/pointerAnalysis/context/Context.d.ts +69 -0
  30. package/lib/callgraph/pointerAnalysis/context/Context.d.ts.map +1 -0
  31. package/lib/callgraph/pointerAnalysis/context/Context.js +202 -0
  32. package/lib/callgraph/pointerAnalysis/context/ContextItem.d.ts +40 -0
  33. package/lib/callgraph/pointerAnalysis/context/ContextItem.d.ts.map +1 -0
  34. package/lib/callgraph/pointerAnalysis/context/ContextItem.js +99 -0
  35. package/lib/callgraph/pointerAnalysis/context/ContextSelector.d.ts +46 -0
  36. package/lib/callgraph/pointerAnalysis/context/ContextSelector.d.ts.map +1 -0
  37. package/lib/callgraph/pointerAnalysis/context/ContextSelector.js +138 -0
  38. package/lib/core/base/Expr.d.ts +1 -0
  39. package/lib/core/base/Expr.d.ts.map +1 -1
  40. package/lib/core/base/Expr.js +9 -0
  41. package/lib/core/common/ArkIRTransformer.d.ts +1 -0
  42. package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
  43. package/lib/core/common/ArkIRTransformer.js +58 -2
  44. package/lib/core/common/ArkValueTransformer.d.ts +1 -1
  45. package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
  46. package/lib/core/common/IRInference.d.ts +1 -1
  47. package/lib/core/common/IRInference.d.ts.map +1 -1
  48. package/lib/core/common/IRInference.js +7 -3
  49. package/lib/core/common/ModelUtils.js +1 -1
  50. package/lib/core/common/SdkUtils.d.ts +2 -1
  51. package/lib/core/common/SdkUtils.d.ts.map +1 -1
  52. package/lib/core/common/SdkUtils.js +33 -23
  53. package/lib/core/common/TypeInference.d.ts.map +1 -1
  54. package/lib/core/common/TypeInference.js +5 -3
  55. package/lib/core/dataflow/DataflowSolver.js +3 -3
  56. package/lib/core/dataflow/UndefinedVariable.js +2 -2
  57. package/lib/core/graph/BaseExplicitGraph.d.ts +1 -0
  58. package/lib/core/graph/BaseExplicitGraph.d.ts.map +1 -1
  59. package/lib/core/graph/BaseExplicitGraph.js +3 -0
  60. package/lib/core/graph/BasicBlock.d.ts.map +1 -1
  61. package/lib/core/graph/BasicBlock.js +9 -4
  62. package/lib/core/graph/Cfg.d.ts.map +1 -1
  63. package/lib/core/graph/Cfg.js +4 -1
  64. package/lib/core/graph/builder/CfgBuilder.d.ts +2 -1
  65. package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
  66. package/lib/core/graph/builder/CfgBuilder.js +54 -10
  67. package/lib/core/graph/builder/ConditionBuilder.d.ts +2 -1
  68. package/lib/core/graph/builder/ConditionBuilder.d.ts.map +1 -1
  69. package/lib/core/graph/builder/ConditionBuilder.js +7 -3
  70. package/lib/core/graph/builder/TrapBuilder.d.ts +19 -1
  71. package/lib/core/graph/builder/TrapBuilder.d.ts.map +1 -1
  72. package/lib/core/graph/builder/TrapBuilder.js +195 -68
  73. package/lib/core/model/ArkMethod.d.ts.map +1 -1
  74. package/lib/core/model/ArkMethod.js +3 -4
  75. package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
  76. package/lib/core/model/builder/ArkClassBuilder.js +42 -21
  77. package/lib/core/model/builder/ArkImportBuilder.js +28 -25
  78. package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
  79. package/lib/core/model/builder/ArkMethodBuilder.js +1 -2
  80. package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
  81. package/lib/core/model/builder/builderUtils.js +2 -1
  82. package/lib/index.d.ts +0 -1
  83. package/lib/index.d.ts.map +1 -1
  84. package/lib/index.js +2 -4
  85. package/lib/pass/Context.d.ts +47 -0
  86. package/lib/pass/Context.d.ts.map +1 -0
  87. package/lib/pass/Context.js +72 -0
  88. package/lib/pass/Dispatcher.d.ts +102 -0
  89. package/lib/pass/Dispatcher.d.ts.map +1 -0
  90. package/lib/pass/Dispatcher.js +202 -0
  91. package/lib/pass/Pass.d.ts +83 -0
  92. package/lib/pass/Pass.d.ts.map +1 -0
  93. package/lib/pass/Pass.js +95 -0
  94. package/lib/pass/ScenePassMgr.d.ts +73 -0
  95. package/lib/pass/ScenePassMgr.d.ts.map +1 -0
  96. package/lib/pass/ScenePassMgr.js +156 -0
  97. package/lib/pass/SceneValidator.d.ts +215 -0
  98. package/lib/pass/SceneValidator.d.ts.map +1 -0
  99. package/lib/pass/SceneValidator.js +339 -0
  100. package/lib/save/JsonPrinter.d.ts.map +1 -1
  101. package/lib/save/JsonPrinter.js +26 -102
  102. package/lib/save/arkir/ArkIRMethodPrinter.d.ts.map +1 -1
  103. package/lib/save/arkir/ArkIRMethodPrinter.js +13 -5
  104. package/lib/save/source/SourceStmt.d.ts +1 -0
  105. package/lib/save/source/SourceStmt.d.ts.map +1 -1
  106. package/lib/save/source/SourceStmt.js +13 -8
  107. package/lib/utils/FileUtils.d.ts.map +1 -1
  108. package/lib/utils/FileUtils.js +13 -6
  109. package/lib/utils/ValueAsserts.d.ts +9 -0
  110. package/lib/utils/ValueAsserts.d.ts.map +1 -0
  111. package/lib/utils/ValueAsserts.js +89 -0
  112. package/package.json +2 -2
  113. package/lib/callgraph/pointerAnalysis/Context.d.ts +0 -38
  114. package/lib/callgraph/pointerAnalysis/Context.d.ts.map +0 -1
  115. package/lib/callgraph/pointerAnalysis/Context.js +0 -154
@@ -1 +1 @@
1
- {"version":3,"file":"CfgBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/CfgBuilder.ts"],"names":[],"mappings":"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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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"}
@@ -639,6 +639,9 @@ class CfgBuilder {
639
639
  for (let i = stmt.nexts.length - 1; i >= 0; i--) {
640
640
  stmtQueue.push(stmt.nexts[i]);
641
641
  }
642
+ if (stmt.afterSwitch && stmt.afterSwitch.lasts.size === 0) {
643
+ stmtQueue.push(stmt.afterSwitch);
644
+ }
642
645
  }
643
646
  else if (stmt instanceof TryStatementBuilder) {
644
647
  if (stmt.finallyStatement) {
@@ -922,11 +925,11 @@ class CfgBuilder {
922
925
  s.next = this.exit;
923
926
  this.exit.lasts = new Set([s]);
924
927
  }
925
- getParamPropertyNodes(constructorParams) {
928
+ getParamNodeWithInitializerOrModifier(paramNodes) {
926
929
  let stmts = [];
927
- constructorParams.forEach(parameter => {
928
- if (parameter.modifiers !== undefined) {
929
- stmts.push(parameter);
930
+ paramNodes.forEach(param => {
931
+ if (param.initializer !== undefined || param.modifiers !== undefined) {
932
+ stmts.push(param);
930
933
  }
931
934
  });
932
935
  return stmts;
@@ -959,9 +962,9 @@ class CfgBuilder {
959
962
  else if (ts.isModuleDeclaration(this.astRoot) && ts.isModuleBlock(this.astRoot.body)) {
960
963
  stmts = [...this.astRoot.body.statements];
961
964
  }
962
- // For constructor, add parameter property node to stmts which can be used when build body
963
- if (ts.isConstructorDeclaration(this.astRoot)) {
964
- stmts = [...this.getParamPropertyNodes(this.astRoot.parameters), ...stmts];
965
+ // Add param node with initializer or modifier to stmts which can be used when build body to create class field and initializer stmts.
966
+ if (!this.emptyBody && ts.isFunctionLike(this.astRoot)) {
967
+ stmts = [...this.getParamNodeWithInitializerOrModifier(this.astRoot.parameters), ...stmts];
965
968
  }
966
969
  if (!ModelUtils_1.ModelUtils.isArkUIBuilderMethod(this.declaringMethod)) {
967
970
  this.walkAST(this.entry, this.exit, stmts);
@@ -1045,8 +1048,9 @@ class CfgBuilder {
1045
1048
  const currBlockId = this.blocks.length;
1046
1049
  this.linkBasicBlocks(blockBuilderToCfgBlock);
1047
1050
  this.adjustBlocks(blockBuilderToCfgBlock, blocksContainLoopCondition, basicBlockSet, blockBuildersContainSwitch, valueAndStmtsOfSwitchAndCasesAll, arkIRTransformer);
1048
- const trapBuilder = new TrapBuilder_1.TrapBuilder();
1049
- const traps = trapBuilder.buildTraps(blockBuilderToCfgBlock, blockBuildersBeforeTry, arkIRTransformer, basicBlockSet);
1051
+ const trapBuilder = new TrapBuilder_1.TrapBuilder(blockBuildersBeforeTry, blockBuilderToCfgBlock, arkIRTransformer, basicBlockSet);
1052
+ const traps = trapBuilder.buildTraps();
1053
+ this.removeEmptyBlocks(basicBlockSet);
1050
1054
  const cfg = this.createCfg(blockBuilderToCfgBlock, basicBlockSet, currBlockId);
1051
1055
  return {
1052
1056
  cfg,
@@ -1056,6 +1060,46 @@ class CfgBuilder {
1056
1060
  traps,
1057
1061
  };
1058
1062
  }
1063
+ removeEmptyBlocks(basicBlockSet) {
1064
+ for (const bb of basicBlockSet) {
1065
+ if (bb.getStmts().length > 0) {
1066
+ continue;
1067
+ }
1068
+ const predecessors = bb.getPredecessors();
1069
+ const successors = bb.getSuccessors();
1070
+ // the empty basic block with neither predecessor nor successor could be deleted directly
1071
+ if (predecessors.length === 0 && successors.length === 0) {
1072
+ basicBlockSet.delete(bb);
1073
+ continue;
1074
+ }
1075
+ // the empty basic block with predecessor but no successor could be deleted directly and remove its ID from the predecessor blocks
1076
+ if (predecessors.length > 0 && successors.length === 0) {
1077
+ for (const predecessor of predecessors) {
1078
+ predecessor.removeSuccessorBlock(bb);
1079
+ }
1080
+ basicBlockSet.delete(bb);
1081
+ continue;
1082
+ }
1083
+ // the empty basic block with successor but no predecessor could be deleted directly and remove its ID from the successor blocks
1084
+ if (predecessors.length === 0 && successors.length > 0) {
1085
+ for (const successor of successors) {
1086
+ successor.removePredecessorBlock(bb);
1087
+ }
1088
+ basicBlockSet.delete(bb);
1089
+ continue;
1090
+ }
1091
+ // the rest case is the empty basic block both with predecessor and successor, should relink its predecessor and successor
1092
+ for (const predecessor of predecessors) {
1093
+ predecessor.removeSuccessorBlock(bb);
1094
+ successors.forEach(successor => predecessor.addSuccessorBlock(successor));
1095
+ }
1096
+ for (const successor of successors) {
1097
+ successor.removePredecessorBlock(bb);
1098
+ predecessors.forEach(predecessor => successor.addPredecessorBlock(predecessor));
1099
+ }
1100
+ basicBlockSet.delete(bb);
1101
+ }
1102
+ }
1059
1103
  initializeBuild() {
1060
1104
  const blockBuilderToCfgBlock = new Map();
1061
1105
  const basicBlockSet = new Set();
@@ -1135,7 +1179,7 @@ class CfgBuilder {
1135
1179
  const switchBuilder = new SwitchBuilder_1.SwitchBuilder();
1136
1180
  switchBuilder.buildSwitch(blockBuilderToCfgBlock, blockBuildersContainSwitch, valueAndStmtsOfSwitchAndCasesAll, arkIRTransformer, basicBlockSet);
1137
1181
  const conditionalBuilder = new ConditionBuilder_1.ConditionBuilder();
1138
- conditionalBuilder.rebuildBlocksContainConditionalOperator(basicBlockSet, ModelUtils_1.ModelUtils.isArkUIBuilderMethod(this.declaringMethod));
1182
+ conditionalBuilder.rebuildBlocksContainConditionalOperator(blockBuilderToCfgBlock, basicBlockSet, ModelUtils_1.ModelUtils.isArkUIBuilderMethod(this.declaringMethod));
1139
1183
  }
1140
1184
  createCfg(blockBuilderToCfgBlock, basicBlockSet, prevBlockId) {
1141
1185
  let currBlockId = prevBlockId;
@@ -1,9 +1,10 @@
1
1
  import { BasicBlock } from '../BasicBlock';
2
+ import { BlockBuilder } from './CfgBuilder';
2
3
  /**
3
4
  * Builder for condition in CFG
4
5
  */
5
6
  export declare class ConditionBuilder {
6
- rebuildBlocksContainConditionalOperator(basicBlockSet: Set<BasicBlock>, isArkUIBuilder: boolean): void;
7
+ rebuildBlocksContainConditionalOperator(blockBuilderToCfgBlock: Map<BlockBuilder, BasicBlock>, basicBlockSet: Set<BasicBlock>, isArkUIBuilder: boolean): void;
7
8
  private relinkPrevAndSuccOfBlockContainConditionalOperator;
8
9
  private generateBlocksContainConditionalOperatorGroup;
9
10
  private generateBlocksContainSingleConditionalOperator;
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/ConditionBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAM3C;;GAEG;AACH,qBAAa,gBAAgB;IAClB,uCAAuC,CAAC,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,EAAE,cAAc,EAAE,OAAO,GAAG,IAAI;IA4C7G,OAAO,CAAC,kDAAkD;IAuB1D,OAAO,CAAC,6CAA6C;IAmCrD,OAAO,CAAC,8CAA8C;IA8CtD,OAAO,CAAC,uCAAuC;IAc/C,OAAO,CAAC,kCAAkC;IAW1C,OAAO,CAAC,4BAA4B;IAyBpC,OAAO,CAAC,4CAA4C;IAmCpD,OAAO,CAAC,sBAAsB;CA0CjC"}
1
+ {"version":3,"file":"ConditionBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/ConditionBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAK3C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C;;GAEG;AACH,qBAAa,gBAAgB;IAClB,uCAAuC,CAAC,sBAAsB,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,EACrD,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,EAAE,cAAc,EAAE,OAAO,GAAG,IAAI;IAgD7G,OAAO,CAAC,kDAAkD;IAuB1D,OAAO,CAAC,6CAA6C;IAmCrD,OAAO,CAAC,8CAA8C;IA8CtD,OAAO,CAAC,uCAAuC;IAc/C,OAAO,CAAC,kCAAkC;IAW1C,OAAO,CAAC,4BAA4B;IAyBpC,OAAO,CAAC,4CAA4C;IAmCpD,OAAO,CAAC,sBAAsB;CA0CjC"}
@@ -24,14 +24,14 @@ const IRUtils_1 = require("../../common/IRUtils");
24
24
  * Builder for condition in CFG
25
25
  */
26
26
  class ConditionBuilder {
27
- rebuildBlocksContainConditionalOperator(basicBlockSet, isArkUIBuilder) {
27
+ rebuildBlocksContainConditionalOperator(blockBuilderToCfgBlock, basicBlockSet, isArkUIBuilder) {
28
28
  var _a;
29
29
  if (isArkUIBuilder) {
30
30
  this.deleteDummyConditionalOperatorStmt(basicBlockSet);
31
31
  return;
32
32
  }
33
- const currBasicBlocks = Array.from(basicBlockSet);
34
- for (const currBasicBlock of currBasicBlocks) {
33
+ const blockPairsToSet = [];
34
+ for (const [currBlockBuilder, currBasicBlock] of blockBuilderToCfgBlock) {
35
35
  const stmtsInCurrBasicBlock = Array.from(currBasicBlock.getStmts());
36
36
  const stmtsCnt = stmtsInCurrBasicBlock.length;
37
37
  let conditionalOperatorEndPos = -1;
@@ -58,6 +58,10 @@ class ConditionBuilder {
58
58
  }
59
59
  this.relinkPrevAndSuccOfBlockContainConditionalOperator(currBasicBlock, generatedTopBlock, generatedBottomBlocks);
60
60
  basicBlockSet.delete(currBasicBlock);
61
+ blockPairsToSet.push([currBlockBuilder, generatedTopBlock]);
62
+ }
63
+ for (const [currBlockBuilder, generatedTopBlock] of blockPairsToSet) {
64
+ blockBuilderToCfgBlock.set(currBlockBuilder, generatedTopBlock);
61
65
  }
62
66
  }
63
67
  relinkPrevAndSuccOfBlockContainConditionalOperator(currBasicBlock, generatedTopBlock, generatedBottomBlocks) {
@@ -6,7 +6,25 @@ import { BlockBuilder } from './CfgBuilder';
6
6
  * Builder for traps from try...catch
7
7
  */
8
8
  export declare class TrapBuilder {
9
- buildTraps(blockBuilderToCfgBlock: Map<BlockBuilder, BasicBlock>, blockBuildersBeforeTry: Set<BlockBuilder>, arkIRTransformer: ArkIRTransformer, basicBlockSet: Set<BasicBlock>): Trap[];
9
+ private processedBlockBuildersBeforeTry;
10
+ private arkIRTransformer;
11
+ private basicBlockSet;
12
+ private blockBuilderToCfgBlock;
13
+ private blockBuildersBeforeTry;
14
+ constructor(blockBuildersBeforeTry: Set<BlockBuilder>, blockBuilderToCfgBlock: Map<BlockBuilder, BasicBlock>, arkIRTransformer: ArkIRTransformer, basicBlockSet: Set<BasicBlock>);
15
+ buildTraps(): Trap[];
16
+ private buildTrapGroup;
17
+ private shouldSkipProcessing;
18
+ private getTryStatementBuilder;
19
+ private getFinallyBlock;
20
+ private prepareHeadBlock;
21
+ private processTryBlock;
22
+ private processCatchBlock;
23
+ private getAfterFinallyBlock;
24
+ private buildSingleTraps;
25
+ private buildTrapsRecursively;
26
+ private removeEmptyBlockBeforeTry;
27
+ private shouldRemoveEmptyBlockBeforeTry;
10
28
  private buildTrapsIfNoFinally;
11
29
  private buildTrapsIfFinallyExist;
12
30
  private getAllBlocksBFS;
@@ -1 +1 @@
1
- {"version":3,"file":"TrapBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/TrapBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAavC,OAAO,EAAE,YAAY,EAAuB,MAAM,cAAc,CAAC;AAKjE;;GAEG;AACH,qBAAa,WAAW;IACb,UAAU,CACb,sBAAsB,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,EACrD,sBAAsB,EAAE,GAAG,CAAC,YAAY,CAAC,EACzC,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,GAC/B,IAAI,EAAE;IAiET,OAAO,CAAC,qBAAqB;IAmD7B,OAAO,CAAC,wBAAwB;IA2ChC,OAAO,CAAC,eAAe;IAwCvB,OAAO,CAAC,iBAAiB;IAgCzB,OAAO,CAAC,UAAU;IAgClB,OAAO,CAAC,QAAQ;CAgBnB"}
1
+ {"version":3,"file":"TrapBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/TrapBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAavC,OAAO,EAAE,YAAY,EAAuB,MAAM,cAAc,CAAC;AAKjE;;GAEG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,+BAA+B,CAAoB;IAC3D,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,sBAAsB,CAAgC;IAC9D,OAAO,CAAC,sBAAsB,CAAoB;gBAEtC,sBAAsB,EAAE,GAAG,CAAC,YAAY,CAAC,EAAE,sBAAsB,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,EAChG,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC;IAQnC,UAAU,IAAI,IAAI,EAAE;IAS3B,OAAO,CAAC,cAAc;IA6CtB,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,gBAAgB;IA6BxB,OAAO,CAAC,qBAAqB;IAkC7B,OAAO,CAAC,yBAAyB;IAyBjC,OAAO,CAAC,+BAA+B;IAMvC,OAAO,CAAC,qBAAqB;IA8C7B,OAAO,CAAC,wBAAwB;IA8ChC,OAAO,CAAC,eAAe;IAmCvB,OAAO,CAAC,iBAAiB;IA4BzB,OAAO,CAAC,UAAU;IAgClB,OAAO,CAAC,QAAQ;CAgBnB"}
@@ -50,64 +50,189 @@ const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER,
50
50
  * Builder for traps from try...catch
51
51
  */
52
52
  class TrapBuilder {
53
- 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":"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"}