arkanalyzer 1.0.94 → 2.0.0-beta1

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 (291) hide show
  1. package/lib/Config.d.ts +7 -0
  2. package/lib/Config.d.ts.map +1 -1
  3. package/lib/Scene.d.ts +134 -170
  4. package/lib/Scene.d.ts.map +1 -1
  5. package/lib/Scene.js +412 -976
  6. package/lib/callgraph/algorithm/AbstractAnalysis.js +3 -2
  7. package/lib/callgraph/algorithm/RapidTypeAnalysis.js +1 -1
  8. package/lib/callgraph/model/CallGraph.js +1 -1
  9. package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts +1 -3
  10. package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts.map +1 -1
  11. package/lib/callgraph/pointerAnalysis/PTAUtils.js +17 -7
  12. package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
  13. package/lib/callgraph/pointerAnalysis/Pag.js +4 -14
  14. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
  15. package/lib/callgraph/pointerAnalysis/PagBuilder.js +2 -1
  16. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
  17. package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +1 -2
  18. package/lib/callgraph/pointerAnalysis/plugins/WorkerPlugin.d.ts.map +1 -1
  19. package/lib/callgraph/pointerAnalysis/plugins/WorkerPlugin.js +0 -1
  20. package/lib/cli/commands/cg.d.ts +1 -0
  21. package/lib/cli/commands/cg.d.ts.map +1 -1
  22. package/lib/cli/commands/cg.js +22 -18
  23. package/lib/cli/commands/ir.d.ts +1 -0
  24. package/lib/cli/commands/ir.d.ts.map +1 -1
  25. package/lib/cli/commands/ir.js +5 -2
  26. package/lib/core/base/Constant.d.ts +5 -5
  27. package/lib/core/base/Constant.d.ts.map +1 -1
  28. package/lib/core/base/Constant.js +12 -9
  29. package/lib/core/base/Expr.d.ts +36 -20
  30. package/lib/core/base/Expr.d.ts.map +1 -1
  31. package/lib/core/base/Expr.js +206 -94
  32. package/lib/core/base/Local.d.ts +10 -20
  33. package/lib/core/base/Local.d.ts.map +1 -1
  34. package/lib/core/base/Local.js +25 -28
  35. package/lib/core/base/Position.d.ts +6 -0
  36. package/lib/core/base/Position.d.ts.map +1 -1
  37. package/lib/core/base/Position.js +37 -11
  38. package/lib/core/base/Ref.d.ts +45 -33
  39. package/lib/core/base/Ref.d.ts.map +1 -1
  40. package/lib/core/base/Ref.js +225 -51
  41. package/lib/core/base/Stmt.d.ts +19 -9
  42. package/lib/core/base/Stmt.d.ts.map +1 -1
  43. package/lib/core/base/Stmt.js +135 -52
  44. package/lib/core/base/Type.d.ts +67 -4
  45. package/lib/core/base/Type.d.ts.map +1 -1
  46. package/lib/core/base/Type.js +391 -20
  47. package/lib/core/base/TypeExpr.d.ts +6 -4
  48. package/lib/core/base/TypeExpr.d.ts.map +1 -1
  49. package/lib/core/base/TypeExpr.js +34 -10
  50. package/lib/core/base/Value.d.ts +20 -2
  51. package/lib/core/base/Value.d.ts.map +1 -1
  52. package/lib/core/base/Value.js +12 -0
  53. package/lib/core/common/ArkIRTransformer.d.ts +18 -0
  54. package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
  55. package/lib/core/common/ArkIRTransformer.js +94 -75
  56. package/lib/core/common/ArkValueTransformer.d.ts +21 -3
  57. package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
  58. package/lib/core/common/ArkValueTransformer.js +455 -265
  59. package/lib/core/common/Builtin.d.ts +48 -24
  60. package/lib/core/common/Builtin.d.ts.map +1 -1
  61. package/lib/core/common/Builtin.js +90 -52
  62. package/lib/core/common/CanonicalizerValidator.d.ts +308 -0
  63. package/lib/core/common/CanonicalizerValidator.d.ts.map +1 -0
  64. package/lib/core/common/CanonicalizerValidator.js +888 -0
  65. package/lib/core/common/Const.d.ts +3 -3
  66. package/lib/core/common/Const.d.ts.map +1 -1
  67. package/lib/core/common/Const.js +3 -3
  68. package/lib/core/common/DummyMainCreater.d.ts +2 -21
  69. package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
  70. package/lib/core/common/DummyMainCreater.js +8 -105
  71. package/lib/core/common/IRInference.d.ts +55 -3
  72. package/lib/core/common/IRInference.d.ts.map +1 -1
  73. package/lib/core/common/IRInference.js +407 -126
  74. package/lib/core/common/IRUtils.d.ts +1 -0
  75. package/lib/core/common/IRUtils.d.ts.map +1 -1
  76. package/lib/core/common/IRUtils.js +44 -13
  77. package/lib/core/common/ModelUtils.d.ts +44 -20
  78. package/lib/core/common/ModelUtils.d.ts.map +1 -1
  79. package/lib/core/common/ModelUtils.js +378 -208
  80. package/lib/core/common/SdkUtils.d.ts +35 -5
  81. package/lib/core/common/SdkUtils.d.ts.map +1 -1
  82. package/lib/core/common/SdkUtils.js +181 -53
  83. package/lib/core/common/SignatureCanonicalizer.d.ts +95 -0
  84. package/lib/core/common/SignatureCanonicalizer.d.ts.map +1 -0
  85. package/lib/core/common/SignatureCanonicalizer.js +116 -0
  86. package/lib/core/common/SignatureCanonicalizerRegistry.d.ts +176 -0
  87. package/lib/core/common/SignatureCanonicalizerRegistry.d.ts.map +1 -0
  88. package/lib/core/common/SignatureCanonicalizerRegistry.js +343 -0
  89. package/lib/core/common/SignatureModelCanonicalizer.d.ts +69 -0
  90. package/lib/core/common/SignatureModelCanonicalizer.d.ts.map +1 -0
  91. package/lib/core/common/SignatureModelCanonicalizer.js +109 -0
  92. package/lib/core/common/StmtUseReplacer.d.ts +1 -0
  93. package/lib/core/common/StmtUseReplacer.d.ts.map +1 -1
  94. package/lib/core/common/StmtUseReplacer.js +9 -0
  95. package/lib/core/common/StringUtils.d.ts +12 -1
  96. package/lib/core/common/StringUtils.d.ts.map +1 -1
  97. package/lib/core/common/StringUtils.js +36 -17
  98. package/lib/core/common/TempSignatureCanonicalizer.d.ts +82 -0
  99. package/lib/core/common/TempSignatureCanonicalizer.d.ts.map +1 -0
  100. package/lib/core/common/TempSignatureCanonicalizer.js +177 -0
  101. package/lib/core/common/TypeInference.d.ts +24 -6
  102. package/lib/core/common/TypeInference.d.ts.map +1 -1
  103. package/lib/core/common/TypeInference.js +243 -117
  104. package/lib/core/common/ValueUtil.d.ts +2 -1
  105. package/lib/core/common/ValueUtil.d.ts.map +1 -1
  106. package/lib/core/common/ValueUtil.js +4 -1
  107. package/lib/core/graph/Cfg.d.ts.map +1 -1
  108. package/lib/core/graph/Cfg.js +21 -6
  109. package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
  110. package/lib/core/graph/builder/CfgBuilder.js +46 -33
  111. package/lib/core/graph/builder/IfBuilder.d.ts.map +1 -1
  112. package/lib/core/graph/builder/IfBuilder.js +6 -2
  113. package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
  114. package/lib/core/graph/builder/ViewTreeBuilder.js +6 -2
  115. package/lib/core/inference/ModelInference.d.ts +24 -4
  116. package/lib/core/inference/ModelInference.d.ts.map +1 -1
  117. package/lib/core/inference/ModelInference.js +273 -79
  118. package/lib/core/inference/ValueInference.d.ts +3 -2
  119. package/lib/core/inference/ValueInference.d.ts.map +1 -1
  120. package/lib/core/inference/ValueInference.js +90 -40
  121. package/lib/core/inference/abc/AbcInference.d.ts.map +1 -1
  122. package/lib/core/inference/abc/AbcInference.js +28 -15
  123. package/lib/core/inference/arkts/ArkTsInference.d.ts +9 -3
  124. package/lib/core/inference/arkts/ArkTsInference.d.ts.map +1 -1
  125. package/lib/core/inference/arkts/ArkTsInference.js +54 -16
  126. package/lib/core/model/ArkClass.d.ts +192 -18
  127. package/lib/core/model/ArkClass.d.ts.map +1 -1
  128. package/lib/core/model/ArkClass.js +852 -122
  129. package/lib/core/model/ArkExport.d.ts.map +1 -1
  130. package/lib/core/model/ArkExport.js +1 -2
  131. package/lib/core/model/ArkField.d.ts +34 -2
  132. package/lib/core/model/ArkField.d.ts.map +1 -1
  133. package/lib/core/model/ArkField.js +89 -14
  134. package/lib/core/model/ArkFile.d.ts +72 -12
  135. package/lib/core/model/ArkFile.d.ts.map +1 -1
  136. package/lib/core/model/ArkFile.js +275 -65
  137. package/lib/core/model/ArkImport.d.ts.map +1 -1
  138. package/lib/core/model/ArkImport.js +1 -2
  139. package/lib/core/model/ArkMethod.d.ts +101 -15
  140. package/lib/core/model/ArkMethod.d.ts.map +1 -1
  141. package/lib/core/model/ArkMethod.js +252 -39
  142. package/lib/core/model/ArkModule.d.ts +1 -1
  143. package/lib/core/model/ArkModule.js +1 -1
  144. package/lib/core/model/ArkNamespace.d.ts +80 -10
  145. package/lib/core/model/ArkNamespace.d.ts.map +1 -1
  146. package/lib/core/model/ArkNamespace.js +309 -76
  147. package/lib/core/model/ArkSignature.d.ts +242 -18
  148. package/lib/core/model/ArkSignature.d.ts.map +1 -1
  149. package/lib/core/model/ArkSignature.js +725 -95
  150. package/lib/core/model/builder/ArkClassBuilder.d.ts +6 -3
  151. package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
  152. package/lib/core/model/builder/ArkClassBuilder.js +116 -71
  153. package/lib/core/model/builder/ArkExportBuilder.d.ts +1 -1
  154. package/lib/core/model/builder/ArkExportBuilder.d.ts.map +1 -1
  155. package/lib/core/model/builder/ArkExportBuilder.js +1 -1
  156. package/lib/core/model/builder/ArkFieldBuilder.d.ts +0 -2
  157. package/lib/core/model/builder/ArkFieldBuilder.d.ts.map +1 -1
  158. package/lib/core/model/builder/ArkFieldBuilder.js +9 -43
  159. package/lib/core/model/builder/ArkFileBuilder.d.ts.map +1 -1
  160. package/lib/core/model/builder/ArkFileBuilder.js +32 -33
  161. package/lib/core/model/builder/ArkMethodBuilder.d.ts +10 -3
  162. package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
  163. package/lib/core/model/builder/ArkMethodBuilder.js +40 -26
  164. package/lib/core/model/builder/ArkNamespaceBuilder.d.ts +3 -2
  165. package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
  166. package/lib/core/model/builder/ArkNamespaceBuilder.js +45 -77
  167. package/lib/core/model/builder/ArkSignatureBuilder.d.ts +9 -0
  168. package/lib/core/model/builder/ArkSignatureBuilder.d.ts.map +1 -1
  169. package/lib/core/model/builder/ArkSignatureBuilder.js +26 -3
  170. package/lib/core/model/builder/BodyBuilder.d.ts +1 -0
  171. package/lib/core/model/builder/BodyBuilder.d.ts.map +1 -1
  172. package/lib/core/model/builder/BodyBuilder.js +37 -11
  173. package/lib/core/model/builder/builderUtils.d.ts +11 -1
  174. package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
  175. package/lib/core/model/builder/builderUtils.js +124 -90
  176. package/lib/frontend/FrontendBuilder.d.ts +10 -6
  177. package/lib/frontend/FrontendBuilder.d.ts.map +1 -1
  178. package/lib/frontend/FrontendBuilder.js +19 -45
  179. package/lib/frontend/ModuleScene.d.ts +43 -0
  180. package/lib/frontend/ModuleScene.d.ts.map +1 -0
  181. package/lib/frontend/ModuleScene.js +143 -0
  182. package/lib/frontend/SceneBuildStage.d.ts +15 -0
  183. package/lib/frontend/SceneBuildStage.d.ts.map +1 -0
  184. package/lib/frontend/SceneBuildStage.js +32 -0
  185. package/lib/frontend/SceneBuilder.d.ts +153 -0
  186. package/lib/frontend/SceneBuilder.d.ts.map +1 -0
  187. package/lib/frontend/SceneBuilder.js +859 -0
  188. package/lib/frontend/arktsFrontend/ArktsFrontend.d.ts +0 -2
  189. package/lib/frontend/arktsFrontend/ArktsFrontend.d.ts.map +1 -1
  190. package/lib/frontend/arktsFrontend/ArktsFrontend.js +0 -18
  191. package/lib/frontend/arktsFrontend/FileBodyRemount.d.ts +17 -0
  192. package/lib/frontend/arktsFrontend/FileBodyRemount.d.ts.map +1 -0
  193. package/lib/frontend/arktsFrontend/FileBodyRemount.js +187 -0
  194. package/lib/frontend/common/ModuleBuilder.d.ts +4 -2
  195. package/lib/frontend/common/ModuleBuilder.d.ts.map +1 -1
  196. package/lib/frontend/common/ModuleBuilder.js +19 -9
  197. package/lib/frontend/cppFrontend/CppFrontend.d.ts +0 -6
  198. package/lib/frontend/cppFrontend/CppFrontend.d.ts.map +1 -1
  199. package/lib/frontend/cppFrontend/CppFrontend.js +0 -56
  200. package/lib/frontend/cppFrontend/base/Type.d.ts +7 -0
  201. package/lib/frontend/cppFrontend/base/Type.d.ts.map +1 -1
  202. package/lib/frontend/cppFrontend/base/Type.js +29 -0
  203. package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts.map +1 -1
  204. package/lib/frontend/cppFrontend/common/ArkIRTransformer.js +56 -56
  205. package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts +1 -1
  206. package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts.map +1 -1
  207. package/lib/frontend/cppFrontend/common/ArkValueTransformer.js +124 -113
  208. package/lib/frontend/cppFrontend/common/Builtin.d.ts +29 -19
  209. package/lib/frontend/cppFrontend/common/Builtin.d.ts.map +1 -1
  210. package/lib/frontend/cppFrontend/common/Builtin.js +56 -35
  211. package/lib/frontend/cppFrontend/common/IRInference.d.ts +7 -2
  212. package/lib/frontend/cppFrontend/common/IRInference.d.ts.map +1 -1
  213. package/lib/frontend/cppFrontend/common/IRInference.js +61 -28
  214. package/lib/frontend/cppFrontend/common/IRUtils.d.ts +1 -0
  215. package/lib/frontend/cppFrontend/common/IRUtils.d.ts.map +1 -1
  216. package/lib/frontend/cppFrontend/common/IRUtils.js +22 -10
  217. package/lib/frontend/cppFrontend/common/ModelUtils.d.ts +19 -0
  218. package/lib/frontend/cppFrontend/common/ModelUtils.d.ts.map +1 -1
  219. package/lib/frontend/cppFrontend/common/ModelUtils.js +84 -3
  220. package/lib/frontend/cppFrontend/common/TypeInference.d.ts.map +1 -1
  221. package/lib/frontend/cppFrontend/common/TypeInference.js +44 -54
  222. package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts.map +1 -1
  223. package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.js +2 -1
  224. package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts +1 -1
  225. package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts.map +1 -1
  226. package/lib/frontend/cppFrontend/inference/CxxValueInference.d.ts.map +1 -1
  227. package/lib/frontend/cppFrontend/inference/CxxValueInference.js +41 -5
  228. package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts.map +1 -1
  229. package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.js +18 -28
  230. package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts.map +1 -1
  231. package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.js +2 -3
  232. package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts +2 -2
  233. package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts.map +1 -1
  234. package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.js +31 -24
  235. package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts.map +1 -1
  236. package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.js +10 -16
  237. package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts +0 -2
  238. package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
  239. package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.js +19 -37
  240. package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts +1 -0
  241. package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts.map +1 -1
  242. package/lib/frontend/cppFrontend/model/builder/BodyBuilder.js +30 -3
  243. package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts.map +1 -1
  244. package/lib/frontend/cppFrontend/model/builder/builderUtils.js +8 -4
  245. package/lib/index.d.ts +3 -0
  246. package/lib/index.d.ts.map +1 -1
  247. package/lib/index.js +10 -2
  248. package/lib/save/json/JsonSerialization.js +2 -2
  249. package/lib/save/source/SourceStmt.js +1 -1
  250. package/lib/save/source/SourceTransformer.d.ts.map +1 -1
  251. package/lib/save/source/SourceTransformer.js +0 -9
  252. package/lib/statistics/StageStatistics.d.ts +195 -0
  253. package/lib/statistics/StageStatistics.d.ts.map +1 -0
  254. package/lib/statistics/StageStatistics.js +346 -0
  255. package/lib/statistics/StageStatisticsReporter.d.ts +58 -0
  256. package/lib/statistics/StageStatisticsReporter.d.ts.map +1 -0
  257. package/lib/statistics/StageStatisticsReporter.js +255 -0
  258. package/lib/utils/Canonicalizer.d.ts +9 -2
  259. package/lib/utils/Canonicalizer.d.ts.map +1 -1
  260. package/lib/utils/Canonicalizer.js +19 -2
  261. package/lib/utils/CxxSceneUtils.d.ts +7 -0
  262. package/lib/utils/CxxSceneUtils.d.ts.map +1 -1
  263. package/lib/utils/CxxSceneUtils.js +10 -1
  264. package/lib/utils/FileUtils.d.ts +0 -1
  265. package/lib/utils/FileUtils.d.ts.map +1 -1
  266. package/lib/utils/FileUtils.js +1 -9
  267. package/lib/utils/HashUtils.d.ts +9 -0
  268. package/lib/utils/HashUtils.d.ts.map +1 -0
  269. package/lib/utils/HashUtils.js +65 -0
  270. package/lib/utils/ModuleUtils.d.ts.map +1 -1
  271. package/lib/utils/ModuleUtils.js +24 -5
  272. package/lib/utils/VisitedSegment.d.ts +23 -0
  273. package/lib/utils/VisitedSegment.d.ts.map +1 -0
  274. package/lib/utils/VisitedSegment.js +64 -0
  275. package/lib/utils/callGraphUtils.d.ts.map +1 -1
  276. package/lib/utils/callGraphUtils.js +7 -7
  277. package/lib/utils/getAllFiles.d.ts.map +1 -1
  278. package/lib/utils/getAllFiles.js +11 -8
  279. package/lib/utils/logger.d.ts +4 -0
  280. package/lib/utils/logger.d.ts.map +1 -1
  281. package/lib/utils/logger.js +16 -0
  282. package/lib/utils/parseArkSourceFile.d.ts +33 -0
  283. package/lib/utils/parseArkSourceFile.d.ts.map +1 -0
  284. package/lib/utils/parseArkSourceFile.js +131 -0
  285. package/package.json +1 -1
  286. package/lib/utils/DependenciesSort.d.ts +0 -3
  287. package/lib/utils/DependenciesSort.d.ts.map +0 -1
  288. package/lib/utils/DependenciesSort.js +0 -72
  289. package/lib/utils/crypto_utils.d.ts +0 -6
  290. package/lib/utils/crypto_utils.d.ts.map +0 -1
  291. package/lib/utils/crypto_utils.js +0 -57
