arkanalyzer 1.0.92 → 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/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/model/builder/ArkClassBuilder.js +4 -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/cppFrontend/graph/builder/SwitchBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/graph/builder/SwitchBuilder.js +11 -1
- package/package.json +1 -1
|
@@ -59,6 +59,7 @@ export declare class CallGraph extends BaseExplicitGraph {
|
|
|
59
59
|
addDynamicCallInfo(callStmt: Stmt, caller: Method, potentialCallee?: Method): void;
|
|
60
60
|
addDynamicCallEdge(callerID: NodeID, calleeID: NodeID, callStmt: Stmt): void;
|
|
61
61
|
getDynCallSiteByStmt(stmt: Stmt): DynCallSite | undefined;
|
|
62
|
+
recordCallSite(stmt: Stmt, cs: CallSite): void;
|
|
62
63
|
addStmtToCallSiteMap(stmt: Stmt, cs: CallSite): boolean;
|
|
63
64
|
getCallSiteByStmt(stmt: Stmt): CallSite[];
|
|
64
65
|
addMethodToCallSiteMap(funcID: FuncID, cs: CallSite): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CallGraph.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallGraph.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CallGraph.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallGraph.ts"],"names":[],"mappings":"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"}
|
|
@@ -225,6 +225,10 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
|
|
|
225
225
|
getDynCallSiteByStmt(stmt) {
|
|
226
226
|
return this.stmtToDynCallSitemap.get(stmt);
|
|
227
227
|
}
|
|
228
|
+
recordCallSite(stmt, cs) {
|
|
229
|
+
this.addStmtToCallSiteMap(stmt, cs);
|
|
230
|
+
this.addMethodToCallSiteMap(cs.calleeFuncID, cs);
|
|
231
|
+
}
|
|
228
232
|
addStmtToCallSiteMap(stmt, cs) {
|
|
229
233
|
if (this.stmtToCallSitemap.has(stmt)) {
|
|
230
234
|
this.stmtToCallSitemap.get(stmt).push(cs);
|
|
@@ -1,39 +1,126 @@
|
|
|
1
1
|
import { Stmt } from '../../core/base/Stmt';
|
|
2
2
|
import { Value } from '../../core/base/Value';
|
|
3
3
|
import { FuncID } from './CallGraph';
|
|
4
|
+
/**
|
|
5
|
+
* 调用点 ID 的类型别名,全局唯一递增分配。
|
|
6
|
+
*/
|
|
4
7
|
export type CallSiteID = number;
|
|
8
|
+
/**
|
|
9
|
+
* 调用点统一接口。
|
|
10
|
+
* 一个调用点表示调用图中一条 `caller → callee` 边在 caller 侧的来源语句信息。
|
|
11
|
+
*/
|
|
5
12
|
export interface ICallSite {
|
|
13
|
+
/** 全局唯一标识 */
|
|
6
14
|
id: CallSiteID;
|
|
15
|
+
/** 触发该调用的语句(通常是 ArkInvokeStmt) */
|
|
7
16
|
callStmt: Stmt;
|
|
17
|
+
/** 调用参数列表,若语句不包含参数信息则为 undefined */
|
|
8
18
|
args: Value[] | undefined;
|
|
19
|
+
/** 调用方方法 ID */
|
|
9
20
|
callerFuncID: FuncID;
|
|
21
|
+
/** 获取被调用方方法 ID */
|
|
10
22
|
getCalleeFuncID(): FuncID | undefined;
|
|
11
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* 静态调用点。
|
|
26
|
+
*
|
|
27
|
+
* 表示一条**确定**的 `caller → callee` 调用边:在构建调用图时(CHA/RTA/PTA),
|
|
28
|
+
* 调用语句的目标方法已被解析为具体的 calleeFuncID,不再发生变化。
|
|
29
|
+
*
|
|
30
|
+
* 与 {@link DynCallSite} 相对,后者在创建时 callee 未知或仅为候选,
|
|
31
|
+
* 需要在后续指针分析阶段被克隆为确定性的静态调用点。
|
|
32
|
+
*/
|
|
12
33
|
export declare class CallSite implements ICallSite {
|
|
34
|
+
/** 全局唯一标识 */
|
|
13
35
|
id: CallSiteID;
|
|
36
|
+
/** 触发该调用的语句(通常是 ArkInvokeStmt) */
|
|
14
37
|
callStmt: Stmt;
|
|
38
|
+
/** 调用参数列表,若语句不包含参数信息则为 undefined */
|
|
15
39
|
args: Value[] | undefined;
|
|
40
|
+
/** 被调用方方法 ID */
|
|
16
41
|
calleeFuncID: FuncID;
|
|
42
|
+
/** 调用方方法 ID */
|
|
17
43
|
callerFuncID: FuncID;
|
|
18
|
-
|
|
44
|
+
/**
|
|
45
|
+
* 当该调用点对应一条 **callback 调用边** 时,argIndex 表示 callback
|
|
46
|
+
* 是原始调用语句的第几个入参(0-based)。
|
|
47
|
+
*
|
|
48
|
+
* 例如语句 `button.onClick(callback)` 中,callback 是第 0 个入参,
|
|
49
|
+
* 则为该 callback 创建的 CallSite 的 argIndex = 0。
|
|
50
|
+
*
|
|
51
|
+
* 对于非 callback 类型的普通调用边,此字段为 undefined。
|
|
52
|
+
*/
|
|
53
|
+
readonly argIndex?: number;
|
|
54
|
+
constructor(id: CallSiteID, s: Stmt, a: Value[] | undefined, ce: FuncID, cr: FuncID, argIndex?: number);
|
|
19
55
|
getCalleeFuncID(): FuncID | undefined;
|
|
20
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* 动态调用点。
|
|
59
|
+
*
|
|
60
|
+
* 表示一条**不确定**的调用边:在调用图构建初期,调用语句的 callee 尚未确定
|
|
61
|
+
* (典型场景为通过函数类型变量发起的间接调用 `fn()`),仅记录一个候选 callee
|
|
62
|
+
* 或留空,等待指针分析(PTA)阶段将实际指向的方法解析出来后,
|
|
63
|
+
* 再通过 {@link CallSiteManager.cloneCallSiteFromDyn} 克隆为确定性的 {@link CallSite}。
|
|
64
|
+
*/
|
|
21
65
|
export declare class DynCallSite implements ICallSite {
|
|
66
|
+
/** 全局唯一标识 */
|
|
22
67
|
id: CallSiteID;
|
|
68
|
+
/** 触发该调用的语句(通常是 ArkInvokeStmt) */
|
|
23
69
|
callStmt: Stmt;
|
|
70
|
+
/** 调用参数列表,若语句不包含参数信息则为 undefined */
|
|
24
71
|
args: Value[] | undefined;
|
|
72
|
+
/** 候选被调用方方法 ID,在创建时可能不确定 */
|
|
25
73
|
potentialCalleeFuncID: FuncID | undefined;
|
|
74
|
+
/** 调用方方法 ID */
|
|
26
75
|
callerFuncID: FuncID;
|
|
27
76
|
constructor(id: CallSiteID, s: Stmt, a: Value[] | undefined, ptcCallee: FuncID | undefined, caller: FuncID);
|
|
28
77
|
getCalleeFuncID(): FuncID | undefined;
|
|
29
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* 调用点全局管理器。
|
|
81
|
+
*
|
|
82
|
+
* 负责为 {@link CallSite} 和 {@link DynCallSite} 分配全局唯一 ID,
|
|
83
|
+
* 维护 ID → 调用点、调用点 → ID 的双向映射,
|
|
84
|
+
* 以及动态调用点到其克隆出的静态调用点集合的映射。
|
|
85
|
+
*/
|
|
30
86
|
export declare class CallSiteManager {
|
|
31
87
|
private idToCallSiteMap;
|
|
32
88
|
private callSiteToIdMap;
|
|
33
89
|
private dynToStaticMap;
|
|
90
|
+
/**
|
|
91
|
+
* 创建并注册一个静态调用点。
|
|
92
|
+
* @param s - 触发调用的语句
|
|
93
|
+
* @param a - 调用参数列表
|
|
94
|
+
* @param ce - 被调用方方法 ID
|
|
95
|
+
* @param cr - 调用方方法 ID
|
|
96
|
+
* @returns 新建的全局唯一静态调用点
|
|
97
|
+
*/
|
|
34
98
|
newCallSite(s: Stmt, a: Value[] | undefined, ce: FuncID, cr: FuncID): CallSite;
|
|
99
|
+
/**
|
|
100
|
+
* 创建并注册一个动态调用点。
|
|
101
|
+
* @param s - 触发调用的语句
|
|
102
|
+
* @param a - 调用参数列表
|
|
103
|
+
* @param ptcCallee - 候选被调用方方法 ID,不确定时传 undefined
|
|
104
|
+
* @param caller - 调用方方法 ID
|
|
105
|
+
* @returns 新建的全局唯一动态调用点
|
|
106
|
+
*/
|
|
35
107
|
newDynCallSite(s: Stmt, a: Value[] | undefined, ptcCallee: FuncID | undefined, caller: FuncID): DynCallSite;
|
|
108
|
+
/**
|
|
109
|
+
* 从一个动态调用点克隆出一个确定 callee 的静态调用点。
|
|
110
|
+
*
|
|
111
|
+
* 同一个动态调用点可被多次克隆(对应指针分析解析出的多个实际 callee),
|
|
112
|
+
* 已存在相同 callee 的克隆时直接复用,避免重复创建。
|
|
113
|
+
*
|
|
114
|
+
* @param dynCallSite - 原始动态调用点
|
|
115
|
+
* @param calleeFuncID - 解析出的确定被调用方方法 ID
|
|
116
|
+
* @returns 克隆出的静态调用点(新建或已存在的)
|
|
117
|
+
*/
|
|
36
118
|
cloneCallSiteFromDyn(dynCallSite: DynCallSite, calleeFuncID: FuncID): CallSite;
|
|
119
|
+
/**
|
|
120
|
+
* 根据 ID 查询调用点。
|
|
121
|
+
* @param id - 调用点全局唯一 ID
|
|
122
|
+
* @returns 对应的调用点,不存在时返回 undefined
|
|
123
|
+
*/
|
|
37
124
|
getCallSiteById(id: CallSiteID): ICallSite | undefined;
|
|
38
125
|
}
|
|
39
126
|
//# sourceMappingURL=CallSite.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CallSite.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallSite.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC,MAAM,WAAW,SAAS;IACtB,EAAE,EAAE,UAAU,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,IAAI,MAAM,GAAG,SAAS,CAAC;CACzC;AAED,qBAAa,QAAS,YAAW,SAAS;
|
|
1
|
+
{"version":3,"file":"CallSite.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallSite.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC;;;GAGG;AACH,MAAM,WAAW,SAAS;IACtB,aAAa;IACb,EAAE,EAAE,UAAU,CAAC;IACf,kCAAkC;IAClC,QAAQ,EAAE,IAAI,CAAC;IACf,oCAAoC;IACpC,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC1B,eAAe;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB;IAClB,eAAe,IAAI,MAAM,GAAG,SAAS,CAAC;CACzC;AAED;;;;;;;;GAQG;AACH,qBAAa,QAAS,YAAW,SAAS;IACtC,aAAa;IACN,EAAE,EAAE,UAAU,CAAC;IACtB,kCAAkC;IAC3B,QAAQ,EAAE,IAAI,CAAC;IACtB,oCAAoC;IAC7B,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IACjC,gBAAgB;IACT,YAAY,EAAE,MAAM,CAAC;IAC5B,eAAe;IACR,YAAY,EAAE,MAAM,CAAC;IAC5B;;;;;;;;OAQG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;gBAEf,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAS/F,eAAe,IAAI,MAAM,GAAG,SAAS;CAG/C;AAED;;;;;;;GAOG;AACH,qBAAa,WAAY,YAAW,SAAS;IACzC,aAAa;IACN,EAAE,EAAE,UAAU,CAAC;IACtB,kCAAkC;IAC3B,QAAQ,EAAE,IAAI,CAAC;IACtB,oCAAoC;IAC7B,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IACjC,4BAA4B;IACrB,qBAAqB,EAAE,MAAM,GAAG,SAAS,CAAC;IACjD,eAAe;IACR,YAAY,EAAE,MAAM,CAAC;gBAEhB,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM;IAQnG,eAAe,IAAI,MAAM,GAAG,SAAS;CAG/C;AAED;;;;;;GAMG;AACH,qBAAa,eAAe;IACxB,OAAO,CAAC,eAAe,CAAyC;IAChE,OAAO,CAAC,eAAe,CAAyC;IAChE,OAAO,CAAC,cAAc,CAA4C;IAElE;;;;;;;OAOG;IACI,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ;IAQrF;;;;;;;OAOG;IACI,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW;IAQlH;;;;;;;;;OASG;IACI,oBAAoB,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,GAAG,QAAQ;IAgBrF;;;;OAIG;IACI,eAAe,CAAC,EAAE,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS;CAGhE"}
|
|
@@ -15,19 +15,37 @@
|
|
|
15
15
|
*/
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.CallSiteManager = exports.DynCallSite = exports.CallSite = void 0;
|
|
18
|
+
/**
|
|
19
|
+
* 静态调用点。
|
|
20
|
+
*
|
|
21
|
+
* 表示一条**确定**的 `caller → callee` 调用边:在构建调用图时(CHA/RTA/PTA),
|
|
22
|
+
* 调用语句的目标方法已被解析为具体的 calleeFuncID,不再发生变化。
|
|
23
|
+
*
|
|
24
|
+
* 与 {@link DynCallSite} 相对,后者在创建时 callee 未知或仅为候选,
|
|
25
|
+
* 需要在后续指针分析阶段被克隆为确定性的静态调用点。
|
|
26
|
+
*/
|
|
18
27
|
class CallSite {
|
|
19
|
-
constructor(id, s, a, ce, cr) {
|
|
28
|
+
constructor(id, s, a, ce, cr, argIndex) {
|
|
20
29
|
this.id = id;
|
|
21
30
|
this.callStmt = s;
|
|
22
31
|
this.args = a;
|
|
23
32
|
this.calleeFuncID = ce;
|
|
24
33
|
this.callerFuncID = cr;
|
|
34
|
+
this.argIndex = argIndex;
|
|
25
35
|
}
|
|
26
36
|
getCalleeFuncID() {
|
|
27
37
|
return this.calleeFuncID;
|
|
28
38
|
}
|
|
29
39
|
}
|
|
30
40
|
exports.CallSite = CallSite;
|
|
41
|
+
/**
|
|
42
|
+
* 动态调用点。
|
|
43
|
+
*
|
|
44
|
+
* 表示一条**不确定**的调用边:在调用图构建初期,调用语句的 callee 尚未确定
|
|
45
|
+
* (典型场景为通过函数类型变量发起的间接调用 `fn()`),仅记录一个候选 callee
|
|
46
|
+
* 或留空,等待指针分析(PTA)阶段将实际指向的方法解析出来后,
|
|
47
|
+
* 再通过 {@link CallSiteManager.cloneCallSiteFromDyn} 克隆为确定性的 {@link CallSite}。
|
|
48
|
+
*/
|
|
31
49
|
class DynCallSite {
|
|
32
50
|
constructor(id, s, a, ptcCallee, caller) {
|
|
33
51
|
this.id = id;
|
|
@@ -41,12 +59,27 @@ class DynCallSite {
|
|
|
41
59
|
}
|
|
42
60
|
}
|
|
43
61
|
exports.DynCallSite = DynCallSite;
|
|
62
|
+
/**
|
|
63
|
+
* 调用点全局管理器。
|
|
64
|
+
*
|
|
65
|
+
* 负责为 {@link CallSite} 和 {@link DynCallSite} 分配全局唯一 ID,
|
|
66
|
+
* 维护 ID → 调用点、调用点 → ID 的双向映射,
|
|
67
|
+
* 以及动态调用点到其克隆出的静态调用点集合的映射。
|
|
68
|
+
*/
|
|
44
69
|
class CallSiteManager {
|
|
45
70
|
constructor() {
|
|
46
71
|
this.idToCallSiteMap = new Map();
|
|
47
72
|
this.callSiteToIdMap = new Map();
|
|
48
73
|
this.dynToStaticMap = new Map();
|
|
49
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* 创建并注册一个静态调用点。
|
|
77
|
+
* @param s - 触发调用的语句
|
|
78
|
+
* @param a - 调用参数列表
|
|
79
|
+
* @param ce - 被调用方方法 ID
|
|
80
|
+
* @param cr - 调用方方法 ID
|
|
81
|
+
* @returns 新建的全局唯一静态调用点
|
|
82
|
+
*/
|
|
50
83
|
newCallSite(s, a, ce, cr) {
|
|
51
84
|
let id = this.idToCallSiteMap.size;
|
|
52
85
|
let callSite = new CallSite(id, s, a, ce, cr);
|
|
@@ -54,6 +87,14 @@ class CallSiteManager {
|
|
|
54
87
|
this.callSiteToIdMap.set(callSite, id);
|
|
55
88
|
return callSite;
|
|
56
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* 创建并注册一个动态调用点。
|
|
92
|
+
* @param s - 触发调用的语句
|
|
93
|
+
* @param a - 调用参数列表
|
|
94
|
+
* @param ptcCallee - 候选被调用方方法 ID,不确定时传 undefined
|
|
95
|
+
* @param caller - 调用方方法 ID
|
|
96
|
+
* @returns 新建的全局唯一动态调用点
|
|
97
|
+
*/
|
|
57
98
|
newDynCallSite(s, a, ptcCallee, caller) {
|
|
58
99
|
let id = this.idToCallSiteMap.size;
|
|
59
100
|
let callSite = new DynCallSite(id, s, a, ptcCallee, caller);
|
|
@@ -61,12 +102,20 @@ class CallSiteManager {
|
|
|
61
102
|
this.callSiteToIdMap.set(callSite, id);
|
|
62
103
|
return callSite;
|
|
63
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* 从一个动态调用点克隆出一个确定 callee 的静态调用点。
|
|
107
|
+
*
|
|
108
|
+
* 同一个动态调用点可被多次克隆(对应指针分析解析出的多个实际 callee),
|
|
109
|
+
* 已存在相同 callee 的克隆时直接复用,避免重复创建。
|
|
110
|
+
*
|
|
111
|
+
* @param dynCallSite - 原始动态调用点
|
|
112
|
+
* @param calleeFuncID - 解析出的确定被调用方方法 ID
|
|
113
|
+
* @returns 克隆出的静态调用点(新建或已存在的)
|
|
114
|
+
*/
|
|
64
115
|
cloneCallSiteFromDyn(dynCallSite, calleeFuncID) {
|
|
65
116
|
var _a;
|
|
66
117
|
let clonedCS = (_a = this.dynToStaticMap.get(dynCallSite.id)) !== null && _a !== void 0 ? _a : [];
|
|
67
|
-
let foundCS = clonedCS
|
|
68
|
-
.map(id => this.idToCallSiteMap.get(id))
|
|
69
|
-
.find(cs => cs.calleeFuncID === calleeFuncID);
|
|
118
|
+
let foundCS = clonedCS.map(id => this.idToCallSiteMap.get(id)).find(cs => cs.calleeFuncID === calleeFuncID);
|
|
70
119
|
if (foundCS) {
|
|
71
120
|
return foundCS;
|
|
72
121
|
}
|
|
@@ -75,6 +124,11 @@ class CallSiteManager {
|
|
|
75
124
|
this.dynToStaticMap.set(dynCallSite.id, clonedCS);
|
|
76
125
|
return staticCS;
|
|
77
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* 根据 ID 查询调用点。
|
|
129
|
+
* @param id - 调用点全局唯一 ID
|
|
130
|
+
* @returns 对应的调用点,不存在时返回 undefined
|
|
131
|
+
*/
|
|
78
132
|
getCallSiteById(id) {
|
|
79
133
|
return this.idToCallSiteMap.get(id);
|
|
80
134
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArkIRTransformer.d.ts","sourceRoot":"","sources":["../../../src/core/common/ArkIRTransformer.ts"],"names":[],"mappings":"AAeA,OAAO,EAEH,aAAa,EAKb,cAAc,EAGd,aAAa,EAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAA2E,SAAS,EAAE,MAAM,aAAa,CAAC;AACjH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAA2F,IAAI,EAAE,MAAM,cAAc,CAAC;AACrJ,OAAO,EAAE,SAAS,EAA6E,MAAM,cAAc,CAAC;AAKpH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAI/C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAMhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAO5D,MAAM,MAAM,aAAa,GAAG;IACxB,KAAK,EAAE,KAAK,CAAC;IACb,sBAAsB,EAAE,YAAY,EAAE,CAAC;IACvC,KAAK,EAAE,IAAI,EAAE,CAAC;CACjB,CAAC;AAEF,qBAAa,SAAU,SAAQ,IAAI;gBACnB,IAAI,EAAE,MAAM;IAKjB,QAAQ,IAAI,MAAM;CAG5B;AAED,qBAAa,gBAAgB;IACzB,gBAAuB,2BAA2B,qBAAqB;IACvE,gBAAuB,0BAA0B,yBAAyB;IAC1E,gBAAuB,uCAAuC,SAA0D;IACxH,gBAAuB,wCAAwC,SAA2D;IAC1H,gBAAuB,mCAAmC,SAAuD;IACjH,gBAAuB,4BAA4B,YAAY;IAC/D,gBAAuB,2BAA2B,YAAY;IAC9D,gBAAuB,qBAAqB,WAAW;IAEvD,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;IACpC,SAAS,CAAC,eAAe,EAAE,SAAS,CAAC;IACrC,SAAS,CAAC,eAAe,UAAS;IAClC,SAAS,CAAC,wBAAwB,UAAS;IAC3C,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;gBAEvC,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,SAAS;IAO1D,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC;IAIvB,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI;IAI3C,YAAY,IAAI,KAAK;IAIrB,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;IAInE,aAAa,IAAI,IAAI,EAAE;IAiBvB,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,IAAI,EAAE;IA+CpC,qBAAqB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,aAAa;IAI1D,SAAS,CAAC,0BAA0B,CAAC,uBAAuB,EAAE,EAAE,CAAC,mBAAmB,GAAG,IAAI,EAAE;IAU7F,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,GAAG,IAAI,EAAE;IAYpE,OAAO,CAAC,wBAAwB;IAiDhC,OAAO,CAAC,gBAAgB;
|
|
1
|
+
{"version":3,"file":"ArkIRTransformer.d.ts","sourceRoot":"","sources":["../../../src/core/common/ArkIRTransformer.ts"],"names":[],"mappings":"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"}
|
|
@@ -268,12 +268,12 @@ class ArkIRTransformer {
|
|
|
268
268
|
return stmts;
|
|
269
269
|
}
|
|
270
270
|
const { value: paramInitValue, valueOriginalPositions: paramInitPositions, stmts: paramInitStmts } = this.tsNodeToValueAndStmts(paramNode.initializer);
|
|
271
|
-
stmts.push(...paramInitStmts);
|
|
272
271
|
const ifStmt = new Stmt_1.ArkIfStmt(new Expr_1.ArkConditionExpr(paramLocal, ValueUtil_1.ValueUtil.getUndefinedConst(), Expr_1.RelationalBinaryOperator.Equality));
|
|
273
272
|
ifStmt.setOperandOriginalPositions([Position_1.FullPosition.DEFAULT, Position_1.FullPosition.DEFAULT]);
|
|
274
273
|
stmts.push(ifStmt);
|
|
275
274
|
const currConditionalOperatorIndex = this.arkValueTransformer.conditionalOperatorNo++;
|
|
276
275
|
stmts.push(new DummyStmt(ArkIRTransformer.DUMMY_CONDITIONAL_OPERATOR_IF_TRUE_STMT + currConditionalOperatorIndex));
|
|
276
|
+
stmts.push(...paramInitStmts);
|
|
277
277
|
const assignStmt = new Stmt_1.ArkAssignStmt(paramLocal, paramInitValue);
|
|
278
278
|
assignStmt.setOperandOriginalPositions([Position_1.FullPosition.DEFAULT, ...paramInitPositions]);
|
|
279
279
|
stmts.push(assignStmt);
|
|
@@ -527,7 +527,7 @@ class IRInference {
|
|
|
527
527
|
return null;
|
|
528
528
|
}
|
|
529
529
|
static getRealTypes(expr, declaredClass, baseType, method) {
|
|
530
|
-
var _a;
|
|
530
|
+
var _a, _b;
|
|
531
531
|
let realTypes;
|
|
532
532
|
const tmp = [];
|
|
533
533
|
if (method === null || method === void 0 ? void 0 : method.getGenericTypes()) {
|
|
@@ -546,7 +546,7 @@ class IRInference {
|
|
|
546
546
|
realTypes = [new Type_1.ClassType(declaredClass === null || declaredClass === void 0 ? void 0 : declaredClass.getSignature())];
|
|
547
547
|
}
|
|
548
548
|
else {
|
|
549
|
-
realTypes = (_a =
|
|
549
|
+
realTypes = (_b = (_a = expr.getRealGenericTypes()) !== null && _a !== void 0 ? _a : baseType.getRealGenericTypes()) !== null && _b !== void 0 ? _b : declaredClass === null || declaredClass === void 0 ? void 0 : declaredClass.getRealTypes();
|
|
550
550
|
}
|
|
551
551
|
return realTypes;
|
|
552
552
|
}
|
|
@@ -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,EAQX,IAAI,EACJ,oBAAoB,EAKvB,MAAM,cAAc,CAAC;AAEtB,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;AAKpE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAKpC,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;WA8BrD,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;WA8BlD,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;WAuBrC,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,OAAO;IAa3D;;;;;;OAMG;WACW,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAkBrE;;OAEG;WACW,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"TypeInference.d.ts","sourceRoot":"","sources":["../../../src/core/common/TypeInference.ts"],"names":[],"mappings":"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"}
|
|
@@ -1122,6 +1122,9 @@ class TypeInference {
|
|
|
1122
1122
|
if (!(declare instanceof Type_1.ClassType) || !(real instanceof Type_1.ClassType)) {
|
|
1123
1123
|
return false;
|
|
1124
1124
|
}
|
|
1125
|
+
if (real.getClassSignature().getClassName() === declare.getClassSignature().getClassName()) {
|
|
1126
|
+
return false;
|
|
1127
|
+
}
|
|
1125
1128
|
const fatherClass = scene.getClass(declare.getClassSignature());
|
|
1126
1129
|
let childClass = scene.getClass(real.getClassSignature());
|
|
1127
1130
|
while (childClass) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwitchBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/SwitchBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEhF,OAAO,EAAE,YAAY,EAAsC,MAAM,cAAc,CAAC;AAKhF;;GAEG;AACH,qBAAa,aAAa;IACf,WAAW,CACd,sBAAsB,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,EACrD,0BAA0B,EAAE,YAAY,EAAE,EAC1C,gCAAgC,EAAE,aAAa,EAAE,EAAE,EACnD,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,GAC/B,IAAI;IA0CP,OAAO,CAAC,wBAAwB;IAwChC,OAAO,CAAC,uBAAuB;
|
|
1
|
+
{"version":3,"file":"SwitchBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/SwitchBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEhF,OAAO,EAAE,YAAY,EAAsC,MAAM,cAAc,CAAC;AAKhF;;GAEG;AACH,qBAAa,aAAa;IACf,WAAW,CACd,sBAAsB,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,EACrD,0BAA0B,EAAE,YAAY,EAAE,EAC1C,gCAAgC,EAAE,aAAa,EAAE,EAAE,EACnD,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,GAC/B,IAAI;IA0CP,OAAO,CAAC,wBAAwB;IAwChC,OAAO,CAAC,uBAAuB;CAwDlC"}
|
|
@@ -109,7 +109,17 @@ class SwitchBuilder {
|
|
|
109
109
|
const expectedSuccessorsOfCaseIfBlock = [];
|
|
110
110
|
const defaultStmtBuilder = switchStmtBuilder.default;
|
|
111
111
|
if (defaultStmtBuilder && defaultStmtBuilder.block) {
|
|
112
|
-
|
|
112
|
+
// default may appear before later cases; identify by block identity, not list position
|
|
113
|
+
if (!blockBuilderToCfgBlock.has(defaultStmtBuilder.block)) {
|
|
114
|
+
logger.error(`can't find basicBlock corresponding to the default blockBuilder.`);
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
const defaultBasicBlock = blockBuilderToCfgBlock.get(defaultStmtBuilder.block);
|
|
118
|
+
const defaultIndex = successorsOfBlockContainSwitch.indexOf(defaultBasicBlock);
|
|
119
|
+
if (defaultIndex !== -1) {
|
|
120
|
+
successorsOfBlockContainSwitch.splice(defaultIndex, 1);
|
|
121
|
+
}
|
|
122
|
+
expectedSuccessorsOfCaseIfBlock.push(defaultBasicBlock);
|
|
113
123
|
}
|
|
114
124
|
else {
|
|
115
125
|
const afterSwitchStmtBuilder = switchStmtBuilder.afterSwitch;
|
|
@@ -291,7 +291,7 @@ function buildObjectLiteralExpression2ArkClass(clsNode, cls, sourceFile, declari
|
|
|
291
291
|
(0, ArkMethodBuilder_1.buildArkMethodFromArkClass)(property, cls, arkMethod, sourceFile);
|
|
292
292
|
}
|
|
293
293
|
});
|
|
294
|
-
(0, ArkMethodBuilder_1.buildInitMethod)(cls.getInstanceInitMethod(), instanceFieldInitializerStmts, instanceIRTransformer.getThisLocal());
|
|
294
|
+
(0, ArkMethodBuilder_1.buildInitMethod)(cls.getInstanceInitMethod(), instanceFieldInitializerStmts, instanceIRTransformer.getThisLocal(), instanceIRTransformer.getGlobals());
|
|
295
295
|
arkMethods.forEach(mtd => {
|
|
296
296
|
(0, ArkMethodBuilder_1.checkAndUpdateMethod)(mtd, cls);
|
|
297
297
|
cls.addMethod(mtd);
|
|
@@ -373,11 +373,11 @@ function buildArkClassMembers(clsNode, cls, sourceFile) {
|
|
|
373
373
|
}
|
|
374
374
|
});
|
|
375
375
|
if (ohos_typescript_1.default.isClassDeclaration(clsNode) || ohos_typescript_1.default.isClassExpression(clsNode) || ohos_typescript_1.default.isStructDeclaration(clsNode)) {
|
|
376
|
-
(0, ArkMethodBuilder_1.buildInitMethod)(cls.getInstanceInitMethod(), instanceInitStmts, instanceIRTransformer.getThisLocal());
|
|
377
|
-
(0, ArkMethodBuilder_1.buildInitMethod)(cls.getStaticInitMethod(), staticInitStmts, staticIRTransformer.getThisLocal());
|
|
376
|
+
(0, ArkMethodBuilder_1.buildInitMethod)(cls.getInstanceInitMethod(), instanceInitStmts, instanceIRTransformer.getThisLocal(), instanceIRTransformer.getGlobals());
|
|
377
|
+
(0, ArkMethodBuilder_1.buildInitMethod)(cls.getStaticInitMethod(), staticInitStmts, staticIRTransformer.getThisLocal(), staticIRTransformer.getGlobals());
|
|
378
378
|
}
|
|
379
379
|
if (ohos_typescript_1.default.isEnumDeclaration(clsNode)) {
|
|
380
|
-
(0, ArkMethodBuilder_1.buildInitMethod)(cls.getStaticInitMethod(), staticInitStmts, staticIRTransformer.getThisLocal());
|
|
380
|
+
(0, ArkMethodBuilder_1.buildInitMethod)(cls.getStaticInitMethod(), staticInitStmts, staticIRTransformer.getThisLocal(), staticIRTransformer.getGlobals());
|
|
381
381
|
}
|
|
382
382
|
}
|
|
383
383
|
function isClassMethod(member) {
|
|
@@ -2,6 +2,7 @@ import { Type } from '../../base/Type';
|
|
|
2
2
|
import { ArkClass } from '../ArkClass';
|
|
3
3
|
import { ArkMethod } from '../ArkMethod';
|
|
4
4
|
import ts from 'ohos-typescript';
|
|
5
|
+
import { GlobalRef } from '../../base/Ref';
|
|
5
6
|
import { Stmt } from '../../base/Stmt';
|
|
6
7
|
import { Local } from '../../base/Local';
|
|
7
8
|
import { Value } from '../../base/Value';
|
|
@@ -59,7 +60,7 @@ export declare class MethodParameter implements Value {
|
|
|
59
60
|
}
|
|
60
61
|
export declare function needDefaultConstructorInClass(arkClass: ArkClass): boolean;
|
|
61
62
|
export declare function buildDefaultConstructor(arkClass: ArkClass, visited?: Set<ArkClass>): boolean;
|
|
62
|
-
export declare function buildInitMethod(initMethod: ArkMethod, fieldInitializerStmts: Stmt[], thisLocal: Local): void;
|
|
63
|
+
export declare function buildInitMethod(initMethod: ArkMethod, fieldInitializerStmts: Stmt[], thisLocal: Local, globals?: Map<string, GlobalRef> | null): void;
|
|
63
64
|
export declare function addInitInConstructor(constructor: ArkMethod): void;
|
|
64
65
|
export declare function isMethodImplementation(node: MethodLikeNode): boolean;
|
|
65
66
|
export declare function checkAndUpdateMethod(method: ArkMethod, cls: ArkClass): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArkMethodBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkMethodBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAa,IAAI,EAAe,MAAM,iBAAiB,CAAC;AAG/D,OAAO,EAAE,QAAQ,EAAiB,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"ArkMethodBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkMethodBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -367,7 +367,8 @@ function buildDefaultConstructor(arkClass, visited = new Set()) {
|
|
|
367
367
|
return true;
|
|
368
368
|
}
|
|
369
369
|
exports.buildDefaultConstructor = buildDefaultConstructor;
|
|
370
|
-
function buildInitMethod(initMethod, fieldInitializerStmts, thisLocal) {
|
|
370
|
+
function buildInitMethod(initMethod, fieldInitializerStmts, thisLocal, globals) {
|
|
371
|
+
var _a;
|
|
371
372
|
const classType = new Type_1.ClassType(initMethod.getDeclaringArkClass().getSignature());
|
|
372
373
|
const assignStmt = new Stmt_1.ArkAssignStmt(thisLocal, new Ref_1.ArkThisRef(classType));
|
|
373
374
|
const block = new BasicBlock_1.BasicBlock();
|
|
@@ -390,6 +391,9 @@ function buildInitMethod(initMethod, fieldInitializerStmts, thisLocal) {
|
|
|
390
391
|
cfg.buildDefUseStmt(locals);
|
|
391
392
|
cfg.setDeclaringMethod(initMethod);
|
|
392
393
|
initMethod.setBody(new ArkBody_1.ArkBody(locals, cfg));
|
|
394
|
+
if (globals && globals.size > 0) {
|
|
395
|
+
(_a = initMethod.getBody()) === null || _a === void 0 ? void 0 : _a.setUsedGlobals(globals);
|
|
396
|
+
}
|
|
393
397
|
}
|
|
394
398
|
exports.buildInitMethod = buildInitMethod;
|
|
395
399
|
function addInitInConstructor(constructor) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwitchBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/frontend/cppFrontend/graph/builder/SwitchBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAE3F,OAAO,EAAE,YAAY,EAA0B,MAAM,2CAA2C,CAAC;AAKjG;;GAEG;AACH,qBAAa,gBAAgB;IAClB,WAAW,CACd,sBAAsB,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,EACrD,0BAA0B,EAAE,YAAY,EAAE,EAC1C,gCAAgC,EAAE,aAAa,EAAE,EAAE,EACnD,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,GAC/B,IAAI;IA0CP,OAAO,CAAC,wBAAwB;IAwChC,OAAO,CAAC,uBAAuB;
|
|
1
|
+
{"version":3,"file":"SwitchBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/frontend/cppFrontend/graph/builder/SwitchBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAE3F,OAAO,EAAE,YAAY,EAA0B,MAAM,2CAA2C,CAAC;AAKjG;;GAEG;AACH,qBAAa,gBAAgB;IAClB,WAAW,CACd,sBAAsB,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,EACrD,0BAA0B,EAAE,YAAY,EAAE,EAC1C,gCAAgC,EAAE,aAAa,EAAE,EAAE,EACnD,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,GAC/B,IAAI;IA0CP,OAAO,CAAC,wBAAwB;IAwChC,OAAO,CAAC,uBAAuB;CA6DlC"}
|
|
@@ -108,7 +108,17 @@ class CxxSwitchBuilder {
|
|
|
108
108
|
const expectedSuccessorsOfCaseIfBlock = [];
|
|
109
109
|
const defaultStmtBuilder = switchStmtBuilder.default;
|
|
110
110
|
if (defaultStmtBuilder && defaultStmtBuilder.block) {
|
|
111
|
-
|
|
111
|
+
// default may appear before later cases; identify by block identity, not list position
|
|
112
|
+
if (!blockBuilderToCfgBlock.has(defaultStmtBuilder.block)) {
|
|
113
|
+
logger.error(`can't find basicBlock corresponding to the default blockBuilder.`);
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
const defaultBasicBlock = blockBuilderToCfgBlock.get(defaultStmtBuilder.block);
|
|
117
|
+
const defaultIndex = successorsOfBlockContainSwitch.indexOf(defaultBasicBlock);
|
|
118
|
+
if (defaultIndex !== -1) {
|
|
119
|
+
successorsOfBlockContainSwitch.splice(defaultIndex, 1);
|
|
120
|
+
}
|
|
121
|
+
expectedSuccessorsOfCaseIfBlock.push(defaultBasicBlock);
|
|
112
122
|
}
|
|
113
123
|
else {
|
|
114
124
|
const afterSwitchStmtBuilder = switchStmtBuilder.afterSwitch;
|