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.
- package/lib/Config.d.ts +70 -70
- package/lib/Config.js +198 -198
- package/lib/Scene.d.ts +316 -316
- package/lib/Scene.js +1316 -1316
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts +28 -28
- package/lib/callgraph/algorithm/AbstractAnalysis.js +144 -144
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts +10 -10
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.js +69 -69
- package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts +15 -15
- package/lib/callgraph/algorithm/RapidTypeAnalysis.js +146 -146
- package/lib/callgraph/common/Statistics.d.ts +57 -57
- package/lib/callgraph/common/Statistics.js +228 -228
- package/lib/callgraph/model/CallGraph.d.ts +96 -96
- package/lib/callgraph/model/CallGraph.js +354 -354
- package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +15 -15
- package/lib/callgraph/model/builder/CallGraphBuilder.js +106 -106
- package/lib/callgraph/pointerAnalysis/Context.d.ts +37 -37
- package/lib/callgraph/pointerAnalysis/Context.js +155 -155
- package/lib/callgraph/pointerAnalysis/DummyCallCreator.d.ts +22 -22
- package/lib/callgraph/pointerAnalysis/DummyCallCreator.js +104 -104
- package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts +5 -5
- package/lib/callgraph/pointerAnalysis/PTAUtils.js +46 -46
- package/lib/callgraph/pointerAnalysis/Pag.d.ts +261 -261
- package/lib/callgraph/pointerAnalysis/Pag.js +930 -930
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +157 -157
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +1399 -1399
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +72 -72
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +573 -573
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts +15 -15
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.js +81 -81
- package/lib/callgraph/pointerAnalysis/PtsDS.d.ts +80 -80
- package/lib/callgraph/pointerAnalysis/PtsDS.js +308 -308
- package/lib/core/base/Constant.d.ts +48 -48
- package/lib/core/base/Constant.js +103 -103
- package/lib/core/base/Decorator.d.ts +15 -15
- package/lib/core/base/Decorator.js +46 -46
- package/lib/core/base/DefUseChain.d.ts +8 -8
- package/lib/core/base/DefUseChain.js +25 -25
- package/lib/core/base/Expr.d.ts +340 -340
- package/lib/core/base/Expr.js +917 -917
- package/lib/core/base/Local.d.ts +104 -104
- package/lib/core/base/Local.js +176 -176
- package/lib/core/base/Position.d.ts +30 -30
- package/lib/core/base/Position.js +147 -147
- package/lib/core/base/Ref.d.ts +173 -173
- package/lib/core/base/Ref.js +374 -374
- package/lib/core/base/Stmt.d.ts +237 -237
- package/lib/core/base/Stmt.js +525 -525
- package/lib/core/base/Trap.d.ts +8 -8
- package/lib/core/base/Trap.js +30 -30
- package/lib/core/base/Type.d.ts +308 -308
- package/lib/core/base/Type.js +639 -639
- package/lib/core/base/TypeExpr.d.ts +71 -71
- package/lib/core/base/TypeExpr.js +155 -155
- package/lib/core/base/Value.d.ts +32 -32
- package/lib/core/base/Value.js +16 -16
- package/lib/core/common/ArkError.d.ts +14 -14
- package/lib/core/common/ArkError.js +28 -28
- package/lib/core/common/ArkIRTransformer.d.ts +67 -67
- package/lib/core/common/ArkIRTransformer.js +690 -690
- package/lib/core/common/ArkValueTransformer.d.ts +89 -89
- package/lib/core/common/ArkValueTransformer.js +1478 -1478
- package/lib/core/common/Builtin.d.ts +36 -36
- package/lib/core/common/Builtin.js +81 -81
- package/lib/core/common/Const.d.ts +21 -21
- package/lib/core/common/Const.js +43 -43
- package/lib/core/common/DummyMainCreater.d.ts +46 -46
- package/lib/core/common/DummyMainCreater.js +319 -319
- package/lib/core/common/EtsConst.d.ts +73 -73
- package/lib/core/common/EtsConst.js +1021 -1021
- package/lib/core/common/ExprUseReplacer.d.ts +21 -21
- package/lib/core/common/ExprUseReplacer.js +124 -124
- package/lib/core/common/IRInference.d.ts +36 -36
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +651 -648
- package/lib/core/common/IRUtils.d.ts +18 -18
- package/lib/core/common/IRUtils.js +141 -141
- package/lib/core/common/ModelUtils.d.ts +70 -70
- package/lib/core/common/ModelUtils.js +712 -712
- package/lib/core/common/RefUseReplacer.d.ts +13 -13
- package/lib/core/common/RefUseReplacer.js +52 -52
- package/lib/core/common/SdkUtils.d.ts +8 -8
- package/lib/core/common/SdkUtils.js +105 -105
- package/lib/core/common/StmtDefReplacer.d.ts +12 -12
- package/lib/core/common/StmtDefReplacer.js +41 -41
- package/lib/core/common/StmtUseReplacer.d.ts +16 -16
- package/lib/core/common/StmtUseReplacer.js +108 -108
- package/lib/core/common/TSConst.d.ts +18 -18
- package/lib/core/common/TSConst.js +36 -36
- package/lib/core/common/TypeInference.d.ts +102 -102
- package/lib/core/common/TypeInference.js +748 -748
- package/lib/core/common/ValueUtil.d.ts +12 -12
- package/lib/core/common/ValueUtil.js +54 -54
- package/lib/core/common/VisibleValue.d.ts +36 -36
- package/lib/core/common/VisibleValue.js +212 -212
- package/lib/core/dataflow/DataflowProblem.d.ts +20 -20
- package/lib/core/dataflow/DataflowProblem.js +20 -20
- package/lib/core/dataflow/DataflowResult.d.ts +7 -7
- package/lib/core/dataflow/DataflowResult.js +26 -26
- package/lib/core/dataflow/DataflowSolver.d.ts +43 -43
- package/lib/core/dataflow/DataflowSolver.js +307 -307
- package/lib/core/dataflow/Edge.d.ts +11 -11
- package/lib/core/dataflow/Edge.js +31 -31
- package/lib/core/dataflow/Fact.d.ts +6 -6
- package/lib/core/dataflow/Fact.js +24 -24
- package/lib/core/dataflow/GenericDataFlow.d.ts +142 -142
- package/lib/core/dataflow/GenericDataFlow.js +109 -109
- package/lib/core/dataflow/ReachingDef.d.ts +62 -62
- package/lib/core/dataflow/ReachingDef.js +168 -168
- package/lib/core/dataflow/UndefinedVariable.d.ts +45 -45
- package/lib/core/dataflow/UndefinedVariable.js +288 -288
- package/lib/core/dataflow/Util.d.ts +9 -9
- package/lib/core/dataflow/Util.js +64 -64
- package/lib/core/graph/BaseExplicitGraph.d.ts +58 -58
- package/lib/core/graph/BaseExplicitGraph.js +157 -157
- package/lib/core/graph/BaseImplicitGraph.d.ts +77 -77
- package/lib/core/graph/BaseImplicitGraph.js +78 -78
- package/lib/core/graph/BasicBlock.d.ts +104 -104
- package/lib/core/graph/BasicBlock.js +280 -280
- package/lib/core/graph/Cfg.d.ts +59 -59
- package/lib/core/graph/Cfg.js +282 -282
- package/lib/core/graph/DependsGraph.d.ts +35 -35
- package/lib/core/graph/DependsGraph.js +87 -87
- package/lib/core/graph/DominanceFinder.d.ts +15 -15
- package/lib/core/graph/DominanceFinder.js +121 -121
- package/lib/core/graph/DominanceTree.d.ts +12 -12
- package/lib/core/graph/DominanceTree.js +70 -70
- package/lib/core/graph/GraphTraits.d.ts +7 -7
- package/lib/core/graph/GraphTraits.js +16 -16
- package/lib/core/graph/Scc.d.ts +61 -61
- package/lib/core/graph/Scc.js +222 -222
- package/lib/core/graph/ViewTree.d.ts +114 -114
- package/lib/core/graph/ViewTree.js +16 -16
- package/lib/core/graph/builder/CfgBuilder.d.ts +176 -176
- package/lib/core/graph/builder/CfgBuilder.js +1139 -1139
- package/lib/core/graph/builder/ConditionBuilder.d.ts +15 -15
- package/lib/core/graph/builder/ConditionBuilder.js +252 -252
- package/lib/core/graph/builder/LoopBuilder.d.ts +20 -20
- package/lib/core/graph/builder/LoopBuilder.js +251 -251
- package/lib/core/graph/builder/SwitchBuilder.d.ts +11 -11
- package/lib/core/graph/builder/SwitchBuilder.js +152 -152
- package/lib/core/graph/builder/TrapBuilder.d.ts +16 -16
- package/lib/core/graph/builder/TrapBuilder.js +272 -272
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts +203 -203
- package/lib/core/graph/builder/ViewTreeBuilder.js +1055 -1055
- package/lib/core/model/ArkBaseModel.d.ts +59 -59
- package/lib/core/model/ArkBaseModel.js +274 -274
- package/lib/core/model/ArkBody.d.ts +24 -24
- package/lib/core/model/ArkBody.js +65 -65
- package/lib/core/model/ArkClass.d.ts +206 -206
- package/lib/core/model/ArkClass.js +439 -439
- package/lib/core/model/ArkExport.d.ts +72 -72
- package/lib/core/model/ArkExport.js +147 -147
- package/lib/core/model/ArkField.d.ts +62 -62
- package/lib/core/model/ArkField.js +113 -113
- package/lib/core/model/ArkFile.d.ts +131 -131
- package/lib/core/model/ArkFile.js +267 -267
- package/lib/core/model/ArkImport.d.ts +44 -44
- package/lib/core/model/ArkImport.js +108 -108
- package/lib/core/model/ArkMetadata.d.ts +31 -31
- package/lib/core/model/ArkMetadata.js +55 -55
- package/lib/core/model/ArkMethod.d.ts +261 -261
- package/lib/core/model/ArkMethod.js +592 -592
- package/lib/core/model/ArkNamespace.d.ts +66 -66
- package/lib/core/model/ArkNamespace.js +209 -209
- package/lib/core/model/ArkSignature.d.ts +162 -162
- package/lib/core/model/ArkSignature.js +379 -379
- package/lib/core/model/builder/ArkClassBuilder.d.ts +12 -12
- package/lib/core/model/builder/ArkClassBuilder.js +454 -454
- package/lib/core/model/builder/ArkExportBuilder.d.ts +24 -24
- package/lib/core/model/builder/ArkExportBuilder.js +210 -210
- package/lib/core/model/builder/ArkFieldBuilder.d.ts +8 -8
- package/lib/core/model/builder/ArkFieldBuilder.js +193 -193
- package/lib/core/model/builder/ArkFileBuilder.d.ts +9 -9
- package/lib/core/model/builder/ArkFileBuilder.js +165 -165
- package/lib/core/model/builder/ArkImportBuilder.d.ts +4 -4
- package/lib/core/model/builder/ArkImportBuilder.js +128 -128
- package/lib/core/model/builder/ArkMethodBuilder.d.ts +63 -63
- package/lib/core/model/builder/ArkMethodBuilder.js +486 -486
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts +5 -5
- package/lib/core/model/builder/ArkNamespaceBuilder.js +205 -205
- package/lib/core/model/builder/ArkSignatureBuilder.d.ts +8 -8
- package/lib/core/model/builder/ArkSignatureBuilder.js +40 -40
- package/lib/core/model/builder/BodyBuilder.d.ts +55 -30
- package/lib/core/model/builder/BodyBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/BodyBuilder.js +542 -371
- package/lib/core/model/builder/builderUtils.d.ts +18 -18
- package/lib/core/model/builder/builderUtils.js +558 -558
- package/lib/index.d.ts +82 -80
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +201 -196
- package/lib/save/ArkStream.d.ts +23 -23
- package/lib/save/ArkStream.js +83 -83
- package/lib/save/DotPrinter.d.ts +43 -43
- package/lib/save/DotPrinter.js +170 -170
- package/lib/save/GraphPrinter.d.ts +16 -16
- package/lib/save/GraphPrinter.js +134 -134
- package/lib/save/JsonPrinter.d.ts +30 -30
- package/lib/save/JsonPrinter.js +580 -580
- package/lib/save/Printer.d.ts +12 -12
- package/lib/save/Printer.js +27 -27
- package/lib/save/PrinterBuilder.d.ts +53 -53
- package/lib/save/PrinterBuilder.js +145 -145
- package/lib/save/ViewTreePrinter.d.ts +14 -14
- package/lib/save/ViewTreePrinter.js +123 -123
- package/lib/save/arkir/ArkIRClassPrinter.d.ts +13 -13
- package/lib/save/arkir/ArkIRClassPrinter.js +92 -92
- package/lib/save/arkir/ArkIRFieldPrinter.d.ts +11 -11
- package/lib/save/arkir/ArkIRFieldPrinter.js +64 -64
- package/lib/save/arkir/ArkIRFilePrinter.d.ts +12 -12
- package/lib/save/arkir/ArkIRFilePrinter.js +54 -54
- package/lib/save/arkir/ArkIRMethodPrinter.d.ts +16 -16
- package/lib/save/arkir/ArkIRMethodPrinter.js +159 -159
- package/lib/save/arkir/ArkIRNamespacePrinter.d.ts +11 -11
- package/lib/save/arkir/ArkIRNamespacePrinter.js +66 -66
- package/lib/save/base/BasePrinter.d.ts +23 -23
- package/lib/save/base/BasePrinter.js +70 -70
- package/lib/save/base/ExportPrinter.d.ts +8 -8
- package/lib/save/base/ExportPrinter.js +67 -67
- package/lib/save/base/ImportPrinter.d.ts +9 -9
- package/lib/save/base/ImportPrinter.js +92 -92
- package/lib/save/base/PrinterUtils.d.ts +24 -24
- package/lib/save/base/PrinterUtils.js +208 -208
- package/lib/save/serializeArkIR.d.ts +8 -8
- package/lib/save/serializeArkIR.js +294 -294
- package/lib/save/source/SourceBase.d.ts +22 -22
- package/lib/save/source/SourceBase.js +64 -64
- package/lib/save/source/SourceBody.d.ts +58 -58
- package/lib/save/source/SourceBody.js +296 -296
- package/lib/save/source/SourceClass.d.ts +25 -25
- package/lib/save/source/SourceClass.js +187 -187
- package/lib/save/source/SourceField.d.ts +13 -13
- package/lib/save/source/SourceField.js +73 -73
- package/lib/save/source/SourceFilePrinter.d.ts +12 -12
- package/lib/save/source/SourceFilePrinter.js +69 -69
- package/lib/save/source/SourceMethod.d.ts +22 -22
- package/lib/save/source/SourceMethod.d.ts.map +1 -1
- package/lib/save/source/SourceMethod.js +196 -193
- package/lib/save/source/SourceNamespace.d.ts +11 -11
- package/lib/save/source/SourceNamespace.js +83 -83
- package/lib/save/source/SourceStmt.d.ts +178 -178
- package/lib/save/source/SourceStmt.js +838 -838
- package/lib/save/source/SourceTransformer.d.ts +46 -46
- package/lib/save/source/SourceTransformer.js +446 -446
- package/lib/transformer/FunctionTransformer.d.ts +2 -2
- package/lib/transformer/FunctionTransformer.js +17 -17
- package/lib/transformer/SceneTransformer.d.ts +2 -2
- package/lib/transformer/SceneTransformer.js +17 -17
- package/lib/transformer/StaticSingleAssignmentFormer.d.ts +12 -12
- package/lib/transformer/StaticSingleAssignmentFormer.js +259 -259
- package/lib/transformer/Transformer.d.ts +6 -6
- package/lib/transformer/Transformer.js +22 -22
- package/lib/utils/AstTreeUtils.d.ts +4 -4
- package/lib/utils/AstTreeUtils.js +26 -26
- package/lib/utils/CfgStructualAnalysis.d.ts +110 -110
- package/lib/utils/CfgStructualAnalysis.js +1277 -1277
- package/lib/utils/FileUtils.d.ts +18 -18
- package/lib/utils/FileUtils.js +135 -135
- package/lib/utils/SparseBitVector.d.ts +100 -100
- package/lib/utils/SparseBitVector.js +445 -445
- package/lib/utils/callGraphUtils.d.ts +30 -30
- package/lib/utils/callGraphUtils.js +205 -205
- package/lib/utils/crypto_utils.d.ts +5 -5
- package/lib/utils/crypto_utils.js +57 -57
- package/lib/utils/entryMethodUtils.d.ts +13 -13
- package/lib/utils/entryMethodUtils.js +110 -110
- package/lib/utils/getAllFiles.d.ts +9 -9
- package/lib/utils/getAllFiles.js +90 -90
- package/lib/utils/json5parser.d.ts +6 -6
- package/lib/utils/json5parser.js +146 -146
- package/lib/utils/logger.d.ts +18 -18
- package/lib/utils/logger.d.ts.map +1 -1
- package/lib/utils/logger.js +97 -90
- package/lib/utils/pathTransfer.d.ts +1 -1
- package/lib/utils/pathTransfer.js +25 -25
- package/node_modules/json5/lib/cli.js +0 -0
- package/node_modules/ohos-typescript/bin/tsc +0 -0
- package/node_modules/ohos-typescript/bin/tsserver +0 -0
- 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
|