@@ -13,11 +13,37 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ var desc = Object.getOwnPropertyDescriptor(m, k);
19
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
20
+ desc = { enumerable: true, get: function() { return m[k]; } };
21
+ }
22
+ Object.defineProperty(o, k2, desc);
23
+ }) : (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ o[k2] = m[k];
26
+ }));
27
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
28
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
29
+ }) : function(o, v) {
30
+ o["default"] = v;
31
+ });
32
+ var __importStar = (this && this.__importStar) || function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
16
39
  Object.defineProperty(exports, "__esModule", { value: true });
17
40
  exports.AliasTypeExpr = exports.ArkUnopExpr = exports.UnaryOperator = exports.ArkPhiExpr = exports.ArkCastExpr = exports.ArkInstanceOfExpr = exports.ArkTypeOfExpr = exports.ArkNormalBinopExpr = exports.ArkConditionExpr = exports.AbstractBinopExpr = exports.RelationalBinaryOperator = exports.NormalBinaryOperator = exports.ArkYieldExpr = exports.ArkAwaitExpr = exports.ArkDeleteExpr = exports.ArkNewArrayExpr = exports.ArkNewExpr = exports.ArkPtrInvokeExpr = exports.ArkStaticInvokeExpr = exports.ArkInstanceInvokeExpr = exports.AbstractInvokeExpr = exports.AbstractExpr = void 0;
