arkanalyzer 1.0.91 → 1.0.93
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/Scene.d.ts +15 -0
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +39 -0
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts +6 -0
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/AbstractAnalysis.js +17 -8
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts +1 -0
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.js +9 -3
- package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts +147 -0
- package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/RapidTypeAnalysis.js +803 -76
- package/lib/callgraph/model/CallGraph.d.ts +1 -0
- package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
- package/lib/callgraph/model/CallGraph.js +4 -0
- package/lib/callgraph/model/CallSite.d.ts +88 -1
- package/lib/callgraph/model/CallSite.d.ts.map +1 -1
- package/lib/callgraph/model/CallSite.js +58 -4
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkIRTransformer.js +1 -1
- package/lib/core/common/IRInference.js +2 -2
- package/lib/core/common/SdkUtils.js +1 -1
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +3 -0
- package/lib/core/graph/builder/SwitchBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/SwitchBuilder.js +11 -1
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts +13 -3
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/ViewTreeBuilder.js +271 -86
- package/lib/core/model/ArkModule.d.ts +9 -12
- package/lib/core/model/ArkModule.d.ts.map +1 -1
- package/lib/core/model/ArkModule.js +7 -10
- package/lib/core/model/builder/ArkClassBuilder.js +10 -4
- package/lib/core/model/builder/ArkMethodBuilder.d.ts +2 -1
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +5 -1
- package/lib/frontend/FrontendBuilder.d.ts +8 -10
- package/lib/frontend/FrontendBuilder.d.ts.map +1 -1
- package/lib/frontend/FrontendBuilder.js +9 -17
- package/lib/frontend/common/ModuleAnalysisConfig.d.ts +8 -1
- package/lib/frontend/common/ModuleAnalysisConfig.d.ts.map +1 -1
- package/lib/frontend/common/ModuleAnalysisConfig.js +10 -1
- package/lib/frontend/common/ModuleBuilder.d.ts +44 -33
- package/lib/frontend/common/ModuleBuilder.d.ts.map +1 -1
- package/lib/frontend/common/ModuleBuilder.js +195 -66
- package/lib/frontend/common/ModuleCache.d.ts +1 -0
- package/lib/frontend/common/ModuleCache.d.ts.map +1 -1
- package/lib/frontend/common/ModuleCache.js +1 -0
- package/lib/frontend/common/ModuleDepth.d.ts +19 -14
- package/lib/frontend/common/ModuleDepth.d.ts.map +1 -1
- package/lib/frontend/common/ModuleDepth.js +25 -15
- package/lib/frontend/cppFrontend/graph/builder/SwitchBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/graph/builder/SwitchBuilder.js +11 -1
- package/package.json +1 -1
package/lib/Scene.d.ts
CHANGED
|
@@ -42,6 +42,8 @@ export declare class Scene {
|
|
|
42
42
|
private namespacesMap;
|
|
43
43
|
private classesMap;
|
|
44
44
|
private methodsMap;
|
|
45
|
+
/** Custom @Component name → ClassSignature; written at ArkClass build, kept after module unload for ViewTree stubs. */
|
|
46
|
+
private customComponentMap;
|
|
45
47
|
private sdkArkFilesMap;
|
|
46
48
|
private sdkGlobalMap;
|
|
47
49
|
private ohPkgContentMap;
|
|
@@ -309,6 +311,19 @@ export declare class Scene {
|
|
|
309
311
|
* @returns A class.
|
|
310
312
|
*/
|
|
311
313
|
getClass(classSignature: ClassSignature): ArkClass | null;
|
|
314
|
+
/**
|
|
315
|
+
* Register a custom {@code @Component} into {@link customComponentMap}.
|
|
316
|
+
* Called from ArkClass builders (full Scene build and module load share the same path).
|
|
317
|
+
* Entries intentionally survive module unload so ViewTree can still resolve signatures.
|
|
318
|
+
*/
|
|
319
|
+
registerCustomComponent(cls: ArkClass): void;
|
|
320
|
+
/**
|
|
321
|
+
* Remove a custom component entry. Not called on module unload — the map must outlive IR.
|
|
322
|
+
* Used when an ArkClass is explicitly removed from a live Scene, or via {@link clear}.
|
|
323
|
+
*/
|
|
324
|
+
unregisterCustomComponent(cls: ArkClass): void;
|
|
325
|
+
getCustomComponent(name: string): ClassSignature | undefined;
|
|
326
|
+
getCustomComponentMap(): Map<string, ClassSignature>;
|
|
312
327
|
private getClassesMap;
|
|
313
328
|
getClasses(): ArkClass[];
|
|
314
329
|
getMethod(methodSignature: MethodSignature, refresh?: boolean): ArkMethod | null;
|
package/lib/Scene.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../src/Scene.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,EAAY,MAAM,UAAU,CAAC;AAGpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/G,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAEtG,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAE5D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI1C,OAAO,EAAE,SAAS,EAA0B,MAAM,wBAAwB,CAAC;AAK3E,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAgBxD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAI7D,oBAAY,eAAe;IACvB,UAAU,IAAA;IACV,YAAY,IAAA;IACZ,UAAU,IAAA;IACV,WAAW,IAAA;IACX,eAAe,IAAA;IACf,gBAAgB,IAAA;IAChB,aAAa,IAAA;CAChB;AAED;;;GAGG;AACH,qBAAa,KAAK;IACd,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,UAAU,CAAc;IAEhC,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,kBAAkB,CAAkD;IAE5E,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,aAAa,CAA+B;IAGpD,OAAO,CAAC,YAAY,CAAoC;IAGxD,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,UAAU,CAAqC;
|
|
1
|
+
{"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../src/Scene.ts"],"names":[],"mappings":"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"}
|
package/lib/Scene.js
CHANGED
|
@@ -110,6 +110,8 @@ class Scene {
|
|
|
110
110
|
this.namespacesMap = new Map();
|
|
111
111
|
this.classesMap = new Map();
|
|
112
112
|
this.methodsMap = new Map();
|
|
113
|
+
/** Custom @Component name → ClassSignature; written at ArkClass build, kept after module unload for ViewTree stubs. */
|
|
114
|
+
this.customComponentMap = new Map();
|
|
113
115
|
// TODO: type of key should be signature object
|
|
114
116
|
this.sdkArkFilesMap = new Map();
|
|
115
117
|
this.sdkGlobalMap = new Map();
|
|
@@ -163,6 +165,7 @@ class Scene {
|
|
|
163
165
|
this.namespacesMap.clear();
|
|
164
166
|
this.classesMap.clear();
|
|
165
167
|
this.methodsMap.clear();
|
|
168
|
+
this.customComponentMap.clear();
|
|
166
169
|
this.sdkArkFilesMap.clear();
|
|
167
170
|
this.sdkGlobalMap.clear();
|
|
168
171
|
this.ohPkgContentMap.clear();
|
|
@@ -1163,6 +1166,41 @@ class Scene {
|
|
|
1163
1166
|
}
|
|
1164
1167
|
return arkClass || null;
|
|
1165
1168
|
}
|
|
1169
|
+
/**
|
|
1170
|
+
* Register a custom {@code @Component} into {@link customComponentMap}.
|
|
1171
|
+
* Called from ArkClass builders (full Scene build and module load share the same path).
|
|
1172
|
+
* Entries intentionally survive module unload so ViewTree can still resolve signatures.
|
|
1173
|
+
*/
|
|
1174
|
+
registerCustomComponent(cls) {
|
|
1175
|
+
if (!cls.hasComponentDecorator()) {
|
|
1176
|
+
return;
|
|
1177
|
+
}
|
|
1178
|
+
const name = cls.getName();
|
|
1179
|
+
if (!name || name.startsWith('%')) {
|
|
1180
|
+
return;
|
|
1181
|
+
}
|
|
1182
|
+
this.customComponentMap.set(name, cls.getSignature());
|
|
1183
|
+
}
|
|
1184
|
+
/**
|
|
1185
|
+
* Remove a custom component entry. Not called on module unload — the map must outlive IR.
|
|
1186
|
+
* Used when an ArkClass is explicitly removed from a live Scene, or via {@link clear}.
|
|
1187
|
+
*/
|
|
1188
|
+
unregisterCustomComponent(cls) {
|
|
1189
|
+
const name = cls.getName();
|
|
1190
|
+
if (!name || !cls.hasComponentDecorator()) {
|
|
1191
|
+
return;
|
|
1192
|
+
}
|
|
1193
|
+
const existing = this.customComponentMap.get(name);
|
|
1194
|
+
if (existing && existing.toMapKey() === cls.getSignature().toMapKey()) {
|
|
1195
|
+
this.customComponentMap.delete(name);
|
|
1196
|
+
}
|
|
1197
|
+
}
|
|
1198
|
+
getCustomComponent(name) {
|
|
1199
|
+
return name ? this.customComponentMap.get(name) : undefined;
|
|
1200
|
+
}
|
|
1201
|
+
getCustomComponentMap() {
|
|
1202
|
+
return this.customComponentMap;
|
|
1203
|
+
}
|
|
1166
1204
|
getClassesMap(refresh) {
|
|
1167
1205
|
if (refresh || this.buildStage === SceneBuildStage.METHOD_DONE) {
|
|
1168
1206
|
this.classesMap.clear();
|
|
@@ -1250,6 +1288,7 @@ class Scene {
|
|
|
1250
1288
|
return this.methodsMap.delete(method.getSignature().toMapKey());
|
|
1251
1289
|
}
|
|
1252
1290
|
removeClass(arkClass) {
|
|
1291
|
+
this.unregisterCustomComponent(arkClass);
|
|
1253
1292
|
return this.classesMap.delete(arkClass.getSignature().toMapKey());
|
|
1254
1293
|
}
|
|
1255
1294
|
removeNamespace(namespace) {
|
|
@@ -28,8 +28,14 @@ export declare abstract class AbstractAnalysis {
|
|
|
28
28
|
resolveInvokeExpr(invokeExpr: AbstractInvokeExpr): ArkMethod | undefined;
|
|
29
29
|
getClassHierarchy(arkClass: ArkClass): ArkClass[];
|
|
30
30
|
start(displayGeneratedMethod: boolean): void;
|
|
31
|
+
/**
|
|
32
|
+
* Whole-project CG: scan every non-SDK method once (`isProject=true`, no call-edge enqueue).
|
|
33
|
+
* `processedMethod` is initialized so RTA late callback edges (`emitCallbackEdge`) can query it
|
|
34
|
+
* without going through `init()`, which would seed the entry worklist.
|
|
35
|
+
*/
|
|
31
36
|
projectStart(displayGeneratedMethod: boolean): void;
|
|
32
37
|
protected processCallSite(method: FuncID, cs: CallSite, displayGeneratedMethod: boolean, isProject?: boolean): void;
|
|
38
|
+
protected initProcessedMethod(): void;
|
|
33
39
|
protected init(): void;
|
|
34
40
|
protected processMethod(methodID: FuncID, displayGeneratedMethod: boolean, isProject?: boolean): void;
|
|
35
41
|
protected getParamAnonymousMethod(invokeExpr: AbstractInvokeExpr): MethodSignature[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/AbstractAnalysis.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAgC,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE1E,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAkB,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhF,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAiB,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAA2B,cAAc,EAAqB,MAAM,0BAA0B,CAAC;AAItG,8BAAsB,gBAAgB;IAClC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;IACvB,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC;IACxB,SAAS,CAAC,SAAS,EAAG,gBAAgB,CAAC;IACvC,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAqB;IACpD,SAAS,CAAC,eAAe,EAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACnD,OAAO,CAAC,mBAAmB,CAA8C;IACzE,sEAAsE;IACtE,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,gBAAgB,CAA4B;gBAExC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS;IAK5B,QAAQ,IAAI,KAAK;IAIjB,YAAY,IAAI,SAAS;IAIhC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IAClF,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAExD,iBAAiB,CAAC,UAAU,EAAE,kBAAkB,GAAG,SAAS,GAAG,SAAS;IAQxE,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,EAAE;IAoCjD,KAAK,CAAC,sBAAsB,EAAE,OAAO,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"AbstractAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/AbstractAnalysis.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAgC,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE1E,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAkB,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhF,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAiB,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAA2B,cAAc,EAAqB,MAAM,0BAA0B,CAAC;AAItG,8BAAsB,gBAAgB;IAClC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;IACvB,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC;IACxB,SAAS,CAAC,SAAS,EAAG,gBAAgB,CAAC;IACvC,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAqB;IACpD,SAAS,CAAC,eAAe,EAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACnD,OAAO,CAAC,mBAAmB,CAA8C;IACzE,sEAAsE;IACtE,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,gBAAgB,CAA4B;gBAExC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS;IAK5B,QAAQ,IAAI,KAAK;IAIjB,YAAY,IAAI,SAAS;IAIhC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IAClF,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAExD,iBAAiB,CAAC,UAAU,EAAE,kBAAkB,GAAG,SAAS,GAAG,SAAS;IAQxE,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,EAAE;IAoCjD,KAAK,CAAC,sBAAsB,EAAE,OAAO,GAAG,IAAI;IAqBnD;;;;OAIG;IACI,YAAY,CAAC,sBAAsB,EAAE,OAAO,GAAG,IAAI;IAqB1D,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,sBAAsB,EAAE,OAAO,EAAE,SAAS,GAAE,OAAe,GAAG,IAAI;IAqB1H,SAAS,CAAC,mBAAmB,IAAI,IAAI;IAIrC,SAAS,CAAC,IAAI,IAAI,IAAI;IAOtB,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,sBAAsB,EAAE,OAAO,EAAE,SAAS,GAAE,OAAe,GAAG,IAAI;IAyB5G,SAAS,CAAC,uBAAuB,CAAC,UAAU,EAAE,kBAAkB,GAAG,eAAe,EAAE;IAapF,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,sBAAsB,EAAE,OAAO,GAAG,IAAI;CAU5H"}
|
|
@@ -117,16 +117,24 @@ class AbstractAnalysis {
|
|
|
117
117
|
}
|
|
118
118
|
this.cg.endStat();
|
|
119
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Whole-project CG: scan every non-SDK method once (`isProject=true`, no call-edge enqueue).
|
|
122
|
+
* `processedMethod` is initialized so RTA late callback edges (`emitCallbackEdge`) can query it
|
|
123
|
+
* without going through `init()`, which would seed the entry worklist.
|
|
124
|
+
*/
|
|
120
125
|
projectStart(displayGeneratedMethod) {
|
|
121
126
|
this.cg.startStat();
|
|
122
127
|
this.cgBuilder.buildCGNodes(this.scene.getMethods());
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
128
|
+
this.initProcessedMethod();
|
|
129
|
+
for (const n of this.cg.getNodesIter()) {
|
|
130
|
+
const cgNode = n;
|
|
131
|
+
const id = cgNode.getID();
|
|
132
|
+
if (cgNode.isSdkMethod() || this.processedMethod.contains(id)) {
|
|
126
133
|
continue;
|
|
127
134
|
}
|
|
128
|
-
this.
|
|
129
|
-
this.
|
|
135
|
+
this.processedMethod.insert(id);
|
|
136
|
+
this.preProcessMethod(id);
|
|
137
|
+
this.processMethod(id, displayGeneratedMethod, true);
|
|
130
138
|
}
|
|
131
139
|
this.cgBuilder.setEntries();
|
|
132
140
|
this.cg.endStat();
|
|
@@ -148,8 +156,11 @@ class AbstractAnalysis {
|
|
|
148
156
|
logger.trace(`New workList item ${cs.calleeFuncID}: ${(_a = this.cg.getArkMethodByFuncID(cs.calleeFuncID)) === null || _a === void 0 ? void 0 : _a.getSignature().toString()}`);
|
|
149
157
|
}
|
|
150
158
|
}
|
|
151
|
-
|
|
159
|
+
initProcessedMethod() {
|
|
152
160
|
this.processedMethod = new ((0, PtsDS_1.createPtsCollectionCtor)(PtsDS_1.PtsCollectionType.BitVector))();
|
|
161
|
+
}
|
|
162
|
+
init() {
|
|
163
|
+
this.initProcessedMethod();
|
|
153
164
|
this.cg.getEntries().forEach(entryFunc => {
|
|
154
165
|
this.workList.push(entryFunc);
|
|
155
166
|
});
|
|
@@ -170,8 +181,6 @@ class AbstractAnalysis {
|
|
|
170
181
|
return;
|
|
171
182
|
}
|
|
172
183
|
this.resolveCall(cgNode.getID(), stmt).forEach(callSite => {
|
|
173
|
-
this.cg.addStmtToCallSiteMap(stmt, callSite);
|
|
174
|
-
this.cg.addMethodToCallSiteMap(callSite.calleeFuncID, callSite);
|
|
175
184
|
this.processCallSite(methodID, callSite, displayGeneratedMethod, isProject);
|
|
176
185
|
});
|
|
177
186
|
});
|
|
@@ -7,6 +7,7 @@ import { CallGraphBuilder } from '../model/builder/CallGraphBuilder';
|
|
|
7
7
|
export declare class ClassHierarchyAnalysis extends AbstractAnalysis {
|
|
8
8
|
constructor(scene: Scene, cg: CallGraph, cb: CallGraphBuilder);
|
|
9
9
|
resolveCall(callerMethod: NodeID, invokeStmt: Stmt): CallSite[];
|
|
10
|
+
private newRecordedCallSite;
|
|
10
11
|
protected preProcessMethod(): CallSite[];
|
|
11
12
|
private checkSuperInvoke;
|
|
12
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClassHierarchyAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/ClassHierarchyAnalysis.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAIrE,qBAAa,sBAAuB,SAAQ,gBAAgB;gBAC5C,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,gBAAgB;IAKtD,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"ClassHierarchyAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/ClassHierarchyAnalysis.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAIrE,qBAAa,sBAAuB,SAAQ,gBAAgB;gBAC5C,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,gBAAgB;IAKtD,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IAuDtE,OAAO,CAAC,mBAAmB;IAM3B,SAAS,CAAC,gBAAgB,IAAI,QAAQ,EAAE;IAKxC,OAAO,CAAC,gBAAgB;CAU3B"}
|
|
@@ -33,7 +33,7 @@ class ClassHierarchyAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
33
33
|
// process anonymous method call
|
|
34
34
|
this.getParamAnonymousMethod(invokeExpr).forEach(method => {
|
|
35
35
|
const nodeID = this.cg.getCallGraphNodeByMethod(method).getID();
|
|
36
|
-
resolveResult.push(this.
|
|
36
|
+
resolveResult.push(this.newRecordedCallSite(invokeStmt, nodeID, callerMethod));
|
|
37
37
|
});
|
|
38
38
|
let calleeMethod = this.resolveInvokeExpr(invokeExpr);
|
|
39
39
|
if (!calleeMethod) {
|
|
@@ -46,7 +46,7 @@ class ClassHierarchyAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
46
46
|
this.checkSuperInvoke(invokeStmt, declareClass, stmtDeclareClass)) {
|
|
47
47
|
// get specific method
|
|
48
48
|
const nodeID = this.cg.getCallGraphNodeByMethod(calleeMethod.getSignature()).getID();
|
|
49
|
-
resolveResult.push(this.
|
|
49
|
+
resolveResult.push(this.newRecordedCallSite(invokeStmt, nodeID, callerMethod));
|
|
50
50
|
}
|
|
51
51
|
else {
|
|
52
52
|
const classHierarchy = this.getClassHierarchy(declareClass);
|
|
@@ -61,12 +61,18 @@ class ClassHierarchyAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
61
61
|
continue;
|
|
62
62
|
}
|
|
63
63
|
if (possibleCalleeMethod && !possibleCalleeMethod.isAbstract()) {
|
|
64
|
-
|
|
64
|
+
const nodeID = this.cg.getCallGraphNodeByMethod(possibleCalleeMethod.getSignature()).getID();
|
|
65
|
+
resolveResult.push(this.newRecordedCallSite(invokeStmt, nodeID, callerMethod));
|
|
65
66
|
}
|
|
66
67
|
}
|
|
67
68
|
}
|
|
68
69
|
return resolveResult;
|
|
69
70
|
}
|
|
71
|
+
newRecordedCallSite(invokeStmt, calleeFuncID, callerMethod) {
|
|
72
|
+
const cs = this.cg.getCallSiteManager().newCallSite(invokeStmt, undefined, calleeFuncID, callerMethod);
|
|
73
|
+
this.cg.recordCallSite(invokeStmt, cs);
|
|
74
|
+
return cs;
|
|
75
|
+
}
|
|
70
76
|
preProcessMethod() {
|
|
71
77
|
// do nothing
|
|
72
78
|
return [];
|
|
@@ -10,14 +10,161 @@ export declare class RapidTypeAnalysis extends AbstractAnalysis {
|
|
|
10
10
|
private ignoredCalls;
|
|
11
11
|
private virtualDispatchIndex;
|
|
12
12
|
private enableThisPrune;
|
|
13
|
+
private callbackBindings;
|
|
14
|
+
private callbackFieldBindings;
|
|
15
|
+
private closureTraceVisited;
|
|
16
|
+
private aliasTypeUnwrapVisited;
|
|
17
|
+
private executableCalleeScratch;
|
|
18
|
+
private builtinArrayClassSignature;
|
|
19
|
+
private builtinArrayClassResolved;
|
|
20
|
+
private static readonly CALLBACK_CLASS_SIG_KEY;
|
|
13
21
|
constructor(scene: Scene, cg: CallGraph, cb: CallGraphBuilder, enableThisPrune?: boolean);
|
|
14
22
|
protected init(): void;
|
|
15
23
|
resolveCall(callerMethod: NodeID, invokeStmt: Stmt): CallSite[];
|
|
24
|
+
private resolveDirectOrVirtual;
|
|
25
|
+
/**
|
|
26
|
+
* Single args scan:
|
|
27
|
+
* - if any executable real callee exists (or declared callee has CFG), record callback bindings
|
|
28
|
+
* (concrete FunctionType) or forward parameter bindings into callee slots;
|
|
29
|
+
* - otherwise, for no-CFG SDK / built-in / unresolved (`%unk`) callees, append virtual
|
|
30
|
+
* callback CallSites for concrete FunctionType args, parameter bindings, and callback
|
|
31
|
+
* fields.
|
|
32
|
+
*/
|
|
33
|
+
private processCallbackArguments;
|
|
34
|
+
/**
|
|
35
|
+
* Bind a FunctionType callback argument to the callee's parameter binding slot.
|
|
36
|
+
* Extracted from processCallbackArguments for readability.
|
|
37
|
+
*/
|
|
38
|
+
private bindFunctionTypeCallback;
|
|
39
|
+
/**
|
|
40
|
+
* Bind a ClassType callback (Callback<T>, AsyncCallback<T>, ...) argument to the
|
|
41
|
+
* callee's parameter binding slot via field binding state.
|
|
42
|
+
* Extracted from processCallbackArguments for readability.
|
|
43
|
+
*/
|
|
44
|
+
private bindClassTypeCallback;
|
|
45
|
+
private scanExecutableCallees;
|
|
46
|
+
private handleNoExecutableCalleePath;
|
|
47
|
+
/**
|
|
48
|
+
* Unresolved declaring file (`@%unk/%unk:...`) — common when type inference fails for
|
|
49
|
+
* built-ins such as Promise.constructor in large apps.
|
|
50
|
+
*/
|
|
51
|
+
private isUnresolvedProjectName;
|
|
52
|
+
/**
|
|
53
|
+
* Built-in container APIs that accept FunctionType values without invoking them
|
|
54
|
+
* (writes such as push/set, and lookups such as indexOf/has). Caller must already
|
|
55
|
+
* know the method is a `@built-in` SDK method.
|
|
56
|
+
*/
|
|
57
|
+
private isBuiltInContainerNonInvokingMethod;
|
|
58
|
+
private isBuiltInContainerNonInvokingMethodByMethodName;
|
|
59
|
+
/**
|
|
60
|
+
* Whether a no-CFG callee should synthesize virtual edges into callback args.
|
|
61
|
+
* OH SDK and unresolved (`%unk`) APIs always qualify. Built-ins qualify by default
|
|
62
|
+
* except container non-invoking APIs (Array.push / Array.indexOf / Map.set / ...).
|
|
63
|
+
* Resolves the CG node and declaring projectName once.
|
|
64
|
+
*/
|
|
65
|
+
private shouldSynthesizeVirtualCallback;
|
|
66
|
+
/**
|
|
67
|
+
* Invoke-site gate when {@link resolveInvokeExpr} cannot produce a usable declared method
|
|
68
|
+
* (e.g. `@%unk/%unk: Promise.constructor` with no Scene body).
|
|
69
|
+
*/
|
|
70
|
+
private shouldSynthesizeVirtualCallbackFromInvoke;
|
|
71
|
+
/**
|
|
72
|
+
* No-CFG callee that invokes callbacks: emit virtual edges into every callback-shaped argument.
|
|
73
|
+
* Caller must have already gated on {@link shouldSynthesizeVirtualCallback}. Built-in container
|
|
74
|
+
* non-invoking APIs (Array.push / Array.indexOf / Map.set / ...) remain excluded by that gate.
|
|
75
|
+
*/
|
|
76
|
+
private appendVirtualCallbackCallSites;
|
|
77
|
+
private resolvePtrInvoke;
|
|
78
|
+
/**
|
|
79
|
+
* Resolve a callback value through all supported representations.
|
|
80
|
+
* A value may have both a concrete static target and a field/binding origin;
|
|
81
|
+
* both paths are retained so later field targets cannot be hidden by the
|
|
82
|
+
* concrete FunctionType fast path.
|
|
83
|
+
*/
|
|
84
|
+
private appendCallbackValueCallSites;
|
|
85
|
+
private appendCallbackCallSite;
|
|
86
|
+
private subscribeToCallbackField;
|
|
87
|
+
/**
|
|
88
|
+
* Subscribe invokeStmt to bindingState and collect already-known targets as CallSites.
|
|
89
|
+
* Late-arriving targets are delivered via addCallbackTarget → emitCallbackEdge.
|
|
90
|
+
*/
|
|
91
|
+
private subscribeAndCollectBoundTargets;
|
|
92
|
+
private getTypeFromAliasType;
|
|
93
|
+
/**
|
|
94
|
+
* Whether a type can serve as a callback — FunctionType (direct or aliased)
|
|
95
|
+
* or a ClassType callback wrapper (Callback<T>, AsyncCallback<T>, ...).
|
|
96
|
+
*
|
|
97
|
+
* Unlike {@link unwrapFunctionType}, this accepts ClassType callbacks whose real
|
|
98
|
+
* FunctionType is only discoverable at the assignment site (right-hand side),
|
|
99
|
+
* not from the ClassType itself. This lets the field-subscription and field-store
|
|
100
|
+
* pipelines accept `private cb: Callback<X> = (...) => {...}` fields.
|
|
101
|
+
*/
|
|
102
|
+
private isCallbackType;
|
|
103
|
+
/**
|
|
104
|
+
* Peel AliasType layers until a FunctionType is found.
|
|
105
|
+
* Fast-path: FunctionType returns immediately; non-alias types return undefined
|
|
106
|
+
* without touching the visited scratch set.
|
|
107
|
+
*/
|
|
108
|
+
private unwrapFunctionType;
|
|
109
|
+
private resolveFuncPtrToBindingState;
|
|
110
|
+
private resolveFuncPtrToBindingKey;
|
|
111
|
+
/**
|
|
112
|
+
* Resolve a function-pointer local to an instance callback field.
|
|
113
|
+
* The short-term field model follows one local alias at most; it does not
|
|
114
|
+
* perform receiver points-to analysis.
|
|
115
|
+
*/
|
|
116
|
+
private resolveFuncPtrToFieldRef;
|
|
117
|
+
private resolveFuncPtrValueToBindingKey;
|
|
118
|
+
/**
|
|
119
|
+
* AliasType-typed ptr locals on invoke exprs may lack declaringStmt even when the
|
|
120
|
+
* method body has a same-named local that carries the real definition.
|
|
121
|
+
*/
|
|
122
|
+
private recoverLocalWithDeclaringStmt;
|
|
123
|
+
/**
|
|
124
|
+
* Recursively trace a Local back to a parameter binding key.
|
|
125
|
+
* Follows local aliases and unique closure captures until an ArkParameterRef is
|
|
126
|
+
* found; returns the packed (ownerFuncID, logicalArgIndex) key, or undefined if
|
|
127
|
+
* the value does not originate from a parameter slot.
|
|
128
|
+
*/
|
|
129
|
+
private resolveFuncPtrToBindingKeyRec;
|
|
130
|
+
private toLogicalArgIndex;
|
|
131
|
+
private encodeCallbackBindingKey;
|
|
132
|
+
private decodeOwnerFuncID;
|
|
133
|
+
private decodeLogicalArgIndex;
|
|
134
|
+
private getOrCreateBindingState;
|
|
135
|
+
private getCallbackFieldKey;
|
|
136
|
+
private getOrCreateCallbackFieldState;
|
|
137
|
+
private linkCallbackField;
|
|
138
|
+
private addCallbackFieldTarget;
|
|
139
|
+
/**
|
|
140
|
+
* Link a callback field to a callee parameter binding slot. When the field's
|
|
141
|
+
* targets are populated later (e.g. field initializer processed after the
|
|
142
|
+
* call site due to RTA workList ordering), targets propagate to the binding
|
|
143
|
+
* slot via {@link addCallbackFieldTarget} → bindingForwards → addCallbackTarget.
|
|
144
|
+
*/
|
|
145
|
+
private linkFieldToBinding;
|
|
146
|
+
private subscribeAndCollectFieldTargets;
|
|
147
|
+
private recordCallbackFieldStore;
|
|
148
|
+
/**
|
|
149
|
+
* Link source parameter binding to a callee parameter slot and copy existing targets.
|
|
150
|
+
* Future addCallbackTarget calls on the source also propagate through forwards.
|
|
151
|
+
*/
|
|
152
|
+
private linkCallbackBinding;
|
|
153
|
+
private addCallbackTarget;
|
|
154
|
+
/**
|
|
155
|
+
* Create a CallbackCallSite, register it via CallSiteManager (for ID allocation
|
|
156
|
+
* and getCallSiteById lookup) and via CallGraph maps (for getCallSiteByStmt and
|
|
157
|
+
* getCallSitesByMethod lookup). The argIndex is set for callback virtual edges
|
|
158
|
+
* and left undefined for regular (direct/virtual/constructor) call sites.
|
|
159
|
+
*/
|
|
160
|
+
private newRTACallSite;
|
|
161
|
+
private emitCallbackEdge;
|
|
16
162
|
private getOrBuildVirtualDispatchRows;
|
|
17
163
|
private tryResolveAggressiveThisPruneCall;
|
|
18
164
|
private resolveConstructorClassFromNew;
|
|
19
165
|
protected preProcessMethod(funcID: FuncID): CallSite[];
|
|
20
166
|
private collectInstancedClassesInMethod;
|
|
167
|
+
private getBuiltinArrayClassSignature;
|
|
21
168
|
addIgnoredCalls(arkClass: ClassSignature, callerID: FuncID, calleeID: FuncID, invokeStmt: Stmt): void;
|
|
22
169
|
}
|
|
23
170
|
//# sourceMappingURL=RapidTypeAnalysis.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RapidTypeAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/RapidTypeAnalysis.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAiB,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"RapidTypeAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/RapidTypeAnalysis.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAiB,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAiB,QAAQ,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AA4ErE,qBAAa,iBAAkB,SAAQ,gBAAgB;IAEnD,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,OAAO,CAAC,YAAY,CAAoD;IACxE,OAAO,CAAC,oBAAoB,CAAoE;IAChG,OAAO,CAAC,eAAe,CAAU;IAGjC,OAAO,CAAC,gBAAgB,CAAmE;IAG3F,OAAO,CAAC,qBAAqB,CAAwD;IAErF,OAAO,CAAC,mBAAmB,CAAyB;IAEpD,OAAO,CAAC,sBAAsB,CAAwB;IAEtD,OAAO,CAAC,uBAAuB,CAAgB;IAE/C,OAAO,CAAC,0BAA0B,CAA6B;IAE/D,OAAO,CAAC,yBAAyB,CAAkB;IAEnD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAM5C;gBAEU,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,gBAAgB,EAAE,eAAe,GAAE,OAAe;IAM/F,SAAS,CAAC,IAAI,IAAI,IAAI;IAYf,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IAiBtE,OAAO,CAAC,sBAAsB;IA8D9B;;;;;;;OAOG;IACH,OAAO,CAAC,wBAAwB;IAsDhC;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAmBhC;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IA2B7B,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,4BAA4B;IA2BpC;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAI/B;;;;OAIG;IACH,OAAO,CAAC,mCAAmC;IAW3C,OAAO,CAAC,+CAA+C;IAIvD;;;;;OAKG;IACH,OAAO,CAAC,+BAA+B;IAmBvC;;;OAGG;IACH,OAAO,CAAC,yCAAyC;IAQjD;;;;OAIG;IACH,OAAO,CAAC,8BAA8B;IAWtC,OAAO,CAAC,gBAAgB;IAOxB;;;;;OAKG;IACH,OAAO,CAAC,4BAA4B;IAkDpC,OAAO,CAAC,sBAAsB;IAkB9B,OAAO,CAAC,wBAAwB;IAchC;;;OAGG;IACH,OAAO,CAAC,+BAA+B;IAgBvC,OAAO,CAAC,oBAAoB;IAc5B;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc;IAiBtB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,4BAA4B;IAWpC,OAAO,CAAC,0BAA0B;IASlC;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAwBhC,OAAO,CAAC,+BAA+B;IAevC;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IAerC;;;;;OAKG;IACH,OAAO,CAAC,6BAA6B;IAsDrC,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,uBAAuB;IAsB/B,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,6BAA6B;IAarC,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,sBAAsB;IAoB9B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,+BAA+B;IAqBvC,OAAO,CAAC,wBAAwB;IAwBhC;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,iBAAiB;IAqBzB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,6BAA6B;IAiDrC,OAAO,CAAC,iCAAiC;IAiCzC,OAAO,CAAC,8BAA8B;IAoCtC,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAqBtD,OAAO,CAAC,+BAA+B;IAwCvC,OAAO,CAAC,6BAA6B;IAiB9B,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,IAAI;CAiB/G"}
|