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.
Files changed (31) hide show
  1. package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts +12 -9
  2. package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts.map +1 -1
  3. package/lib/callgraph/pointerAnalysis/PTAUtils.js +19 -9
  4. package/lib/callgraph/pointerAnalysis/Pag.d.ts +10 -0
  5. package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
  6. package/lib/callgraph/pointerAnalysis/Pag.js +124 -4
  7. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +24 -7
  8. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
  9. package/lib/callgraph/pointerAnalysis/PagBuilder.js +163 -42
  10. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
  11. package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +3 -1
  12. package/lib/callgraph/pointerAnalysis/context/Context.d.ts +1 -0
  13. package/lib/callgraph/pointerAnalysis/context/Context.d.ts.map +1 -1
  14. package/lib/callgraph/pointerAnalysis/context/Context.js +5 -1
  15. package/lib/callgraph/pointerAnalysis/plugins/ContainerPlugin.d.ts.map +1 -1
  16. package/lib/callgraph/pointerAnalysis/plugins/ContainerPlugin.js +9 -1
  17. package/lib/core/common/Builtin.d.ts +2 -0
  18. package/lib/core/common/Builtin.d.ts.map +1 -1
  19. package/lib/core/common/Builtin.js +2 -0
  20. package/lib/core/common/IRInference.d.ts +4 -0
  21. package/lib/core/common/IRInference.d.ts.map +1 -1
  22. package/lib/core/common/IRInference.js +100 -0
  23. package/lib/core/common/TypeInference.d.ts.map +1 -1
  24. package/lib/core/common/TypeInference.js +5 -5
  25. package/lib/core/inference/ValueInference.d.ts +1 -3
  26. package/lib/core/inference/ValueInference.d.ts.map +1 -1
  27. package/lib/core/inference/ValueInference.js +23 -76
  28. package/lib/core/inference/abc/AbcInference.js +2 -1
  29. package/lib/core/inference/arkts/ArkTsInference.d.ts.map +1 -1
  30. package/lib/core/inference/arkts/ArkTsInference.js +2 -1
  31. package/package.json +2 -2