18
41
  const TypeInference_1 = require("../common/TypeInference");
42
+ const SignatureCanonicalizerRegistry_1 = require("../common/SignatureCanonicalizerRegistry");
43
+ const SdkUtils_1 = require("../common/SdkUtils");
19
44
  const Local_1 = require("./Local");
20
45
  const Type_1 = require("./Type");
46
+ const Value_1 = require("./Value");
21
47
  const Ref_1 = require("./Ref");
22
48
  const ValueUtil_1 = require("../common/ValueUtil");
23
49
  const ArkMethod_1 = require("../model/ArkMethod");
@@ -30,6 +56,8 @@ const ModelUtils_1 = require("../common/ModelUtils");
30
56
  const Type_2 = require("../../frontend/cppFrontend/base/Type");
31
57
  const cppUtils_1 = require("../../frontend/cppFrontend/utils/cppUtils");
32
58
  const Stmt_1 = require("./Stmt");
59
+ const logger_1 = __importStar(require("../../utils/logger"));
60
+ const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'Expr');
33
61
  const CXX_SOURCE_EXTENSION_SET = (0, cppUtils_1.getCxxSourceFileExtensionSet)();
34
62
  function isCxxLikeFileName(fileName) {
35
63
  const normalized = fileName.toLowerCase();
@@ -43,6 +71,7 @@ function isCxxLikeFileName(fileName) {
43
71
  /**
44
72
  * @category core/base/expr
45
73
  */
74
+ const IS_GENERIC_OR_ANY = (t) => t instanceof Type_1.GenericType || t instanceof Type_1.AnyType;
46
75
  class AbstractExpr {
47
76
  inferType(arkMethod) {
48
77
  return this;
@@ -52,10 +81,41 @@ exports.AbstractExpr = AbstractExpr;
52
81
  class AbstractInvokeExpr extends AbstractExpr {
53
82
  constructor(methodSignature, args, realGenericTypes, spreadFlags) {
54
83
  super();
55
- this.methodSignature = methodSignature;
56
84
  this.args = args;
57
85
  this.realGenericTypes = realGenericTypes;
58
86
  this.spreadFlags = spreadFlags;
87
+ this.route(methodSignature);
88
+ }
89
+ route(methodSignature) {
90
+ const reg = SignatureCanonicalizerRegistry_1.SignatureCanonicalizerRegistry.getInstance();
91
+ if (methodSignature.isUnclear()) {
92
+ this.methodSigID = -1;
93
+ this.tempMethodSigID = reg.tempMethodSigCanonicalizer.register(methodSignature);
94
+ return;
95
+ }
96
+ const existingId = reg.methodSigCanonicalizer.getExistingId(methodSignature);
97
+ if (existingId !== -1) {
98
+ if (this.tempMethodSigID !== undefined) {
99
+ reg.tempMethodSigCanonicalizer.retireWithReplacement(this.tempMethodSigID, existingId);
100
+ }
101
+ this.methodSigID = existingId;
102
+ this.tempMethodSigID = undefined;
103
+ }
104
+ else {
105
+ logger.error(`AbstractInvokeExpr: clear MethodSignature not interned (route) — routing to temp defensively: ${methodSignature.toString()}`);
106
+ this.methodSigID = -1;
107
+ this.tempMethodSigID = reg.tempMethodSigCanonicalizer.register(methodSignature);
108
+ }
109
+ }
110
+ /**
111
+ * Returns the absolute full position of `methodName(...)` captured from the AST,
112
+ * or undefined when this invoke was synthesized during IR construction.
113
+ */
114
+ getInvokeFullPosition() {
115
+ return this.invokeFullPosition;
116
+ }
117
+ setInvokeFullPosition(invokeFullPosition) {
118
+ this.invokeFullPosition = invokeFullPosition;
59
119
  }
60
120
  /**
61
121
  * Get method Signature. The method signature is consist of ClassSignature and MethodSubSignature.
@@ -72,10 +132,42 @@ class AbstractInvokeExpr extends AbstractExpr {
72
132
  ```
73
133
  */
74
134
  getMethodSignature() {
75
- return this.methodSignature;
135
+ const reg = SignatureCanonicalizerRegistry_1.SignatureCanonicalizerRegistry.getInstance();
136
+ if (this.methodSigID >= 0) {
137
+ return reg.methodSigCanonicalizer.get(this.methodSigID);
138
+ }
139
+ if (this.tempMethodSigID !== undefined) {
140
+ const sig = reg.tempMethodSigCanonicalizer.get(this.tempMethodSigID);
141
+ if (sig !== undefined) {
142
+ return sig;
143
+ }
144
+ const formalId = reg.tempMethodSigCanonicalizer.getReplacement(this.tempMethodSigID);
145
+ if (formalId !== -1) {
146
+ const formalSig = reg.methodSigCanonicalizer.get(formalId);
147
+ if (formalSig !== undefined) {
148
+ this.methodSigID = formalId;
149
+ return formalSig;
150
+ }
151
+ }
152
+ }
153
+ throw new Error('AbstractInvokeExpr has no signature');
76
154
  }
77
155
  setMethodSignature(newMethodSignature) {
78
- this.methodSignature = newMethodSignature;
156
+ this.route(newMethodSignature);
157
+ }
158
+ /** @internal Get the formal MethodSigID. Returns -1 if not interned (temp-held). */
159
+ getMethodSigID() {
160
+ return this.methodSigID;
161
+ }
162
+ /** @internal Get the temp MethodSigID for the unresolved-signature registration. */
163
+ getTempSigID() {
164
+ return this.tempMethodSigID;
165
+ }
166
+ /** @internal 纯 retire,新签名依旧是temp,且会在别处构造。*/
167
+ retireTemp() {
168
+ if (this.methodSigID === -1 && this.tempMethodSigID !== undefined) {
169
+ SignatureCanonicalizerRegistry_1.SignatureCanonicalizerRegistry.getInstance().tempMethodSigCanonicalizer.retire(this.tempMethodSigID);
170
+ }
79
171
  }
80
172
  /**
81
173
  * Returns an argument used in the expression according to its index.
@@ -114,8 +206,8 @@ class AbstractInvokeExpr extends AbstractExpr {
114
206
  this.args = newArgs;
115
207
  }
116
208
  getType() {
117
- const type = this.methodSignature.getType();
118
- if (TypeInference_1.TypeInference.checkType(type, t => t instanceof Type_1.GenericType || t instanceof Type_1.AnyType) && this.realGenericTypes) {
209
+ const type = this.getMethodSignature().getType();
210
+ if (TypeInference_1.TypeInference.checkType(type, IS_GENERIC_OR_ANY) && this.realGenericTypes) {
119
211
  return TypeInference_1.TypeInference.replaceTypeWithReal(type, this.realGenericTypes);
120
212
  }
121
213
  return type;
@@ -131,13 +223,15 @@ class AbstractInvokeExpr extends AbstractExpr {
131
223
  getSpreadFlags() {
132
224
  return this.spreadFlags;
133
225
  }
134
- getUses() {
135
- let uses = [];
136
- uses.push(...this.args);
137
- for (const arg of this.args) {
138
- uses.push(...arg.getUses());
226
+ getUses(acc = []) {
227
+ const args = this.args;
228
+ for (let i = 0; i < args.length; i++) {
229
+ acc.push(args[i]);
139
230
  }
140
- return uses;
231
+ for (let i = 0; i < args.length; i++) {
232
+ args[i].getUses(acc);
233
+ }
234
+ return acc;
141
235
  }
142
236
  /**
143
237
  *Convert parameter list to string representation
@@ -182,15 +276,17 @@ class ArkInstanceInvokeExpr extends AbstractInvokeExpr {
182
276
  * For {@link ArkInstanceInvokeExpr}, the return also contains the caller base and uses of base.
183
277
  * @returns An **array** of arguments used in the invoke expression.
184
278
  */
185
- getUses() {
186
- let uses = [];
187
- uses.push(this.base);
188
- uses.push(...this.base.getUses());
189
- uses.push(...this.getArgs());
190
- for (const arg of this.getArgs()) {
191
- uses.push(...arg.getUses());
279
+ getUses(acc = []) {
280
+ acc.push(this.base);
281
+ this.base.getUses(acc);
282
+ const args = this.getArgs();
283
+ for (let i = 0; i < args.length; i++) {
284
+ acc.push(args[i]);
285
+ }
286
+ for (let i = 0; i < args.length; i++) {
287
+ args[i].getUses(acc);
192
288
  }
193
- return uses;
289
+ return acc;
194
290
  }
195
291
  toString() {
196
292
  let strs = [];
@@ -293,9 +389,9 @@ class ArkPtrInvokeExpr extends AbstractInvokeExpr {
293
389
  }
294
390
  const fileName = sig.getDeclaringClassSignature().getDeclaringFileSignature().getFileName().toLowerCase();
295
391
  const isCxxFile = isCxxLikeFileName(fileName);
296
- const ptrDeclFileName = this.funPtr instanceof Local_1.Local ?
297
- (_d = (_c = (_b = (_a = this.funPtr.getDeclaringStmt()) === null || _a === void 0 ? void 0 : _a.getCfg()) === null || _b === void 0 ? void 0 : _b.getDeclaringMethod()) === null || _c === void 0 ? void 0 : _c.getDeclaringArkFile().getName().toLowerCase()) !== null && _d !== void 0 ? _d : '' :
298
- '';
392
+ const ptrDeclFileName = this.funPtr instanceof Local_1.Local
393
+ ? ((_d = (_c = (_b = (_a = this.funPtr.getDeclaringStmt()) === null || _a === void 0 ? void 0 : _a.getCfg()) === null || _b === void 0 ? void 0 : _b.getDeclaringMethod()) === null || _c === void 0 ? void 0 : _c.getDeclaringArkFile().getName().toLowerCase()) !== null && _d !== void 0 ? _d : '')
394
+ : '';
299
395
  const isCxxPtrDecl = isCxxLikeFileName(ptrDeclFileName);
300
396
  const isUnknownCxxLike = sigFileName === Const_1.UNKNOWN_FILE_NAME && isCxxPtrDecl;
301
397
  let ptrName = '';
@@ -325,14 +421,16 @@ class ArkPtrInvokeExpr extends AbstractInvokeExpr {
325
421
  strs.push(super.argsToString());
326
422
  return strs.join('');
327
423
  }
328
- getUses() {
329
- let uses = [];
330
- uses.push(this.getFuncPtrLocal());
331
- uses.push(...this.getArgs());
332
- for (const arg of this.getArgs()) {
333
- uses.push(...arg.getUses());
424
+ getUses(acc = []) {
425
+ acc.push(this.getFuncPtrLocal());
426
+ const args = this.getArgs();
427
+ for (let i = 0; i < args.length; i++) {
428
+ acc.push(args[i]);
429
+ }
430
+ for (let i = 0; i < args.length; i++) {
431
+ args[i].getUses(acc);
334
432
  }
335
- return uses;
433
+ return acc;
336
434
  }
337
435
  }
338
436
  exports.ArkPtrInvokeExpr = ArkPtrInvokeExpr;
@@ -344,8 +442,8 @@ class ArkNewExpr extends AbstractExpr {
344
442
  getClassType() {
345
443
  return this.classType;
346
444
  }
347
- getUses() {
348
- return [];
445
+ getUses(acc) {
446
+ return acc !== null && acc !== void 0 ? acc : Value_1.EMPTY_USES;
349
447
  }
350
448
  getType() {
351
449
  return this.classType;
@@ -359,13 +457,21 @@ class ArkNewExpr extends AbstractExpr {
359
457
  *@ returns the ArkNewExpr instance of the current object
360
458
  */
361
459
  inferType(arkMethod) {
362
- var _a, _b;
460
+ var _a;
363
461
  const classSignature = this.classType.getClassSignature();
364
462
  if (classSignature.getDeclaringFileSignature().getFileName() === Const_1.UNKNOWN_FILE_NAME) {
365
463
  const className = classSignature.getClassName();
366
- let type = (_a = ModelUtils_1.ModelUtils.findDeclaredLocal(new Local_1.Local(className), arkMethod, 1)) === null || _a === void 0 ? void 0 : _a.getType();
464
+ let type = ModelUtils_1.ModelUtils.findDeclaredLocalType(className, arkMethod, 1);
465
+ if (TypeInference_1.TypeInference.isUnclearType(type)) {
466
+ // Deterministic local-class resolution along the method scope chain before
467
+ // the file-level fuzzy name search.
468
+ const localClass = ModelUtils_1.ModelUtils.findLocalClassInMethodChain(className, arkMethod);
469
+ if (localClass) {
470
+ type = new Type_1.ClassType(localClass.getSignature());
471
+ }
472
+ }
367
473
  if (TypeInference_1.TypeInference.isUnclearType(type)) {
368
- type = TypeInference_1.TypeInference.inferUnclearRefName(className, arkMethod.getDeclaringArkClass());
474
+ type = TypeInference_1.TypeInference.inferUnclearRefName(className, arkMethod.getDeclaringArkClass(), arkMethod);
369
475
  }
370
476
  // If the type is an alias type, replace with the original type
371
477
  if (type instanceof Type_1.AliasType) {
@@ -378,7 +484,7 @@ class ArkNewExpr extends AbstractExpr {
378
484
  }
379
485
  }
380
486
  if (type && type instanceof Type_1.ClassType) {
381
- const instanceType = (_b = this.constructorSignature(type, arkMethod)) !== null && _b !== void 0 ? _b : type;
487
+ const instanceType = (_a = this.constructorSignature(type, arkMethod)) !== null && _a !== void 0 ? _a : type;
382
488
  this.classType.setClassSignature(instanceType.getClassSignature());
383
489
  TypeInference_1.TypeInference.inferRealGenericTypes(this.classType.getRealGenericTypes(), arkMethod.getDeclaringArkClass());
384
490
  }
@@ -387,12 +493,17 @@ class ArkNewExpr extends AbstractExpr {
387
493
  }
388
494
  constructorSignature(type, arkMethod) {
389
495
  var _a;
390
- const classConstructor = arkMethod.getDeclaringArkFile().getScene().getClass(type.getClassSignature());
496
+ const scene = arkMethod.getDeclaringArkFile().getScene();
497
+ const classConstructor = scene.getClass(type.getClassSignature());
391
498
  if ((classConstructor === null || classConstructor === void 0 ? void 0 : classConstructor.getCategory()) === ArkClass_1.ClassCategory.INTERFACE) {
392
- const type = (_a = classConstructor.getMethodWithName(Const_1.CONSTRUCT_SIGNATURE_NAME)) === null || _a === void 0 ? void 0 : _a.getReturnType();
393
- if (type) {
394
- const returnType = TypeInference_1.TypeInference.replaceAliasType(type);
395
- return returnType instanceof Type_1.ClassType ? returnType : undefined;
499
+ // interface 的 construct-signature 可能在 var 侧构造器类上(如interface Object 的构造签名在 ObjectConstructor)——多实体探测
500
+ const candidates = [classConstructor, ...SdkUtils_1.SdkUtils.getSdkGlobalMemberClasses(classConstructor.getName())];
501
+ for (const candidate of candidates) {
502
+ const returnType = (_a = candidate.getMethodWithName(Const_1.CONSTRUCT_SIGNATURE_NAME)) === null || _a === void 0 ? void 0 : _a.getReturnType();
503
+ if (returnType) {
504
+ const replaced = TypeInference_1.TypeInference.replaceAliasType(returnType);
505
+ return replaced instanceof Type_1.ClassType ? replaced : undefined;
506
+ }
396
507
  }
397
508
  }
398
509
  return undefined;
@@ -431,10 +542,10 @@ class ArkNewArrayExpr extends AbstractExpr {
431
542
  }
432
543
  return this;
433
544
  }
434
- getUses() {
435
- let uses = [this.size];
436
- uses.push(...this.size.getUses());
437
- return uses;
545
+ getUses(acc = []) {
546
+ acc.push(this.size);
547
+ this.size.getUses(acc);
548
+ return acc;
438
549
  }
439
550
  toString() {
440
551
  return 'newarray (' + this.baseType + ')[' + this.size + ']';
@@ -460,11 +571,10 @@ class ArkDeleteExpr extends AbstractExpr {
460
571
  getType() {
461
572
  return Type_1.BooleanType.getInstance();
462
573
  }
463
- getUses() {
464
- const uses = [];
465
- uses.push(this.field);
466
- uses.push(...this.field.getUses());
467
- return uses;
574
+ getUses(acc = []) {
575
+ acc.push(this.field);
576
+ this.field.getUses(acc);
577
+ return acc;
468
578
  }
469
579
  toString() {
470
580
  return 'delete ' + this.field;
@@ -489,11 +599,10 @@ class ArkAwaitExpr extends AbstractExpr {
489
599
  TypeInference_1.TypeInference.inferValueType(this.promise, arkMethod);
490
600
  return this;
491
601
  }
492
- getUses() {
493
- const uses = [];
494
- uses.push(this.promise);
495
- uses.push(...this.promise.getUses());
496
- return uses;
602
+ getUses(acc = []) {
603
+ acc.push(this.promise);
604
+ this.promise.getUses(acc);
605
+ return acc;
497
606
  }
498
607
  toString() {
499
608
  const str = 'await ' + this.promise;
@@ -515,11 +624,10 @@ class ArkYieldExpr extends AbstractExpr {
515
624
  getType() {
516
625
  return this.yieldValue.getType();
517
626
  }
518
- getUses() {
519
- const uses = [];
520
- uses.push(this.yieldValue);
521
- uses.push(...this.yieldValue.getUses());
522
- return uses;
627
+ getUses(acc = []) {
628
+ acc.push(this.yieldValue);
629
+ this.yieldValue.getUses(acc);
630
+ return acc;
523
631
  }
524
632
  toString() {
525
633
  const str = 'yield ' + this.yieldValue;
@@ -616,13 +724,12 @@ class AbstractBinopExpr extends AbstractExpr {
616
724
  }
617
725
  return this.type;
618
726
  }
619
- getUses() {
620
- let uses = [];
621
- uses.push(this.op1);
622
- uses.push(...this.op1.getUses());
623
- uses.push(this.op2);
624
- uses.push(...this.op2.getUses());
625
- return uses;
727
+ getUses(acc = []) {
728
+ acc.push(this.op1);
729
+ this.op1.getUses(acc);
730
+ acc.push(this.op2);
731
+ this.op2.getUses(acc);
732
+ return acc;
626
733
  }
627
734
  toString() {
628
735
  return this.op1 + ' ' + this.operator + ' ' + this.op2;
@@ -813,11 +920,10 @@ class ArkTypeOfExpr extends AbstractExpr {
813
920
  setOp(newOp) {
814
921
  this.op = newOp;
815
922
  }
816
- getUses() {
817
- let uses = [];
818
- uses.push(this.op);
819
- uses.push(...this.op.getUses());
820
- return uses;
923
+ getUses(acc = []) {
924
+ acc.push(this.op);
925
+ this.op.getUses(acc);
926
+ return acc;
821
927
  }
822
928
  getType() {
823
929
  return this.op.getType();
@@ -854,11 +960,10 @@ class ArkInstanceOfExpr extends AbstractExpr {
854
960
  getType() {
855
961
  return Type_1.BooleanType.getInstance();
856
962
  }
857
- getUses() {
858
- let uses = [];
859
- uses.push(this.op);
860
- uses.push(...this.op.getUses());
861
- return uses;
963
+ getUses(acc = []) {
964
+ acc.push(this.op);
965
+ this.op.getUses(acc);
966
+ return acc;
862
967
  }
863
968
  toString() {
864
969
  return this.op + ' instanceof ' + this.checkType;
@@ -888,11 +993,10 @@ class ArkCastExpr extends AbstractExpr {
888
993
  setOp(newOp) {
889
994
  this.op = newOp;
890
995
  }
891
- getUses() {
892
- let uses = [];
893
- uses.push(this.op);
894
- uses.push(...this.op.getUses());
895
- return uses;
996
+ getUses(acc = []) {
997
+ acc.push(this.op);
998
+ this.op.getUses(acc);
999
+ return acc;
896
1000
  }
897
1001
  getType() {
898
1002
  return this.type;
@@ -922,10 +1026,12 @@ class ArkPhiExpr extends AbstractExpr {
922
1026
  this.args = [];
923
1027
  this.argToBlock = new Map();
924
1028
  }
925
- getUses() {
926
- let uses = [];
927
- uses.push(...this.args);
928
- return uses;
1029
+ getUses(acc = []) {
1030
+ const args = this.args;
1031
+ for (let i = 0; i < args.length; i++) {
1032
+ acc.push(args[i]);
1033
+ }
1034
+ return acc;
929
1035
  }
930
1036
  getArgs() {
931
1037
  return this.args;
@@ -973,11 +1079,10 @@ class ArkUnopExpr extends AbstractExpr {
973
1079
  this.op = op;
974
1080
  this.operator = operator;
975
1081
  }
976
- getUses() {
977
- let uses = [];
978
- uses.push(this.op);
979
- uses.push(...this.op.getUses());
980
- return uses;
1082
+ getUses(acc = []) {
1083
+ acc.push(this.op);
1084
+ this.op.getUses(acc);
1085
+ return acc;
981
1086
  }
982
1087
  getOp() {
983
1088
  return this.op;
@@ -1045,7 +1150,7 @@ class AliasTypeExpr extends AbstractExpr {
1045
1150
  return this.originalType;
1046
1151
  }
1047
1152
  setOriginalType(type) {
1048
- return this.originalType = type;
1153
+ return (this.originalType = type);
1049
1154
  }
1050
1155
  getType() {
1051
1156
  function getTypeOfImportInfo(importInfo) {
@@ -1095,11 +1200,12 @@ class AliasTypeExpr extends AbstractExpr {
1095
1200
  * Returns all used values which mainly used for def-use chain analysis.
1096
1201
  * @returns Always returns empty array because her is the alias type definition which has no relationship with value flow.
1097
1202
  */
1098
- getUses() {
1203
+ getUses(acc = []) {
1099
1204
  if (this.originalObject instanceof Local_1.Local) {
1100
- return [this.originalObject];
1205
+ acc.push(this.originalObject);
1206
+ return acc;
1101
1207
  }
1102
- return [];
1208
+ return acc;
1103
1209
  }
1104
1210
  toString() {
1105
1211
  let typeOf = '';
@@ -1111,6 +1217,12 @@ class AliasTypeExpr extends AbstractExpr {
1111
1217
  return `${typeOf}${typeObject.getSignature().toString()}<${this.getRealGenericTypes().join(',')}>`;
1112
1218
  }
1113
1219
  if (typeObject instanceof Type_1.Type) {
1220
+ // Prefer the inferred original type when available: unresolved stub types (e.g. builtin Object stubs living in the temp canonicalizer)
1221
+ // are replaced by the real signatures during type inference, and the display should reflect that.
1222
+ const inferred = this.getOriginalType();
1223
+ if (inferred && inferred !== typeObject) {
1224
+ return `${typeOf}${inferred.toString()}`;
1225
+ }
1114
1226
  return `${typeOf}${typeObject.toString()}`;
1115
1227
  }
1116
1228
  if (typeObject instanceof ArkImport_1.ImportInfo) {
@@ -13,29 +13,12 @@ export declare class Local implements Value, ArkExport {
13
13
  private type;
14
14
  private originalValue;
15
15
  private declaringStmt;
16
- private usedStmts;
16
+ private _usedStmts?;
17
17
  private signature?;
18
18
  private constFlag?;
19
19
  constructor(name: string, type?: Type);
20
20
  inferType(arkMethod: ArkMethod): Local;
21
- /**
22
- * Returns the name of local value.
23
- * @returns The name of local value.
24
- * @example
25
- * 1. get the name of local value.
26
-
27
- ```typescript
28
- arkClass.getDefaultArkMethod()?.getBody().getLocals().forEach(local => {
29
- const arkField = new ArkField();
30
- arkField.setFieldType(ArkField.DEFAULT_ARK_Field);
31
- arkField.setDeclaringClass(defaultClass);
32
- arkField.setType(local.getType());
33
- arkField.setName(local.getName());
34
- arkField.genSignature();
35
- defaultClass.addField(arkField);
36
- });
37
- ```
38
- */
21
+ /** Returns the name of local value. */
39
22
  getName(): string;
40
23
  setName(name: string): void;
41
24
  /**
@@ -70,13 +53,20 @@ export declare class Local implements Value, ArkExport {
70
53
  * Returns an **array** of values which are contained in this local.
71
54
  * @returns An **array** of values used by this local.
72
55
  */
73
- getUses(): Value[];
56
+ getUses(acc?: Value[]): Value[];
74
57
  addUsedStmt(usedStmt: Stmt): void;
58
+ /**
59
+ * The statements using this local, exposed as a property so that consumers reading the field
60
+ * directly keep seeing an array; same value as {@link getUsedStmts}.
61
+ */
62
+ get usedStmts(): Stmt[];
75
63
  /**
76
64
  * Returns an array of statements used by the local, i.e., the statements in which the local participate.
77
65
  * For example, if the code snippet is `let dd = cc + 5;` where `cc` is a local and `cc` only appears once,
78
66
  * then the length of **array** returned is 1 and `Stmts[0]` will be same as the example described
79
67
  * in the `Local.getDeclaringStmt()`.
68
+ * The backing list is allocated on the first {@link addUsedStmt}, so a local nobody uses yields
69
+ * the shared read-only empty array instead of allocating one.
80
70
  * @returns An array of statements used by the local.
81
71
  */
82
72
  getUsedStmts(): Stmt[];
@@ -1 +1 @@
1
- {"version":3,"file":"Local.d.ts","sourceRoot":"","sources":["../../../src/core/base/Local.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAA2B,IAAI,EAAe,MAAM,QAAQ,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAkB,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AAGxF,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAI/C;;GAEG;AACH,qBAAa,KAAM,YAAW,KAAK,EAAE,SAAS;IAC1C,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAO;IAEnB,OAAO,CAAC,aAAa,CAAe;IAEpC,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAC,CAAiB;IACnC,OAAO,CAAC,SAAS,CAAC,CAAU;gBAEhB,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,IAAgC;IASzD,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,KAAK;IAmB7C;;;;;;;;;;;;;;;;;OAiBG;IACI,OAAO,IAAI,MAAM;IAIjB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC;;;OAGG;IACI,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI;IAI5B,gBAAgB,IAAI,KAAK,GAAG,IAAI;IAIhC,gBAAgB,CAAC,aAAa,EAAE,KAAK,GAAG,IAAI;IAInD;;;;;;;;;;;;;;;;;OAiBG;IACI,gBAAgB,IAAI,IAAI,GAAG,IAAI;IAI/B,gBAAgB,CAAC,aAAa,EAAE,IAAI,GAAG,IAAI;IAIlD;;;OAGG;IACI,OAAO,IAAI,KAAK,EAAE;IAIlB,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IAIxC;;;;;;OAMG;IACI,YAAY,IAAI,IAAI,EAAE;IAI7B;;;;;;;;;;;;OAYG;IACI,QAAQ,IAAI,MAAM;IAIlB,aAAa,IAAI,UAAU;IAI3B,YAAY,IAAI,MAAM;IAItB,gBAAgB,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO;IAOrD,YAAY,IAAI,cAAc;IAU9B,YAAY,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI7C,YAAY,IAAI,OAAO;IAOvB,YAAY,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI;CAGnD"}
1
+ {"version":3,"file":"Local.d.ts","sourceRoot":"","sources":["../../../src/core/base/Local.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAA2B,IAAI,EAAe,MAAM,QAAQ,CAAC;AACpE,OAAO,EAAgC,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAI/C;;GAEG;AACH,qBAAa,KAAM,YAAW,KAAK,EAAE,SAAS;IAC1C,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAO;IAEnB,OAAO,CAAC,aAAa,CAAe;IAEpC,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAC,CAAiB;IACnC,OAAO,CAAC,SAAS,CAAC,CAAU;gBAEhB,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,IAAgC;IAQzD,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,KAAK;IAqB7C,uCAAuC;IAChC,OAAO,IAAI,MAAM;IAIjB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC;;;OAGG;IACI,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI;IAI5B,gBAAgB,IAAI,KAAK,GAAG,IAAI;IAIhC,gBAAgB,CAAC,aAAa,EAAE,KAAK,GAAG,IAAI;IAInD;;;;;;;;;;;;;;;;;OAiBG;IACI,gBAAgB,IAAI,IAAI,GAAG,IAAI;IAI/B,gBAAgB,CAAC,aAAa,EAAE,IAAI,GAAG,IAAI;IAIlD;;;OAGG;IACI,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE;IAI/B,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IAIxC;;;OAGG;IACH,IAAW,SAAS,IAAI,IAAI,EAAE,CAE7B;IAED;;;;;;;;OAQG;IACI,YAAY,IAAI,IAAI,EAAE;IAI7B;;;;;;;;;;;;OAYG;IACI,QAAQ,IAAI,MAAM;IAIlB,aAAa,IAAI,UAAU;IAI3B,YAAY,IAAI,MAAM;IAItB,gBAAgB,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO;IAOrD,YAAY,IAAI,cAAc;IAI9B,YAAY,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI7C,YAAY,IAAI,OAAO;IAOvB,YAAY,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI;CAGnD"}