arkanalyzer 1.0.5

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 (322) hide show
  1. package/LICENSE +201 -0
  2. package/README.en.md +88 -0
  3. package/README.md +98 -0
  4. package/docs/HowToCreatePR.md +55 -0
  5. package/docs/HowToHandleIssues.md +155 -0
  6. package/docs/quickstart.pdf +0 -0
  7. package/lib/Config.d.ts +26 -0
  8. package/lib/Config.d.ts.map +1 -0
  9. package/lib/Config.js +128 -0
  10. package/lib/Scene.d.ts +125 -0
  11. package/lib/Scene.d.ts.map +1 -0
  12. package/lib/Scene.js +762 -0
  13. package/lib/callgraph/algorithm/AbstractAnalysis.d.ts +28 -0
  14. package/lib/callgraph/algorithm/AbstractAnalysis.d.ts.map +1 -0
  15. package/lib/callgraph/algorithm/AbstractAnalysis.js +137 -0
  16. package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts +11 -0
  17. package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts.map +1 -0
  18. package/lib/callgraph/algorithm/ClassHierarchyAnalysis.js +71 -0
  19. package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts +16 -0
  20. package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -0
  21. package/lib/callgraph/algorithm/RapidTypeAnalysis.js +147 -0
  22. package/lib/callgraph/common/Statistics.d.ts +58 -0
  23. package/lib/callgraph/common/Statistics.d.ts.map +1 -0
  24. package/lib/callgraph/common/Statistics.js +203 -0
  25. package/lib/callgraph/model/BaseGraph.d.ts +62 -0
  26. package/lib/callgraph/model/BaseGraph.d.ts.map +1 -0
  27. package/lib/callgraph/model/BaseGraph.js +158 -0
  28. package/lib/callgraph/model/CallGraph.d.ts +94 -0
  29. package/lib/callgraph/model/CallGraph.d.ts.map +1 -0
  30. package/lib/callgraph/model/CallGraph.js +339 -0
  31. package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +16 -0
  32. package/lib/callgraph/model/builder/CallGraphBuilder.d.ts.map +1 -0
  33. package/lib/callgraph/model/builder/CallGraphBuilder.js +106 -0
  34. package/lib/callgraph/pointerAnalysis/Context.d.ts +38 -0
  35. package/lib/callgraph/pointerAnalysis/Context.d.ts.map +1 -0
  36. package/lib/callgraph/pointerAnalysis/Context.js +156 -0
  37. package/lib/callgraph/pointerAnalysis/DummyCallCreator.d.ts +23 -0
  38. package/lib/callgraph/pointerAnalysis/DummyCallCreator.d.ts.map +1 -0
  39. package/lib/callgraph/pointerAnalysis/DummyCallCreator.js +104 -0
  40. package/lib/callgraph/pointerAnalysis/Pag.d.ts +209 -0
  41. package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -0
  42. package/lib/callgraph/pointerAnalysis/Pag.js +774 -0
  43. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +88 -0
  44. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -0
  45. package/lib/callgraph/pointerAnalysis/PagBuilder.js +821 -0
  46. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +64 -0
  47. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -0
  48. package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +502 -0
  49. package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts +9 -0
  50. package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts.map +1 -0
  51. package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.js +57 -0
  52. package/lib/callgraph/pointerAnalysis/PtsDS.d.ts +58 -0
  53. package/lib/callgraph/pointerAnalysis/PtsDS.d.ts.map +1 -0
  54. package/lib/callgraph/pointerAnalysis/PtsDS.js +234 -0
  55. package/lib/core/base/Constant.d.ts +17 -0
  56. package/lib/core/base/Constant.d.ts.map +1 -0
  57. package/lib/core/base/Constant.js +53 -0
  58. package/lib/core/base/Decorator.d.ts +15 -0
  59. package/lib/core/base/Decorator.d.ts.map +1 -0
  60. package/lib/core/base/Decorator.js +43 -0
  61. package/lib/core/base/DefUseChain.d.ts +9 -0
  62. package/lib/core/base/DefUseChain.d.ts.map +1 -0
  63. package/lib/core/base/DefUseChain.js +25 -0
  64. package/lib/core/base/Expr.d.ts +219 -0
  65. package/lib/core/base/Expr.d.ts.map +1 -0
  66. package/lib/core/base/Expr.js +896 -0
  67. package/lib/core/base/Local.d.ts +40 -0
  68. package/lib/core/base/Local.d.ts.map +1 -0
  69. package/lib/core/base/Local.js +101 -0
  70. package/lib/core/base/Position.d.ts +39 -0
  71. package/lib/core/base/Position.d.ts.map +1 -0
  72. package/lib/core/base/Position.js +86 -0
  73. package/lib/core/base/Ref.d.ts +75 -0
  74. package/lib/core/base/Ref.d.ts.map +1 -0
  75. package/lib/core/base/Ref.js +286 -0
  76. package/lib/core/base/Stmt.d.ts +109 -0
  77. package/lib/core/base/Stmt.d.ts.map +1 -0
  78. package/lib/core/base/Stmt.js +374 -0
  79. package/lib/core/base/Type.d.ts +220 -0
  80. package/lib/core/base/Type.d.ts.map +1 -0
  81. package/lib/core/base/Type.js +477 -0
  82. package/lib/core/base/Value.d.ts +11 -0
  83. package/lib/core/base/Value.d.ts.map +1 -0
  84. package/lib/core/base/Value.js +16 -0
  85. package/lib/core/common/ArkIRTransformer.d.ts +101 -0
  86. package/lib/core/common/ArkIRTransformer.d.ts.map +1 -0
  87. package/lib/core/common/ArkIRTransformer.js +1674 -0
  88. package/lib/core/common/BodyBuilder.d.ts +10 -0
  89. package/lib/core/common/BodyBuilder.d.ts.map +1 -0
  90. package/lib/core/common/BodyBuilder.js +34 -0
  91. package/lib/core/common/Builtin.d.ts +35 -0
  92. package/lib/core/common/Builtin.d.ts.map +1 -0
  93. package/lib/core/common/Builtin.js +78 -0
  94. package/lib/core/common/CfgBuilder.d.ts +136 -0
  95. package/lib/core/common/CfgBuilder.d.ts.map +1 -0
  96. package/lib/core/common/CfgBuilder.js +1241 -0
  97. package/lib/core/common/Const.d.ts +15 -0
  98. package/lib/core/common/Const.d.ts.map +1 -0
  99. package/lib/core/common/Const.js +34 -0
  100. package/lib/core/common/DummyMainCreater.d.ts +48 -0
  101. package/lib/core/common/DummyMainCreater.d.ts.map +1 -0
  102. package/lib/core/common/DummyMainCreater.js +433 -0
  103. package/lib/core/common/EtsConst.d.ts +65 -0
  104. package/lib/core/common/EtsConst.d.ts.map +1 -0
  105. package/lib/core/common/EtsConst.js +918 -0
  106. package/lib/core/common/ExprUseReplacer.d.ts +18 -0
  107. package/lib/core/common/ExprUseReplacer.d.ts.map +1 -0
  108. package/lib/core/common/ExprUseReplacer.js +88 -0
  109. package/lib/core/common/IRUtils.d.ts +7 -0
  110. package/lib/core/common/IRUtils.d.ts.map +1 -0
  111. package/lib/core/common/IRUtils.js +39 -0
  112. package/lib/core/common/ModelUtils.d.ts +61 -0
  113. package/lib/core/common/ModelUtils.d.ts.map +1 -0
  114. package/lib/core/common/ModelUtils.js +628 -0
  115. package/lib/core/common/RefUseReplacer.d.ts +14 -0
  116. package/lib/core/common/RefUseReplacer.d.ts.map +1 -0
  117. package/lib/core/common/RefUseReplacer.js +50 -0
  118. package/lib/core/common/StmtUseReplacer.d.ts +16 -0
  119. package/lib/core/common/StmtUseReplacer.d.ts.map +1 -0
  120. package/lib/core/common/StmtUseReplacer.js +88 -0
  121. package/lib/core/common/TSConst.d.ts +11 -0
  122. package/lib/core/common/TSConst.d.ts.map +1 -0
  123. package/lib/core/common/TSConst.js +28 -0
  124. package/lib/core/common/TypeInference.d.ts +44 -0
  125. package/lib/core/common/TypeInference.d.ts.map +1 -0
  126. package/lib/core/common/TypeInference.js +519 -0
  127. package/lib/core/common/ValueUtil.d.ts +17 -0
  128. package/lib/core/common/ValueUtil.d.ts.map +1 -0
  129. package/lib/core/common/ValueUtil.js +71 -0
  130. package/lib/core/common/VisibleValue.d.ts +37 -0
  131. package/lib/core/common/VisibleValue.d.ts.map +1 -0
  132. package/lib/core/common/VisibleValue.js +212 -0
  133. package/lib/core/dataflow/DataflowProblem.d.ts +21 -0
  134. package/lib/core/dataflow/DataflowProblem.d.ts.map +1 -0
  135. package/lib/core/dataflow/DataflowProblem.js +33 -0
  136. package/lib/core/dataflow/DataflowResult.d.ts +8 -0
  137. package/lib/core/dataflow/DataflowResult.d.ts.map +1 -0
  138. package/lib/core/dataflow/DataflowResult.js +26 -0
  139. package/lib/core/dataflow/DataflowSolver.d.ts +40 -0
  140. package/lib/core/dataflow/DataflowSolver.d.ts.map +1 -0
  141. package/lib/core/dataflow/DataflowSolver.js +318 -0
  142. package/lib/core/dataflow/Edge.d.ts +16 -0
  143. package/lib/core/dataflow/Edge.d.ts.map +1 -0
  144. package/lib/core/dataflow/Edge.js +40 -0
  145. package/lib/core/dataflow/Fact.d.ts +7 -0
  146. package/lib/core/dataflow/Fact.d.ts.map +1 -0
  147. package/lib/core/dataflow/Fact.js +24 -0
  148. package/lib/core/dataflow/TiantAnalysis.d.ts +37 -0
  149. package/lib/core/dataflow/TiantAnalysis.d.ts.map +1 -0
  150. package/lib/core/dataflow/TiantAnalysis.js +326 -0
  151. package/lib/core/dataflow/UndefinedVariable.d.ts +32 -0
  152. package/lib/core/dataflow/UndefinedVariable.d.ts.map +1 -0
  153. package/lib/core/dataflow/UndefinedVariable.js +235 -0
  154. package/lib/core/dataflow/Util.d.ts +8 -0
  155. package/lib/core/dataflow/Util.d.ts.map +1 -0
  156. package/lib/core/dataflow/Util.js +137 -0
  157. package/lib/core/graph/BasicBlock.d.ts +26 -0
  158. package/lib/core/graph/BasicBlock.d.ts.map +1 -0
  159. package/lib/core/graph/BasicBlock.js +92 -0
  160. package/lib/core/graph/Cfg.d.ts +29 -0
  161. package/lib/core/graph/Cfg.d.ts.map +1 -0
  162. package/lib/core/graph/Cfg.js +154 -0
  163. package/lib/core/graph/DominanceFinder.d.ts +16 -0
  164. package/lib/core/graph/DominanceFinder.d.ts.map +1 -0
  165. package/lib/core/graph/DominanceFinder.js +121 -0
  166. package/lib/core/graph/DominanceTree.d.ts +13 -0
  167. package/lib/core/graph/DominanceTree.d.ts.map +1 -0
  168. package/lib/core/graph/DominanceTree.js +70 -0
  169. package/lib/core/graph/ViewTree.d.ts +115 -0
  170. package/lib/core/graph/ViewTree.d.ts.map +1 -0
  171. package/lib/core/graph/ViewTree.js +16 -0
  172. package/lib/core/graph/builder/ViewTreeBuilder.d.ts +204 -0
  173. package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -0
  174. package/lib/core/graph/builder/ViewTreeBuilder.js +1046 -0
  175. package/lib/core/model/ArkBody.d.ts +22 -0
  176. package/lib/core/model/ArkBody.d.ts.map +1 -0
  177. package/lib/core/model/ArkBody.js +63 -0
  178. package/lib/core/model/ArkClass.d.ts +110 -0
  179. package/lib/core/model/ArkClass.d.ts.map +1 -0
  180. package/lib/core/model/ArkClass.js +315 -0
  181. package/lib/core/model/ArkExport.d.ts +70 -0
  182. package/lib/core/model/ArkExport.d.ts.map +1 -0
  183. package/lib/core/model/ArkExport.js +143 -0
  184. package/lib/core/model/ArkField.d.ts +60 -0
  185. package/lib/core/model/ArkField.d.ts.map +1 -0
  186. package/lib/core/model/ArkField.js +157 -0
  187. package/lib/core/model/ArkFile.d.ts +62 -0
  188. package/lib/core/model/ArkFile.d.ts.map +1 -0
  189. package/lib/core/model/ArkFile.js +160 -0
  190. package/lib/core/model/ArkImport.d.ts +43 -0
  191. package/lib/core/model/ArkImport.d.ts.map +1 -0
  192. package/lib/core/model/ArkImport.js +109 -0
  193. package/lib/core/model/ArkMethod.d.ts +76 -0
  194. package/lib/core/model/ArkMethod.d.ts.map +1 -0
  195. package/lib/core/model/ArkMethod.js +235 -0
  196. package/lib/core/model/ArkNamespace.d.ts +65 -0
  197. package/lib/core/model/ArkNamespace.d.ts.map +1 -0
  198. package/lib/core/model/ArkNamespace.js +182 -0
  199. package/lib/core/model/ArkSignature.d.ts +98 -0
  200. package/lib/core/model/ArkSignature.d.ts.map +1 -0
  201. package/lib/core/model/ArkSignature.js +281 -0
  202. package/lib/core/model/builder/ArkClassBuilder.d.ts +13 -0
  203. package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -0
  204. package/lib/core/model/builder/ArkClassBuilder.js +422 -0
  205. package/lib/core/model/builder/ArkExportBuilder.d.ts +25 -0
  206. package/lib/core/model/builder/ArkExportBuilder.d.ts.map +1 -0
  207. package/lib/core/model/builder/ArkExportBuilder.js +207 -0
  208. package/lib/core/model/builder/ArkFieldBuilder.d.ts +9 -0
  209. package/lib/core/model/builder/ArkFieldBuilder.d.ts.map +1 -0
  210. package/lib/core/model/builder/ArkFieldBuilder.js +189 -0
  211. package/lib/core/model/builder/ArkFileBuilder.d.ts +10 -0
  212. package/lib/core/model/builder/ArkFileBuilder.d.ts.map +1 -0
  213. package/lib/core/model/builder/ArkFileBuilder.js +164 -0
  214. package/lib/core/model/builder/ArkImportBuilder.d.ts +4 -0
  215. package/lib/core/model/builder/ArkImportBuilder.d.ts.map +1 -0
  216. package/lib/core/model/builder/ArkImportBuilder.js +125 -0
  217. package/lib/core/model/builder/ArkMethodBuilder.d.ts +60 -0
  218. package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -0
  219. package/lib/core/model/builder/ArkMethodBuilder.js +419 -0
  220. package/lib/core/model/builder/ArkNamespaceBuilder.d.ts +5 -0
  221. package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -0
  222. package/lib/core/model/builder/ArkNamespaceBuilder.js +171 -0
  223. package/lib/core/model/builder/ArkSignatureBuilder.d.ts +9 -0
  224. package/lib/core/model/builder/ArkSignatureBuilder.d.ts.map +1 -0
  225. package/lib/core/model/builder/ArkSignatureBuilder.js +40 -0
  226. package/lib/core/model/builder/builderUtils.d.ts +18 -0
  227. package/lib/core/model/builder/builderUtils.d.ts.map +1 -0
  228. package/lib/core/model/builder/builderUtils.js +449 -0
  229. package/lib/index.d.ts +77 -0
  230. package/lib/index.d.ts.map +1 -0
  231. package/lib/index.js +190 -0
  232. package/lib/save/ArkStream.d.ts +24 -0
  233. package/lib/save/ArkStream.d.ts.map +1 -0
  234. package/lib/save/ArkStream.js +83 -0
  235. package/lib/save/DotPrinter.d.ts +48 -0
  236. package/lib/save/DotPrinter.d.ts.map +1 -0
  237. package/lib/save/DotPrinter.js +229 -0
  238. package/lib/save/GraphPrinter.d.ts +17 -0
  239. package/lib/save/GraphPrinter.d.ts.map +1 -0
  240. package/lib/save/GraphPrinter.js +135 -0
  241. package/lib/save/JsonPrinter.d.ts +28 -0
  242. package/lib/save/JsonPrinter.d.ts.map +1 -0
  243. package/lib/save/JsonPrinter.js +511 -0
  244. package/lib/save/Printer.d.ts +17 -0
  245. package/lib/save/Printer.d.ts.map +1 -0
  246. package/lib/save/Printer.js +27 -0
  247. package/lib/save/PrinterBuilder.d.ts +38 -0
  248. package/lib/save/PrinterBuilder.d.ts.map +1 -0
  249. package/lib/save/PrinterBuilder.js +102 -0
  250. package/lib/save/serializeArkIR.d.ts +3 -0
  251. package/lib/save/serializeArkIR.d.ts.map +1 -0
  252. package/lib/save/serializeArkIR.js +166 -0
  253. package/lib/save/source/SourceBase.d.ts +32 -0
  254. package/lib/save/source/SourceBase.d.ts.map +1 -0
  255. package/lib/save/source/SourceBase.js +93 -0
  256. package/lib/save/source/SourceBody.d.ts +60 -0
  257. package/lib/save/source/SourceBody.d.ts.map +1 -0
  258. package/lib/save/source/SourceBody.js +292 -0
  259. package/lib/save/source/SourceClass.d.ts +27 -0
  260. package/lib/save/source/SourceClass.d.ts.map +1 -0
  261. package/lib/save/source/SourceClass.js +202 -0
  262. package/lib/save/source/SourceField.d.ts +15 -0
  263. package/lib/save/source/SourceField.d.ts.map +1 -0
  264. package/lib/save/source/SourceField.js +68 -0
  265. package/lib/save/source/SourceFilePrinter.d.ts +14 -0
  266. package/lib/save/source/SourceFilePrinter.d.ts.map +1 -0
  267. package/lib/save/source/SourceFilePrinter.js +73 -0
  268. package/lib/save/source/SourceMethod.d.ts +24 -0
  269. package/lib/save/source/SourceMethod.d.ts.map +1 -0
  270. package/lib/save/source/SourceMethod.js +170 -0
  271. package/lib/save/source/SourceModule.d.ts +18 -0
  272. package/lib/save/source/SourceModule.d.ts.map +1 -0
  273. package/lib/save/source/SourceModule.js +120 -0
  274. package/lib/save/source/SourceNamespace.d.ts +13 -0
  275. package/lib/save/source/SourceNamespace.d.ts.map +1 -0
  276. package/lib/save/source/SourceNamespace.js +80 -0
  277. package/lib/save/source/SourceStmt.d.ts +172 -0
  278. package/lib/save/source/SourceStmt.d.ts.map +1 -0
  279. package/lib/save/source/SourceStmt.js +757 -0
  280. package/lib/save/source/SourceTransformer.d.ts +37 -0
  281. package/lib/save/source/SourceTransformer.d.ts.map +1 -0
  282. package/lib/save/source/SourceTransformer.js +338 -0
  283. package/lib/save/source/SourceUtils.d.ts +25 -0
  284. package/lib/save/source/SourceUtils.d.ts.map +1 -0
  285. package/lib/save/source/SourceUtils.js +201 -0
  286. package/lib/transformer/FunctionTransformer.d.ts +3 -0
  287. package/lib/transformer/FunctionTransformer.d.ts.map +1 -0
  288. package/lib/transformer/FunctionTransformer.js +17 -0
  289. package/lib/transformer/SceneTransformer.d.ts +3 -0
  290. package/lib/transformer/SceneTransformer.d.ts.map +1 -0
  291. package/lib/transformer/SceneTransformer.js +17 -0
  292. package/lib/transformer/StaticSingleAssignmentFormer.d.ts +13 -0
  293. package/lib/transformer/StaticSingleAssignmentFormer.d.ts.map +1 -0
  294. package/lib/transformer/StaticSingleAssignmentFormer.js +259 -0
  295. package/lib/transformer/Transformer.d.ts +7 -0
  296. package/lib/transformer/Transformer.d.ts.map +1 -0
  297. package/lib/transformer/Transformer.js +22 -0
  298. package/lib/utils/CfgStructualAnalysis.d.ts +93 -0
  299. package/lib/utils/CfgStructualAnalysis.d.ts.map +1 -0
  300. package/lib/utils/CfgStructualAnalysis.js +955 -0
  301. package/lib/utils/FileUtils.d.ts +18 -0
  302. package/lib/utils/FileUtils.d.ts.map +1 -0
  303. package/lib/utils/FileUtils.js +131 -0
  304. package/lib/utils/callGraphUtils.d.ts +31 -0
  305. package/lib/utils/callGraphUtils.d.ts.map +1 -0
  306. package/lib/utils/callGraphUtils.js +208 -0
  307. package/lib/utils/entryMethodUtils.d.ts +16 -0
  308. package/lib/utils/entryMethodUtils.d.ts.map +1 -0
  309. package/lib/utils/entryMethodUtils.js +139 -0
  310. package/lib/utils/getAllFiles.d.ts +10 -0
  311. package/lib/utils/getAllFiles.d.ts.map +1 -0
  312. package/lib/utils/getAllFiles.js +91 -0
  313. package/lib/utils/json5parser.d.ts +7 -0
  314. package/lib/utils/json5parser.d.ts.map +1 -0
  315. package/lib/utils/json5parser.js +146 -0
  316. package/lib/utils/logger.d.ts +19 -0
  317. package/lib/utils/logger.d.ts.map +1 -0
  318. package/lib/utils/logger.js +90 -0
  319. package/lib/utils/pathTransfer.d.ts +2 -0
  320. package/lib/utils/pathTransfer.d.ts.map +1 -0
  321. package/lib/utils/pathTransfer.js +25 -0
  322. package/package.json +29 -0