@@ -75,6 +75,8 @@ class PagBuilder {
75
75
  this.globalThisValue = new Local_1.Local(TSConst_1.GLOBAL_THIS_NAME);
76
76
  this.externalScopeVariableMap = new Map();
77
77
  this.retriggerNodesList = new Set();
78
+ // Record arrow function object nodes: funcName -> function object node ID
79
+ this.arrowFunctionObjectMap = new Map();
78
80
  this.pag = p;
79
81
  this.cg = cg;
80
82
  this.scale = config.analysisScale;
@@ -187,6 +189,9 @@ class PagBuilder {
187
189
  }
188
190
  buildInvokeExprInStmt(stmt, fpag) {
189
191
  // TODO: discuss if we need a invokeStmt
192
+ if (!stmt.getInvokeExpr()) {
193
+ return;
194
+ }
190
195
  let callSites = this.cg.getCallSiteByStmt(stmt);
191
196
  if (callSites.length !== 0) {
192
197
  // direct call or constructor call is already existing in CG
@@ -278,6 +283,9 @@ class PagBuilder {
278
283
  this.addCallsEdgesFromFuncPag(funcPag, cid);
279
284
  this.addDynamicCallSite(funcPag, funcID, cid);
280
285
  this.addUnknownCallSite(funcPag, funcID);
286
+ // Check if this is an arrow function and set up its 'this' binding
287
+ // Must be called after addEdgesFromFuncPag to ensure this node is created
288
+ this.setupArrowFunctionThis(funcID, cid);
281
289
  this.handledFunc.add(`${cid}-${funcID}`);
282
290
  }
283
291
  /// Add Pag Nodes and Edges in function
@@ -292,6 +300,11 @@ class PagBuilder {
292
300
  paramNodes = this.createDummyParamPagNodes(this.createDummyParamValue(funcID), funcID);
293
301
  }
294
302
  for (let e of inEdges) {
303
+ // handle closure field ref
304
+ if (e.src instanceof Ref_1.ClosureFieldRef) {
305
+ this.addClosureEdges(e, cid);
306
+ continue;
307
+ }
295
308
  let srcPagNode = this.getOrNewPagNode(cid, e.src, e.stmt);
296
309
  let dstPagNode = this.getOrNewPagNode(cid, e.dst, e.stmt);
297
310
  this.pag.addPagEdge(srcPagNode, dstPagNode, e.kind, e.stmt);
@@ -299,6 +312,10 @@ class PagBuilder {
299
312
  if (dstPagNode.getStmt() instanceof Stmt_1.ArkReturnStmt) {
300
313
  dstPagNode.setStmt(e.stmt);
301
314
  }
315
+ // Record arrow function object node (for variable assignment, field assignment, etc.)
316
+ if (srcPagNode instanceof Pag_1.PagFuncNode) {
317
+ this.recordArrowFunctionObjectNode(srcPagNode, e.src);
318
+ }
302
319
  // for demand-driven analysis, add fake parameter heapObj nodes
303
320
  if (e.src instanceof Ref_1.ArkParameterRef && this.scale === PointerAnalysisConfig_1.PtaAnalysisScale.MethodLevel) {
304
321
  let paramObjNodeID = paramNodes === null || paramNodes === void 0 ? void 0 : paramNodes.get(paramRefIndex++);
@@ -310,6 +327,34 @@ class PagBuilder {
310
327
  }
311
328
  return true;
312
329
  }
330
+ /**
331
+ * handle closure field ref intra-procedural edge
332
+ * @param edge the intra-procedural edge with ClosureFieldRef as src
333
+ * @param cid
334
+ */
335
+ addClosureEdges(edge, cid) {
336
+ let src = edge.src;
337
+ let dst = edge.dst;
338
+ let fieldName = src.getFieldName();
339
+ let closureValues = src.getBase().getType().getClosures();
340
+ // search out method closure local with closureFieldRef.fieldName
341
+ let srcValue = closureValues.find(value => value.getName() === fieldName);
342
+ let dstPagNode = this.getOrNewPagNode(cid, dst, edge.stmt);
343
+ if (srcValue) {
344
+ // unable to get parent method cid, connect all the value nodes in different cid
345
+ let srcPagNodes = this.pag.getNodesByValue(srcValue);
346
+ if (srcPagNodes) {
347
+ srcPagNodes.forEach(srcNodeID => {
348
+ let srcNode = this.pag.getNode(srcNodeID);
349
+ this.pag.addPagEdge(srcNode, dstPagNode, edge.kind, edge.stmt);
350
+ this.retriggerNodesList.add(srcNodeID);
351
+ });
352
+ }
353
+ }
354
+ else {
355
+ throw new Error(`error find closure local: ${fieldName}`);
356
+ }
357
+ }
313
358
  /// add Copy edges interprocedural
314
359
  addCallsEdgesFromFuncPag(funcPag, cid) {
315
360
  for (let cs of funcPag.getNormalCallSites()) {
@@ -335,7 +380,7 @@ class PagBuilder {
335
380
  this.addThisRefCallEdge(cid, ivkExpr.getBase(), callee, calleeCid, cs.callerFuncID);
336
381
  }
337
382
  else {
338
- logger.error(`constructor or intrinsic func is static ${ivkExpr.toString()}`);
383
+ logger.debug(`constructor or intrinsic func is static ${ivkExpr.toString()}`);
339
384
  }
340
385
  }
341
386
  const callerMethod = this.cg.getArkMethodByFuncID(cs.callerFuncID);
@@ -673,7 +718,7 @@ class PagBuilder {
673
718
  return srcNodes;
674
719
  }
675
720
  if (calleeNode.isSdkMethod()) {
676
- logger.error(`SDK method ${calleeMethod.getSignature().toString()} shoule be handled by plugin`);
721
+ logger.warn(`SDK method ${calleeMethod.getSignature().toString()} should be handled by plugin (ignored)`);
677
722
  return srcNodes;
678
723
  }
679
724
  if (!calleeMethod.getCfg()) {
@@ -699,7 +744,7 @@ class PagBuilder {
699
744
  * only process the param PAG edge for invoke stmt
700
745
  */
701
746
  addCallParamPagEdge(calleeMethod, args, cs, callerCid, calleeCid, offset) {
702
- var _a, _b;
747
+ var _a;
703
748
  let callStmt = cs.callStmt;
704
749
  const params = (_a = this.pluginManager.getSDKParamValue(calleeMethod)) !== null && _a !== void 0 ? _a : calleeMethod
705
750
  .getCfg()
@@ -707,16 +752,6 @@ class PagBuilder {
707
752
  .filter(stmt => stmt instanceof Stmt_1.ArkAssignStmt && stmt.getRightOp() instanceof Ref_1.ArkParameterRef)
708
753
  .map(stmt => stmt.getRightOp());
709
754
  let srcNodes = [];
710
- /**
711
- * process foreach situation
712
- * e.g. arr.forEach((item) => { ... })
713
- * cs.args is anonymous method local, will have only 1 parameter
714
- * but inside foreach will have >= 1 parameters
715
- */
716
- if (((_b = callStmt.getInvokeExpr()) === null || _b === void 0 ? void 0 : _b.getMethodSignature().getMethodSubSignature().getMethodName()) === 'forEach') {
717
- srcNodes.push(...this.addForeachParamPagEdge(callerCid, calleeCid, callStmt, params));
718
- return srcNodes;
719
- }
720
755
  // add args to parameters edges
721
756
  for (let i = offset; i <= args.length; i++) {
722
757
  let arg = args[i];
@@ -731,37 +766,13 @@ class PagBuilder {
731
766
  // Get or create new PAG node for argument and parameter
732
767
  let srcPagNode = this.getOrNewPagNode(callerCid, arg, callStmt);
733
768
  let dstPagNode = this.getOrNewPagNode(calleeCid, param, callStmt);
734
- this.pag.addPagEdge(srcPagNode, dstPagNode, Pag_1.PagEdgeKind.Copy, callStmt);
735
- srcNodes.push(srcPagNode.getID());
736
- // TODO: handle other types of parmeters
737
- }
738
- return srcNodes;
739
- }
740
- /**
741
- * temporary solution for foreach
742
- * deprecate when foreach is handled by built-in method
743
- * connect the element node with the value inside foreach
744
- */
745
- addForeachParamPagEdge(callerCid, calleeCid, callStmt, params) {
746
- // container value is the base value of callstmt, its points-to is PagNewContainerExprNode
747
- let srcNodes = [];
748
- let containerValue = callStmt.getInvokeExpr().getBase();
749
- let param = params[0];
750
- if (!containerValue || !param) {
751
- return srcNodes;
752
- }
753
- let basePagNode = this.getOrNewPagNode(callerCid, containerValue, callStmt);
754
- let dstPagNode = this.getOrNewPagNode(calleeCid, param, callStmt);
755
- for (let pt of basePagNode.getPointTo()) {
756
- let newContainerExprPagNode = this.pag.getNode(pt);
757
- // PagNewContainerExprNode's points-to is the element node
758
- if (!newContainerExprPagNode || !newContainerExprPagNode.getElementNode()) {
759
- continue;
769
+ // Record arrow function object node for later thisPt setup
770
+ if (srcPagNode instanceof Pag_1.PagFuncNode) {
771
+ this.recordArrowFunctionObjectNode(srcPagNode, arg);
760
772
  }
761
- let srcPagNode = this.pag.getNode(newContainerExprPagNode.getElementNode());
762
- // connect the element node with the value inside foreach
763
773
  this.pag.addPagEdge(srcPagNode, dstPagNode, Pag_1.PagEdgeKind.Copy, callStmt);
764
774
  srcNodes.push(srcPagNode.getID());
775
+ // TODO: handle other types of parmeters
765
776
  }
766
777
  return srcNodes;
767
778
  }
@@ -1013,7 +1024,9 @@ class PagBuilder {
1013
1024
  let lhOp = stmt.getLeftOp();
1014
1025
  let rhOp = stmt.getRightOp();
1015
1026
  let condition = (lhOp instanceof Local_1.Local &&
1016
- (rhOp instanceof Local_1.Local || rhOp instanceof Ref_1.ArkParameterRef || rhOp instanceof Ref_1.ArkThisRef || rhOp instanceof Ref_1.ArkStaticFieldRef)) ||
1027
+ (rhOp instanceof Local_1.Local || rhOp instanceof Ref_1.ArkParameterRef ||
1028
+ rhOp instanceof Ref_1.ArkThisRef || rhOp instanceof Ref_1.ArkStaticFieldRef ||
1029
+ rhOp instanceof Ref_1.ClosureFieldRef)) ||
1017
1030
  (lhOp instanceof Ref_1.ArkStaticFieldRef && rhOp instanceof Local_1.Local);
1018
1031
  if (condition) {
1019
1032
  return true;
@@ -1245,5 +1258,113 @@ class PagBuilder {
1245
1258
  getContextSelector() {
1246
1259
  return this.ctxSelector;
1247
1260
  }
1261
+ /**
1262
+ * Record arrow function object node for later thisPt setup
1263
+ */
1264
+ recordArrowFunctionObjectNode(funcNode, funcValue) {
1265
+ const methodSig = funcNode.getMethod();
1266
+ if (!methodSig) {
1267
+ return;
1268
+ }
1269
+ const funcName = methodSig.getMethodSubSignature().getMethodName();
1270
+ // Only record arrow functions (name contains %AM)
1271
+ if (funcName.includes('%AM')) {
1272
+ this.arrowFunctionObjectMap.set(funcName, funcNode.getID());
1273
+ logger.debug(`Recorded arrow function object: ${funcName} -> Node ${funcNode.getID()}`);
1274
+ }
1275
+ }
1276
+ /**
1277
+ * Set up 'this' binding for arrow functions
1278
+ * 1. Set the thisPt of arrow function object node (pointing to ThisRef node inside arrow function body)
1279
+ * 2. Establish This edge from arrow function's ThisRef to outer function's this
1280
+ */
1281
+ setupArrowFunctionThis(funcID, cid) {
1282
+ const arkMethod = this.cg.getArkMethodByFuncID(funcID);
1283
+ if (!arkMethod) {
1284
+ return;
1285
+ }
1286
+ // Check if this is an arrow function (name contains %AM)
1287
+ const funcName = arkMethod.getName();
1288
+ if (!funcName.includes('%AM')) {
1289
+ return;
1290
+ }
1291
+ logger.debug(`Setting up arrow function this for ${funcName} (FuncID: ${funcID}, Ctx: ${cid})`);
1292
+ // 1. Get ThisRef node inside the arrow function body
1293
+ const arrowFuncThisRefID = this.recordThisRefNode(arkMethod, cid);
1294
+ if (arrowFuncThisRefID === -1) {
1295
+ return;
1296
+ }
1297
+ // 2. Look up arrow function object node from map (O(1))
1298
+ const arrowFuncObjNodeID = this.arrowFunctionObjectMap.get(funcName);
1299
+ if (arrowFuncObjNodeID !== undefined) {
1300
+ const funcNode = this.pag.getNode(arrowFuncObjNodeID);
1301
+ funcNode.setThisPt(arrowFuncThisRefID);
1302
+ logger.debug(`Set function object node ${arrowFuncObjNodeID} thisPt to ThisRef ${arrowFuncThisRefID}`);
1303
+ }
1304
+ else {
1305
+ logger.warn(`Arrow function object node not found for ${funcName}`);
1306
+ }
1307
+ // 3. Get the outer function of arrow function and establish This edge
1308
+ const outerMethod = arkMethod.getOuterMethod();
1309
+ if (!outerMethod) {
1310
+ logger.warn(`Could not find outer method for arrow function ${funcName}`);
1311
+ return;
1312
+ }
1313
+ logger.debug(`Arrow function outer method: ${outerMethod.getName()}`);
1314
+ // Get context of arrow function object node (in which context of outer function the arrow function object is created)
1315
+ const arrowFuncObjNode = arrowFuncObjNodeID !== undefined ? this.pag.getNode(arrowFuncObjNodeID) : undefined;
1316
+ const outerContextID = arrowFuncObjNode === null || arrowFuncObjNode === void 0 ? void 0 : arrowFuncObjNode.getCid();
1317
+ // Find 'this' local node of outer function in specified context
1318
+ const outerThisNode = this.findThisNodeForMethod(outerMethod, outerContextID);
1319
+ if (outerThisNode) {
1320
+ const arrowFuncThisRef = this.pag.getNode(arrowFuncThisRefID);
1321
+ // Establish This edge: outer this -> arrow function ThisRef
1322
+ if (this.pag.addPagEdge(outerThisNode, arrowFuncThisRef, Pag_1.PagEdgeKind.This)) {
1323
+ logger.info(`Connected arrow function ${funcName} this (Node ${arrowFuncThisRefID}) to outer this (Node ${outerThisNode.getID()})`);
1324
+ // Add outer this node to retrigger list to ensure pointer propagation
1325
+ this.retriggerNodesList.add(outerThisNode.getID());
1326
+ }
1327
+ }
1328
+ }
1329
+ /**
1330
+ * Find 'this' local node for the specified method in the specified context
1331
+ * @param method Target method
1332
+ * @param contextID Optional context ID. If not specified, returns the 'this' node in the first found context
1333
+ */
1334
+ findThisNodeForMethod(method, contextID) {
1335
+ const cfg = method.getCfg();
1336
+ if (!cfg) {
1337
+ return undefined;
1338
+ }
1339
+ // Find 'this' assignment statement in method: this = this: ClassName
1340
+ const thisAssignStmt = cfg
1341
+ .getStmts()
1342
+ .find(s => s instanceof Stmt_1.ArkAssignStmt && s.getRightOp() instanceof Ref_1.ArkThisRef);
1343
+ if (!thisAssignStmt) {
1344
+ return undefined;
1345
+ }
1346
+ const thisLocal = thisAssignStmt.getLeftOp();
1347
+ if (!(thisLocal instanceof Local_1.Local)) {
1348
+ return undefined;
1349
+ }
1350
+ const ctx2NodeMap = this.pag.getNodesByValue(thisLocal);
1351
+ if (!ctx2NodeMap || ctx2NodeMap.size === 0) {
1352
+ return undefined;
1353
+ }
1354
+ // If context is specified, find node in that context
1355
+ if (contextID !== undefined) {
1356
+ const nodeID = ctx2NodeMap.get(contextID);
1357
+ if (nodeID === undefined) {
1358
+ return undefined;
1359
+ }
1360
+ return this.pag.getNode(nodeID);
1361
+ }
1362
+ // Otherwise return 'this' node in the first found context
1363
+ const firstNodeID = ctx2NodeMap.values().next().value;
1364
+ if (firstNodeID === undefined) {
1365
+ return undefined;
1366
+ }
1367
+ return this.pag.getNode(firstNodeID);
1368
+ }
1248
1369
  }
1249
1370
  exports.PagBuilder = PagBuilder;
@@ -1 +1 @@
1
- {"version":3,"file":"PointerAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PointerAnalysis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PointerAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PointerAnalysis.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAG5D,OAAO,EAAE,SAAS,EAAiB,QAAQ,EAAe,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAa,IAAI,EAAe,MAAM,sBAAsB,CAAC;AAEpE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAI5C,OAAO,EAAE,GAAG,EAAgF,MAAM,OAAO,CAAC;AAE1G,OAAO,EAAE,qBAAqB,EAAoB,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAMvD,qBAAa,eAAgB,SAAQ,gBAAgB;IACjD,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,GAAG,CAAqD;IAChE,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,QAAQ,CAAY;IAE5B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,MAAM,CAAwB;gBAE1B,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB;IAU1E,MAAM,CAAC,8BAA8B,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,qBAAqB,GAAG,eAAe;IAuB3G,MAAM,CAAC,wBAAwB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,qBAAqB,GAAG,eAAe;IAgB7G,SAAS,CAAC,IAAI,IAAI,IAAI;IAYf,KAAK,IAAI,IAAI;IAMpB,OAAO,CAAC,WAAW;IAiBZ,MAAM,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAI5D,MAAM,IAAI,GAAG;IAIb,OAAO,IAAI,MAAM;IAQxB,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAK/C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAIvC,OAAO,CAAC,eAAe;IAyBvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,eAAe;IAmDvB,OAAO,CAAC,kBAAkB;IA8B1B,OAAO,CAAC,mBAAmB;IA6B3B;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,SAAS;IAoBjB;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAuBhC,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,sBAAsB;IAoB9B,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACI,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,GAAG,OAAO;IAmCrD,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,GAAG,OAAO;IAItD,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IA6BhD,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,0BAA0B;IAclC,OAAO,CAAC,0BAA0B;IAclC,OAAO,CAAC,cAAc;IA2Cf,cAAc,IAAI,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAI9C,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IAIlE,iBAAiB,IAAI,MAAM,EAAE;IAI7B,eAAe,IAAI,MAAM,EAAE;IAI3B,YAAY,IAAI,qBAAqB;IAI5C,OAAO,CAAC,sBAAsB;IA8BvB,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAU9G"}
@@ -55,6 +55,7 @@ const PagBuilder_1 = require("./PagBuilder");
55
55
  const PointerAnalysisConfig_1 = require("./PointerAnalysisConfig");
56
56
  const PtsDS_1 = require("./PtsDS");
57
57
  const Local_1 = require("../../core/base/Local");
58
+ const Context_1 = require("./context/Context");
58
59
  const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'PTA');
59
60
  class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
60
61
  constructor(p, cg, s, config) {
@@ -238,8 +239,9 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
238
239
  instanceFieldNodeMap.forEach((nodeIDs, cid) => {
239
240
  // TODO: check cid
240
241
  // cid === -1 will escape the check, mainly for globalThis
242
+ // cid === CONTAINER_ELEMENT_CID will escape the check, for container element/field nodes
241
243
  let baseCid = node.getCid();
242
- if (baseCid !== -1 && cid !== baseCid) {
244
+ if (baseCid !== -1 && cid !== Context_1.CONTAINER_ELEMENT_CID && cid !== baseCid) {
243
245
  return;
244
246
  }
245
247
  nodeIDs.forEach((nodeID) => {
@@ -2,6 +2,7 @@ import { CallGraph } from '../../model/CallGraph';
2
2
  import { ContextItemManager } from './ContextItem';
3
3
  export type ContextID = number;
4
4
  export declare const DUMMY_CID = 0;
5
+ export declare const CONTAINER_ELEMENT_CID = -2;
5
6
  /**
6
7
  * An abstract base class representing a context in pointer analysis.
7
8
  * A context is an immutable sequence of context elements (represented by their IDs).
@@ -1 +1 @@
1
- {"version":3,"file":"Context.d.ts","sourceRoot":"","sources":["../../../../src/callgraph/pointerAnalysis/context/Context.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAuB,kBAAkB,EAAmB,MAAM,eAAe,CAAC;AAEzF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAC/B,eAAO,MAAM,SAAS,IAAI,CAAC;AAE3B;;;GAGG;AACH,8BAAsB,OAAO;IACzB,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;gBAErB,YAAY,GAAE,MAAM,EAAO;IAQvC;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC;IAIxD;;;;;OAKG;IACH,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,KAAK,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC;IAI1F;;;;;;OAMG;IACH,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC;IAgBnF;;;;;OAKG;IACH,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC;IAcxD,MAAM,IAAI,MAAM;IAIhB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAO1B,QAAQ,IAAI,MAAM;aAKT,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,OAAO;aACxF,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CACrE;AAED,qBAAa,eAAgB,SAAQ,OAAO;IACjC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,eAAe;IAKjG,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAS5D;AAED,qBAAa,UAAW,SAAQ,OAAO;IAC5B,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,UAAU;IAKvF,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAI5D;AAED,qBAAa,WAAY,SAAQ,OAAO;IAC7B,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,WAAW;IAKzF,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAS5D;AAED,qBAAa,YAAY;IACrB,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,cAAc,CAAkC;;IAOjD,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS;IAa9C,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO;IAY/E,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS;IASrD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAO3C,cAAc,IAAI,OAAO,EAAE;IAI3B,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAS5D"}
1
+ {"version":3,"file":"Context.d.ts","sourceRoot":"","sources":["../../../../src/callgraph/pointerAnalysis/context/Context.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAuB,kBAAkB,EAAmB,MAAM,eAAe,CAAC;AAEzF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAC/B,eAAO,MAAM,SAAS,IAAI,CAAC;AAI3B,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;GAGG;AACH,8BAAsB,OAAO;IACzB,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;gBAErB,YAAY,GAAE,MAAM,EAAO;IAQvC;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC;IAIxD;;;;;OAKG;IACH,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,KAAK,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC;IAI1F;;;;;;OAMG;IACH,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC;IAgBnF;;;;;OAKG;IACH,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC;IAcxD,MAAM,IAAI,MAAM;IAIhB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAO1B,QAAQ,IAAI,MAAM;aAKT,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,OAAO;aACxF,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CACrE;AAED,qBAAa,eAAgB,SAAQ,OAAO;IACjC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,eAAe;IAKjG,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAS5D;AAED,qBAAa,UAAW,SAAQ,OAAO;IAC5B,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,UAAU;IAKvF,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAI5D;AAED,qBAAa,WAAY,SAAQ,OAAO;IAC7B,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,WAAW;IAKzF,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAS5D;AAED,qBAAa,YAAY;IACrB,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,cAAc,CAAkC;;IAOjD,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS;IAa9C,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO;IAY/E,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS;IASrD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAO3C,cAAc,IAAI,OAAO,EAAE;IAI3B,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAS5D"}
@@ -14,8 +14,12 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.ContextCache = exports.FuncContext = exports.ObjContext = exports.CallSiteContext = exports.Context = exports.DUMMY_CID = void 0;
17
+ exports.ContextCache = exports.FuncContext = exports.ObjContext = exports.CallSiteContext = exports.Context = exports.CONTAINER_ELEMENT_CID = exports.DUMMY_CID = void 0;
18
18
  exports.DUMMY_CID = 0;
19
+ // Special context ID for container element/field nodes
20
+ // These nodes should be shared across all contexts for the same container object (identified by basePt)
21
+ // but should NOT be shared between different container objects (even with same cid=0)
22
+ exports.CONTAINER_ELEMENT_CID = -2;
19
23
  /**
20
24
  * An abstract base class representing a context in pointer analysis.
21
25
  * A context is an immutable sequence of context elements (represented by their IDs).
@@ -1 +1 @@
1
- {"version":3,"file":"ContainerPlugin.d.ts","sourceRoot":"","sources":["../../../../src/callgraph/pointerAnalysis/plugins/ContainerPlugin.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAU,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAiD,MAAM,QAAQ,CAAC;AAC5E,OAAO,EAAY,UAAU,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAc1C;;GAEG;AACH,qBAAa,eAAgB,YAAW,UAAU;IAC9C,GAAG,EAAE,GAAG,CAAC;IACT,UAAU,EAAE,UAAU,CAAC;IACvB,EAAE,EAAE,SAAS,CAAC;gBAEF,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS;IAM3D,OAAO,IAAI,MAAM;IAIjB,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO;IAWxD,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;IAiC5E,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,cAAc;CA0BzB"}
1
+ {"version":3,"file":"ContainerPlugin.d.ts","sourceRoot":"","sources":["../../../../src/callgraph/pointerAnalysis/plugins/ContainerPlugin.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAU,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAiD,MAAM,QAAQ,CAAC;AAC5E,OAAO,EAAY,UAAU,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAc1C;;GAEG;AACH,qBAAa,eAAgB,YAAW,UAAU;IAC9C,GAAG,EAAE,GAAG,CAAC;IACT,UAAU,EAAE,UAAU,CAAC;IACvB,EAAE,EAAE,SAAS,CAAC;gBAEF,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS;IAM3D,OAAO,IAAI,MAAM;IAIjB,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO;IAWxD,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;IAiC5E,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,cAAc;CAmCzB"}
@@ -156,7 +156,15 @@ class ContainerPlugin {
156
156
  if (!paramRefValues || paramRefValues.length < 1) {
157
157
  return;
158
158
  }
159
- const elementRef = paramRefValues[0];
159
+ /**
160
+ * NOTE!: paramRefValues[0] OR paramRefValues[1]?
161
+ * when the callback use the closure, the first parameter is LexicalEnvType,
162
+ * when not use, we need to use the second parameter as the element type.
163
+ */
164
+ let elementRef = paramRefValues[0];
165
+ if (elementRef.getType() instanceof Type_1.LexicalEnvType) {
166
+ elementRef = paramRefValues[1];
167
+ }
160
168
  const elementNode = this.pag.getOrNewNode(calleeCid, elementRef, cs.callStmt);
161
169
  this.pag.addPagEdge(containerFieldNode, elementNode, Pag_1.PagEdgeKind.Copy, cs.callStmt);
162
170
  srcNodes.push(containerFieldNode.getID());
@@ -6,6 +6,8 @@ export declare class Builtin {
6
6
  static SET: string;
7
7
  static MAP: string;
8
8
  static REGEXP: string;
9
+ static BIGINT: string;
10
+ static FUNCTION: string;
9
11
  static BUILT_IN_CLASSES: Set<string>;
10
12
  static DUMMY_PROJECT_NAME: string;
11
13
  static DUMMY_FILE_NAME: string;
@@ -1 +1 @@
1
- {"version":3,"file":"Builtin.d.ts","sourceRoot":"","sources":["../../../src/core/common/Builtin.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAsB,MAAM,uBAAuB,CAAC;AAC3G,OAAO,EAAE,SAAS,EAA2B,MAAM,cAAc,CAAC;AAElE,qBAAa,OAAO;IAGhB,OAAc,MAAM,SAAY;IAChC,OAAc,KAAK,SAAW;IAC9B,OAAc,GAAG,SAAS;IAC1B,OAAc,GAAG,SAAS;IAC1B,OAAc,MAAM,SAAY;IAEhC,OAAc,gBAAgB,cAA8B;IAG5D,OAAc,kBAAkB,SAAY;IAC5C,OAAc,eAAe,SAAkB;IAE/C,OAAc,+BAA+B,gBAA8C;IAC3F,OAAc,sBAAsB,iBAAgD;IACpF,OAAc,iBAAiB,YAA8C;IAC7E,OAAc,qBAAqB,iBAA+C;IAClF,OAAc,mBAAmB,iBAA6C;IAC9E,OAAc,mBAAmB,iBAA6C;IAC9E,OAAc,sBAAsB,iBAAgD;IACpF,OAAc,iBAAiB,YAA8C;IAC7E,OAAc,4BAA4B,8BAAwC;IAGlF,OAAc,iBAAiB,SAAqB;IACpD,OAAc,QAAQ,SAAsB;IAC5C,OAAc,aAAa,SAAU;IACrC,OAAc,eAAe,SAAoB;IACjD,OAAc,oBAAoB,SAAU;IAC5C,OAAc,qBAAqB,SAAW;IAE9C,OAAc,wBAAwB,iBAAkD;IACxF,OAAc,+BAA+B,iBAAyD;IACtG,OAAc,mBAAmB,YAAwE;IACzG,OAAc,0BAA0B,YAA+E;IAGvH,OAAc,SAAS,SAAc;IACrC,OAAc,0BAA0B,kBAGtC;IAGF,OAAc,KAAK,SAAW;IAC9B,OAAc,MAAM,SAAY;IAEhC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAUlC,OAAO,CAAC,MAAM,CAAC,gCAAgC;WAIjC,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc;IAI3E,OAAO,CAAC,MAAM,CAAC,6BAA6B;WAU9B,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;CAG3D"}
1
+ {"version":3,"file":"Builtin.d.ts","sourceRoot":"","sources":["../../../src/core/common/Builtin.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAsB,MAAM,uBAAuB,CAAC;AAC3G,OAAO,EAAE,SAAS,EAA2B,MAAM,cAAc,CAAC;AAElE,qBAAa,OAAO;IAGhB,OAAc,MAAM,SAAY;IAChC,OAAc,KAAK,SAAW;IAC9B,OAAc,GAAG,SAAS;IAC1B,OAAc,GAAG,SAAS;IAC1B,OAAc,MAAM,SAAY;IAChC,OAAc,MAAM,SAAY;IAChC,OAAc,QAAQ,SAAc;IAEpC,OAAc,gBAAgB,cAA8B;IAG5D,OAAc,kBAAkB,SAAY;IAC5C,OAAc,eAAe,SAAkB;IAE/C,OAAc,+BAA+B,gBAA8C;IAC3F,OAAc,sBAAsB,iBAAgD;IACpF,OAAc,iBAAiB,YAA8C;IAC7E,OAAc,qBAAqB,iBAA+C;IAClF,OAAc,mBAAmB,iBAA6C;IAC9E,OAAc,mBAAmB,iBAA6C;IAC9E,OAAc,sBAAsB,iBAAgD;IACpF,OAAc,iBAAiB,YAA8C;IAC7E,OAAc,4BAA4B,8BAAwC;IAGlF,OAAc,iBAAiB,SAAqB;IACpD,OAAc,QAAQ,SAAsB;IAC5C,OAAc,aAAa,SAAU;IACrC,OAAc,eAAe,SAAoB;IACjD,OAAc,oBAAoB,SAAU;IAC5C,OAAc,qBAAqB,SAAW;IAE9C,OAAc,wBAAwB,iBAAkD;IACxF,OAAc,+BAA+B,iBAAyD;IACtG,OAAc,mBAAmB,YAAwE;IACzG,OAAc,0BAA0B,YAA+E;IAGvH,OAAc,SAAS,SAAc;IACrC,OAAc,0BAA0B,kBAGtC;IAGF,OAAc,KAAK,SAAW;IAC9B,OAAc,MAAM,SAAY;IAEhC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAUlC,OAAO,CAAC,MAAM,CAAC,gCAAgC;WAIjC,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc;IAI3E,OAAO,CAAC,MAAM,CAAC,6BAA6B;WAU9B,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;CAG3D"}
@@ -56,6 +56,8 @@ Builtin.ARRAY = 'Array';
56
56
  Builtin.SET = 'Set';
57
57
  Builtin.MAP = 'Map';
58
58
  Builtin.REGEXP = 'RegExp';
59
+ Builtin.BIGINT = 'BigInt';
60
+ Builtin.FUNCTION = 'Function';
59
61
  Builtin.BUILT_IN_CLASSES = _a.buildBuiltInClasses();
60
62
  // signature for built-in class
61
63
  Builtin.DUMMY_PROJECT_NAME = 'ES2015';
@@ -6,6 +6,7 @@ import { Scene } from '../../Scene';
6
6
  import { ArkClass } from '../model/ArkClass';
7
7
  import { ClassSignature, FieldSignature, FileSignature, MethodSignature } from '../model/ArkSignature';
8
8
  import { AbstractFieldRef, AbstractRef, ArkInstanceFieldRef, ArkParameterRef } from '../base/Ref';
9
+ import { Value } from '../base/Value';
9
10
  import { ArkFile } from '../model/ArkFile';
10
11
  import { KeyofTypeExpr, TypeQueryExpr } from '../base/TypeExpr';
11
12
  export declare class IRInference {
@@ -39,7 +40,10 @@ export declare class IRInference {
39
40
  static replaceMethodSignature(init: MethodSignature, declared: MethodSignature): MethodSignature;
40
41
  private static processForEach;
41
42
  static inferLocal(base: Local, arkMethod: ArkMethod): void;
43
+ static inferInstanceMember<T extends U, U extends Value>(baseType: Type, value: T, arkMethod: ArkMethod, inferMember: (declareType: Type, value: T, arkMethod: ArkMethod) => U | null): U | null;
42
44
  static generateNewFieldSignature(ref: AbstractFieldRef, arkClass: ArkClass, baseType: Type): FieldSignature | null;
45
+ static updateRefSignature(baseType: Type, ref: AbstractFieldRef, arkMethod: ArkMethod): AbstractRef | null;
46
+ private static genFieldSignature;
43
47
  private static getFieldSignature;
44
48
  private static findPropertyFormChildrenClass;
45
49
  private static repairType;
@@ -1 +1 @@
1
- {"version":3,"file":"IRInference.d.ts","sourceRoot":"","sources":["../../../src/core/common/IRInference.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IRInference.d.ts","sourceRoot":"","sources":["../../../src/core/common/IRInference.ts"],"names":[],"mappings":"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"}
@@ -609,6 +609,41 @@ class IRInference {
609
609
  base.setType(baseType);
610
610
  }
611
611
  }
612
+ static inferInstanceMember(baseType, value, arkMethod, inferMember) {
613
+ var _a, _b;
614
+ if (baseType instanceof Type_1.PrimitiveType) {
615
+ // Convert primitive types to their wrapper class types
616
+ const name = baseType instanceof Type_1.LiteralType ? typeof baseType.getLiteralName() : baseType.getName();
617
+ const className = baseType instanceof Type_1.BigIntType ? Builtin_1.Builtin.BIGINT : name.charAt(0).toUpperCase() + name.slice(1);
618
+ const arrayClass = arkMethod.getDeclaringArkFile().getScene().getSdkGlobal(className);
619
+ if (arrayClass instanceof ArkClass_1.ArkClass) {
620
+ return inferMember(new Type_1.ClassType(arrayClass.getSignature(), arrayClass.getRealTypes()), value, arkMethod);
621
+ }
622
+ }
623
+ else if (baseType instanceof Type_1.EnumValueType) {
624
+ const newType = (_a = baseType.getConstant()) === null || _a === void 0 ? void 0 : _a.getType();
625
+ return newType ? IRInference.inferInstanceMember(newType, value, arkMethod, inferMember) : null;
626
+ }
627
+ else if (baseType instanceof Type_1.AliasType) {
628
+ return IRInference.inferInstanceMember(TypeInference_1.TypeInference.replaceAliasType(baseType), value, arkMethod, inferMember);
629
+ }
630
+ else if (baseType instanceof Type_1.UnionType || baseType instanceof Type_1.IntersectionType) {
631
+ for (let type of baseType.getTypes()) {
632
+ if (type instanceof Type_1.UndefinedType || type instanceof Type_1.NullType) {
633
+ continue;
634
+ }
635
+ let result = IRInference.inferInstanceMember(type, value, arkMethod, inferMember);
636
+ if (result) {
637
+ return result;
638
+ }
639
+ }
640
+ }
641
+ else if (baseType instanceof Type_1.GenericType) {
642
+ const newType = (_b = baseType.getDefaultType()) !== null && _b !== void 0 ? _b : baseType.getConstraint();
643
+ return newType ? IRInference.inferInstanceMember(newType, value, arkMethod, inferMember) : null;
644
+ }
645
+ return inferMember(baseType, value, arkMethod);
646
+ }
612
647
  static generateNewFieldSignature(ref, arkClass, baseType) {
613
648
  if (baseType instanceof Type_1.UnionType) {
614
649
  for (let type of baseType.flatType()) {
@@ -633,6 +668,71 @@ class IRInference {
633
668
  }
634
669
  return IRInference.getFieldSignature(ref, baseType, arkClass);
635
670
  }
671
+ static updateRefSignature(baseType, ref, arkMethod) {
672
+ const fieldName = ref.getFieldName().replace(/[\"|\']/g, '');
673
+ if (baseType instanceof Type_1.TupleType) {
674
+ const n = Number(fieldName);
675
+ if (!isNaN(n) && n < baseType.getTypes().length) {
676
+ ref.getFieldSignature().setType(baseType.getTypes()[n]);
677
+ }
678
+ return ref;
679
+ }
680
+ else if (baseType instanceof Type_1.ArrayType) {
681
+ if (ref instanceof Ref_1.ArkInstanceFieldRef && ref.isDynamic()) {
682
+ const index = TypeInference_1.TypeInference.getLocalFromMethodBody(fieldName, arkMethod);
683
+ return new Ref_1.ArkArrayRef(ref.getBase(), index !== null && index !== void 0 ? index : ValueUtil_1.ValueUtil.createConst(fieldName));
684
+ }
685
+ else {
686
+ const arrayClass = arkMethod.getDeclaringArkFile().getScene().getSdkGlobal(Builtin_1.Builtin.ARRAY);
687
+ if (arrayClass instanceof ArkClass_1.ArkClass) {
688
+ baseType = new Type_1.ClassType(arrayClass.getSignature(), [baseType.getBaseType()]);
689
+ }
690
+ }
691
+ }
692
+ else if (baseType instanceof Type_1.FunctionType) {
693
+ const arrayClass = arkMethod.getDeclaringArkFile().getScene().getSdkGlobal(Builtin_1.Builtin.FUNCTION);
694
+ if (arrayClass instanceof ArkClass_1.ArkClass) {
695
+ baseType = new Type_1.ClassType(arrayClass.getSignature());
696
+ }
697
+ }
698
+ let { staticFlag, signature } = IRInference.genFieldSignature(fieldName, baseType, ref, arkMethod);
699
+ if (!signature) {
700
+ return null;
701
+ }
702
+ if (staticFlag) {
703
+ return new Ref_1.ArkStaticFieldRef(signature);
704
+ }
705
+ else {
706
+ ref.setFieldSignature(signature);
707
+ return ref;
708
+ }
709
+ }
710
+ static genFieldSignature(fieldName, baseType, ref, arkMethod) {
711
+ var _a;
712
+ const arkClass = arkMethod.getDeclaringArkClass();
713
+ const propertyAndType = TypeInference_1.TypeInference.inferFieldType(baseType, fieldName, arkClass);
714
+ let propertyType = IRInference.repairType(propertyAndType === null || propertyAndType === void 0 ? void 0 : propertyAndType[1], fieldName, arkClass);
715
+ let staticFlag = false;
716
+ let signature = null;
717
+ if (baseType instanceof Type_1.ClassType) {
718
+ const property = (_a = propertyAndType === null || propertyAndType === void 0 ? void 0 : propertyAndType[0]) !== null && _a !== void 0 ? _a : IRInference.findPropertyFormChildrenClass(fieldName, arkClass, baseType);
719
+ staticFlag = baseType.getClassSignature().getClassName() === Const_1.DEFAULT_ARK_CLASS_NAME ||
720
+ ((property instanceof ArkField_1.ArkField || property instanceof ArkMethod_1.ArkMethod) && property.isStatic());
721
+ if (property instanceof ArkField_1.ArkField && property.getCategory() !== ArkField_1.FieldCategory.ENUM_MEMBER &&
722
+ !(property.getType() instanceof Type_1.GenericType)) {
723
+ signature = property.getSignature();
724
+ }
725
+ else {
726
+ const baseSignature = property instanceof ArkMethod_1.ArkMethod ? property.getSignature().getDeclaringClassSignature() : baseType.getClassSignature();
727
+ signature = new ArkSignature_1.FieldSignature(fieldName, baseSignature, propertyType !== null && propertyType !== void 0 ? propertyType : ref.getType(), staticFlag);
728
+ }
729
+ }
730
+ else if (baseType instanceof Type_1.AnnotationNamespaceType) {
731
+ staticFlag = true;
732
+ signature = new ArkSignature_1.FieldSignature(fieldName, baseType.getNamespaceSignature(), propertyType !== null && propertyType !== void 0 ? propertyType : ref.getType(), staticFlag);
733
+ }
734
+ return { staticFlag, signature };
735
+ }
636
736
  static getFieldSignature(ref, baseType, arkClass) {
637
737
  const fieldName = ref.getFieldName().replace(/[\"|\']/g, '');
638
738
  const propertyAndType = TypeInference_1.TypeInference.inferFieldType(baseType, fieldName, arkClass);
@@ -1 +1 @@
1
- {"version":3,"file":"TypeInference.d.ts","sourceRoot":"","sources":["../../../src/core/common/TypeInference.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAUtC,OAAO,EAAwD,IAAI,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAQH,aAAa,EACb,YAAY,EACZ,WAAW,EAOX,IAAI,EACJ,oBAAoB,EAKvB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAiB,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAiB,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAuBtC,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAsB,MAAM,uBAAuB,CAAC;AAWhG,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AASpE,qBAAa,aAAa;WACR,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAqC3D;;;;;;;;;OASG;WACW,kBAAkB,CAAC,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,GAAE,GAAG,CAAC,IAAI,CAAa,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS;IAgCxI,OAAO,CAAC,MAAM,CAAC,uBAAuB;WAmCxB,iBAAiB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAuC3D,OAAO,CAAC,MAAM,CAAC,WAAW;IAY1B;;;OAGG;WACW,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAkBjE;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAuBjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAMrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAqBrC,OAAO,CAAC,MAAM,CAAC,UAAU;WAwBX,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,KAAK,GAAG,IAAI;WAgBxE,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;IAsBvF;;;;OAIG;WACW,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAmB1E,OAAO,CAAC,MAAM,CAAC,aAAa;IAuB5B,OAAO,CAAC,MAAM,CAAC,eAAe;WAwBhB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;WAQ5C,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO;WA4BrD,SAAS,CAAC,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,EAC3B,OAAO,GAAE,GAAG,CAAC,IAAI,CAAa,GAAG,OAAO;WAwBlD,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;WAcvC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;WA6BvC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;WAU/D,kBAAkB,CAAC,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;WAgBtE,wBAAwB,CAAC,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;WA2BnF,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;WA0BlD,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAmB1F;;;;;;;OAOG;WACW,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI;IAUhG;;;;;;;OAOG;WACW,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI;IAoCnF;;;;;;;;;OASG;WACW,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI;IAoC3G,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA0BlC,OAAO,CAAC,MAAM,CAAC,eAAe;WAUhB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,aAAa,GAAG,IAAI;IAoBxE,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAYlC;;;;;;;OAOG;WACW,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI;WAehE,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI;WAqBlE,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;WAK1E,qBAAqB,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;WAe9E,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI;WASrE,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,GAAE,GAAG,CAAC,IAAI,CAAa,GAAG,IAAI;WAgBzF,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI;WAkC9E,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;WAQlC,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,GAAG,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,SAAS,GAAG,IAAI;IA4B9I,OAAO,CAAC,MAAM,CAAC,oBAAoB;WAerB,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;WAYvD,gBAAgB,CAAC,SAAS,EAAE,IAAI,GAAG,OAAO;WAO1C,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;WAcxC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI;WAsBrC,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,OAAO;CAY9D"}
1
+ {"version":3,"file":"TypeInference.d.ts","sourceRoot":"","sources":["../../../src/core/common/TypeInference.ts"],"names":[],"mappings":"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"}
@@ -664,11 +664,10 @@ class TypeInference {
664
664
  * @returns
665
665
  */
666
666
  static inferUnclearRefType(urType, arkClass) {
667
- var _a;
668
667
  const realTypes = urType.getGenericTypes();
669
668
  this.inferRealGenericTypes(realTypes, arkClass);
670
- if (urType.getName() === Builtin_1.Builtin.ARRAY) {
671
- return new Type_1.ArrayType((_a = realTypes[0]) !== null && _a !== void 0 ? _a : Type_1.AnyType.getInstance(), 1);
669
+ if (urType.getName() === Builtin_1.Builtin.ARRAY && realTypes.length > 0) {
670
+ return new Type_1.ArrayType(realTypes[0], 1);
672
671
  }
673
672
  const type = this.inferUnclearRefName(urType.getName(), arkClass);
674
673
  return type ? this.replaceTypeWithReal(type, realTypes) : null;
@@ -1054,9 +1053,10 @@ class TypeInference {
1054
1053
  }
1055
1054
  else if (leftType instanceof Type_1.UnionType) {
1056
1055
  const isExist = leftType.getTypes().find(t => this.isSameType(t, rightType));
1057
- if (isExist) {
1058
- return type1;
1056
+ if (!isExist) {
1057
+ leftType.getTypes().push(type2);
1059
1058
  }
1059
+ return type1;
1060
1060
  }
1061
1061
  else if (leftType instanceof Type_1.IntersectionType) {
1062
1062
  const isExist = leftType.getTypes().find(t => !this.isSameType(t, rightType));
@@ -6,7 +6,6 @@ import { Type } from '../base/Type';
6
6
  import { ArkMethod } from '../model/ArkMethod';
7
7
  import { AbstractInvokeExpr, AliasTypeExpr, ArkCastExpr, ArkConditionExpr, ArkInstanceInvokeExpr, ArkInstanceOfExpr, ArkNewArrayExpr, ArkNewExpr, ArkNormalBinopExpr, ArkPtrInvokeExpr, ArkStaticInvokeExpr } from '../base/Expr';
8
8
  import { Local } from '../base/Local';
9
- import { Scene } from '../../Scene';
10
9
  export declare enum InferLanguage {
11
10
  UNKNOWN = -1,
12
11
  COMMON = 0,
@@ -167,8 +166,7 @@ export declare class InstanceInvokeExprInference extends ValueInference<ArkInsta
167
166
  */
168
167
  postInfer(value: ArkInstanceInvokeExpr, newValue: Value, stmt: Stmt): void;
169
168
  getMethodName(expr: AbstractInvokeExpr, arkMethod: ArkMethod): string;
170
- static inferInvokeExpr(baseType: Type, expr: AbstractInvokeExpr, arkMethod: ArkMethod, methodName: string): AbstractInvokeExpr | null;
171
- static inferMethodFromBase(baseType: Type, expr: AbstractInvokeExpr, scene: Scene, methodName: string): AbstractInvokeExpr | null;
169
+ static inferInvokeExpr(baseType: Type, expr: AbstractInvokeExpr, arkMethod: ArkMethod): AbstractInvokeExpr | null;
172
170
  }
173
171
  export declare class StaticInvokeExprInference extends InstanceInvokeExprInference {
174
172
  getValueName(): string;