arkanalyzer 1.0.75 → 1.0.77
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/callgraph/pointerAnalysis/PTAUtils.d.ts +12 -9
- package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PTAUtils.js +19 -9
- package/lib/callgraph/pointerAnalysis/Pag.d.ts +10 -0
- package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.js +124 -4
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +24 -7
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +163 -42
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +3 -1
- package/lib/callgraph/pointerAnalysis/context/Context.d.ts +1 -0
- package/lib/callgraph/pointerAnalysis/context/Context.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/context/Context.js +5 -1
- package/lib/callgraph/pointerAnalysis/plugins/ContainerPlugin.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/plugins/ContainerPlugin.js +9 -1
- package/lib/core/common/Builtin.d.ts +2 -0
- package/lib/core/common/Builtin.d.ts.map +1 -1
- package/lib/core/common/Builtin.js +2 -0
- package/lib/core/common/IRInference.d.ts +4 -0
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +100 -0
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +5 -5
- package/lib/core/inference/ValueInference.d.ts +1 -3
- package/lib/core/inference/ValueInference.d.ts.map +1 -1
- package/lib/core/inference/ValueInference.js +23 -76
- package/lib/core/inference/abc/AbcInference.js +2 -1
- package/lib/core/inference/arkts/ArkTsInference.d.ts.map +1 -1
- package/lib/core/inference/arkts/ArkTsInference.js +2 -1
- package/package.json +2 -2
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { ClassSignature, FieldSignature, MethodSignature } from '../../core/model/ArkSignature';
|
|
2
2
|
export declare function IsCollectionClass(classSignature: ClassSignature): boolean;
|
|
3
3
|
export declare enum BuiltApiType {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
4
|
+
SetConstructor = 0,
|
|
5
|
+
MapConstructor = 1,
|
|
6
|
+
ArrayConstructor = 2,
|
|
7
|
+
SetAdd = 3,
|
|
8
|
+
MapSet = 4,
|
|
9
|
+
MapGet = 5,
|
|
10
|
+
ArrayPush = 6,
|
|
11
|
+
Foreach = 7,
|
|
12
|
+
FunctionCall = 8,
|
|
13
|
+
FunctionApply = 9,
|
|
14
|
+
FunctionBind = 10,
|
|
15
|
+
NotBuiltIn = 11
|
|
13
16
|
}
|
|
14
17
|
export declare const ARRAY_FIELD_SIGNATURE: FieldSignature;
|
|
15
18
|
export declare const SET_FIELD_SIGNATURE: FieldSignature;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PTAUtils.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PTAUtils.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAiB,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAE/G,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,CAKzE;AAED,oBAAY,YAAY;IACpB,MAAM,IAAA;IACN,MAAM,IAAA;IACN,MAAM,IAAA;IACN,SAAS,IAAA;IACT,OAAO,IAAA;IACP,YAAY,IAAA;IACZ,aAAa,IAAA;IACb,YAAY,
|
|
1
|
+
{"version":3,"file":"PTAUtils.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PTAUtils.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAiB,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAE/G,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,CAKzE;AAED,oBAAY,YAAY;IACpB,cAAc,IAAA;IACd,cAAc,IAAA;IACd,gBAAgB,IAAA;IAChB,MAAM,IAAA;IACN,MAAM,IAAA;IACN,MAAM,IAAA;IACN,SAAS,IAAA;IACT,OAAO,IAAA;IACP,YAAY,IAAA;IACZ,aAAa,IAAA;IACb,YAAY,KAAA;IACZ,UAAU,KAAA;CACb;AAED,eAAO,MAAM,qBAAqB,gBAIjC,CAAC;AAEF,eAAO,MAAM,mBAAmB,gBAI/B,CAAC;AAEF,eAAO,MAAM,mBAAmB,gBAI/B,CAAC;AA6BF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,YAAY,CAoBvE"}
|
|
@@ -26,20 +26,30 @@ function IsCollectionClass(classSignature) {
|
|
|
26
26
|
exports.IsCollectionClass = IsCollectionClass;
|
|
27
27
|
var BuiltApiType;
|
|
28
28
|
(function (BuiltApiType) {
|
|
29
|
-
BuiltApiType[BuiltApiType["
|
|
30
|
-
BuiltApiType[BuiltApiType["
|
|
31
|
-
BuiltApiType[BuiltApiType["
|
|
32
|
-
BuiltApiType[BuiltApiType["
|
|
33
|
-
BuiltApiType[BuiltApiType["
|
|
34
|
-
BuiltApiType[BuiltApiType["
|
|
35
|
-
BuiltApiType[BuiltApiType["
|
|
36
|
-
BuiltApiType[BuiltApiType["
|
|
37
|
-
BuiltApiType[BuiltApiType["
|
|
29
|
+
BuiltApiType[BuiltApiType["SetConstructor"] = 0] = "SetConstructor";
|
|
30
|
+
BuiltApiType[BuiltApiType["MapConstructor"] = 1] = "MapConstructor";
|
|
31
|
+
BuiltApiType[BuiltApiType["ArrayConstructor"] = 2] = "ArrayConstructor";
|
|
32
|
+
BuiltApiType[BuiltApiType["SetAdd"] = 3] = "SetAdd";
|
|
33
|
+
BuiltApiType[BuiltApiType["MapSet"] = 4] = "MapSet";
|
|
34
|
+
BuiltApiType[BuiltApiType["MapGet"] = 5] = "MapGet";
|
|
35
|
+
BuiltApiType[BuiltApiType["ArrayPush"] = 6] = "ArrayPush";
|
|
36
|
+
BuiltApiType[BuiltApiType["Foreach"] = 7] = "Foreach";
|
|
37
|
+
BuiltApiType[BuiltApiType["FunctionCall"] = 8] = "FunctionCall";
|
|
38
|
+
BuiltApiType[BuiltApiType["FunctionApply"] = 9] = "FunctionApply";
|
|
39
|
+
BuiltApiType[BuiltApiType["FunctionBind"] = 10] = "FunctionBind";
|
|
40
|
+
BuiltApiType[BuiltApiType["NotBuiltIn"] = 11] = "NotBuiltIn";
|
|
38
41
|
})(BuiltApiType = exports.BuiltApiType || (exports.BuiltApiType = {}));
|
|
39
42
|
exports.ARRAY_FIELD_SIGNATURE = new ArkSignature_1.FieldSignature('field', new ArkSignature_1.ClassSignature('Array', new ArkSignature_1.FileSignature('container', 'lib.es5.d.ts')), new Type_1.UnclearReferenceType(''));
|
|
40
43
|
exports.SET_FIELD_SIGNATURE = new ArkSignature_1.FieldSignature('field', new ArkSignature_1.ClassSignature('Set', new ArkSignature_1.FileSignature('container', 'lib.es2015.collection.d.ts')), new Type_1.UnclearReferenceType(''));
|
|
41
44
|
exports.MAP_FIELD_SIGNATURE = new ArkSignature_1.FieldSignature('field', new ArkSignature_1.ClassSignature('Map', new ArkSignature_1.FileSignature('container', 'lib.es2015.collection.d.ts')), new Type_1.UnclearReferenceType(''));
|
|
45
|
+
/**
|
|
46
|
+
* register container built-in API patterns, these APIs will not be recognized as SDK APIs
|
|
47
|
+
*/
|
|
42
48
|
const BUILTIN_API_PATTERNS = new Map([
|
|
49
|
+
// constructor
|
|
50
|
+
['lib.es2015.collection.d.ts: SetConstructor.construct-signature()', BuiltApiType.SetConstructor],
|
|
51
|
+
['lib.es2015.collection.d.ts: MapConstructor.construct-signature()', BuiltApiType.MapConstructor],
|
|
52
|
+
['lib.es5.d.ts: ArrayConstructor.construct-signature()', BuiltApiType.ArrayConstructor],
|
|
43
53
|
// set
|
|
44
54
|
['lib.es2015.collection.d.ts: Set.add(T)', BuiltApiType.SetAdd],
|
|
45
55
|
['lib.es2015.collection.d.ts: Set.forEach(', BuiltApiType.Foreach],
|
|
@@ -109,6 +109,7 @@ export declare class PagNode extends BaseNode {
|
|
|
109
109
|
setClonedFrom(id: NodeID): void;
|
|
110
110
|
getDotAttr(): string;
|
|
111
111
|
getDotLabel(): string;
|
|
112
|
+
getFunctionNameFromThisRefNode(): string | undefined;
|
|
112
113
|
}
|
|
113
114
|
export declare class PagLocalNode extends PagNode {
|
|
114
115
|
private relatedDynamicCallSite?;
|
|
@@ -210,6 +211,15 @@ export declare class Pag extends BaseExplicitGraph {
|
|
|
210
211
|
getCG(): CallGraph;
|
|
211
212
|
getOrClonePagNode(src: PagNode, basePt: NodeID): PagNode;
|
|
212
213
|
getOrClonePagFieldNode(src: PagInstanceFieldNode, basePt: NodeID): PagInstanceFieldNode | undefined;
|
|
214
|
+
/**
|
|
215
|
+
* Handle field access on container types (Array, Set, Map)
|
|
216
|
+
* Distinguishes between element access and property access based on container type and field name
|
|
217
|
+
* @param baseNode The container node (PagNewContainerExprNode)
|
|
218
|
+
* @param src The abstract field node representing the access
|
|
219
|
+
* @param basePt The pointer ID of the base container
|
|
220
|
+
* @returns PagInstanceFieldNode for the access, or undefined if error
|
|
221
|
+
*/
|
|
222
|
+
private handleContainerFieldAccess;
|
|
213
223
|
getOrClonePagContainerFieldNode(basePt: NodeID, base: Local, className: string): PagInstanceFieldNode | undefined;
|
|
214
224
|
getOrClonePagFuncNode(basePt: NodeID): PagFuncNode | undefined;
|
|
215
225
|
addPagNode(cid: ContextID, value: PagNodeType, stmt?: Stmt, refresh?: boolean): PagNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pag.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/Pag.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AACzG,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAiB,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAA+B,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,mBAAmB,EAAE,eAAe,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzI,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAG9C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAyB,YAAY,EAAkF,MAAM,YAAY,CAAC;AACjJ,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"Pag.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/Pag.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,6 +52,7 @@ const TSConst_1 = require("../../core/common/TSConst");
|
|
|
52
52
|
const ArkExport_1 = require("../../core/model/ArkExport");
|
|
53
53
|
const PTAUtils_1 = require("./PTAUtils");
|
|
54
54
|
const PointerAnalysisConfig_1 = require("./PointerAnalysisConfig");
|
|
55
|
+
const Context_1 = require("./context/Context");
|
|
55
56
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'PTA');
|
|
56
57
|
/*
|
|
57
58
|
* Implementation of pointer-to assignment graph for pointer analysis
|
|
@@ -305,10 +306,21 @@ class PagNode extends BaseExplicitGraph_1.BaseNode {
|
|
|
305
306
|
label = label + `\nParam#${param.getIndex()} ${param.toString()}`;
|
|
306
307
|
}
|
|
307
308
|
if (this.getKind() === PagNodeKind.ThisRef) {
|
|
308
|
-
|
|
309
|
+
const thisRef = this.value;
|
|
310
|
+
label = label + `\n${thisRef.toString()}`;
|
|
311
|
+
const funcName = this.getFunctionNameFromThisRefNode();
|
|
312
|
+
if (funcName) {
|
|
313
|
+
label = label + `\n${funcName}()`;
|
|
314
|
+
}
|
|
309
315
|
}
|
|
310
316
|
if (this.getKind() === PagNodeKind.Function) {
|
|
311
|
-
|
|
317
|
+
const funcNode = this;
|
|
318
|
+
label = label + ` thisPt:{${funcNode.getThisPt()}}`;
|
|
319
|
+
const methodSig = funcNode.getMethod();
|
|
320
|
+
if (methodSig) {
|
|
321
|
+
const funcName = methodSig.getMethodSubSignature().getMethodName();
|
|
322
|
+
label = label + `\nFunc: ${funcName}()`;
|
|
323
|
+
}
|
|
312
324
|
}
|
|
313
325
|
if (this.stmt) {
|
|
314
326
|
label = label + `\n${this.stmt.toString()}`;
|
|
@@ -323,6 +335,34 @@ class PagNode extends BaseExplicitGraph_1.BaseNode {
|
|
|
323
335
|
}
|
|
324
336
|
return label;
|
|
325
337
|
}
|
|
338
|
+
getFunctionNameFromThisRefNode() {
|
|
339
|
+
var _a;
|
|
340
|
+
const outgoingEdges = this.getOutgoingEdges();
|
|
341
|
+
for (const edge of outgoingEdges) {
|
|
342
|
+
const dstNode = edge.getDstNode();
|
|
343
|
+
if (!dstNode) {
|
|
344
|
+
continue;
|
|
345
|
+
}
|
|
346
|
+
const value = dstNode.getValue();
|
|
347
|
+
if (!(value instanceof Local_1.Local)) {
|
|
348
|
+
continue;
|
|
349
|
+
}
|
|
350
|
+
const local = value;
|
|
351
|
+
if (local.getName() !== 'this') {
|
|
352
|
+
continue;
|
|
353
|
+
}
|
|
354
|
+
const declaringStmt = local.getDeclaringStmt();
|
|
355
|
+
if (!declaringStmt) {
|
|
356
|
+
continue;
|
|
357
|
+
}
|
|
358
|
+
const method = (_a = declaringStmt.getCfg()) === null || _a === void 0 ? void 0 : _a.getDeclaringMethod();
|
|
359
|
+
if (!method) {
|
|
360
|
+
continue;
|
|
361
|
+
}
|
|
362
|
+
return method.getName();
|
|
363
|
+
}
|
|
364
|
+
return undefined;
|
|
365
|
+
}
|
|
326
366
|
}
|
|
327
367
|
exports.PagNode = PagNode;
|
|
328
368
|
class PagLocalNode extends PagNode {
|
|
@@ -589,11 +629,86 @@ class Pag extends BaseExplicitGraph_1.BaseExplicitGraph {
|
|
|
589
629
|
fieldNode.setBasePt(basePt);
|
|
590
630
|
return fieldNode;
|
|
591
631
|
}
|
|
632
|
+
else if (baseNode instanceof PagNewContainerExprNode) {
|
|
633
|
+
return this.handleContainerFieldAccess(baseNode, src, basePt);
|
|
634
|
+
}
|
|
592
635
|
else {
|
|
593
|
-
logger.error(`Error clone field node ${src.getValue()}`);
|
|
636
|
+
logger.error(`Error clone field node ${src.getValue()}, baseNode type: ${baseNode === null || baseNode === void 0 ? void 0 : baseNode.constructor.name}`);
|
|
594
637
|
return undefined;
|
|
595
638
|
}
|
|
596
639
|
}
|
|
640
|
+
/**
|
|
641
|
+
* Handle field access on container types (Array, Set, Map)
|
|
642
|
+
* Distinguishes between element access and property access based on container type and field name
|
|
643
|
+
* @param baseNode The container node (PagNewContainerExprNode)
|
|
644
|
+
* @param src The abstract field node representing the access
|
|
645
|
+
* @param basePt The pointer ID of the base container
|
|
646
|
+
* @returns PagInstanceFieldNode for the access, or undefined if error
|
|
647
|
+
*/
|
|
648
|
+
handleContainerFieldAccess(baseNode, src, basePt) {
|
|
649
|
+
// Container types (Array, Set, Map) have two kinds of access:
|
|
650
|
+
// 1. Element access (arr[0]) - should create element node via getOrClonePagContainerFieldNode
|
|
651
|
+
// 2. Property access (arr.length) - should create field node as regular object fields
|
|
652
|
+
const fieldRef = src.getValue();
|
|
653
|
+
const fieldName = fieldRef.getFieldSignature().getFieldName();
|
|
654
|
+
const base = fieldRef.getBase();
|
|
655
|
+
// Get container type from the node's value
|
|
656
|
+
// PagNewContainerExprNode can contain either ArkNewExpr or ArkNewArrayExpr
|
|
657
|
+
const containerValue = baseNode.getValue();
|
|
658
|
+
let containerClassSig = '';
|
|
659
|
+
if (containerValue instanceof Expr_1.ArkNewExpr) {
|
|
660
|
+
// Regular container object: new Map(), new Set()
|
|
661
|
+
containerClassSig = containerValue.getClassType().getClassSignature().toString();
|
|
662
|
+
}
|
|
663
|
+
else if (containerValue instanceof Expr_1.ArkNewArrayExpr) {
|
|
664
|
+
// Array created via array literal: [1, 2, 3]
|
|
665
|
+
containerClassSig = 'lib.es5.d.ts: Array';
|
|
666
|
+
}
|
|
667
|
+
else {
|
|
668
|
+
// Fallback: check base type
|
|
669
|
+
const baseType = base.getType();
|
|
670
|
+
containerClassSig = baseType.toString();
|
|
671
|
+
}
|
|
672
|
+
// Determine if this is element access or property access based on container type
|
|
673
|
+
let isElementAccess = false;
|
|
674
|
+
let containerType = '';
|
|
675
|
+
if (containerClassSig.includes('lib.es5.d.ts: Array') || containerClassSig.includes('ArrayType')) {
|
|
676
|
+
containerType = 'Array';
|
|
677
|
+
// Array: exclude known properties (length, push, pop, etc.)
|
|
678
|
+
// Everything else should be treated as element access
|
|
679
|
+
const arrayProperties = ['length', 'push', 'pop', 'shift', 'unshift', 'splice',
|
|
680
|
+
'slice', 'concat', 'join', 'reverse', 'sort', 'indexOf',
|
|
681
|
+
'lastIndexOf', 'forEach', 'map', 'filter', 'reduce',
|
|
682
|
+
'reduceRight', 'every', 'some', 'find', 'findIndex'];
|
|
683
|
+
isElementAccess = !arrayProperties.includes(fieldName);
|
|
684
|
+
}
|
|
685
|
+
else if (containerClassSig.includes('lib.es2015.collection.d.ts: Map')) {
|
|
686
|
+
containerType = 'Map';
|
|
687
|
+
// Map: 'field' is the virtual field name for element access
|
|
688
|
+
isElementAccess = (fieldName === 'field');
|
|
689
|
+
}
|
|
690
|
+
else if (containerClassSig.includes('lib.es2015.collection.d.ts: Set')) {
|
|
691
|
+
containerType = 'Set';
|
|
692
|
+
// Set: 'field' is the virtual field name for element access
|
|
693
|
+
isElementAccess = (fieldName === 'field');
|
|
694
|
+
}
|
|
695
|
+
if (isElementAccess && containerType) {
|
|
696
|
+
// This is element access (e.g., arr[i], map.get(key), set elements)
|
|
697
|
+
// IMPORTANT: In some cases, the type of arr.i may be unknow,
|
|
698
|
+
// so this is actually ArrayRef rather than InstanceFieldRef
|
|
699
|
+
// Redirect to container element node handling
|
|
700
|
+
logger.debug(`[PTA]: Detected element access on ${containerType}: ${fieldRef}, redirecting to container element node`);
|
|
701
|
+
return this.getOrClonePagContainerFieldNode(basePt, base, containerType);
|
|
702
|
+
}
|
|
703
|
+
else {
|
|
704
|
+
// This is property access (e.g., arr.length)
|
|
705
|
+
// Create field node without caching in baseNode.fieldNodes
|
|
706
|
+
logger.debug(`[PTA]: Detected property access on ${containerType || 'container'}: ${fieldName}, treating as regular field`);
|
|
707
|
+
let fieldNode = this.getOrClonePagNode(src, basePt);
|
|
708
|
+
fieldNode.setBasePt(basePt);
|
|
709
|
+
return fieldNode;
|
|
710
|
+
}
|
|
711
|
+
}
|
|
597
712
|
getOrClonePagContainerFieldNode(basePt, base, className) {
|
|
598
713
|
let baseNode = this.getNode(basePt);
|
|
599
714
|
if (baseNode instanceof PagNewContainerExprNode) {
|
|
@@ -618,7 +733,12 @@ class Pag extends BaseExplicitGraph_1.BaseExplicitGraph {
|
|
|
618
733
|
logger.error(`Error clone array field node ${className}`);
|
|
619
734
|
return undefined;
|
|
620
735
|
}
|
|
621
|
-
|
|
736
|
+
// Use special container element context ID (CONTAINER_ELEMENT_CID = -2)
|
|
737
|
+
// This allows:
|
|
738
|
+
// 1. Same container object's elements to be shared across all contexts (via basePt)
|
|
739
|
+
// 2. Different container objects NOT to share elements (via different basePt)
|
|
740
|
+
// 3. Avoid global abstract containers (cid=0) from polluting concrete containers
|
|
741
|
+
fieldNode = this.addPagNode(Context_1.CONTAINER_ELEMENT_CID, fieldRef);
|
|
622
742
|
baseNode.addElementNode(fieldNode.getID());
|
|
623
743
|
fieldNode.setBasePt(basePt);
|
|
624
744
|
return fieldNode;
|
|
@@ -5,7 +5,7 @@ import { Value } from '../../core/base/Value';
|
|
|
5
5
|
import { ArkMethod } from '../../core/model/ArkMethod';
|
|
6
6
|
import { Local } from '../../core/base/Local';
|
|
7
7
|
import { NodeID } from '../../core/graph/BaseExplicitGraph';
|
|
8
|
-
import { FuncPag, InterFuncPag, Pag, PagNode, PagNodeType } from './Pag';
|
|
8
|
+
import { FuncPag, InterFuncPag, IntraProceduralEdge, Pag, PagNode, PagNodeType } from './Pag';
|
|
9
9
|
import { IPtsCollection } from './PtsDS';
|
|
10
10
|
import { PointerAnalysisConfig } from './PointerAnalysisConfig';
|
|
11
11
|
import { ContextID } from './context/Context';
|
|
@@ -37,6 +37,7 @@ export declare class PagBuilder {
|
|
|
37
37
|
private globalThisPagNode?;
|
|
38
38
|
private externalScopeVariableMap;
|
|
39
39
|
private retriggerNodesList;
|
|
40
|
+
private arrowFunctionObjectMap;
|
|
40
41
|
constructor(p: Pag, cg: CallGraph, s: Scene, config: PointerAnalysisConfig);
|
|
41
42
|
buildFuncPagAndAddToWorklist(cs: CSFuncID): CSFuncID;
|
|
42
43
|
private addToFuncHandledListThisRound;
|
|
@@ -53,6 +54,12 @@ export declare class PagBuilder {
|
|
|
53
54
|
private createDummyParamPagNodes;
|
|
54
55
|
buildPagFromFuncPag(funcID: FuncID, cid: ContextID): void;
|
|
55
56
|
addEdgesFromFuncPag(funcPag: FuncPag, cid: ContextID, funcID: FuncID): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* handle closure field ref intra-procedural edge
|
|
59
|
+
* @param edge the intra-procedural edge with ClosureFieldRef as src
|
|
60
|
+
* @param cid
|
|
61
|
+
*/
|
|
62
|
+
addClosureEdges(edge: IntraProceduralEdge, cid: ContextID): void;
|
|
56
63
|
addCallsEdgesFromFuncPag(funcPag: FuncPag, cid: ContextID): boolean;
|
|
57
64
|
addDynamicCallSite(funcPag: FuncPag, funcID: FuncID, cid: ContextID): void;
|
|
58
65
|
addUnknownCallSite(funcPag: FuncPag, funcID: FuncID): void;
|
|
@@ -72,12 +79,6 @@ export declare class PagBuilder {
|
|
|
72
79
|
* only process the param PAG edge for invoke stmt
|
|
73
80
|
*/
|
|
74
81
|
addCallParamPagEdge(calleeMethod: ArkMethod, args: Value[], cs: ICallSite, callerCid: ContextID, calleeCid: ContextID, offset: number): NodeID[];
|
|
75
|
-
/**
|
|
76
|
-
* temporary solution for foreach
|
|
77
|
-
* deprecate when foreach is handled by built-in method
|
|
78
|
-
* connect the element node with the value inside foreach
|
|
79
|
-
*/
|
|
80
|
-
private addForeachParamPagEdge;
|
|
81
82
|
/**
|
|
82
83
|
* process the return value PAG edge for invoke stmt
|
|
83
84
|
*/
|
|
@@ -133,5 +134,21 @@ export declare class PagBuilder {
|
|
|
133
134
|
getUpdatedNodes(): Map<number, IPtsCollection<number>>;
|
|
134
135
|
resetUpdatedNodes(): void;
|
|
135
136
|
getContextSelector(): ContextSelector;
|
|
137
|
+
/**
|
|
138
|
+
* Record arrow function object node for later thisPt setup
|
|
139
|
+
*/
|
|
140
|
+
private recordArrowFunctionObjectNode;
|
|
141
|
+
/**
|
|
142
|
+
* Set up 'this' binding for arrow functions
|
|
143
|
+
* 1. Set the thisPt of arrow function object node (pointing to ThisRef node inside arrow function body)
|
|
144
|
+
* 2. Establish This edge from arrow function's ThisRef to outer function's this
|
|
145
|
+
*/
|
|
146
|
+
private setupArrowFunctionThis;
|
|
147
|
+
/**
|
|
148
|
+
* Find 'this' local node for the specified method in the specified context
|
|
149
|
+
* @param method Target method
|
|
150
|
+
* @param contextID Optional context ID. If not specified, returns the 'this' node in the first found context
|
|
151
|
+
*/
|
|
152
|
+
private findThisNodeForMethod;
|
|
136
153
|
}
|
|
137
154
|
//# sourceMappingURL=PagBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PagBuilder.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PagBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAoC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC3H,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAA+C,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAUzF,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAM5D,OAAO,EACH,OAAO,EACP,YAAY,
|
|
1
|
+
{"version":3,"file":"PagBuilder.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PagBuilder.ts"],"names":[],"mappings":"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"}
|