package/lib/index.js ADDED
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2024 Huawei Device Co., Ltd.
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
28
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
29
+ };
30
+ Object.defineProperty(exports, "__esModule", { value: true });
31
+ exports.DominanceTree = exports.DominanceFinder = exports.Cfg = exports.BasicBlock = exports.UndefinedVariableSolver = exports.UndefinedVariableChecker = exports.TiantAnalysisSolver = exports.TiantAnalysisChecker = exports.Fact = exports.PathEdge = exports.PathEdgePoint = exports.Edge = exports.factEqual = exports.DataflowSolver = exports.DataflowResult = exports.DataflowProblem = exports.Scope = exports.VisibleValue = exports.ValueUtil = exports.TypeInference = exports.StmtUseReplacer = exports.RefUseReplacer = exports.IRUtils = exports.ExprUseReplacer = exports.DummyMainCreater = exports.ModelUtils = exports.FullPosition = exports.LineColPosition = exports.Local = exports.DefUseChain = exports.Decorator = exports.Constant = exports.DiffPTData = exports.PtsSet = exports.PointerAnalysisConfig = exports.PointerAnalysis = exports.PagBuilder = exports.CSFuncID = exports.DummyCallCreator = exports.KLimitedContextSensitive = exports.CallGraphBuilder = exports.BaseGraph = exports.BaseNode = exports.BaseEdge = exports.CGStat = exports.PAGStat = exports.PTAStat = exports.RapidTypeAnalysis = exports.ClassHierarchyAnalysis = exports.AbstractAnalysis = void 0;
32
+ exports.GraphPrinter = exports.JsonPrinter = exports.SourceFilePrinter = exports.SourceNamespacePrinter = exports.SourceClassPrinter = exports.SourceMethodPrinter = exports.DotFilePrinter = exports.DotNamespacePrinter = exports.DotClassPrinter = exports.DotMethodPrinter = exports.PrinterBuilder = exports.Printer = exports.Scene = exports.SceneConfig = exports.ArkBody = exports.ImportInfo = exports.ExportInfo = exports.ArkField = exports.ArkMethod = exports.ArkClass = exports.ArkNamespace = exports.ArkFile = void 0;
33
+ // callgraph/algorithm
34
+ var AbstractAnalysis_1 = require("./callgraph/algorithm/AbstractAnalysis");
35
+ Object.defineProperty(exports, "AbstractAnalysis", { enumerable: true, get: function () { return AbstractAnalysis_1.AbstractAnalysis; } });
36
+ var ClassHierarchyAnalysis_1 = require("./callgraph/algorithm/ClassHierarchyAnalysis");
37
+ Object.defineProperty(exports, "ClassHierarchyAnalysis", { enumerable: true, get: function () { return ClassHierarchyAnalysis_1.ClassHierarchyAnalysis; } });
38
+ var RapidTypeAnalysis_1 = require("./callgraph/algorithm/RapidTypeAnalysis");
39
+ Object.defineProperty(exports, "RapidTypeAnalysis", { enumerable: true, get: function () { return RapidTypeAnalysis_1.RapidTypeAnalysis; } });
40
+ // callgraph/common
41
+ var Statistics_1 = require("./callgraph/common/Statistics");
42
+ Object.defineProperty(exports, "PTAStat", { enumerable: true, get: function () { return Statistics_1.PTAStat; } });
43
+ Object.defineProperty(exports, "PAGStat", { enumerable: true, get: function () { return Statistics_1.PAGStat; } });
44
+ Object.defineProperty(exports, "CGStat", { enumerable: true, get: function () { return Statistics_1.CGStat; } });
45
+ // callgraph/model
46
+ var BaseGraph_1 = require("./callgraph/model/BaseGraph");
47
+ Object.defineProperty(exports, "BaseEdge", { enumerable: true, get: function () { return BaseGraph_1.BaseEdge; } });
48
+ Object.defineProperty(exports, "BaseNode", { enumerable: true, get: function () { return BaseGraph_1.BaseNode; } });
49
+ Object.defineProperty(exports, "BaseGraph", { enumerable: true, get: function () { return BaseGraph_1.BaseGraph; } });
50
+ __exportStar(require("./callgraph/model/CallGraph"), exports);
51
+ var CallGraphBuilder_1 = require("./callgraph/model/builder/CallGraphBuilder");
52
+ Object.defineProperty(exports, "CallGraphBuilder", { enumerable: true, get: function () { return CallGraphBuilder_1.CallGraphBuilder; } });
53
+ // callgraph/pointerAnalysis
54
+ var Context_1 = require("./callgraph/pointerAnalysis/Context");
55
+ Object.defineProperty(exports, "KLimitedContextSensitive", { enumerable: true, get: function () { return Context_1.KLimitedContextSensitive; } });
56
+ var DummyCallCreator_1 = require("./callgraph/pointerAnalysis/DummyCallCreator");
57
+ Object.defineProperty(exports, "DummyCallCreator", { enumerable: true, get: function () { return DummyCallCreator_1.DummyCallCreator; } });
58
+ __exportStar(require("./callgraph/pointerAnalysis/Pag"), exports);
59
+ var PagBuilder_1 = require("./callgraph/pointerAnalysis/PagBuilder");
60
+ Object.defineProperty(exports, "CSFuncID", { enumerable: true, get: function () { return PagBuilder_1.CSFuncID; } });
61
+ Object.defineProperty(exports, "PagBuilder", { enumerable: true, get: function () { return PagBuilder_1.PagBuilder; } });
62
+ var PointerAnalysis_1 = require("./callgraph/pointerAnalysis/PointerAnalysis");
63
+ Object.defineProperty(exports, "PointerAnalysis", { enumerable: true, get: function () { return PointerAnalysis_1.PointerAnalysis; } });
64
+ var PointerAnalysisConfig_1 = require("./callgraph/pointerAnalysis/PointerAnalysisConfig");
65
+ Object.defineProperty(exports, "PointerAnalysisConfig", { enumerable: true, get: function () { return PointerAnalysisConfig_1.PointerAnalysisConfig; } });
66
+ var PtsDS_1 = require("./callgraph/pointerAnalysis/PtsDS");
67
+ Object.defineProperty(exports, "PtsSet", { enumerable: true, get: function () { return PtsDS_1.PtsSet; } });
68
+ Object.defineProperty(exports, "DiffPTData", { enumerable: true, get: function () { return PtsDS_1.DiffPTData; } });
69
+ // core/base
70
+ var Constant_1 = require("./core/base/Constant");
71
+ Object.defineProperty(exports, "Constant", { enumerable: true, get: function () { return Constant_1.Constant; } });
72
+ var Decorator_1 = require("./core/base/Decorator");
73
+ Object.defineProperty(exports, "Decorator", { enumerable: true, get: function () { return Decorator_1.Decorator; } });
74
+ var DefUseChain_1 = require("./core/base/DefUseChain");
75
+ Object.defineProperty(exports, "DefUseChain", { enumerable: true, get: function () { return DefUseChain_1.DefUseChain; } });
76
+ __exportStar(require("./core/base/Expr"), exports);
77
+ var Local_1 = require("./core/base/Local");
78
+ Object.defineProperty(exports, "Local", { enumerable: true, get: function () { return Local_1.Local; } });
79
+ var Position_1 = require("./core/base/Position");
80
+ Object.defineProperty(exports, "LineColPosition", { enumerable: true, get: function () { return Position_1.LineColPosition; } });
81
+ Object.defineProperty(exports, "FullPosition", { enumerable: true, get: function () { return Position_1.FullPosition; } });
82
+ __exportStar(require("./core/base/Ref"), exports);
83
+ __exportStar(require("./core/base/Stmt"), exports);
84
+ __exportStar(require("./core/base/Type"), exports);
85
+ // core/common
86
+ var ModelUtils_1 = require("./core/common/ModelUtils");
87
+ Object.defineProperty(exports, "ModelUtils", { enumerable: true, get: function () { return ModelUtils_1.ModelUtils; } });
88
+ __exportStar(require("./core/common/Const"), exports);
89
+ var DummyMainCreater_1 = require("./core/common/DummyMainCreater");
90
+ Object.defineProperty(exports, "DummyMainCreater", { enumerable: true, get: function () { return DummyMainCreater_1.DummyMainCreater; } });
91
+ __exportStar(require("./core/common/EtsConst"), exports);
92
+ var ExprUseReplacer_1 = require("./core/common/ExprUseReplacer");
93
+ Object.defineProperty(exports, "ExprUseReplacer", { enumerable: true, get: function () { return ExprUseReplacer_1.ExprUseReplacer; } });
94
+ var IRUtils_1 = require("./core/common/IRUtils");
95
+ Object.defineProperty(exports, "IRUtils", { enumerable: true, get: function () { return IRUtils_1.IRUtils; } });
96
+ var RefUseReplacer_1 = require("./core/common/RefUseReplacer");
97
+ Object.defineProperty(exports, "RefUseReplacer", { enumerable: true, get: function () { return RefUseReplacer_1.RefUseReplacer; } });
98
+ var StmtUseReplacer_1 = require("./core/common/StmtUseReplacer");
99
+ Object.defineProperty(exports, "StmtUseReplacer", { enumerable: true, get: function () { return StmtUseReplacer_1.StmtUseReplacer; } });
100
+ __exportStar(require("./core/common/TSConst"), exports);
101
+ var TypeInference_1 = require("./core/common/TypeInference");
102
+ Object.defineProperty(exports, "TypeInference", { enumerable: true, get: function () { return TypeInference_1.TypeInference; } });
103
+ var ValueUtil_1 = require("./core/common/ValueUtil");
104
+ Object.defineProperty(exports, "ValueUtil", { enumerable: true, get: function () { return ValueUtil_1.ValueUtil; } });
105
+ var VisibleValue_1 = require("./core/common/VisibleValue");
106
+ Object.defineProperty(exports, "VisibleValue", { enumerable: true, get: function () { return VisibleValue_1.VisibleValue; } });
107
+ Object.defineProperty(exports, "Scope", { enumerable: true, get: function () { return VisibleValue_1.Scope; } });
108
+ // core/dataflow
109
+ var DataflowProblem_1 = require("./core/dataflow/DataflowProblem");
110
+ Object.defineProperty(exports, "DataflowProblem", { enumerable: true, get: function () { return DataflowProblem_1.DataflowProblem; } });
111
+ var DataflowResult_1 = require("./core/dataflow/DataflowResult");
112
+ Object.defineProperty(exports, "DataflowResult", { enumerable: true, get: function () { return DataflowResult_1.DataflowResult; } });
113
+ var DataflowSolver_1 = require("./core/dataflow/DataflowSolver");
114
+ Object.defineProperty(exports, "DataflowSolver", { enumerable: true, get: function () { return DataflowSolver_1.DataflowSolver; } });
115
+ Object.defineProperty(exports, "factEqual", { enumerable: true, get: function () { return DataflowSolver_1.factEqual; } });
116
+ var Edge_1 = require("./core/dataflow/Edge");
117
+ Object.defineProperty(exports, "Edge", { enumerable: true, get: function () { return Edge_1.Edge; } });
118
+ Object.defineProperty(exports, "PathEdgePoint", { enumerable: true, get: function () { return Edge_1.PathEdgePoint; } });
119
+ Object.defineProperty(exports, "PathEdge", { enumerable: true, get: function () { return Edge_1.PathEdge; } });
120
+ var Fact_1 = require("./core/dataflow/Fact");
121
+ Object.defineProperty(exports, "Fact", { enumerable: true, get: function () { return Fact_1.Fact; } });
122
+ var TiantAnalysis_1 = require("./core/dataflow/TiantAnalysis");
123
+ Object.defineProperty(exports, "TiantAnalysisChecker", { enumerable: true, get: function () { return TiantAnalysis_1.TiantAnalysisChecker; } });
124
+ Object.defineProperty(exports, "TiantAnalysisSolver", { enumerable: true, get: function () { return TiantAnalysis_1.TiantAnalysisSolver; } });
125
+ var UndefinedVariable_1 = require("./core/dataflow/UndefinedVariable");
126
+ Object.defineProperty(exports, "UndefinedVariableChecker", { enumerable: true, get: function () { return UndefinedVariable_1.UndefinedVariableChecker; } });
127
+ Object.defineProperty(exports, "UndefinedVariableSolver", { enumerable: true, get: function () { return UndefinedVariable_1.UndefinedVariableSolver; } });
128
+ // core/graph
129
+ var BasicBlock_1 = require("./core/graph/BasicBlock");
130
+ Object.defineProperty(exports, "BasicBlock", { enumerable: true, get: function () { return BasicBlock_1.BasicBlock; } });
131
+ var Cfg_1 = require("./core/graph/Cfg");
132
+ Object.defineProperty(exports, "Cfg", { enumerable: true, get: function () { return Cfg_1.Cfg; } });
133
+ var DominanceFinder_1 = require("./core/graph/DominanceFinder");
134
+ Object.defineProperty(exports, "DominanceFinder", { enumerable: true, get: function () { return DominanceFinder_1.DominanceFinder; } });
135
+ var DominanceTree_1 = require("./core/graph/DominanceTree");
136
+ Object.defineProperty(exports, "DominanceTree", { enumerable: true, get: function () { return DominanceTree_1.DominanceTree; } });
137
+ // core/model
138
+ var ArkFile_1 = require("./core/model/ArkFile");
139
+ Object.defineProperty(exports, "ArkFile", { enumerable: true, get: function () { return ArkFile_1.ArkFile; } });
140
+ var ArkNamespace_1 = require("./core/model/ArkNamespace");
141
+ Object.defineProperty(exports, "ArkNamespace", { enumerable: true, get: function () { return ArkNamespace_1.ArkNamespace; } });
142
+ var ArkClass_1 = require("./core/model/ArkClass");
143
+ Object.defineProperty(exports, "ArkClass", { enumerable: true, get: function () { return ArkClass_1.ArkClass; } });
144
+ var ArkMethod_1 = require("./core/model/ArkMethod");
145
+ Object.defineProperty(exports, "ArkMethod", { enumerable: true, get: function () { return ArkMethod_1.ArkMethod; } });
146
+ var ArkField_1 = require("./core/model/ArkField");
147
+ Object.defineProperty(exports, "ArkField", { enumerable: true, get: function () { return ArkField_1.ArkField; } });
148
+ var ArkExport_1 = require("./core/model/ArkExport");
149
+ Object.defineProperty(exports, "ExportInfo", { enumerable: true, get: function () { return ArkExport_1.ExportInfo; } });
150
+ var ArkImport_1 = require("./core/model/ArkImport");
151
+ Object.defineProperty(exports, "ImportInfo", { enumerable: true, get: function () { return ArkImport_1.ImportInfo; } });
152
+ var ArkBody_1 = require("./core/model/ArkBody");
153
+ Object.defineProperty(exports, "ArkBody", { enumerable: true, get: function () { return ArkBody_1.ArkBody; } });
154
+ __exportStar(require("./core/model/ArkSignature"), exports);
155
+ __exportStar(require("./core/model/builder/ArkSignatureBuilder"), exports);
156
+ var Config_1 = require("./Config");
157
+ Object.defineProperty(exports, "SceneConfig", { enumerable: true, get: function () { return Config_1.SceneConfig; } });
158
+ var Scene_1 = require("./Scene");
159
+ Object.defineProperty(exports, "Scene", { enumerable: true, get: function () { return Scene_1.Scene; } });
160
+ // save
161
+ var Printer_1 = require("./save/Printer");
162
+ Object.defineProperty(exports, "Printer", { enumerable: true, get: function () { return Printer_1.Printer; } });
163
+ var PrinterBuilder_1 = require("./save/PrinterBuilder");
164
+ Object.defineProperty(exports, "PrinterBuilder", { enumerable: true, get: function () { return PrinterBuilder_1.PrinterBuilder; } });
165
+ var DotPrinter_1 = require("./save/DotPrinter");
166
+ Object.defineProperty(exports, "DotMethodPrinter", { enumerable: true, get: function () { return DotPrinter_1.DotMethodPrinter; } });
167
+ Object.defineProperty(exports, "DotClassPrinter", { enumerable: true, get: function () { return DotPrinter_1.DotClassPrinter; } });
168
+ Object.defineProperty(exports, "DotNamespacePrinter", { enumerable: true, get: function () { return DotPrinter_1.DotNamespacePrinter; } });
169
+ Object.defineProperty(exports, "DotFilePrinter", { enumerable: true, get: function () { return DotPrinter_1.DotFilePrinter; } });
170
+ var SourceMethod_1 = require("./save/source/SourceMethod");
171
+ Object.defineProperty(exports, "SourceMethodPrinter", { enumerable: true, get: function () { return SourceMethod_1.SourceMethod; } });
172
+ var SourceClass_1 = require("./save/source/SourceClass");
173
+ Object.defineProperty(exports, "SourceClassPrinter", { enumerable: true, get: function () { return SourceClass_1.SourceClass; } });
174
+ var SourceNamespace_1 = require("./save/source/SourceNamespace");
175
+ Object.defineProperty(exports, "SourceNamespacePrinter", { enumerable: true, get: function () { return SourceNamespace_1.SourceNamespace; } });
176
+ var SourceFilePrinter_1 = require("./save/source/SourceFilePrinter");
177
+ Object.defineProperty(exports, "SourceFilePrinter", { enumerable: true, get: function () { return SourceFilePrinter_1.SourceFilePrinter; } });
178
+ var JsonPrinter_1 = require("./save/JsonPrinter");
179
+ Object.defineProperty(exports, "JsonPrinter", { enumerable: true, get: function () { return JsonPrinter_1.JsonPrinter; } });
180
+ var GraphPrinter_1 = require("./save/GraphPrinter");
181
+ Object.defineProperty(exports, "GraphPrinter", { enumerable: true, get: function () { return GraphPrinter_1.GraphPrinter; } });
182
+ // transformer
183
+ __exportStar(require("./transformer/StaticSingleAssignmentFormer"), exports);
184
+ // utils
185
+ __exportStar(require("./utils/callGraphUtils"), exports);
186
+ __exportStar(require("./utils/entryMethodUtils"), exports);
187
+ __exportStar(require("./utils/FileUtils"), exports);
188
+ __exportStar(require("./utils/getAllFiles"), exports);
189
+ __exportStar(require("./utils/json5parser"), exports);
190
+ __exportStar(require("./utils/pathTransfer"), exports);
@@ -0,0 +1,24 @@
1
+ /// <reference types="node" />
2
+ import fs from 'fs';
3
+ export declare class ArkCodeBuffer {
4
+ output: string[];
5
+ indent: string;
6
+ constructor(indent?: string);
7
+ write(s: string): this;
8
+ writeLine(s: string): this;
9
+ writeSpace(s: string): this;
10
+ writeStringLiteral(s: string): this;
11
+ writeIndent(): this;
12
+ incIndent(): this;
13
+ decIndent(): this;
14
+ getIndent(): string;
15
+ toString(): string;
16
+ clear(): void;
17
+ }
18
+ export declare class ArkStream extends ArkCodeBuffer {
19
+ streamOut: fs.WriteStream;
20
+ constructor(streamOut: fs.WriteStream);
21
+ write(s: string): this;
22
+ close(): void;
23
+ }
24
+ //# sourceMappingURL=ArkStream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArkStream.d.ts","sourceRoot":"","sources":["../../src/save/ArkStream.ts"],"names":[],"mappings":";AAeA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,qBAAa,aAAa;IACtB,MAAM,EAAE,MAAM,EAAE,CAAM;IACtB,MAAM,EAAE,MAAM,CAAM;gBAER,MAAM,GAAE,MAAW;IAIxB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKtB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAM1B,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAS3B,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKnC,WAAW,IAAI,IAAI;IAKnB,SAAS,IAAI,IAAI;IAKjB,SAAS,IAAI,IAAI;IAOjB,SAAS,IAAI,MAAM;IAInB,QAAQ,IAAI,MAAM;IAIlB,KAAK;CAGf;AAED,qBAAa,SAAU,SAAQ,aAAa;IACxC,SAAS,EAAE,EAAE,CAAC,WAAW,CAAC;gBAEd,SAAS,EAAE,EAAE,CAAC,WAAW;IAK9B,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKtB,KAAK,IAAI,IAAI;CAGvB"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2024 Huawei Device Co., Ltd.
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.ArkStream = exports.ArkCodeBuffer = void 0;
18
+ class ArkCodeBuffer {
19
+ constructor(indent = '') {
20
+ this.output = [];
21
+ this.indent = '';
22
+ this.indent = indent;
23
+ }
24
+ write(s) {
25
+ this.output.push(s);
26
+ return this;
27
+ }
28
+ writeLine(s) {
29
+ this.write(s);
30
+ this.write('\n');
31
+ return this;
32
+ }
33
+ writeSpace(s) {
34
+ if (s.length == 0) {
35
+ return this;
36
+ }
37
+ this.write(s);
38
+ this.write(' ');
39
+ return this;
40
+ }
41
+ writeStringLiteral(s) {
42
+ this.write(`'${s}'`);
43
+ return this;
44
+ }
45
+ writeIndent() {
46
+ this.write(this.indent);
47
+ return this;
48
+ }
49
+ incIndent() {
50
+ this.indent += ' ';
51
+ return this;
52
+ }
53
+ decIndent() {
54
+ if (this.indent.length >= 2) {
55
+ this.indent = this.indent.substring(0, this.indent.length - 2);
56
+ }
57
+ return this;
58
+ }
59
+ getIndent() {
60
+ return this.indent;
61
+ }
62
+ toString() {
63
+ return this.output.join('');
64
+ }
65
+ clear() {
66
+ this.output = [];
67
+ }
68
+ }
69
+ exports.ArkCodeBuffer = ArkCodeBuffer;
70
+ class ArkStream extends ArkCodeBuffer {
71
+ constructor(streamOut) {
72
+ super('');
73
+ this.streamOut = streamOut;
74
+ }
75
+ write(s) {
76
+ this.streamOut.write(s);
77
+ return this;
78
+ }
79
+ close() {
80
+ this.streamOut.close();
81
+ }
82
+ }
83
+ exports.ArkStream = ArkStream;
@@ -0,0 +1,48 @@
1
+ import { ArkClass } from '../core/model/ArkClass';
2
+ import { ArkFile } from '../core/model/ArkFile';
3
+ import { ArkMethod } from '../core/model/ArkMethod';
4
+ import { ArkNamespace } from '../core/model/ArkNamespace';
5
+ import { Printer } from './Printer';
6
+ /**
7
+ * @category save
8
+ */
9
+ export declare class DotMethodPrinter extends Printer {
10
+ method: ArkMethod;
11
+ nesting: boolean;
12
+ constructor(method: ArkMethod, nesting?: boolean);
13
+ dump(): string;
14
+ dumpOriginal(): string;
15
+ protected stringHashCode(name: string): number;
16
+ private printBlocks;
17
+ private getBlockContent;
18
+ }
19
+ /**
20
+ * @category save
21
+ */
22
+ export declare class DotClassPrinter extends Printer {
23
+ cls: ArkClass;
24
+ nesting: boolean;
25
+ constructor(cls: ArkClass, nesting?: boolean);
26
+ dump(): string;
27
+ dumpOriginal(): string;
28
+ }
29
+ /**
30
+ * @category save
31
+ */
32
+ export declare class DotNamespacePrinter extends Printer {
33
+ ns: ArkNamespace;
34
+ nesting: boolean;
35
+ constructor(ns: ArkNamespace, nesting?: boolean);
36
+ dump(): string;
37
+ dumpOriginal(): string;
38
+ }
39
+ /**
40
+ * @category save
41
+ */
42
+ export declare class DotFilePrinter extends Printer {
43
+ arkFile: ArkFile;
44
+ constructor(arkFile: ArkFile);
45
+ dump(): string;
46
+ dumpOriginal(): string;
47
+ }
48
+ //# sourceMappingURL=DotPrinter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DotPrinter.d.ts","sourceRoot":"","sources":["../../src/save/DotPrinter.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,OAAO;IACzC,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;gBAEL,MAAM,EAAE,SAAS,EAAE,OAAO,GAAE,OAAe;IAMhD,IAAI,IAAI,MAAM;IAmBd,YAAY,IAAI,MAAM;IAoB7B,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAQ9C,OAAO,CAAC,WAAW;IAuBnB,OAAO,CAAC,eAAe;CAO1B;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,OAAO;IACxC,GAAG,EAAE,QAAQ,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;gBAEL,GAAG,EAAE,QAAQ,EAAE,OAAO,GAAE,OAAe;IAM5C,IAAI,IAAI,MAAM;IAoBd,YAAY,IAAI,MAAM;CAmBhC;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,OAAO;IAC5C,EAAE,EAAE,YAAY,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;gBAEL,EAAE,EAAE,YAAY,EAAE,OAAO,GAAE,OAAe;IAM/C,IAAI,IAAI,MAAM;IAoBd,YAAY,IAAI,MAAM;CAkBhC;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,OAAO;IACvC,OAAO,EAAE,OAAO,CAAC;gBAEL,OAAO,EAAE,OAAO;IAKrB,IAAI,IAAI,MAAM;IAqBd,YAAY,IAAI,MAAM;CAqBhC"}
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2024 Huawei Device Co., Ltd.
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.DotFilePrinter = exports.DotNamespacePrinter = exports.DotClassPrinter = exports.DotMethodPrinter = void 0;
18
+ const Printer_1 = require("./Printer");
19
+ /**
20
+ * @category save
21
+ */
22
+ class DotMethodPrinter extends Printer_1.Printer {
23
+ constructor(method, nesting = false) {
24
+ super();
25
+ this.method = method;
26
+ this.nesting = nesting;
27
+ }
28
+ dump() {
29
+ var _a;
30
+ this.printer.clear();
31
+ if (this.nesting) {
32
+ this.printer.writeIndent().writeLine(`subgraph "cluster_${this.method.getSignature()}" {`);
33
+ }
34
+ else {
35
+ this.printer.writeIndent().writeLine(`digraph "${this.method.getSignature()}" {`);
36
+ }
37
+ this.printer.incIndent();
38
+ this.printer.writeIndent().writeLine(`label="${this.method.getSignature()}";`);
39
+ let blocks = (_a = this.method.getCfg()) === null || _a === void 0 ? void 0 : _a.getBlocks();
40
+ let prefix = `Node${this.stringHashCode(this.method.getSignature().toString())}`;
41
+ this.printBlocks(blocks, prefix);
42
+ this.printer.decIndent();
43
+ this.printer.writeIndent().writeLine('}');
44
+ return this.printer.toString();
45
+ }
46
+ dumpOriginal() {
47
+ this.printer.clear();
48
+ if (this.nesting) {
49
+ this.printer.writeIndent().writeLine(`subgraph "cluster_Original_${this.method.getSignature()}" {`);
50
+ }
51
+ else {
52
+ this.printer.writeIndent().writeLine(`digraph "${this.method.getSignature()}" {`);
53
+ }
54
+ this.printer.incIndent();
55
+ this.printer.writeIndent().writeLine(`label="${this.method.getSignature()}_original";`);
56
+ let blocks = this.method.getOriginalCfg().getBlocks();
57
+ let prefix = `NodeOriginal${this.stringHashCode(this.method.getSignature().toString())}`;
58
+ this.printBlocks(blocks, prefix);
59
+ this.printer.decIndent();
60
+ this.printer.writeIndent().writeLine('}');
61
+ return this.printer.toString();
62
+ }
63
+ stringHashCode(name) {
64
+ let hashCode = 0;
65
+ for (let i = 0; i < name.length; i++) {
66
+ hashCode += name.charCodeAt(i);
67
+ }
68
+ return Math.abs(hashCode);
69
+ }
70
+ printBlocks(blocks, prefix) {
71
+ if (!blocks) {
72
+ return;
73
+ }
74
+ let blockToNode = new Map();
75
+ let index = 0;
76
+ for (let block of blocks) {
77
+ let name = prefix + index++;
78
+ blockToNode.set(block, name);
79
+ /** Node0 [label="entry"]; */
80
+ this.printer
81
+ .writeIndent()
82
+ .writeLine(`${name} [label="${this.getBlockContent(block, this.printer.getIndent())}"];`);
83
+ }
84
+ for (let block of blocks) {
85
+ for (let nextBlock of block.getSuccessors()) {
86
+ // Node0 -> Node1;
87
+ this.printer.writeIndent().writeLine(`${blockToNode.get(block)} -> ${blockToNode.get(nextBlock)};`);
88
+ }
89
+ }
90
+ }
91
+ getBlockContent(block, indent) {
92
+ let content = [`id:${block.getId()}`];
93
+ for (let stmt of block.getStmts()) {
94
+ content.push(stmt.toString().replace(/"/g, '\\"'));
95
+ }
96
+ return content.join('\n ' + indent);
97
+ }
98
+ }
99
+ exports.DotMethodPrinter = DotMethodPrinter;
100
+ /**
101
+ * @category save
102
+ */
103
+ class DotClassPrinter extends Printer_1.Printer {
104
+ constructor(cls, nesting = false) {
105
+ super();
106
+ this.cls = cls;
107
+ this.nesting = nesting;
108
+ }
109
+ dump() {
110
+ this.printer.clear();
111
+ if (!this.nesting) {
112
+ this.printer.writeLine(`digraph "${this.cls.getName()}" {`);
113
+ this.printer.incIndent();
114
+ }
115
+ for (let method of this.cls.getMethods()) {
116
+ let mtd = new DotMethodPrinter(method, true);
117
+ this.printer.write(mtd.dump());
118
+ }
119
+ if (!this.nesting) {
120
+ this.printer.decIndent();
121
+ this.printer.writeLine(`}`);
122
+ }
123
+ return this.printer.toString();
124
+ }
125
+ dumpOriginal() {
126
+ this.printer.clear();
127
+ if (!this.nesting) {
128
+ this.printer.writeLine(`digraph "${this.cls.getName()}" {`);
129
+ this.printer.incIndent();
130
+ }
131
+ for (let method of this.cls.getMethods()) {
132
+ let mtd = new DotMethodPrinter(method, true);
133
+ this.printer.write(mtd.dumpOriginal());
134
+ }
135
+ if (!this.nesting) {
136
+ this.printer.decIndent();
137
+ this.printer.writeLine(`}`);
138
+ }
139
+ return this.printer.toString();
140
+ }
141
+ }
142
+ exports.DotClassPrinter = DotClassPrinter;
143
+ /**
144
+ * @category save
145
+ */
146
+ class DotNamespacePrinter extends Printer_1.Printer {
147
+ constructor(ns, nesting = false) {
148
+ super();
149
+ this.ns = ns;
150
+ this.nesting = nesting;
151
+ }
152
+ dump() {
153
+ this.printer.clear();
154
+ if (!this.nesting) {
155
+ this.printer.writeLine(`digraph "${this.ns.getName()}" {`);
156
+ this.printer.incIndent();
157
+ }
158
+ for (let method of this.ns.getAllMethodsUnderThisNamespace()) {
159
+ let mtd = new DotMethodPrinter(method, true);
160
+ this.printer.write(mtd.dump());
161
+ }
162
+ if (!this.nesting) {
163
+ this.printer.decIndent();
164
+ this.printer.writeLine(`}`);
165
+ }
166
+ return this.printer.toString();
167
+ }
168
+ dumpOriginal() {
169
+ this.printer.clear();
170
+ if (!this.nesting) {
171
+ this.printer.writeLine(`digraph "${this.ns.getName()}" {`);
172
+ this.printer.incIndent();
173
+ }
174
+ for (let method of this.ns.getAllMethodsUnderThisNamespace()) {
175
+ let mtd = new DotMethodPrinter(method, true);
176
+ this.printer.write(mtd.dumpOriginal());
177
+ }
178
+ if (!this.nesting) {
179
+ this.printer.decIndent();
180
+ this.printer.writeLine(`}`);
181
+ }
182
+ return this.printer.toString();
183
+ }
184
+ }
185
+ exports.DotNamespacePrinter = DotNamespacePrinter;
186
+ /**
187
+ * @category save
188
+ */
189
+ class DotFilePrinter extends Printer_1.Printer {
190
+ constructor(arkFile) {
191
+ super();
192
+ this.arkFile = arkFile;
193
+ }
194
+ dump() {
195
+ this.printer.clear();
196
+ this.printer.writeLine(`digraph "${this.arkFile.getName()}" {`);
197
+ this.printer.incIndent();
198
+ for (let ns of this.arkFile.getNamespaces()) {
199
+ let nsPrinter = new DotNamespacePrinter(ns, true);
200
+ this.printer.write(nsPrinter.dump());
201
+ }
202
+ // print class
203
+ for (let cls of this.arkFile.getClasses()) {
204
+ let clsPrinter = new DotClassPrinter(cls, true);
205
+ this.printer.write(clsPrinter.dump());
206
+ }
207
+ this.printer.decIndent();
208
+ this.printer.writeLine('}');
209
+ return this.printer.toString();
210
+ }
211
+ dumpOriginal() {
212
+ this.printer.clear();
213
+ this.printer.writeLine(`digraph "${this.arkFile.getName()}" {`);
214
+ this.printer.incIndent();
215
+ for (let ns of this.arkFile.getNamespaces()) {
216
+ let nsPrinter = new DotNamespacePrinter(ns, true);
217
+ this.printer.write(nsPrinter.dumpOriginal());
218
+ }
219
+ // print class
220
+ for (let cls of this.arkFile.getClasses()) {
221
+ let clsPrinter = new DotClassPrinter(cls, true);
222
+ this.printer.write(clsPrinter.dumpOriginal());
223
+ }
224
+ this.printer.decIndent();
225
+ this.printer.writeLine('}');
226
+ return this.printer.toString();
227
+ }
228
+ }
229
+ exports.DotFilePrinter = DotFilePrinter;
@@ -0,0 +1,17 @@
1
+ import { BaseEdge, GraphTraits, NodeID } from "../callgraph/model/BaseGraph";
2
+ import { Printer } from "./Printer";
3
+ export declare class GraphPrinter<GraphType extends GraphTraits> extends Printer {
4
+ graph: GraphType;
5
+ title: string;
6
+ startID: NodeID | undefined;
7
+ constructor(g: GraphType, t?: string);
8
+ setStartID(n: NodeID): void;
9
+ dump(): string;
10
+ dumpOriginal(): string;
11
+ writeGraph(): void;
12
+ writeNodes(): void;
13
+ writeEdge(edge: BaseEdge): void;
14
+ writeHeader(): void;
15
+ writeFooter(): void;
16
+ }
17
+ //# sourceMappingURL=GraphPrinter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphPrinter.d.ts","sourceRoot":"","sources":["../../src/save/GraphPrinter.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,QAAQ,EAAY,WAAW,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6CpC,qBAAa,YAAY,CAAC,SAAS,SAAS,WAAW,CAAE,SAAQ,OAAO;IACpE,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAG,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,SAAS,CAAa;gBAE5B,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,MAAM;IAQ7B,UAAU,CAAC,CAAC,EAAE,MAAM;IAIpB,IAAI,IAAI,MAAM;IAMd,YAAY,IAAI,MAAM;IAItB,UAAU,IAAI,IAAI;IAMlB,UAAU,IAAI,IAAI;IAmClB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAQ/B,WAAW,IAAI,IAAI;IAanB,WAAW,IAAI,IAAI;CAG7B"}