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
@@ -204,15 +204,15 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
204
204
  * struct Point q = (struct Point){.x = 5, .y = 8, .name = 'c'};
205
205
  * int* arr = (int[5]){1, 2, 3, 4, 5};
206
206
  * the right value is {},its kind is CompoundLiteralExpr or InitListExpr
207
- */
207
+ */
208
208
  cxxAggregateToValueAndStmts(aggregate) {
209
209
  var _a, _b;
210
210
  const stmts = [];
211
211
  const type = (0, builderUtils_1.cxxNode2Type)(aggregate, this.declaringMethod);
212
212
  const typeName = (_b = (_a = aggregate.type) === null || _a === void 0 ? void 0 : _a.qualType) !== null && _b !== void 0 ? _b : 'unknown';
213
- const classSignature = type instanceof Type_1.ClassType ?
214
- type.getClassSignature() :
215
- ArkSignatureBuilder_1.ArkSignatureBuilder.buildClassSignatureFromClassName(typeName);
213
+ // getClassSignature() (not getClassSigID()): the class may still be unclear and live in
214
+ // the temp canonicalizer; the object overload interns it properly.
215
+ const classSignature = type instanceof Type_1.ClassType ? type.getClassSignature() : ArkSignatureBuilder_1.ArkSignatureBuilder.buildClassSignatureFromClassName(typeName);
216
216
  const list = aggregate.kind === ArkCxxAstNode_1.AstKind.InitListExpr ? aggregate : aggregate.inner[aggregate.inner.length - 1];
217
217
  const elements = [];
218
218
  if (list.kind !== ArkCxxAstNode_1.AstKind.InitListExpr) {
@@ -263,7 +263,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
263
263
  isNodeRelatedToImplicitNode(node) {
264
264
  var _a, _b;
265
265
  if (node.inner) {
266
- return (((_b = (_a = node.inner) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.kind) === ArkCxxAstNode_1.AstKind.ImplicitCastExpr && (node.name === '__tree_const_iterator'));
266
+ return ((_b = (_a = node.inner) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.kind) === ArkCxxAstNode_1.AstKind.ImplicitCastExpr && node.name === '__tree_const_iterator';
267
267
  }
268
268
  return false;
269
269
  }
@@ -275,7 +275,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
275
275
  // Check if the child nodes of the current node are member function calls
276
276
  isNodeRelatedToCXXMember(node) {
277
277
  var _a, _b;
278
- return ((((_b = (_a = node.inner) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.kind) === ArkCxxAstNode_1.AstKind.CXXMemberCallExpr) ||
278
+ return (((_b = (_a = node.inner) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.kind) === ArkCxxAstNode_1.AstKind.CXXMemberCallExpr ||
279
279
  (node.inner[0].kind === ArkCxxAstNode_1.AstKind.ImplicitCastExpr && node.inner[0].inner[0] && node.inner[0].inner[0].kind === ArkCxxAstNode_1.AstKind.CXXMemberCallExpr));
280
280
  }
281
281
  // Construction of std::pair type
@@ -299,7 +299,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
299
299
  ArkCxxAstNode_1.AstKind.InitListExpr,
300
300
  ArkCxxAstNode_1.AstKind.CompoundLiteralExpr,
301
301
  ArkCxxAstNode_1.AstKind.CXXOperatorCallExpr,
302
- ArkCxxAstNode_1.AstKind.BinaryOperator
302
+ ArkCxxAstNode_1.AstKind.BinaryOperator,
303
303
  ];
304
304
  return (targetKinds.includes(firstChildKind) ||
305
305
  (firstChildKind === ArkCxxAstNode_1.AstKind.ImplicitCastExpr &&
@@ -344,7 +344,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
344
344
  if ((parentNode === null || parentNode === void 0 ? void 0 : parentNode.dtor) === ArkCxxAstNode_1.AstKind.CXXDestructorDecl && node.inner.length > 0) {
345
345
  return this.cxxConstructExprToValueAndStmts(node.inner[0]);
346
346
  }
347
- if (!parentNode || parentNode.kind !== ArkCxxAstNode_1.AstKind.ExprWithCleanups && parentNode.kind !== ArkCxxAstNode_1.AstKind.ReturnStmt) {
347
+ if (!parentNode || (parentNode.kind !== ArkCxxAstNode_1.AstKind.ExprWithCleanups && parentNode.kind !== ArkCxxAstNode_1.AstKind.ReturnStmt)) {
348
348
  return this.unprocessedNodeToValueAndStmts(node);
349
349
  }
350
350
  return this.cxxConstructExprToValueAndStmts(node);
@@ -359,9 +359,9 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
359
359
  var _a, _b;
360
360
  if (!this.isPairConstructExpr(node) &&
361
361
  (this.isNodeRelatedToCXXLambdaFunc(node) ||
362
- (this.isNodeRelatedToMaterializeTemporaryExpr(node) &&
363
- ((0, builderUtils_1.isCxxBasicString)((_a = node.type.desugaredQualType) !== null && _a !== void 0 ? _a : ''))) ||
364
- this.isNodeRelatedToImplicitNode(node)) && ((_b = node.inner) === null || _b === void 0 ? void 0 : _b.length) > 0) {
362
+ (this.isNodeRelatedToMaterializeTemporaryExpr(node) && (0, builderUtils_1.isCxxBasicString)((_a = node.type.desugaredQualType) !== null && _a !== void 0 ? _a : '')) ||
363
+ this.isNodeRelatedToImplicitNode(node)) &&
364
+ ((_b = node.inner) === null || _b === void 0 ? void 0 : _b.length) > 0) {
365
365
  return this.cxxNodeToValueAndStmts(node.inner[0]);
366
366
  }
367
367
  return this.cxxNewExpressionToValueAndStmts(node);
@@ -462,8 +462,9 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
462
462
  };
463
463
  }
464
464
  // Handle the invocation of static members of a class, such as A::a
465
- if (((_d = node.name) === null || _d === void 0 ? void 0 : _d.includes('::')) && node.inner.length > 0 &&
466
- (((_e = node.inner[0]) === null || _e === void 0 ? void 0 : _e.kind) === ArkCxxAstNode_1.AstKind.TypeRef || ((_f = node.inner[0]) === null || _f === void 0 ? void 0 : _f.kind) === ArkCxxAstNode_1.AstKind.NamespaceRef && ((_g = node.inner[0]) === null || _g === void 0 ? void 0 : _g.name) !== Builtin_2.BuiltinCxx.CXXSTD)) {
465
+ if (((_d = node.name) === null || _d === void 0 ? void 0 : _d.includes('::')) &&
466
+ node.inner.length > 0 &&
467
+ (((_e = node.inner[0]) === null || _e === void 0 ? void 0 : _e.kind) === ArkCxxAstNode_1.AstKind.TypeRef || (((_f = node.inner[0]) === null || _f === void 0 ? void 0 : _f.kind) === ArkCxxAstNode_1.AstKind.NamespaceRef && ((_g = node.inner[0]) === null || _g === void 0 ? void 0 : _g.name) !== Builtin_2.BuiltinCxx.CXXSTD))) {
467
468
  return this.staticMemberExprToValueAndStmts(node);
468
469
  }
469
470
  return this.cxxIdentifierToValueAndStmts(node);
@@ -492,8 +493,9 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
492
493
  if ((((_b = (_a = node.type) === null || _a === void 0 ? void 0 : _a.qualType) === null || _b === void 0 ? void 0 : _b.includes('[')) && node.type.qualType.includes(']')) || node.type.qualType === 'void') {
493
494
  return this.cxxArrayLiteralExpressionToValueAndStmts(node);
494
495
  }
495
- let pNode = (_e = ((_c = node.parent) !== null && _c !== void 0 ? _c : (_d = node.getParent) === null || _d === void 0 ? void 0 : _d.call(node, true))) !== null && _e !== void 0 ? _e : null;
496
- if (pNode && ((_f = pNode === null || pNode === void 0 ? void 0 : pNode.inner) === null || _f === void 0 ? void 0 : _f.length) > 0 &&
496
+ let pNode = (_e = (_c = node.parent) !== null && _c !== void 0 ? _c : (_d = node.getParent) === null || _d === void 0 ? void 0 : _d.call(node, true)) !== null && _e !== void 0 ? _e : null;
497
+ if (pNode &&
498
+ ((_f = pNode === null || pNode === void 0 ? void 0 : pNode.inner) === null || _f === void 0 ? void 0 : _f.length) > 0 &&
497
499
  (((_g = pNode.inner[0]) === null || _g === void 0 ? void 0 : _g.kind) === ArkCxxAstNode_1.AstKind.TypeRef || !node.type.qualType.includes('[') || (0, builderUtils_1.cxxNode2Type)(node, this.declaringMethod) instanceof Type_1.ClassType)) {
498
500
  try {
499
501
  return this.cxxAggregateToValueAndStmts(node);
@@ -576,9 +578,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
576
578
  const rawArg = userDefinedLiteral.inner[1];
577
579
  let argNode = rawArg;
578
580
  if (literalStr && rawArg.value) {
579
- const bare = rawArg.value.endsWith(literalStr)
580
- ? rawArg.value.slice(0, -literalStr.length)
581
- : rawArg.value.replace(literalStr, '');
581
+ const bare = rawArg.value.endsWith(literalStr) ? rawArg.value.slice(0, -literalStr.length) : rawArg.value.replace(literalStr, '');
582
582
  argNode = Object.assign(Object.assign({}, rawArg), { value: bare });
583
583
  }
584
584
  return this.buildValueAndStmtsForMemberCall(stmts, userDefinedLiteral.inner[0], [argNode], userDefinedLiteral, undefined);
@@ -608,7 +608,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
608
608
  // If the kind of firstNode is CXXConstructExpr and firstNode does not correspond to a parent class initialization call,
609
609
  // it is equivalent to directly assigning a value to the class member.
610
610
  // For example, the constructor of class Circle in file 'tests/cppResources/exports/crossFileCase/include/myHeader.h'.
611
- const assignRight = (firstInnerNode.kind === ArkCxxAstNode_1.AstKind.CXXConstructExpr && firstInnerNode.inner.length > 0) ? firstInnerNode.inner[0] : firstInnerNode;
611
+ const assignRight = firstInnerNode.kind === ArkCxxAstNode_1.AstKind.CXXConstructExpr && firstInnerNode.inner.length > 0 ? firstInnerNode.inner[0] : firstInnerNode;
612
612
  const CtorInit2ThisMemberExpr = {
613
613
  kind: ArkCxxAstNode_1.AstKind.MemberExpr,
614
614
  name: (_b = (_a = cxxCtorInitializer.anyInit) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : '',
@@ -632,7 +632,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
632
632
  cxxInheritedCtorInitExprToValueAndStmts(cxxInheritedCtorInitExpr) {
633
633
  var _a;
634
634
  const cls = this.declaringMethod.getDeclaringArkClass();
635
- const clsInitMtd = cls.getInstanceInitMethod();
635
+ const clsInitMtd = cls.getInstanceInitMethodOrNull();
636
636
  if (!clsInitMtd) {
637
637
  return this.unprocessedNodeToValueAndStmts(cxxInheritedCtorInitExpr);
638
638
  }
@@ -674,7 +674,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
674
674
  if (!cls) {
675
675
  return this.cxxNewExpressionToValueAndStmts(cxxConstructExpr);
676
676
  }
677
- const clsInitMtd = cls.getInstanceInitMethod();
677
+ const clsInitMtd = cls.getInstanceInitMethodOrNull();
678
678
  if (!clsInitMtd) {
679
679
  return this.cxxNewExpressionToValueAndStmts(cxxConstructExpr);
680
680
  }
@@ -806,7 +806,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
806
806
  *@ returns The object containing the converted value and statement array
807
807
  */
808
808
  cxxDeleteExpressionToValueAndStmts(deleteExpression) {
809
- const { value: exprValue, valueOriginalPositions: exprPositions, stmts: stmts, } = this.cxxNodeToValueAndStmts(deleteExpression.inner[0]);
809
+ const { value: exprValue, valueOriginalPositions: exprPositions, stmts: stmts } = this.cxxNodeToValueAndStmts(deleteExpression.inner[0]);
810
810
  const isArray = (0, cppUtils_1.hasNodeFlag)(deleteExpression, ArkCxxAstNode_1.CxxNodeFlag.Array);
811
811
  const deleteExpr = isArray ? new Expr_2.ArkCxxDeleteArrayExpr(exprValue) : new Expr_1.ArkDeleteExpr(exprValue);
812
812
  const deleteExprPosition = [Position_1.FullPosition.cxxBuildFromNode(deleteExpression, this.cxxSourceFile), ...exprPositions];
@@ -862,8 +862,9 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
862
862
  const stmts = [];
863
863
  const currConditionalOperatorIndex = this.conditionalOperatorNo++;
864
864
  // Peel off 'ImplicitCastExpr'
865
- const conditionNode = conditionalExpression.inner[InnerIdx].kind === ArkCxxAstNode_1.AstKind.ImplicitCastExpr ?
866
- conditionalExpression.inner[InnerIdx].inner[0] : conditionalExpression.inner[InnerIdx];
865
+ const conditionNode = conditionalExpression.inner[InnerIdx].kind === ArkCxxAstNode_1.AstKind.ImplicitCastExpr
866
+ ? conditionalExpression.inner[InnerIdx].inner[0]
867
+ : conditionalExpression.inner[InnerIdx];
867
868
  let conditionExpr;
868
869
  const context = { conditionExpr: conditionExpr };
869
870
  const ifStmts = this.ArkCxxIRTransformer.cxxIfStatementToStmts(conditionNode, 0, context);
@@ -893,7 +894,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
893
894
  stmts.push(new ArkIRTransformer_2.DummyStmt(ArkIRTransformer_1.ArkCxxIRTransformer.DUMMY_CONDITIONAL_OPERATOR_IF_FALSE_STMT + currConditionalOperatorIndex));
894
895
  // The last internal node is the value when the expression is false
895
896
  InnerIdx = conditionalExpression.inner.length - 1;
896
- const { value: whenFalseValue, valueOriginalPositions: whenFalsePositions, stmts: whenFalseStmts } = this.cxxNodeToValueAndStmts(conditionalExpression.inner[InnerIdx]);
897
+ const { value: whenFalseValue, valueOriginalPositions: whenFalsePositions, stmts: whenFalseStmts, } = this.cxxNodeToValueAndStmts(conditionalExpression.inner[InnerIdx]);
897
898
  stmts.push(...whenFalseStmts);
898
899
  const assignStmt = new Stmt_1.ArkAssignStmt(resultLocal, whenFalseValue);
899
900
  assignStmt.setOperandOriginalPositions([...resultLocalPosition, ...whenFalsePositions]);
@@ -923,8 +924,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
923
924
  return [undefined, []];
924
925
  }
925
926
  const call = this.getDeclRef(firstInner);
926
- const args = ((_c = (_b = innerAstNodes.inner) === null || _b === void 0 ? void 0 : _b.slice(1)) !== null && _c !== void 0 ? _c : [])
927
- .map(n => this.getDeclRef(n));
927
+ const args = ((_c = (_b = innerAstNodes.inner) === null || _b === void 0 ? void 0 : _b.slice(1)) !== null && _c !== void 0 ? _c : []).map(n => this.getDeclRef(n));
928
928
  return [call, args];
929
929
  }
930
930
  // Several callable kinds
@@ -1000,6 +1000,8 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1000
1000
  const { value: newExprLocal, valueOriginalPositions: newExprPositions, stmts: newExprStmts, } = this.ArkCxxIRTransformer.generateAssignStmtForValue(newExpr, [componentExpressionPosition]);
1001
1001
  stmts.push(...newExprStmts);
1002
1002
  const constructorMethodSubSignature = ArkSignatureBuilder_1.ArkSignatureBuilder.buildMethodSubSignatureFromMethodName(TSConst_1.CONSTRUCTOR_NAME);
1003
+ // Object path: a stub class signature (unclear) is routed to the temp canonicalizer
1004
+ // inside the constructor — no formal interning without a model.
1003
1005
  const constructorMethodSignature = new ArkSignature_1.MethodSignature(classSignature, constructorMethodSubSignature);
1004
1006
  const instanceInvokeExpr = new Expr_1.ArkInstanceInvokeExpr(newExprLocal, constructorMethodSignature, args);
1005
1007
  const instanceInvokeExprPositions = [componentExpressionPosition, ...newExprPositions, ...argPositionsAllFlat];
@@ -1055,7 +1057,8 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1055
1057
  identifierValue = this.addNewLocal(varName, varType);
1056
1058
  }
1057
1059
  else {
1058
- if ((_a = identifier.name) === null || _a === void 0 ? void 0 : _a.includes('::' + varName + '<')) { // Determine whether it is a variable template
1060
+ if ((_a = identifier.name) === null || _a === void 0 ? void 0 : _a.includes('::' + varName + '<')) {
1061
+ // Determine whether it is a variable template
1059
1062
  varName = identifier.name;
1060
1063
  }
1061
1064
  identifierValue = this.getOrCreateLocal(varName, varType);
@@ -1088,12 +1091,15 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1088
1091
  }
1089
1092
  // [Scenario 2] Recursively process base object, such as testMap in testMap.insert
1090
1093
  // Get baseValue (e.g., testMap), position information, and possible preceding statements (e.g., auto tmp = ...;)
1091
- let { value: baseValue, valueOriginalPositions: basePositions, stmts: baseStmts, } = this.cxxNodeToValueAndStmts(memberExpression.inner[0]);
1094
+ let { value: baseValue, valueOriginalPositions: basePositions, stmts: baseStmts } = this.cxxNodeToValueAndStmts(memberExpression.inner[0]);
1092
1095
  // [Scenario 3] Processing chained member access, such as a.b.c or (* ptr). field
1093
1096
  // If the base is a member access, generate an assignment statement to ensure the validity of SSA
1094
1097
  if (((_a = memberExpression.inner[0]) === null || _a === void 0 ? void 0 : _a.kind) === ArkCxxAstNode_1.AstKind.MemberExpr || memberExpression.kind === ArkCxxAstNode_1.AstKind.MemberRef) {
1095
- ({ value: baseValue, valueOriginalPositions: basePositions, stmts: baseStmts } =
1096
- this.ArkCxxIRTransformer.generateAssignStmtForValue(baseValue, basePositions));
1098
+ ({
1099
+ value: baseValue,
1100
+ valueOriginalPositions: basePositions,
1101
+ stmts: baseStmts,
1102
+ } = this.ArkCxxIRTransformer.generateAssignStmtForValue(baseValue, basePositions));
1097
1103
  }
1098
1104
  // [Scenario 4] On special occasions, the caller directly specifies the baseValue (generally used to replace the base,
1099
1105
  // such as virtual members, generics, etc.)
@@ -1113,7 +1119,8 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1113
1119
  else {
1114
1120
  fieldRef = new Ref_2.ArkCxxInstanceFieldRef(baseValue, // baseValue(eg: testMap)
1115
1121
  (0, cppUtils_1.hasNodeFlag)(memberExpression, ArkCxxAstNode_1.CxxNodeFlag.Arrow), // Whether it is arrow access (->)
1116
- fieldSignature);
1122
+ fieldSignature // Field signature (such as insert)
1123
+ );
1117
1124
  }
1118
1125
  // Record node location information for subsequent traceability and debugging
1119
1126
  const fieldRefPositions = [Position_1.FullPosition.cxxBuildFromNode(memberExpression, this.cxxSourceFile), ...basePositions];
@@ -1128,10 +1135,13 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1128
1135
  if (((_b = memberExpression.referencedDecl) === null || _b === void 0 ? void 0 : _b.kind) === ArkCxxAstNode_1.AstKind.EnumConstantDecl) {
1129
1136
  const enumClassName = memberExpression.type.qualType.replace('enum', '').trim();
1130
1137
  const enumArkClass = ModelUtils_2.CxxModelUtils.findSymbolInFileWithName(enumClassName, this.declaringMethod.getDeclaringArkClass());
1131
- const enumSignature = (enumArkClass instanceof ArkClass_1.ArkClass) ?
1132
- enumArkClass.getSignature() :
1133
- ArkSignatureBuilder_1.ArkSignatureBuilder.buildClassSignatureFromClassName(enumClassName);
1134
- return new ArkSignature_1.FieldSignature(memberName, enumSignature, enumSignature.getType(), true);
1138
+ if (enumArkClass instanceof ArkClass_1.ArkClass) {
1139
+ return new ArkSignature_1.FieldSignature(memberName, enumArkClass.getClassSigID(), enumArkClass.getSignature().getType(), true);
1140
+ }
1141
+ // Object path: the stub enum class signature (unclear) is routed to the temp
1142
+ // canonicalizer inside the constructor — no formal interning without a model.
1143
+ const enumStubSignature = ArkSignatureBuilder_1.ArkSignatureBuilder.buildClassSignatureFromClassName(enumClassName);
1144
+ return new ArkSignature_1.FieldSignature(memberName, enumStubSignature, enumStubSignature.getType(), true);
1135
1145
  }
1136
1146
  // ==Handling common scenarios==
1137
1147
  let baseType = baseValue.getType();
@@ -1155,9 +1165,12 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1155
1165
  // Construction field signature
1156
1166
  // If base is a class local variable, use the complete class signature
1157
1167
  if ((baseValue instanceof Local_1.Local || baseValue instanceof Ref_1.ArkArrayRef) && baseClassType !== null) {
1168
+ // getClassSignature() (not getClassSigID()): the class may still be unclear and
1169
+ // live in the temp canonicalizer; the object overload interns it properly.
1158
1170
  fieldSignature = new ArkSignature_1.FieldSignature(memberName, // Field name (such as insert)
1159
1171
  baseClassType.getClassSignature(), // Base class type signature
1160
- baseType);
1172
+ baseType // baseType as its type
1173
+ );
1161
1174
  }
1162
1175
  else {
1163
1176
  // Otherwise, it is generated only according to the field name
@@ -1175,7 +1188,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1175
1188
  */
1176
1189
  cxxElementAccessExpressionToValueAndStmts(elementAccessExpression) {
1177
1190
  const stmts = [];
1178
- let { value: baseValue, valueOriginalPositions: basePositions, stmts: baseStmts, } = this.cxxNodeToValueAndStmts(elementAccessExpression.inner[0]);
1191
+ let { value: baseValue, valueOriginalPositions: basePositions, stmts: baseStmts } = this.cxxNodeToValueAndStmts(elementAccessExpression.inner[0]);
1179
1192
  stmts.push(...baseStmts);
1180
1193
  if (!(baseValue instanceof Local_1.Local)) {
1181
1194
  ({
@@ -1276,9 +1289,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1276
1289
  // If there is no nested CXXOperatorCallExpr, the ValueAndStmts of overloaded stream operators will be built directly
1277
1290
  return this.buildValueAndStmtsForStreamOrLambdaCall(innerNode.inner[1], callArgus.reverse(), stmts, callExpression);
1278
1291
  }
1279
- while (innerNode.kind === ArkCxxAstNode_1.AstKind.ImplicitCastExpr &&
1280
- innerNode.valueCategory === ArkCxxAstNode_1.CxxValueCategory.Lvalue &&
1281
- innerNode.inner.length > 0) {
1292
+ while (innerNode.kind === ArkCxxAstNode_1.AstKind.ImplicitCastExpr && innerNode.valueCategory === ArkCxxAstNode_1.CxxValueCategory.Lvalue && innerNode.inner.length > 0) {
1282
1293
  innerNode = innerNode.inner[0];
1283
1294
  }
1284
1295
  if (innerNode.kind === ArkCxxAstNode_1.AstKind.DeclRefExpr &&
@@ -1457,13 +1468,11 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1457
1468
  }
1458
1469
  // Unary operators (++ / --)
1459
1470
  const unaryOpToken = this.getOperatorTokenFromNode(callExpression.inner[0]);
1460
- if (((_f = callExpression.inner[0]) === null || _f === void 0 ? void 0 : _f.kind) === ArkCxxAstNode_1.AstKind.ImplicitCastExpr &&
1461
- ['++', '--', '*'].includes(unaryOpToken)) {
1471
+ if (((_f = callExpression.inner[0]) === null || _f === void 0 ? void 0 : _f.kind) === ArkCxxAstNode_1.AstKind.ImplicitCastExpr && ['++', '--', '*'].includes(unaryOpToken)) {
1462
1472
  return this.CXXOperatorExpressionToUnaryOperator(callExpression);
1463
1473
  }
1464
1474
  // Arrow operator (->) in iteration
1465
- if (((_g = callExpression.inner[0]) === null || _g === void 0 ? void 0 : _g.kind) === ArkCxxAstNode_1.AstKind.ImplicitCastExpr &&
1466
- unaryOpToken === '->') {
1475
+ if (((_g = callExpression.inner[0]) === null || _g === void 0 ? void 0 : _g.kind) === ArkCxxAstNode_1.AstKind.ImplicitCastExpr && unaryOpToken === '->') {
1467
1476
  return this.cxxNodeToValueAndStmts(callExpression.inner[1]);
1468
1477
  }
1469
1478
  return null;
@@ -1478,7 +1487,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1478
1487
  ArkCxxAstNode_1.AstKind.CXXOperatorCallExpr,
1479
1488
  ArkCxxAstNode_1.AstKind.MaterializeTemporaryExpr,
1480
1489
  ArkCxxAstNode_1.AstKind.CXXBindTemporaryExpr,
1481
- ArkCxxAstNode_1.AstKind.CXXConstructExpr
1490
+ ArkCxxAstNode_1.AstKind.CXXConstructExpr,
1482
1491
  ];
1483
1492
  if (recursiveKinds.includes(innerNode.kind) ||
1484
1493
  (innerNode.kind === ArkCxxAstNode_1.AstKind.ImplicitCastExpr && innerNode.castKind !== ArkCxxAstNode_1.AstKind.FunctionToPointerDecay)) {
@@ -1517,9 +1526,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1517
1526
  const qualifiedName = (_a = callNode.name) !== null && _a !== void 0 ? _a : '';
1518
1527
  const suffix = '::' + funcName;
1519
1528
  if (qualifiedName.includes('::')) {
1520
- return qualifiedName.endsWith(suffix)
1521
- ? qualifiedName.slice(0, -suffix.length)
1522
- : (_b = qualifiedName.split('::')[0]) !== null && _b !== void 0 ? _b : qualifiedName;
1529
+ return qualifiedName.endsWith(suffix) ? qualifiedName.slice(0, -suffix.length) : ((_b = qualifiedName.split('::')[0]) !== null && _b !== void 0 ? _b : qualifiedName);
1523
1530
  }
1524
1531
  const scopeNode = callNode.inner.find(child => child.kind === ArkCxxAstNode_1.AstKind.NamespaceRef || child.kind === ArkCxxAstNode_1.AstKind.TypeRef);
1525
1532
  return (_c = scopeNode === null || scopeNode === void 0 ? void 0 : scopeNode.name) !== null && _c !== void 0 ? _c : qualifiedName;
@@ -1550,16 +1557,13 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1550
1557
  */
1551
1558
  handleOverloadedOp(cxxOperatorCallExpr) {
1552
1559
  var _a, _b, _c, _d;
1553
- if (((_a = cxxOperatorCallExpr.type) === null || _a === void 0 ? void 0 : _a.qualType) === '' ||
1554
- ((_c = (_b = cxxOperatorCallExpr.inner) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.castKind) !== ArkCxxAstNode_1.AstKind.FunctionToPointerDecay) {
1560
+ if (((_a = cxxOperatorCallExpr.type) === null || _a === void 0 ? void 0 : _a.qualType) === '' || ((_c = (_b = cxxOperatorCallExpr.inner) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.castKind) !== ArkCxxAstNode_1.AstKind.FunctionToPointerDecay) {
1555
1561
  return null;
1556
1562
  }
1557
1563
  // Handling Recursive function, e.g. Case10 in lambdaFuncSample.cpp
1558
1564
  if ((_d = cxxOperatorCallExpr.inner) === null || _d === void 0 ? void 0 : _d[1]) {
1559
1565
  let callNode = cxxOperatorCallExpr.inner[1];
1560
- while (callNode.kind === ArkCxxAstNode_1.AstKind.ImplicitCastExpr &&
1561
- callNode.valueCategory === ArkCxxAstNode_1.CxxValueCategory.Lvalue &&
1562
- callNode.inner.length > 0) {
1566
+ while (callNode.kind === ArkCxxAstNode_1.AstKind.ImplicitCastExpr && callNode.valueCategory === ArkCxxAstNode_1.CxxValueCategory.Lvalue && callNode.inner.length > 0) {
1563
1567
  callNode = callNode.inner[0];
1564
1568
  }
1565
1569
  if (callNode.type.qualType.includes('std::function') || this.isNodeRelatedToCXXLambdaFunc(callNode)) {
@@ -1605,7 +1609,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1605
1609
  return null;
1606
1610
  }
1607
1611
  const stmts = [];
1608
- const { args, argPositions: argPositionsAll, } = this.cxxParseArguments(stmts, cxxOperatorCallExpr.inner.slice(1));
1612
+ const { args, argPositions: argPositionsAll } = this.cxxParseArguments(stmts, cxxOperatorCallExpr.inner.slice(1));
1609
1613
  // The input/output operator must be overloaded as a global function, and the overloaded function only has 2 parameters,
1610
1614
  // because the input/output operator is actually a binary operation: stream (left operand)+object (right operand)
1611
1615
  const defaultClass = this.declaringMethod.getDeclaringArkFile().getDefaultClass();
@@ -1689,7 +1693,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1689
1693
  var _a;
1690
1694
  functionNameNode = functionNameNode !== null && functionNameNode !== void 0 ? functionNameNode : callExpression;
1691
1695
  const stmts = [...currStmts];
1692
- let { value: callerValue, valueOriginalPositions: callerPositions, stmts: callerStmts, } = this.cxxNodeToValueAndStmts(functionNameNode);
1696
+ let { value: callerValue, valueOriginalPositions: callerPositions, stmts: callerStmts } = this.cxxNodeToValueAndStmts(functionNameNode);
1693
1697
  stmts.push(...callerStmts);
1694
1698
  let invokeValue;
1695
1699
  let invokeValuePositions = [Position_1.FullPosition.cxxBuildFromNode(callExpression, this.cxxSourceFile)];
@@ -1699,7 +1703,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1699
1703
  }
1700
1704
  else if (callerValue instanceof Local_1.Local) {
1701
1705
  const callerName = callerValue.getName();
1702
- let classSignature = ArkSignatureBuilder_1.ArkSignatureBuilder.buildClassSignatureFromClassName(callerName);
1706
+ let classSignature = new ArkSignature_1.ClassSignature(callerName, this.declaringMethod.getDeclaringArkFileID());
1703
1707
  let cls = ModelUtils_1.ModelUtils.getClass(this.declaringMethod, classSignature);
1704
1708
  const callExprs = [ArkCxxAstNode_1.AstKind.CallExpr, ArkCxxAstNode_1.AstKind.CXXOperatorCallExpr];
1705
1709
  if ((cls === null || cls === void 0 ? void 0 : cls.hasComponentDecorator()) && callExprs.includes(callExpression.kind)) {
@@ -1711,7 +1715,8 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1711
1715
  }
1712
1716
  const methodSignature = ArkSignatureBuilder_1.ArkSignatureBuilder.buildMethodSignatureFromMethodName(callerName);
1713
1717
  const callerType = callerValue.getType();
1714
- if (callerType instanceof Type_1.FunctionType || (callerType instanceof Type_2.PointerType && callerType.getBaseType() instanceof Type_1.FunctionType) ||
1718
+ if (callerType instanceof Type_1.FunctionType ||
1719
+ (callerType instanceof Type_2.PointerType && callerType.getBaseType() instanceof Type_1.FunctionType) ||
1715
1720
  !((_a = this.getGlobals()) === null || _a === void 0 ? void 0 : _a.has(callerName))) {
1716
1721
  invokeValue = new Expr_1.ArkPtrInvokeExpr(methodSignature, callerValue, args, realGenericTypes);
1717
1722
  }
@@ -1720,10 +1725,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1720
1725
  }
1721
1726
  }
1722
1727
  else {
1723
- ({
1724
- value: callerValue,
1725
- stmts: callerStmts,
1726
- } = this.ArkCxxIRTransformer.generateAssignStmtForValue(callerValue, callerPositions));
1728
+ ({ value: callerValue, stmts: callerStmts } = this.ArkCxxIRTransformer.generateAssignStmtForValue(callerValue, callerPositions));
1727
1729
  stmts.push(...callerStmts);
1728
1730
  const methodSignature = ArkSignatureBuilder_1.ArkSignatureBuilder.buildMethodSignatureFromMethodName(callerValue.getName());
1729
1731
  invokeValue = new Expr_1.ArkStaticInvokeExpr(methodSignature, args, realGenericTypes);
@@ -1763,7 +1765,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1763
1765
  buildValueAndStmtsForMemberCall(stmts, callerNode, argNodes, callExpression, realGenericTypes, cxxMemberCallExprType) {
1764
1766
  const { args, argPositions: argPositionsAll } = this.cxxParseArguments(stmts, argNodes);
1765
1767
  const argPositionsAllFlat = argPositionsAll.flat();
1766
- let { value: callerValue, valueOriginalPositions: callerPositions, stmts: callerStmts, } = this.cxxNodeToValueAndStmts(callerNode);
1768
+ let { value: callerValue, valueOriginalPositions: callerPositions, stmts: callerStmts } = this.cxxNodeToValueAndStmts(callerNode);
1767
1769
  stmts.push(...callerStmts);
1768
1770
  let invokeValue;
1769
1771
  let invokeValuePositions = [Position_1.FullPosition.cxxBuildFromNode(callExpression, this.cxxSourceFile)];
@@ -1805,6 +1807,8 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1805
1807
  let methodSignature;
1806
1808
  const declareSignature = callerValue.getFieldSignature().getDeclaringSignature();
1807
1809
  if (declareSignature instanceof ArkSignature_1.ClassSignature) {
1810
+ // Object path: an unclear declaring signature is routed to the temp canonicalizer
1811
+ // inside the constructor — no formal interning without a model.
1808
1812
  methodSignature = new ArkSignature_1.MethodSignature(declareSignature, ArkSignatureBuilder_1.ArkSignatureBuilder.buildMethodSubSignatureFromMethodName(callerValue.getFieldName()));
1809
1813
  }
1810
1814
  else {
@@ -1833,7 +1837,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1833
1837
  cxxParseArgumentsOfCallExpression(currStmts, callExpression, callNode) {
1834
1838
  let realGenericTypes = this.getRealGenericTypes(callNode);
1835
1839
  let builderMethodIndexes;
1836
- const { args: args, argPositions: argPositions, } = this.cxxParseArguments(currStmts, callExpression, builderMethodIndexes);
1840
+ const { args: args, argPositions: argPositions } = this.cxxParseArguments(currStmts, callExpression, builderMethodIndexes);
1837
1841
  return {
1838
1842
  realGenericTypes: realGenericTypes,
1839
1843
  args: args,
@@ -1865,9 +1869,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1865
1869
  if (qualType) {
1866
1870
  return qualType;
1867
1871
  }
1868
- return (node.type.desugaredQualType && node.type.typeAliasDeclId)
1869
- ? node.type.desugaredQualType
1870
- : node.type.qualType;
1872
+ return node.type.desugaredQualType && node.type.typeAliasDeclId ? node.type.desugaredQualType : node.type.qualType;
1871
1873
  }
1872
1874
  /**
1873
1875
  * Splits template arguments by comma, but remains aware of nested brackets
@@ -1911,7 +1913,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1911
1913
  this.builderMethodContextFlag = true;
1912
1914
  this.ArkCxxIRTransformer.setBuilderMethodContextFlag(true);
1913
1915
  }
1914
- let { value: argValue, valueOriginalPositions: argPositionsSingle, stmts: argStmts, } = this.cxxNodeToValueAndStmts(argument);
1916
+ let { value: argValue, valueOriginalPositions: argPositionsSingle, stmts: argStmts } = this.cxxNodeToValueAndStmts(argument);
1915
1917
  this.builderMethodContextFlag = prevBuilderMethodContextFlag;
1916
1918
  this.ArkCxxIRTransformer.setBuilderMethodContextFlag(prevBuilderMethodContextFlag);
1917
1919
  currStmts.push(...argStmts);
@@ -1931,7 +1933,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1931
1933
  }
1932
1934
  cxxCallableNodeToValueAndStmts(callableNode) {
1933
1935
  const declaringClass = this.declaringMethod.getDeclaringArkClass();
1934
- const lambdaArkMethod = new ArkMethod_1.ArkMethod();
1936
+ const lambdaArkMethod = new ArkMethod_1.ArkMethod(declaringClass.getClassSigID());
1935
1937
  (0, ArkMethodBuilder_1.buildArkMethodFromArkClass)(callableNode, declaringClass, lambdaArkMethod, this.cxxSourceFile, this.declaringMethod);
1936
1938
  const callableType = new Type_1.FunctionType(lambdaArkMethod.getSignature());
1937
1939
  const callableValue = this.addNewLocal(lambdaArkMethod.getName(), callableType);
@@ -1942,7 +1944,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1942
1944
  };
1943
1945
  }
1944
1946
  cxxNewExpressionToValueAndStmts(newExpression) {
1945
- var _a, _b;
1947
+ var _a, _b, _c;
1946
1948
  let className = this.getNewExpressionClassName(newExpression);
1947
1949
  // Add handling for dynamic array creation: int *arr = new int[10]
1948
1950
  if (className === Builtin_1.Builtin.ARRAY || (0, cppUtils_1.hasNodeFlag)(newExpression, ArkCxxAstNode_1.CxxNodeFlag.Array)) {
@@ -1956,23 +1958,30 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
1956
1958
  // If the parent node has a namespaceRef or TypeRef, it indicates a constructor call,
1957
1959
  // and should infer the type of the corresponding namespace/class.
1958
1960
  if (parentClassOrNs && parentClassOrNs.length > 0) {
1959
- refType = (_b = TypeInference_1.TypeInference.inferUnclearRefName(className, this.declaringMethod.getDeclaringArkClass())) !== null && _b !== void 0 ? _b : (0, builderUtils_1.cxxNode2Type)(newExpression, this.declaringMethod.getDeclaringArkClass());
1961
+ refType =
1962
+ (_b = TypeInference_1.TypeInference.inferUnclearRefName(className, this.declaringMethod.getDeclaringArkClass())) !== null && _b !== void 0 ? _b : (0, builderUtils_1.cxxNode2Type)(newExpression, this.declaringMethod.getDeclaringArkClass());
1960
1963
  }
1961
1964
  let classType;
1962
1965
  let classSignature;
1963
- if (refType instanceof Type_1.ClassType) {
1966
+ // unclear stub 守卫——inferUnclearRefName 兜底会构造 %unk stub ClassType(file 级函数上下文的局部类等场景解析 miss),被这里短路采纳会把
1967
+ // %unk 泄漏进 IR(structBinding Person 实证)。stub 降级走 else 的域内解析链(findClassByShortName 局部类候选 + file 级直查),域内也 miss
1968
+ // 时兜底构造与原 stub 等价——行为仅在"域内可解析却被 stub 短路"的场景升级。
1969
+ if (refType instanceof Type_1.ClassType && !refType.isUnclear()) {
1964
1970
  classType = refType;
1965
1971
  }
1966
1972
  else if (refType instanceof Type_1.AliasType && refType.getOriginalType() instanceof Type_1.ClassType) {
1967
1973
  classType = refType.getOriginalType();
1968
1974
  }
1969
1975
  else {
1970
- let curClass = this.declaringMethod.getDeclaringArkFile().getClassWithName(className);
1976
+ // Nested classes are referenced by their bare short name inside the
1977
+ // enclosing class scope; resolve via the candidate chain first, then
1978
+ // the exact top-level lookup.
1979
+ let curClass = (_c = ModelUtils_2.CxxModelUtils.findClassByShortName(className, this.declaringMethod.getDeclaringArkClass(), this.declaringMethod)) !== null && _c !== void 0 ? _c : this.declaringMethod.getDeclaringArkFile().getClassWithName(className);
1971
1980
  classSignature = curClass ? curClass.getSignature() : ArkSignatureBuilder_1.ArkSignatureBuilder.buildClassSignatureFromClassName(className);
1972
1981
  classType = new Type_1.ClassType(classSignature, realGenericTypes);
1973
1982
  }
1974
1983
  const expr = new Expr_1.ArkNewExpr(classType);
1975
- const { value: newLocal, valueOriginalPositions: newLocalPositions, stmts: newExprStmts } = this.ArkCxxIRTransformer.generateAssignStmtForValue(expr, [Position_1.FullPosition.cxxBuildFromNode(newExpression, this.cxxSourceFile)]);
1984
+ const { value: newLocal, valueOriginalPositions: newLocalPositions, stmts: newExprStmts, } = this.ArkCxxIRTransformer.generateAssignStmtForValue(expr, [Position_1.FullPosition.cxxBuildFromNode(newExpression, this.cxxSourceFile)]);
1976
1985
  // When using the new keyword, the type of Local should be a pointer type.
1977
1986
  if (newExpression.kind === ArkCxxAstNode_1.AstKind.CXXNewExpr) {
1978
1987
  newLocal.setType(new Type_2.PointerType(classType, 1));
@@ -2006,15 +2015,14 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
2006
2015
  // if case : struct LargeStruct s;, inner.length is 0, so we need to avoid it
2007
2016
  newExpression.kind === ArkCxxAstNode_1.AstKind.CXXConstructExpr &&
2008
2017
  newExpression.type.qualType.startsWith('struct') &&
2009
- args.length > 0 && ((_b = args[0].inner[0]) === null || _b === void 0 ? void 0 : _b.kind) === ArkCxxAstNode_1.AstKind.CompoundLiteralExpr) {
2018
+ args.length > 0 &&
2019
+ ((_b = args[0].inner[0]) === null || _b === void 0 ? void 0 : _b.kind) === ArkCxxAstNode_1.AstKind.CompoundLiteralExpr) {
2010
2020
  return this.getConstructArgs(args[0].inner[0].inner);
2011
2021
  }
2012
2022
  else if (newExpression.kind === ArkCxxAstNode_1.AstKind.InitListExpr) {
2013
2023
  return this.getConstructArgs(newExpression);
2014
2024
  }
2015
- return args.filter(arg => (arg === null || arg === void 0 ? void 0 : arg.kind) !== ArkCxxAstNode_1.AstKind.TemplateRef &&
2016
- (arg === null || arg === void 0 ? void 0 : arg.kind) !== ArkCxxAstNode_1.AstKind.NamespaceRef &&
2017
- (arg === null || arg === void 0 ? void 0 : arg.kind) !== ArkCxxAstNode_1.AstKind.TypeRef);
2025
+ return args.filter(arg => (arg === null || arg === void 0 ? void 0 : arg.kind) !== ArkCxxAstNode_1.AstKind.TemplateRef && (arg === null || arg === void 0 ? void 0 : arg.kind) !== ArkCxxAstNode_1.AstKind.NamespaceRef && (arg === null || arg === void 0 ? void 0 : arg.kind) !== ArkCxxAstNode_1.AstKind.TypeRef);
2018
2026
  })();
2019
2027
  const { args: argValues, argPositions } = this.cxxParseArguments(stmts, constructArgs);
2020
2028
  const constructorMethodSignature = this.getConstructorSignatureByClassTypeAndArgs(classType, argValues);
@@ -2033,10 +2041,14 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
2033
2041
  const arkClass = file.getClass(classType.getClassSignature());
2034
2042
  const constructorMethodSubSignature = ArkSignatureBuilder_1.ArkSignatureBuilder.buildMethodSubSignatureFromMethodName(TSConst_1.CONSTRUCTOR_NAME);
2035
2043
  if (!arkClass) {
2044
+ // Object path: the stub class signature (unclear) is routed to the temp canonicalizer
2045
+ // inside the constructor — no formal interning without a model.
2036
2046
  return new ArkSignature_1.MethodSignature(ArkSignatureBuilder_1.ArkSignatureBuilder.buildClassSignatureFromClassName(classType.getClassSignature().getClassName()), constructorMethodSubSignature);
2037
2047
  }
2038
2048
  const constructors = arkClass.getMethodsWithName(TSConst_1.CONSTRUCTOR_NAME);
2039
2049
  if (constructors.length === 0) {
2050
+ // getClassSignature() (not getClassSigID()): the class may still be unclear and live in
2051
+ // the temp canonicalizer; the object overload interns it properly.
2040
2052
  return new ArkSignature_1.MethodSignature(classType.getClassSignature(), constructorMethodSubSignature);
2041
2053
  }
2042
2054
  else if (constructors.length === 1) {
@@ -2058,6 +2070,8 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
2058
2070
  }
2059
2071
  }
2060
2072
  }
2073
+ // getClassSignature() (not getClassSigID()): the class may still be unclear and live in
2074
+ // the temp canonicalizer; the object overload interns it properly.
2061
2075
  return new ArkSignature_1.MethodSignature(classType.getClassSignature(), constructorMethodSubSignature);
2062
2076
  }
2063
2077
  getConstructArgs(constructArgs) {
@@ -2158,7 +2172,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
2158
2172
  }
2159
2173
  }
2160
2174
  const stmts = [];
2161
- const { args: argumentValues, argPositions: argPositions, } = this.cxxParseArguments(stmts, newArrayExpression.inner);
2175
+ const { args: argumentValues, argPositions: argPositions } = this.cxxParseArguments(stmts, newArrayExpression.inner);
2162
2176
  let argumentsLength = newArrayExpression.inner ? newArrayExpression.inner.length : 0;
2163
2177
  let arrayLengthValue;
2164
2178
  let fromLiteral; // Does it contain specific elements
@@ -2204,8 +2218,8 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
2204
2218
  arrayLength = (_a = dimensions[0]) !== null && _a !== void 0 ? _a : arrayLiteralExpression.inner.length;
2205
2219
  elementsNumber = (_b = dimensions.reduce((acc, cur) => acc * cur, 1)) !== null && _b !== void 0 ? _b : arrayLength;
2206
2220
  dimensions.shift();
2207
- isInitZero = (((_c = arrayLiteralExpression.inner) === null || _c === void 0 ? void 0 : _c.length) === 1 && arrayLiteralExpression.inner[0].value === '0' ||
2208
- ((_d = arrayLiteralExpression.inner) === null || _d === void 0 ? void 0 : _d.length) === 0);
2221
+ isInitZero =
2222
+ (((_c = arrayLiteralExpression.inner) === null || _c === void 0 ? void 0 : _c.length) === 1 && arrayLiteralExpression.inner[0].value === '0') || ((_d = arrayLiteralExpression.inner) === null || _d === void 0 ? void 0 : _d.length) === 0;
2209
2223
  this.getArrayLiteralExpression(arrayLiteralExpression, stmts, elementTypes, elementValues, elementPositions, dimensions, isInitZero);
2210
2224
  if ((0, builderUtils_1.isCxxFunctionPointer)(oriType)) {
2211
2225
  // If it's an array of function pointers, the array symbols in the type should be removed here before resolving for the base type.
@@ -2228,8 +2242,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
2228
2242
  return [];
2229
2243
  }
2230
2244
  // Parse numbers and return a dimension array
2231
- return dimensions
2232
- .map(dim => parseInt(dim.replace(/[\[\]]/g, '')));
2245
+ return dimensions.map(dim => parseInt(dim.replace(/[\[\]]/g, '')));
2233
2246
  }
2234
2247
  /**
2235
2248
  *Process array literal expression and convert it to intermediate representation
@@ -2242,7 +2255,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
2242
2255
  getArrayLiteralExpression(arrayLiteralExpression, stmts, elementTypes, elementValues, elementPositions, dimensions, isInitZero) {
2243
2256
  for (const element of arrayLiteralExpression.inner) {
2244
2257
  // If there is still dimension information in the array, build an internal array
2245
- let { value: elementValue, valueOriginalPositions: elementPosition, stmts: elementStmts } = dimensions.length > 0 ? this.cxxArrayLiteralExpressionToValueAndStmts(element, dimensions) : this.cxxNodeToValueAndStmts(element);
2258
+ let { value: elementValue, valueOriginalPositions: elementPosition, stmts: elementStmts, } = dimensions.length > 0 ? this.cxxArrayLiteralExpressionToValueAndStmts(element, dimensions) : this.cxxNodeToValueAndStmts(element);
2246
2259
  stmts.push(...elementStmts);
2247
2260
  if (IRUtils_1.IRUtils.moreThanOneAddress(elementValue)) {
2248
2261
  ({
@@ -2310,8 +2323,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
2310
2323
  *@ returns The object containing the converted value and the generated statement list
2311
2324
  */
2312
2325
  cxxPrefixIncDecToValueAndStmts(prefixUnaryExpression, operatorToken, operandValue, operandPositions, stmts) {
2313
- const binaryOperator = operatorToken === (0, cppUtils_1.cxxOpcodeToString)(ArkCxxAstNode_1.CxxOpcode.Inc) ?
2314
- Expr_1.NormalBinaryOperator.Addition : Expr_1.NormalBinaryOperator.Subtraction;
2326
+ const binaryOperator = operatorToken === (0, cppUtils_1.cxxOpcodeToString)(ArkCxxAstNode_1.CxxOpcode.Inc) ? Expr_1.NormalBinaryOperator.Addition : Expr_1.NormalBinaryOperator.Subtraction;
2315
2327
  const binopExpr = new Expr_2.ArkCxxNormalBinOpExpr(operandValue, ValueUtil_1.CxxValueUtil.getOrCreateNumberConst(1), binaryOperator);
2316
2328
  const exprPositions = [Position_1.FullPosition.cxxBuildFromNode(prefixUnaryExpression, this.cxxSourceFile)];
2317
2329
  exprPositions.push(...operandPositions, Position_1.FullPosition.DEFAULT);
@@ -2326,7 +2338,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
2326
2338
  }
2327
2339
  cxxPrefixUnaryExpressionToValueAndStmts(prefixUnaryExpression, opcodeOverride) {
2328
2340
  const stmts = [];
2329
- let { value: operandValue, valueOriginalPositions: operandPositions, stmts: operandStmts } = this.cxxNodeToValueAndStmts(prefixUnaryExpression.inner[0]);
2341
+ let { value: operandValue, valueOriginalPositions: operandPositions, stmts: operandStmts, } = this.cxxNodeToValueAndStmts(prefixUnaryExpression.inner[0]);
2330
2342
  stmts.push(...operandStmts);
2331
2343
  if (IRUtils_1.IRUtils.moreThanOneAddress(operandValue)) {
2332
2344
  ({
@@ -2373,11 +2385,13 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
2373
2385
  cxxPostfixUnaryExpressionToValueAndStmts(postfixUnaryExpression, opcodeOverride) {
2374
2386
  var _a, _b, _c;
2375
2387
  const stmts = [];
2376
- let { value: operandValue, valueOriginalPositions: operandPositions, stmts: exprStmts, } = this.cxxNodeToValueAndStmts(postfixUnaryExpression.inner[0]);
2388
+ let { value: operandValue, valueOriginalPositions: operandPositions, stmts: exprStmts } = this.cxxNodeToValueAndStmts(postfixUnaryExpression.inner[0]);
2377
2389
  stmts.push(...exprStmts);
2378
2390
  if (IRUtils_1.IRUtils.moreThanOneAddress(operandValue)) {
2379
2391
  ({
2380
- value: operandValue, valueOriginalPositions: operandPositions, stmts: exprStmts,
2392
+ value: operandValue,
2393
+ valueOriginalPositions: operandPositions,
2394
+ stmts: exprStmts,
2381
2395
  } = this.ArkCxxIRTransformer.generateAssignStmtForValue(operandValue, operandPositions));
2382
2396
  stmts.push(...exprStmts);
2383
2397
  }
@@ -2387,17 +2401,19 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
2387
2401
  // Use temporary variables to store the value before self increment, and avoid this expression for some non assignment operation scenarios
2388
2402
  if (operatorToken === (0, cppUtils_1.cxxOpcodeToString)(ArkCxxAstNode_1.CxxOpcode.Inc) || operatorToken === (0, cppUtils_1.cxxOpcodeToString)(ArkCxxAstNode_1.CxxOpcode.Dec)) {
2389
2403
  const needAssign = [
2390
- ArkCxxAstNode_1.AstKind.VarDecl, ArkCxxAstNode_1.AstKind.BinaryOperator, ArkCxxAstNode_1.AstKind.BinaryConditionalOperator,
2391
- ArkCxxAstNode_1.AstKind.ConditionalOperator, ArkCxxAstNode_1.AstKind.ArraySubscriptExpr,
2404
+ ArkCxxAstNode_1.AstKind.VarDecl,
2405
+ ArkCxxAstNode_1.AstKind.BinaryOperator,
2406
+ ArkCxxAstNode_1.AstKind.BinaryConditionalOperator,
2407
+ ArkCxxAstNode_1.AstKind.ConditionalOperator,
2408
+ ArkCxxAstNode_1.AstKind.ArraySubscriptExpr,
2392
2409
  ];
2393
- let parent = (_c = ((_a = postfixUnaryExpression.parent) !== null && _a !== void 0 ? _a : (_b = postfixUnaryExpression.getParent) === null || _b === void 0 ? void 0 : _b.call(postfixUnaryExpression, true))) !== null && _c !== void 0 ? _c : null;
2410
+ let parent = (_c = (_a = postfixUnaryExpression.parent) !== null && _a !== void 0 ? _a : (_b = postfixUnaryExpression.getParent) === null || _b === void 0 ? void 0 : _b.call(postfixUnaryExpression, true)) !== null && _c !== void 0 ? _c : null;
2394
2411
  if (parent && needAssign.includes(parent.kind)) {
2395
- let { value: tempValue, stmts: tempStmts, } = this.arkIRTransformer.generateAssignStmtForValue(operandValue, exprPositions);
2412
+ let { value: tempValue, stmts: tempStmts } = this.arkIRTransformer.generateAssignStmtForValue(operandValue, exprPositions);
2396
2413
  stmts.push(...tempStmts);
2397
2414
  value = tempValue;
2398
2415
  }
2399
- const binaryOperator = operatorToken === (0, cppUtils_1.cxxOpcodeToString)(ArkCxxAstNode_1.CxxOpcode.Inc) ?
2400
- Expr_1.NormalBinaryOperator.Addition : Expr_1.NormalBinaryOperator.Subtraction;
2416
+ const binaryOperator = operatorToken === (0, cppUtils_1.cxxOpcodeToString)(ArkCxxAstNode_1.CxxOpcode.Inc) ? Expr_1.NormalBinaryOperator.Addition : Expr_1.NormalBinaryOperator.Subtraction;
2401
2417
  const binopExpr = new Expr_2.ArkCxxNormalBinOpExpr(operandValue, ValueUtil_1.CxxValueUtil.getOrCreateNumberConst(1), binaryOperator);
2402
2418
  exprPositions.push(...operandPositions, Position_1.FullPosition.DEFAULT);
2403
2419
  const assignStmt = new Stmt_1.ArkAssignStmt(operandValue, binopExpr);
@@ -2412,7 +2428,9 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
2412
2428
  exprPositions = [Position_1.FullPosition.DEFAULT];
2413
2429
  }
2414
2430
  return {
2415
- value: value, valueOriginalPositions: exprPositions, stmts: stmts,
2431
+ value: value,
2432
+ valueOriginalPositions: exprPositions,
2433
+ stmts: stmts,
2416
2434
  };
2417
2435
  }
2418
2436
  declStmtToValueAndStmts(decl) {
@@ -2485,14 +2503,15 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
2485
2503
  const { value: leftValue, valueOriginalPositions: leftPositions, stmts: leftStmts } = leftValueAndStmts;
2486
2504
  let stmts = [];
2487
2505
  if (needRightOp) {
2488
- const { value: rightValue, valueOriginalPositions: rightPositions, stmts: rightStmts } = this.cxxAssignmentRightOpToValueAndStmts(rightOpNode, leftValue);
2506
+ const { value: rightValue, valueOriginalPositions: rightPositions, stmts: rightStmts, } = this.cxxAssignmentRightOpToValueAndStmts(rightOpNode, leftValue);
2489
2507
  if (leftValue instanceof Local_1.Local) {
2490
2508
  if (variableDefFlag) {
2491
2509
  leftValue.setConstFlag(isConst);
2492
2510
  leftValue.setType(declarationType);
2493
2511
  }
2494
2512
  if ((leftValue.getType() instanceof Type_1.UnknownType || leftValue.getType() instanceof Type_1.UnclearReferenceType) &&
2495
- !(rightValue.getType() instanceof Type_1.UnknownType) && !(rightValue.getType() instanceof Type_1.UndefinedType)) {
2513
+ !(rightValue.getType() instanceof Type_1.UnknownType) &&
2514
+ !(rightValue.getType() instanceof Type_1.UndefinedType)) {
2496
2515
  leftValue.setType(rightValue.getType());
2497
2516
  }
2498
2517
  }
@@ -2530,11 +2549,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
2530
2549
  let tempRightStmts = [];
2531
2550
  const rightStmts = [];
2532
2551
  if (rightOpNode) {
2533
- ({
2534
- value: rightValue,
2535
- valueOriginalPositions: rightPositions,
2536
- stmts: tempRightStmts,
2537
- } = this.cxxNodeToValueAndStmts(rightOpNode));
2552
+ ({ value: rightValue, valueOriginalPositions: rightPositions, stmts: tempRightStmts } = this.cxxNodeToValueAndStmts(rightOpNode));
2538
2553
  rightStmts.push(...tempRightStmts);
2539
2554
  }
2540
2555
  else {
@@ -2565,11 +2580,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
2565
2580
  let { value, valueOriginalPositions, stmts } = this.cxxNodeToValueAndStmts(node);
2566
2581
  allStmts.push(...stmts);
2567
2582
  if (IRUtils_1.IRUtils.moreThanOneAddress(value)) {
2568
- ({
2569
- value,
2570
- valueOriginalPositions,
2571
- stmts,
2572
- } = this.arkIRTransformer.generateAssignStmtForValue(value, valueOriginalPositions));
2583
+ ({ value, valueOriginalPositions, stmts } = this.arkIRTransformer.generateAssignStmtForValue(value, valueOriginalPositions));
2573
2584
  allStmts.push(...stmts);
2574
2585
  }
2575
2586
  return { value, valueOriginalPositions, stmts: allStmts };
@@ -2591,9 +2602,9 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
2591
2602
  }
2592
2603
  const stmts = [];
2593
2604
  const binaryExpressionPosition = Position_1.FullPosition.cxxBuildFromNode(binaryExpression, this.cxxSourceFile);
2594
- const { value: opValue1, valueOriginalPositions: opPositions1, stmts: opStmts1, } = this.cxxNodeToSingleAddressValueAndStmts(binaryExpressionLeft);
2605
+ const { value: opValue1, valueOriginalPositions: opPositions1, stmts: opStmts1 } = this.cxxNodeToSingleAddressValueAndStmts(binaryExpressionLeft);
2595
2606
  stmts.push(...opStmts1);
2596
- const { value: opValue2, valueOriginalPositions: opPositions2, stmts: opStmts2, } = this.cxxNodeToSingleAddressValueAndStmts(binaryExpressionRight);
2607
+ const { value: opValue2, valueOriginalPositions: opPositions2, stmts: opStmts2 } = this.cxxNodeToSingleAddressValueAndStmts(binaryExpressionRight);
2597
2608
  stmts.push(...opStmts2);
2598
2609
  let exprValue;
2599
2610
  let exprValuePositions = [binaryExpressionPosition];
@@ -2632,9 +2643,9 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
2632
2643
  cxxCompoundAssignmentToValueAndStmts(binaryExpression) {
2633
2644
  var _a;
2634
2645
  const stmts = [];
2635
- let { value: leftValue, valueOriginalPositions: leftPositions, stmts: leftStmts, } = this.cxxNodeToValueAndStmts(binaryExpression.inner[0]);
2646
+ let { value: leftValue, valueOriginalPositions: leftPositions, stmts: leftStmts } = this.cxxNodeToValueAndStmts(binaryExpression.inner[0]);
2636
2647
  stmts.push(...leftStmts);
2637
- let { value: rightValue, valueOriginalPositions: rightPositions, stmts: rightStmts, } = this.cxxNodeToValueAndStmts(binaryExpression.inner[1]);
2648
+ let { value: rightValue, valueOriginalPositions: rightPositions, stmts: rightStmts } = this.cxxNodeToValueAndStmts(binaryExpression.inner[1]);
2638
2649
  stmts.push(...rightStmts);
2639
2650
  if (IRUtils_1.IRUtils.moreThanOneAddress(leftValue) && IRUtils_1.IRUtils.moreThanOneAddress(rightValue)) {
2640
2651
  const { value: newRightValue, valueOriginalPositions: newRightPositions, stmts: rightStmts, } = this.ArkCxxIRTransformer.generateAssignStmtForValue(rightValue, rightPositions);
@@ -2703,7 +2714,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
2703
2714
  */
2704
2715
  cxxConditionToValueAndStmts(condition) {
2705
2716
  const stmts = [];
2706
- let { value: conditionValue, valueOriginalPositions: conditionPositions, stmts: conditionStmts, } = this.cxxNodeToValueAndStmts(condition);
2717
+ let { value: conditionValue, valueOriginalPositions: conditionPositions, stmts: conditionStmts } = this.cxxNodeToValueAndStmts(condition);
2707
2718
  stmts.push(...conditionStmts);
2708
2719
  let conditionExpr;
2709
2720
  if (conditionValue instanceof Expr_1.AbstractBinopExpr && this.isRelationalOperator(conditionValue.getOperator())) {