arkanalyzer 1.0.20 → 1.0.21

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 (279) hide show
  1. package/lib/Config.d.ts +70 -70
  2. package/lib/Config.js +198 -198
  3. package/lib/Scene.d.ts +316 -316
  4. package/lib/Scene.js +1316 -1316
  5. package/lib/callgraph/algorithm/AbstractAnalysis.d.ts +28 -28
  6. package/lib/callgraph/algorithm/AbstractAnalysis.js +144 -144
  7. package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts +10 -10
  8. package/lib/callgraph/algorithm/ClassHierarchyAnalysis.js +69 -69
  9. package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts +15 -15
  10. package/lib/callgraph/algorithm/RapidTypeAnalysis.js +146 -146
  11. package/lib/callgraph/common/Statistics.d.ts +57 -57
  12. package/lib/callgraph/common/Statistics.js +228 -228
  13. package/lib/callgraph/model/CallGraph.d.ts +96 -96
  14. package/lib/callgraph/model/CallGraph.js +354 -354
  15. package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +15 -15
  16. package/lib/callgraph/model/builder/CallGraphBuilder.js +106 -106
  17. package/lib/callgraph/pointerAnalysis/Context.d.ts +37 -37
  18. package/lib/callgraph/pointerAnalysis/Context.js +155 -155
  19. package/lib/callgraph/pointerAnalysis/DummyCallCreator.d.ts +22 -22
  20. package/lib/callgraph/pointerAnalysis/DummyCallCreator.js +104 -104
  21. package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts +5 -5
  22. package/lib/callgraph/pointerAnalysis/PTAUtils.js +46 -46
  23. package/lib/callgraph/pointerAnalysis/Pag.d.ts +261 -261
  24. package/lib/callgraph/pointerAnalysis/Pag.js +930 -930
  25. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +157 -157
  26. package/lib/callgraph/pointerAnalysis/PagBuilder.js +1399 -1399
  27. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +72 -72
  28. package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +573 -573
  29. package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts +15 -15
  30. package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.js +81 -81
  31. package/lib/callgraph/pointerAnalysis/PtsDS.d.ts +80 -80
  32. package/lib/callgraph/pointerAnalysis/PtsDS.js +308 -308
  33. package/lib/core/base/Constant.d.ts +48 -48
  34. package/lib/core/base/Constant.js +103 -103
  35. package/lib/core/base/Decorator.d.ts +15 -15
  36. package/lib/core/base/Decorator.js +46 -46
  37. package/lib/core/base/DefUseChain.d.ts +8 -8
  38. package/lib/core/base/DefUseChain.js +25 -25
  39. package/lib/core/base/Expr.d.ts +340 -340
  40. package/lib/core/base/Expr.js +917 -917
  41. package/lib/core/base/Local.d.ts +104 -104
  42. package/lib/core/base/Local.js +176 -176
  43. package/lib/core/base/Position.d.ts +30 -30
  44. package/lib/core/base/Position.js +147 -147
  45. package/lib/core/base/Ref.d.ts +173 -173
  46. package/lib/core/base/Ref.js +374 -374
  47. package/lib/core/base/Stmt.d.ts +237 -237
  48. package/lib/core/base/Stmt.js +525 -525
  49. package/lib/core/base/Trap.d.ts +8 -8
  50. package/lib/core/base/Trap.js +30 -30
  51. package/lib/core/base/Type.d.ts +308 -308
  52. package/lib/core/base/Type.js +639 -639
  53. package/lib/core/base/TypeExpr.d.ts +71 -71
  54. package/lib/core/base/TypeExpr.js +155 -155
  55. package/lib/core/base/Value.d.ts +32 -32
  56. package/lib/core/base/Value.js +16 -16
  57. package/lib/core/common/ArkError.d.ts +14 -14
  58. package/lib/core/common/ArkError.js +28 -28
  59. package/lib/core/common/ArkIRTransformer.d.ts +67 -67
  60. package/lib/core/common/ArkIRTransformer.js +690 -690
  61. package/lib/core/common/ArkValueTransformer.d.ts +89 -89
  62. package/lib/core/common/ArkValueTransformer.js +1478 -1478
  63. package/lib/core/common/Builtin.d.ts +36 -36
  64. package/lib/core/common/Builtin.js +81 -81
  65. package/lib/core/common/Const.d.ts +21 -21
  66. package/lib/core/common/Const.js +43 -43
  67. package/lib/core/common/DummyMainCreater.d.ts +46 -46
  68. package/lib/core/common/DummyMainCreater.js +319 -319
  69. package/lib/core/common/EtsConst.d.ts +73 -73
  70. package/lib/core/common/EtsConst.js +1021 -1021
  71. package/lib/core/common/ExprUseReplacer.d.ts +21 -21
  72. package/lib/core/common/ExprUseReplacer.js +124 -124
  73. package/lib/core/common/IRInference.d.ts +36 -36
  74. package/lib/core/common/IRInference.d.ts.map +1 -1
  75. package/lib/core/common/IRInference.js +651 -648
  76. package/lib/core/common/IRUtils.d.ts +18 -18
  77. package/lib/core/common/IRUtils.js +141 -141
  78. package/lib/core/common/ModelUtils.d.ts +70 -70
  79. package/lib/core/common/ModelUtils.js +712 -712
  80. package/lib/core/common/RefUseReplacer.d.ts +13 -13
  81. package/lib/core/common/RefUseReplacer.js +52 -52
  82. package/lib/core/common/SdkUtils.d.ts +8 -8
  83. package/lib/core/common/SdkUtils.js +105 -105
  84. package/lib/core/common/StmtDefReplacer.d.ts +12 -12
  85. package/lib/core/common/StmtDefReplacer.js +41 -41
  86. package/lib/core/common/StmtUseReplacer.d.ts +16 -16
  87. package/lib/core/common/StmtUseReplacer.js +108 -108
  88. package/lib/core/common/TSConst.d.ts +18 -18
  89. package/lib/core/common/TSConst.js +36 -36
  90. package/lib/core/common/TypeInference.d.ts +102 -102
  91. package/lib/core/common/TypeInference.js +748 -748
  92. package/lib/core/common/ValueUtil.d.ts +12 -12
  93. package/lib/core/common/ValueUtil.js +54 -54
  94. package/lib/core/common/VisibleValue.d.ts +36 -36
  95. package/lib/core/common/VisibleValue.js +212 -212
  96. package/lib/core/dataflow/DataflowProblem.d.ts +20 -20
  97. package/lib/core/dataflow/DataflowProblem.js +20 -20
  98. package/lib/core/dataflow/DataflowResult.d.ts +7 -7
  99. package/lib/core/dataflow/DataflowResult.js +26 -26
  100. package/lib/core/dataflow/DataflowSolver.d.ts +43 -43
  101. package/lib/core/dataflow/DataflowSolver.js +307 -307
  102. package/lib/core/dataflow/Edge.d.ts +11 -11
  103. package/lib/core/dataflow/Edge.js +31 -31
  104. package/lib/core/dataflow/Fact.d.ts +6 -6
  105. package/lib/core/dataflow/Fact.js +24 -24
  106. package/lib/core/dataflow/GenericDataFlow.d.ts +142 -142
  107. package/lib/core/dataflow/GenericDataFlow.js +109 -109
  108. package/lib/core/dataflow/ReachingDef.d.ts +62 -62
  109. package/lib/core/dataflow/ReachingDef.js +168 -168
  110. package/lib/core/dataflow/UndefinedVariable.d.ts +45 -45
  111. package/lib/core/dataflow/UndefinedVariable.js +288 -288
  112. package/lib/core/dataflow/Util.d.ts +9 -9
  113. package/lib/core/dataflow/Util.js +64 -64
  114. package/lib/core/graph/BaseExplicitGraph.d.ts +58 -58
  115. package/lib/core/graph/BaseExplicitGraph.js +157 -157
  116. package/lib/core/graph/BaseImplicitGraph.d.ts +77 -77
  117. package/lib/core/graph/BaseImplicitGraph.js +78 -78
  118. package/lib/core/graph/BasicBlock.d.ts +104 -104
  119. package/lib/core/graph/BasicBlock.js +280 -280
  120. package/lib/core/graph/Cfg.d.ts +59 -59
  121. package/lib/core/graph/Cfg.js +282 -282
  122. package/lib/core/graph/DependsGraph.d.ts +35 -35
  123. package/lib/core/graph/DependsGraph.js +87 -87
  124. package/lib/core/graph/DominanceFinder.d.ts +15 -15
  125. package/lib/core/graph/DominanceFinder.js +121 -121
  126. package/lib/core/graph/DominanceTree.d.ts +12 -12
  127. package/lib/core/graph/DominanceTree.js +70 -70
  128. package/lib/core/graph/GraphTraits.d.ts +7 -7
  129. package/lib/core/graph/GraphTraits.js +16 -16
  130. package/lib/core/graph/Scc.d.ts +61 -61
  131. package/lib/core/graph/Scc.js +222 -222
  132. package/lib/core/graph/ViewTree.d.ts +114 -114
  133. package/lib/core/graph/ViewTree.js +16 -16
  134. package/lib/core/graph/builder/CfgBuilder.d.ts +176 -176
  135. package/lib/core/graph/builder/CfgBuilder.js +1139 -1139
  136. package/lib/core/graph/builder/ConditionBuilder.d.ts +15 -15
  137. package/lib/core/graph/builder/ConditionBuilder.js +252 -252
  138. package/lib/core/graph/builder/LoopBuilder.d.ts +20 -20
  139. package/lib/core/graph/builder/LoopBuilder.js +251 -251
  140. package/lib/core/graph/builder/SwitchBuilder.d.ts +11 -11
  141. package/lib/core/graph/builder/SwitchBuilder.js +152 -152
  142. package/lib/core/graph/builder/TrapBuilder.d.ts +16 -16
  143. package/lib/core/graph/builder/TrapBuilder.js +272 -272
  144. package/lib/core/graph/builder/ViewTreeBuilder.d.ts +203 -203
  145. package/lib/core/graph/builder/ViewTreeBuilder.js +1055 -1055
  146. package/lib/core/model/ArkBaseModel.d.ts +59 -59
  147. package/lib/core/model/ArkBaseModel.js +274 -274
  148. package/lib/core/model/ArkBody.d.ts +24 -24
  149. package/lib/core/model/ArkBody.js +65 -65
  150. package/lib/core/model/ArkClass.d.ts +206 -206
  151. package/lib/core/model/ArkClass.js +439 -439
  152. package/lib/core/model/ArkExport.d.ts +72 -72
  153. package/lib/core/model/ArkExport.js +147 -147
  154. package/lib/core/model/ArkField.d.ts +62 -62
  155. package/lib/core/model/ArkField.js +113 -113
  156. package/lib/core/model/ArkFile.d.ts +131 -131
  157. package/lib/core/model/ArkFile.js +267 -267
  158. package/lib/core/model/ArkImport.d.ts +44 -44
  159. package/lib/core/model/ArkImport.js +108 -108
  160. package/lib/core/model/ArkMetadata.d.ts +31 -31
  161. package/lib/core/model/ArkMetadata.js +55 -55
  162. package/lib/core/model/ArkMethod.d.ts +261 -261
  163. package/lib/core/model/ArkMethod.js +592 -592
  164. package/lib/core/model/ArkNamespace.d.ts +66 -66
  165. package/lib/core/model/ArkNamespace.js +209 -209
  166. package/lib/core/model/ArkSignature.d.ts +162 -162
  167. package/lib/core/model/ArkSignature.js +379 -379
  168. package/lib/core/model/builder/ArkClassBuilder.d.ts +12 -12
  169. package/lib/core/model/builder/ArkClassBuilder.js +454 -454
  170. package/lib/core/model/builder/ArkExportBuilder.d.ts +24 -24
  171. package/lib/core/model/builder/ArkExportBuilder.js +210 -210
  172. package/lib/core/model/builder/ArkFieldBuilder.d.ts +8 -8
  173. package/lib/core/model/builder/ArkFieldBuilder.js +193 -193
  174. package/lib/core/model/builder/ArkFileBuilder.d.ts +9 -9
  175. package/lib/core/model/builder/ArkFileBuilder.js +165 -165
  176. package/lib/core/model/builder/ArkImportBuilder.d.ts +4 -4
  177. package/lib/core/model/builder/ArkImportBuilder.js +128 -128
  178. package/lib/core/model/builder/ArkMethodBuilder.d.ts +63 -63
  179. package/lib/core/model/builder/ArkMethodBuilder.js +486 -486
  180. package/lib/core/model/builder/ArkNamespaceBuilder.d.ts +5 -5
  181. package/lib/core/model/builder/ArkNamespaceBuilder.js +205 -205
  182. package/lib/core/model/builder/ArkSignatureBuilder.d.ts +8 -8
  183. package/lib/core/model/builder/ArkSignatureBuilder.js +40 -40
  184. package/lib/core/model/builder/BodyBuilder.d.ts +55 -30
  185. package/lib/core/model/builder/BodyBuilder.d.ts.map +1 -1
  186. package/lib/core/model/builder/BodyBuilder.js +542 -371
  187. package/lib/core/model/builder/builderUtils.d.ts +18 -18
  188. package/lib/core/model/builder/builderUtils.js +558 -558
  189. package/lib/index.d.ts +82 -80
  190. package/lib/index.d.ts.map +1 -1
  191. package/lib/index.js +201 -196
  192. package/lib/save/ArkStream.d.ts +23 -23
  193. package/lib/save/ArkStream.js +83 -83
  194. package/lib/save/DotPrinter.d.ts +43 -43
  195. package/lib/save/DotPrinter.js +170 -170
  196. package/lib/save/GraphPrinter.d.ts +16 -16
  197. package/lib/save/GraphPrinter.js +134 -134
  198. package/lib/save/JsonPrinter.d.ts +30 -30
  199. package/lib/save/JsonPrinter.js +580 -580
  200. package/lib/save/Printer.d.ts +12 -12
  201. package/lib/save/Printer.js +27 -27
  202. package/lib/save/PrinterBuilder.d.ts +53 -53
  203. package/lib/save/PrinterBuilder.js +145 -145
  204. package/lib/save/ViewTreePrinter.d.ts +14 -14
  205. package/lib/save/ViewTreePrinter.js +123 -123
  206. package/lib/save/arkir/ArkIRClassPrinter.d.ts +13 -13
  207. package/lib/save/arkir/ArkIRClassPrinter.js +92 -92
  208. package/lib/save/arkir/ArkIRFieldPrinter.d.ts +11 -11
  209. package/lib/save/arkir/ArkIRFieldPrinter.js +64 -64
  210. package/lib/save/arkir/ArkIRFilePrinter.d.ts +12 -12
  211. package/lib/save/arkir/ArkIRFilePrinter.js +54 -54
  212. package/lib/save/arkir/ArkIRMethodPrinter.d.ts +16 -16
  213. package/lib/save/arkir/ArkIRMethodPrinter.js +159 -159
  214. package/lib/save/arkir/ArkIRNamespacePrinter.d.ts +11 -11
  215. package/lib/save/arkir/ArkIRNamespacePrinter.js +66 -66
  216. package/lib/save/base/BasePrinter.d.ts +23 -23
  217. package/lib/save/base/BasePrinter.js +70 -70
  218. package/lib/save/base/ExportPrinter.d.ts +8 -8
  219. package/lib/save/base/ExportPrinter.js +67 -67
  220. package/lib/save/base/ImportPrinter.d.ts +9 -9
  221. package/lib/save/base/ImportPrinter.js +92 -92
  222. package/lib/save/base/PrinterUtils.d.ts +24 -24
  223. package/lib/save/base/PrinterUtils.js +208 -208
  224. package/lib/save/serializeArkIR.d.ts +8 -8
  225. package/lib/save/serializeArkIR.js +294 -294
  226. package/lib/save/source/SourceBase.d.ts +22 -22
  227. package/lib/save/source/SourceBase.js +64 -64
  228. package/lib/save/source/SourceBody.d.ts +58 -58
  229. package/lib/save/source/SourceBody.js +296 -296
  230. package/lib/save/source/SourceClass.d.ts +25 -25
  231. package/lib/save/source/SourceClass.js +187 -187
  232. package/lib/save/source/SourceField.d.ts +13 -13
  233. package/lib/save/source/SourceField.js +73 -73
  234. package/lib/save/source/SourceFilePrinter.d.ts +12 -12
  235. package/lib/save/source/SourceFilePrinter.js +69 -69
  236. package/lib/save/source/SourceMethod.d.ts +22 -22
  237. package/lib/save/source/SourceMethod.d.ts.map +1 -1
  238. package/lib/save/source/SourceMethod.js +196 -193
  239. package/lib/save/source/SourceNamespace.d.ts +11 -11
  240. package/lib/save/source/SourceNamespace.js +83 -83
  241. package/lib/save/source/SourceStmt.d.ts +178 -178
  242. package/lib/save/source/SourceStmt.js +838 -838
  243. package/lib/save/source/SourceTransformer.d.ts +46 -46
  244. package/lib/save/source/SourceTransformer.js +446 -446
  245. package/lib/transformer/FunctionTransformer.d.ts +2 -2
  246. package/lib/transformer/FunctionTransformer.js +17 -17
  247. package/lib/transformer/SceneTransformer.d.ts +2 -2
  248. package/lib/transformer/SceneTransformer.js +17 -17
  249. package/lib/transformer/StaticSingleAssignmentFormer.d.ts +12 -12
  250. package/lib/transformer/StaticSingleAssignmentFormer.js +259 -259
  251. package/lib/transformer/Transformer.d.ts +6 -6
  252. package/lib/transformer/Transformer.js +22 -22
  253. package/lib/utils/AstTreeUtils.d.ts +4 -4
  254. package/lib/utils/AstTreeUtils.js +26 -26
  255. package/lib/utils/CfgStructualAnalysis.d.ts +110 -110
  256. package/lib/utils/CfgStructualAnalysis.js +1277 -1277
  257. package/lib/utils/FileUtils.d.ts +18 -18
  258. package/lib/utils/FileUtils.js +135 -135
  259. package/lib/utils/SparseBitVector.d.ts +100 -100
  260. package/lib/utils/SparseBitVector.js +445 -445
  261. package/lib/utils/callGraphUtils.d.ts +30 -30
  262. package/lib/utils/callGraphUtils.js +205 -205
  263. package/lib/utils/crypto_utils.d.ts +5 -5
  264. package/lib/utils/crypto_utils.js +57 -57
  265. package/lib/utils/entryMethodUtils.d.ts +13 -13
  266. package/lib/utils/entryMethodUtils.js +110 -110
  267. package/lib/utils/getAllFiles.d.ts +9 -9
  268. package/lib/utils/getAllFiles.js +90 -90
  269. package/lib/utils/json5parser.d.ts +6 -6
  270. package/lib/utils/json5parser.js +146 -146
  271. package/lib/utils/logger.d.ts +18 -18
  272. package/lib/utils/logger.d.ts.map +1 -1
  273. package/lib/utils/logger.js +97 -90
  274. package/lib/utils/pathTransfer.d.ts +1 -1
  275. package/lib/utils/pathTransfer.js +25 -25
  276. package/node_modules/json5/lib/cli.js +0 -0
  277. package/node_modules/ohos-typescript/bin/tsc +0 -0
  278. package/node_modules/ohos-typescript/bin/tsserver +0 -0
  279. package/package.json +3 -3
@@ -1,158 +1,158 @@
1
- import { CallGraph, FuncID, CallSite, DynCallSite } from '../model/CallGraph';
2
- import { Scene } from '../../Scene';
3
- import { Stmt } from '../../core/base/Stmt';
4
- import { ArkThisRef } from '../../core/base/Ref';
5
- import { Value } from '../../core/base/Value';
6
- import { Local } from '../../core/base/Local';
7
- import { NodeID } from '../../core/graph/BaseExplicitGraph';
8
- import { ContextID } from './Context';
9
- import { Pag, FuncPag, PagNode, StorageType, InterFuncPag, PagNodeType } from './Pag';
10
- import { IPtsCollection } from './PtsDS';
11
- export declare class CSFuncID {
12
- cid: ContextID;
13
- funcID: FuncID;
14
- constructor(cid: ContextID, fid: FuncID);
15
- }
16
- export declare class PagBuilder {
17
- private pag;
18
- private cg;
19
- private funcPags;
20
- private interFuncPags?;
21
- private handledFunc;
22
- private ctx;
23
- private scene;
24
- private worklist;
25
- private pagStat;
26
- private staticField2UniqInstanceMap;
27
- private instanceField2UniqInstanceMap;
28
- private cid2ThisRefPtMap;
29
- private cid2ThisRefMap;
30
- private cid2ThisLocalMap;
31
- private sdkMethodReturnValueMap;
32
- private sdkMethodParamValueMap;
33
- private fakeSdkMethodParamDeclaringStmt;
34
- private funcHandledThisRound;
35
- private updatedNodesThisRound;
36
- private singletonFuncMap;
37
- private globalThisValue;
38
- private globalThisPagNode?;
39
- private storagePropertyMap;
40
- private externalScopeVariableMap;
41
- constructor(p: Pag, cg: CallGraph, s: Scene, kLimit: number);
42
- private buildFuncPagAndAddToWorklist;
43
- private addToFuncHandledListThisRound;
44
- buildForEntries(funcIDs: FuncID[]): void;
45
- handleReachable(): boolean;
46
- build(): void;
47
- buildFuncPag(funcID: FuncID): boolean;
48
- /**
49
- * will not create real funcPag, only create param values
50
- */
51
- private buildSDKFuncPag;
52
- buildPagFromFuncPag(funcID: FuncID, cid: ContextID): void;
53
- addEdgesFromFuncPag(funcPag: FuncPag, cid: ContextID): boolean;
54
- addCallsEdgesFromFuncPag(funcPag: FuncPag, cid: ContextID): boolean;
55
- /**
56
- * process Storage API
57
- * @returns boolean: check if the cs represent a Storage API, no matter the API will success or fail
58
- */
59
- private processStorage;
60
- private processStorageSetOrCreate;
61
- private processStorageLink;
62
- private processStorageProp;
63
- private processStorageSet;
64
- private processStorageGet;
65
- private getPropertyName;
66
- addDynamicCallSite(funcPag: FuncPag, funcID: FuncID): void;
67
- addUnknownCallSite(funcPag: FuncPag, funcID: FuncID): void;
68
- addDynamicCallEdge(cs: DynCallSite | CallSite, baseClassPTNode: NodeID, cid: ContextID): NodeID[];
69
- private getDynamicCallee;
70
- addUpdatedNode(nodeID: NodeID, diffPT: IPtsCollection<NodeID>): void;
71
- getUpdatedNodes(): Map<number, IPtsCollection<number>>;
72
- resetUpdatedNodes(): void;
73
- handleUnkownDynamicCall(cs: DynCallSite, cid: ContextID): NodeID[];
74
- handleUnprocessedCallSites(processedCallSites: Set<DynCallSite>): NodeID[];
75
- private addThisRefCallEdge;
76
- addStaticPagCallEdge(cs: CallSite, callerCid: ContextID, calleeCid?: ContextID): NodeID[];
77
- private addSDKMethodPagCallEdge;
78
- private addSDKMethodReturnPagEdge;
79
- private addSDKMethodParamPagEdge;
80
- private processContainerPagCallEdge;
81
- getOrNewPagNode(cid: ContextID, v: PagNodeType, s?: Stmt): PagNode;
82
- /**
83
- * return ThisRef PAG node according to cid, a cid has a unique ThisRef node
84
- * @param cid: current contextID
85
- */
86
- getOrNewThisRefNode(cid: ContextID, v: ArkThisRef): PagNode;
87
- getOrNewThisLoalNode(cid: ContextID, v: Local, s?: Stmt): PagNode;
88
- getOrNewGlobalThisNode(cid: ContextID): PagNode;
89
- getUniqThisLocalNode(cid: ContextID): NodeID | undefined;
90
- /**
91
- * search the storage map to get propertyNode with given storage and propertyFieldName
92
- * @param storage storage type: AppStorage, LocalStorage etc.
93
- * @param propertyName string property key
94
- * @returns propertyNode: PagLocalNode
95
- */
96
- getOrNewPropertyNode(storage: StorageType, propertyName: string, stmt: Stmt): PagNode;
97
- getPropertyNode(storage: StorageType, propertyName: string, stmt: Stmt): PagNode | undefined;
98
- /**
99
- * add PagEdge
100
- * @param edgeKind: edge kind differs from API
101
- * @param propertyNode: PAG node created by protpertyName
102
- * @param obj: heapObj stored with Storage API
103
- */
104
- addPropertyLinkEdge(propertyNode: PagNode, storageObj: Value, cid: ContextID, stmt: Stmt, edgeKind: number): boolean;
105
- getRealInstanceRef(v: Value): Value;
106
- /**
107
- * check if a method is singleton function
108
- * rule: static method, assign heap obj to global var or static field, return the receiver
109
- */
110
- isSingletonFunction(funcID: FuncID): boolean;
111
- private isValueConnected;
112
- private funcPagDfs;
113
- getGlobalThisValue(): Local;
114
- private getEdgeKindForAssignStmt;
115
- /**
116
- * get storageType enum with method's Declaring ClassName
117
- *
118
- * @param storageName ClassName that method belongs to, currently support AppStorage and SubscribedAbstractProperty
119
- * SubscribedAbstractProperty: in following listing, `link1` is infered as ClassType `SubscribedAbstractProperty`,
120
- * it needs to get PAG node to check the StorageType
121
- * let link1: SubscribedAbstractProperty<A> = AppStorage.link('PropA');
122
- * link1.set(a);
123
- * @param cs: for search PAG node in SubscribedAbstractProperty
124
- * @param cid: for search PAG node in SubscribedAbstractProperty
125
- * @returns StorageType enum
126
- */
127
- private getStorageType;
128
- /**\
129
- * ArkNewExpr, ArkNewArrayExpr, function ptr, globalThis
130
- */
131
- private stmtIsCreateAddressObj;
132
- private stmtIsCopyKind;
133
- private stmtIsWriteKind;
134
- private stmtIsReadKind;
135
- addToDynamicCallSite(funcPag: FuncPag, cs: DynCallSite): void;
136
- setPtForNode(node: NodeID, pts: IPtsCollection<NodeID> | undefined): void;
137
- getRealThisLocal(input: Local, funcId: FuncID): Local;
138
- doStat(): void;
139
- printStat(): void;
140
- getStat(): string;
141
- getUnhandledFuncs(): FuncID[];
142
- getHandledFuncs(): FuncID[];
143
- /**
144
- * build export edge in internal func pag
145
- * @param value: Value that need to check if it is from import/export
146
- * @param originValue: if Value if InstanceFieldRef, the base will be passed to `value` recursively,
147
- * fieldRef will be passed to `originValue`
148
- */
149
- private handleValueFromExternalScope;
150
- private addInterFuncEdge;
151
- private getSourceValueFromExternalScope;
152
- private getDefaultMethodSourceValue;
153
- private getExportSourceValue;
154
- private addExportVariableMap;
155
- getExportVariableMap(src: Local): Local[];
156
- addEdgesFromInterFuncPag(interFuncPag: InterFuncPag, cid: ContextID): boolean;
157
- }
1
+ import { CallGraph, FuncID, CallSite, DynCallSite } from '../model/CallGraph';
2
+ import { Scene } from '../../Scene';
3
+ import { Stmt } from '../../core/base/Stmt';
4
+ import { ArkThisRef } from '../../core/base/Ref';
5
+ import { Value } from '../../core/base/Value';
6
+ import { Local } from '../../core/base/Local';
7
+ import { NodeID } from '../../core/graph/BaseExplicitGraph';
8
+ import { ContextID } from './Context';
9
+ import { Pag, FuncPag, PagNode, StorageType, InterFuncPag, PagNodeType } from './Pag';
10
+ import { IPtsCollection } from './PtsDS';
11
+ export declare class CSFuncID {
12
+ cid: ContextID;
13
+ funcID: FuncID;
14
+ constructor(cid: ContextID, fid: FuncID);
15
+ }
16
+ export declare class PagBuilder {
17
+ private pag;
18
+ private cg;
19
+ private funcPags;
20
+ private interFuncPags?;
21
+ private handledFunc;
22
+ private ctx;
23
+ private scene;
24
+ private worklist;
25
+ private pagStat;
26
+ private staticField2UniqInstanceMap;
27
+ private instanceField2UniqInstanceMap;
28
+ private cid2ThisRefPtMap;
29
+ private cid2ThisRefMap;
30
+ private cid2ThisLocalMap;
31
+ private sdkMethodReturnValueMap;
32
+ private sdkMethodParamValueMap;
33
+ private fakeSdkMethodParamDeclaringStmt;
34
+ private funcHandledThisRound;
35
+ private updatedNodesThisRound;
36
+ private singletonFuncMap;
37
+ private globalThisValue;
38
+ private globalThisPagNode?;
39
+ private storagePropertyMap;
40
+ private externalScopeVariableMap;
41
+ constructor(p: Pag, cg: CallGraph, s: Scene, kLimit: number);
42
+ private buildFuncPagAndAddToWorklist;
43
+ private addToFuncHandledListThisRound;
44
+ buildForEntries(funcIDs: FuncID[]): void;
45
+ handleReachable(): boolean;
46
+ build(): void;
47
+ buildFuncPag(funcID: FuncID): boolean;
48
+ /**
49
+ * will not create real funcPag, only create param values
50
+ */
51
+ private buildSDKFuncPag;
52
+ buildPagFromFuncPag(funcID: FuncID, cid: ContextID): void;
53
+ addEdgesFromFuncPag(funcPag: FuncPag, cid: ContextID): boolean;
54
+ addCallsEdgesFromFuncPag(funcPag: FuncPag, cid: ContextID): boolean;
55
+ /**
56
+ * process Storage API
57
+ * @returns boolean: check if the cs represent a Storage API, no matter the API will success or fail
58
+ */
59
+ private processStorage;
60
+ private processStorageSetOrCreate;
61
+ private processStorageLink;
62
+ private processStorageProp;
63
+ private processStorageSet;
64
+ private processStorageGet;
65
+ private getPropertyName;
66
+ addDynamicCallSite(funcPag: FuncPag, funcID: FuncID): void;
67
+ addUnknownCallSite(funcPag: FuncPag, funcID: FuncID): void;
68
+ addDynamicCallEdge(cs: DynCallSite | CallSite, baseClassPTNode: NodeID, cid: ContextID): NodeID[];
69
+ private getDynamicCallee;
70
+ addUpdatedNode(nodeID: NodeID, diffPT: IPtsCollection<NodeID>): void;
71
+ getUpdatedNodes(): Map<number, IPtsCollection<number>>;
72
+ resetUpdatedNodes(): void;
73
+ handleUnkownDynamicCall(cs: DynCallSite, cid: ContextID): NodeID[];
74
+ handleUnprocessedCallSites(processedCallSites: Set<DynCallSite>): NodeID[];
75
+ private addThisRefCallEdge;
76
+ addStaticPagCallEdge(cs: CallSite, callerCid: ContextID, calleeCid?: ContextID): NodeID[];
77
+ private addSDKMethodPagCallEdge;
78
+ private addSDKMethodReturnPagEdge;
79
+ private addSDKMethodParamPagEdge;
80
+ private processContainerPagCallEdge;
81
+ getOrNewPagNode(cid: ContextID, v: PagNodeType, s?: Stmt): PagNode;
82
+ /**
83
+ * return ThisRef PAG node according to cid, a cid has a unique ThisRef node
84
+ * @param cid: current contextID
85
+ */
86
+ getOrNewThisRefNode(cid: ContextID, v: ArkThisRef): PagNode;
87
+ getOrNewThisLoalNode(cid: ContextID, v: Local, s?: Stmt): PagNode;
88
+ getOrNewGlobalThisNode(cid: ContextID): PagNode;
89
+ getUniqThisLocalNode(cid: ContextID): NodeID | undefined;
90
+ /**
91
+ * search the storage map to get propertyNode with given storage and propertyFieldName
92
+ * @param storage storage type: AppStorage, LocalStorage etc.
93
+ * @param propertyName string property key
94
+ * @returns propertyNode: PagLocalNode
95
+ */
96
+ getOrNewPropertyNode(storage: StorageType, propertyName: string, stmt: Stmt): PagNode;
97
+ getPropertyNode(storage: StorageType, propertyName: string, stmt: Stmt): PagNode | undefined;
98
+ /**
99
+ * add PagEdge
100
+ * @param edgeKind: edge kind differs from API
101
+ * @param propertyNode: PAG node created by protpertyName
102
+ * @param obj: heapObj stored with Storage API
103
+ */
104
+ addPropertyLinkEdge(propertyNode: PagNode, storageObj: Value, cid: ContextID, stmt: Stmt, edgeKind: number): boolean;
105
+ getRealInstanceRef(v: Value): Value;
106
+ /**
107
+ * check if a method is singleton function
108
+ * rule: static method, assign heap obj to global var or static field, return the receiver
109
+ */
110
+ isSingletonFunction(funcID: FuncID): boolean;
111
+ private isValueConnected;
112
+ private funcPagDfs;
113
+ getGlobalThisValue(): Local;
114
+ private getEdgeKindForAssignStmt;
115
+ /**
116
+ * get storageType enum with method's Declaring ClassName
117
+ *
118
+ * @param storageName ClassName that method belongs to, currently support AppStorage and SubscribedAbstractProperty
119
+ * SubscribedAbstractProperty: in following listing, `link1` is infered as ClassType `SubscribedAbstractProperty`,
120
+ * it needs to get PAG node to check the StorageType
121
+ * let link1: SubscribedAbstractProperty<A> = AppStorage.link('PropA');
122
+ * link1.set(a);
123
+ * @param cs: for search PAG node in SubscribedAbstractProperty
124
+ * @param cid: for search PAG node in SubscribedAbstractProperty
125
+ * @returns StorageType enum
126
+ */
127
+ private getStorageType;
128
+ /**\
129
+ * ArkNewExpr, ArkNewArrayExpr, function ptr, globalThis
130
+ */
131
+ private stmtIsCreateAddressObj;
132
+ private stmtIsCopyKind;
133
+ private stmtIsWriteKind;
134
+ private stmtIsReadKind;
135
+ addToDynamicCallSite(funcPag: FuncPag, cs: DynCallSite): void;
136
+ setPtForNode(node: NodeID, pts: IPtsCollection<NodeID> | undefined): void;
137
+ getRealThisLocal(input: Local, funcId: FuncID): Local;
138
+ doStat(): void;
139
+ printStat(): void;
140
+ getStat(): string;
141
+ getUnhandledFuncs(): FuncID[];
142
+ getHandledFuncs(): FuncID[];
143
+ /**
144
+ * build export edge in internal func pag
145
+ * @param value: Value that need to check if it is from import/export
146
+ * @param originValue: if Value if InstanceFieldRef, the base will be passed to `value` recursively,
147
+ * fieldRef will be passed to `originValue`
148
+ */
149
+ private handleValueFromExternalScope;
150
+ private addInterFuncEdge;
151
+ private getSourceValueFromExternalScope;
152
+ private getDefaultMethodSourceValue;
153
+ private getExportSourceValue;
154
+ private addExportVariableMap;
155
+ getExportVariableMap(src: Local): Local[];
156
+ addEdgesFromInterFuncPag(interFuncPag: InterFuncPag, cid: ContextID): boolean;
157
+ }
158
158
  //# sourceMappingURL=PagBuilder.d.ts.map