arkanalyzer 1.0.87 → 1.0.88
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/Config.d.ts +4 -1
- package/lib/Config.d.ts.map +1 -1
- package/lib/Config.js +17 -2
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +7 -8
- package/lib/cli/commands/cg.d.ts +27 -6
- package/lib/cli/commands/cg.d.ts.map +1 -1
- package/lib/cli/commands/cg.js +9 -6
- package/lib/core/base/Expr.js +3 -3
- package/lib/core/base/Position.d.ts +1 -1
- package/lib/core/base/Position.d.ts.map +1 -1
- package/lib/core/base/Position.js +2 -2
- package/lib/core/common/Const.d.ts +1 -0
- package/lib/core/common/Const.d.ts.map +1 -1
- package/lib/core/common/Const.js +2 -1
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +1 -1
- package/lib/core/common/IRUtils.d.ts.map +1 -1
- package/lib/core/common/IRUtils.js +3 -33
- package/lib/core/model/ArkClass.d.ts +3 -0
- package/lib/core/model/ArkClass.d.ts.map +1 -1
- package/lib/core/model/ArkClass.js +13 -2
- package/lib/core/model/ArkMetadata.d.ts +32 -1
- package/lib/core/model/ArkMetadata.d.ts.map +1 -1
- package/lib/core/model/ArkMetadata.js +28 -2
- package/lib/core/model/builder/ArkMetadataBuilder.d.ts +21 -0
- package/lib/core/model/builder/ArkMetadataBuilder.d.ts.map +1 -0
- package/lib/core/model/builder/ArkMetadataBuilder.js +160 -0
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +32 -24
- package/lib/frontend/cppFrontend/ast/astJsonNapi/napiApi.d.ts +8 -0
- package/lib/frontend/cppFrontend/ast/astJsonNapi/napiApi.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/astJsonNapi/napiApi.js +90 -0
- package/lib/frontend/cppFrontend/ast/astJsonNapi/napiRunner.d.ts +8 -0
- package/lib/frontend/cppFrontend/ast/astJsonNapi/napiRunner.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/astJsonNapi/napiRunner.js +183 -0
- package/lib/frontend/cppFrontend/ast/astParser.d.ts +25 -0
- package/lib/frontend/cppFrontend/ast/astParser.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/astParser.js +280 -0
- package/lib/frontend/cppFrontend/ast/astUtils.d.ts +12 -45
- package/lib/frontend/cppFrontend/ast/astUtils.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/ast/astUtils.js +62 -374
- package/lib/frontend/cppFrontend/ast/const.d.ts +0 -13
- package/lib/frontend/cppFrontend/ast/const.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/ast/const.js +1 -77
- package/lib/frontend/cppFrontend/ast/index.d.ts +5 -0
- package/lib/frontend/cppFrontend/ast/index.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/index.js +31 -0
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts +1 -1
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.js +55 -55
- package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts +1 -1
- package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/ArkValueTransformer.js +151 -151
- package/lib/frontend/cppFrontend/common/IRInference.js +2 -2
- package/lib/frontend/cppFrontend/common/IRUtils.d.ts +1 -1
- package/lib/frontend/cppFrontend/common/IRUtils.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/IRUtils.js +2 -2
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.js +74 -74
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.js +3 -3
- package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.js +16 -17
- package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.js +2 -2
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.js +2 -2
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/builderUtils.js +3 -3
- package/lib/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +7 -6
- package/lib/save/source/SourceStmt.d.ts.map +1 -1
- package/lib/save/source/SourceStmt.js +3 -1
- package/lib/utils/FileUtils.d.ts +1 -0
- package/lib/utils/FileUtils.d.ts.map +1 -1
- package/lib/utils/FileUtils.js +11 -3
- package/package.json +5 -2
|
@@ -43,7 +43,7 @@ exports.IRInference = void 0;
|
|
|
43
43
|
*/
|
|
44
44
|
const fs_1 = __importDefault(require("fs"));
|
|
45
45
|
const path_1 = __importStar(require("path"));
|
|
46
|
-
const
|
|
46
|
+
const ast_1 = require("../ast");
|
|
47
47
|
const ArkMethod_1 = require("../../../core/model/ArkMethod");
|
|
48
48
|
const Type_1 = require("../../../core/base/Type");
|
|
49
49
|
const Local_1 = require("../../../core/base/Local");
|
|
@@ -962,7 +962,7 @@ class IRInference {
|
|
|
962
962
|
*/
|
|
963
963
|
static getCxxHeaderFileRefMap(files, includeDirs) {
|
|
964
964
|
const headerFileRefMap = new Map();
|
|
965
|
-
const cxxSuffixes = (0,
|
|
965
|
+
const cxxSuffixes = (0, ast_1.getCxxImplementationFileExtensions)();
|
|
966
966
|
files.forEach(file => {
|
|
967
967
|
const filePath = (0, path_1.normalize)(file.getFilePath());
|
|
968
968
|
const extension = path_1.default.extname(filePath).toLowerCase();
|
|
@@ -5,7 +5,7 @@ import { CommentsMetadata } from '../../../core/model/ArkMetadata';
|
|
|
5
5
|
import { Stmt } from '../../../core/base/Stmt';
|
|
6
6
|
import { ArkBaseModel } from '../../../core/model/ArkBaseModel';
|
|
7
7
|
import { FullPosition } from '../../../core/base/Position';
|
|
8
|
-
import { CxxAstNode } from '../ast
|
|
8
|
+
import { CxxAstNode } from '../ast';
|
|
9
9
|
import { CxxClosureCaptureType } from '../base/Ref';
|
|
10
10
|
export declare class IRUtils {
|
|
11
11
|
static moreThanOneAddress(value: Value): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IRUtils.d.ts","sourceRoot":"","sources":["../../../../src/frontend/cppFrontend/common/IRUtils.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAgC,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACjG,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,OAAO,EAAW,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"IRUtils.d.ts","sourceRoot":"","sources":["../../../../src/frontend/cppFrontend/common/IRUtils.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAgC,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACjG,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,OAAO,EAAW,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD,qBAAa,OAAO;WACF,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;WAczC,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;WAWvC,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;WAYjH,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,GAAG,gBAAgB;WAS1H,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;WAIlC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,GAAG,MAAM;WAYlD,8BAA8B,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,GAAG,IAAI;WAqClF,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE;WAQvD,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;WAmB5C,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI;WAc9E,4BAA4B,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,EAAE;CAUnF"}
|
|
@@ -21,7 +21,7 @@ const ArkMetadata_1 = require("../../../core/model/ArkMetadata");
|
|
|
21
21
|
const Position_1 = require("../../../core/base/Position");
|
|
22
22
|
const Local_1 = require("../../../core/base/Local");
|
|
23
23
|
const Const_1 = require("../../../core/common/Const");
|
|
24
|
-
const
|
|
24
|
+
const ast_1 = require("../ast");
|
|
25
25
|
const Ref_2 = require("../base/Ref");
|
|
26
26
|
class IRUtils {
|
|
27
27
|
static moreThanOneAddress(value) {
|
|
@@ -157,7 +157,7 @@ class IRUtils {
|
|
|
157
157
|
static getLambdaExplicitCaptureVars(lambdaExpr) {
|
|
158
158
|
const captureNodes = [];
|
|
159
159
|
for (const child of lambdaExpr.inner) {
|
|
160
|
-
if (child.kind ===
|
|
160
|
+
if (child.kind === ast_1.astKind.ParmVarDecl || child.kind === ast_1.astKind.CompoundStmt) {
|
|
161
161
|
return captureNodes;
|
|
162
162
|
}
|
|
163
163
|
captureNodes.push(child);
|
|
@@ -7,7 +7,7 @@ import { AliasType } from '../../../../core/base/Type';
|
|
|
7
7
|
import { CxxTrap } from '../../base/Trap';
|
|
8
8
|
import { GlobalRef } from '../../../../core/base/Ref';
|
|
9
9
|
import { Catch, Variable, Scope } from '../../../../core/graph/builder/CfgBuilder';
|
|
10
|
-
import { CxxAstNode } from '../../ast
|
|
10
|
+
import { CxxAstNode } from '../../ast';
|
|
11
11
|
export declare class BlockBuilder {
|
|
12
12
|
id: number;
|
|
13
13
|
stmts: StatementBuilder[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CfgBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/frontend/cppFrontend/graph/builder/CfgBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAA0C,MAAM,4BAA4B,CAAC;AAE5G,OAAO,EAAE,GAAG,EAAE,MAAM,4BAA4B,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAG7D,OAAO,EAAE,SAAS,EAA0D,MAAM,4BAA4B,CAAC;AAC/G,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAKtD,OAAO,EAAoC,KAAK,EAAa,QAAQ,EAAE,KAAK,EAAE,MAAM,2CAA2C,CAAC;AAGhI,OAAO,EAAW,UAAU,EAAsB,MAAM,
|
|
1
|
+
{"version":3,"file":"CfgBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/frontend/cppFrontend/graph/builder/CfgBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,7 +30,7 @@ const ArkBaseModel_1 = require("../../../../core/model/ArkBaseModel");
|
|
|
30
30
|
const CfgBuilder_1 = require("../../../../core/graph/builder/CfgBuilder");
|
|
31
31
|
const ModelUtils_1 = require("../../../../core/common/ModelUtils");
|
|
32
32
|
const TSConst_1 = require("../../../../core/common/TSConst");
|
|
33
|
-
const
|
|
33
|
+
const ast_1 = require("../../ast");
|
|
34
34
|
const LoopBuilder_1 = require("./LoopBuilder");
|
|
35
35
|
const IfBuilder_1 = require("./IfBuilder");
|
|
36
36
|
class BlockBuilder {
|
|
@@ -197,7 +197,7 @@ class CfgBuilder {
|
|
|
197
197
|
ifstm.condition = c.inner[0].code;
|
|
198
198
|
ifstm.code = 'if (' + ifstm.condition + ')';
|
|
199
199
|
if (c.inner.length >= 2) { // length >= 2 means there is a condition and a body
|
|
200
|
-
if (c.inner[1].kind ===
|
|
200
|
+
if (c.inner[1].kind === ast_1.astKind.CompoundStmt) {
|
|
201
201
|
// Body is a braced block { ... }
|
|
202
202
|
this.walkAST(ifstm, ifexit, [...c.inner[1].inner]);
|
|
203
203
|
}
|
|
@@ -211,7 +211,7 @@ class CfgBuilder {
|
|
|
211
211
|
this.walkAST(ifstm, ifexit, [c.inner[0]]);
|
|
212
212
|
}
|
|
213
213
|
if (c.inner.length > 2) {
|
|
214
|
-
if (c.inner[2].kind ===
|
|
214
|
+
if (c.inner[2].kind === ast_1.astKind.CompoundStmt) {
|
|
215
215
|
// Handle else here
|
|
216
216
|
this.walkAST(ifstm, ifexit, [...c.inner[2].inner]);
|
|
217
217
|
}
|
|
@@ -242,14 +242,14 @@ class CfgBuilder {
|
|
|
242
242
|
loopstm.condition = c.inner[0].code;
|
|
243
243
|
loopstm.code = 'while (' + loopstm.condition + ')';
|
|
244
244
|
if (c.inner.length >= 2) {
|
|
245
|
-
if (c.inner[1].kind ===
|
|
245
|
+
if (c.inner[1].kind === ast_1.astKind.CompoundStmt) {
|
|
246
246
|
this.walkAST(loopstm, loopstm, [...c.inner[1].inner]);
|
|
247
247
|
}
|
|
248
248
|
else {
|
|
249
249
|
this.walkAST(loopstm, loopstm, [c.inner[1]]);
|
|
250
250
|
}
|
|
251
251
|
}
|
|
252
|
-
else if (c.inner.length === 1 && c.inner[0].kind.toString() ===
|
|
252
|
+
else if (c.inner.length === 1 && c.inner[0].kind.toString() === ast_1.astKind.CompoundStmt) {
|
|
253
253
|
this.walkAST(loopstm, loopstm, [c.inner[0]]);
|
|
254
254
|
}
|
|
255
255
|
if (!loopstm.nextF) {
|
|
@@ -280,7 +280,7 @@ class CfgBuilder {
|
|
|
280
280
|
loopstm.nextF = loopExit;
|
|
281
281
|
loopExit.lasts.add(loopstm);
|
|
282
282
|
loopstm.code = this.getPrefix(c.code, ' {\r\n');
|
|
283
|
-
if (c.inner[c.inner.length - 1].kind ===
|
|
283
|
+
if (c.inner[c.inner.length - 1].kind === ast_1.astKind.CompoundStmt) {
|
|
284
284
|
this.walkAST(loopstm, loopstm, [...c.inner[c.inner.length - 1].inner]);
|
|
285
285
|
}
|
|
286
286
|
else {
|
|
@@ -341,7 +341,7 @@ class CfgBuilder {
|
|
|
341
341
|
sliceCaseDefaultNode(node, clauses) {
|
|
342
342
|
if (node.kind === 'CaseStmt') {
|
|
343
343
|
for (let i = 0; i < node.inner.length; i++) {
|
|
344
|
-
let isCaseOrDefault = node.inner[i].kind ===
|
|
344
|
+
let isCaseOrDefault = node.inner[i].kind === ast_1.astKind.CaseStmt || node.inner[i].kind === ast_1.astKind.DefaultStmt;
|
|
345
345
|
if (isCaseOrDefault) {
|
|
346
346
|
clauses.push(node);
|
|
347
347
|
this.sliceCaseDefaultNode(node.inner[i], clauses);
|
|
@@ -372,7 +372,7 @@ class CfgBuilder {
|
|
|
372
372
|
if (['CaseStmt', 'DefaultStmt'].includes(curr.kind)) {
|
|
373
373
|
curr.parent = switchNode.inner[length - 1];
|
|
374
374
|
// Reconstruct the syntax tree structure
|
|
375
|
-
while (idx + 1 < arr.length && ![
|
|
375
|
+
while (idx + 1 < arr.length && ![ast_1.astKind.CaseStmt, ast_1.astKind.DefaultStmt].includes(arr[idx + 1].kind)) {
|
|
376
376
|
arr[idx + 1].parent = curr;
|
|
377
377
|
curr.inner.push(arr[idx + 1]);
|
|
378
378
|
idx++;
|
|
@@ -451,12 +451,12 @@ class CfgBuilder {
|
|
|
451
451
|
while (childInner.inner && childInner.inner.length > 0) {
|
|
452
452
|
const n0 = childInner.inner[0];
|
|
453
453
|
const innerKind = n0 === null || n0 === void 0 ? void 0 : n0.kind;
|
|
454
|
-
if (innerKind ===
|
|
454
|
+
if (innerKind === ast_1.astKind.DeclRefExpr) {
|
|
455
455
|
// 3) Safely read referencedDecl? .name; Use n0. name/n0. code/empty string at the bottom
|
|
456
456
|
caller = ((_b = n0.referencedDecl) === null || _b === void 0 ? void 0 : _b.name) || n0.name || n0.code || '';
|
|
457
457
|
break;
|
|
458
458
|
}
|
|
459
|
-
if (innerKind ===
|
|
459
|
+
if (innerKind === ast_1.astKind.ImplicitCastExpr) {
|
|
460
460
|
childInner = n0; // Continue to traverse downward
|
|
461
461
|
continue;
|
|
462
462
|
}
|
|
@@ -585,10 +585,10 @@ class CfgBuilder {
|
|
|
585
585
|
let tryBlock = undefined;
|
|
586
586
|
let catchBlockList = [];
|
|
587
587
|
for (const node of c.inner) {
|
|
588
|
-
if (node.kind ===
|
|
588
|
+
if (node.kind === ast_1.astKind.CompoundStmt) {
|
|
589
589
|
tryBlock = node;
|
|
590
590
|
}
|
|
591
|
-
else if (node.kind ===
|
|
591
|
+
else if (node.kind === ast_1.astKind.CXXCatchStmt) {
|
|
592
592
|
catchBlockList.push(node);
|
|
593
593
|
}
|
|
594
594
|
}
|
|
@@ -639,13 +639,13 @@ class CfgBuilder {
|
|
|
639
639
|
hitsControlBoundaryBeforeRoot(node) {
|
|
640
640
|
var _a, _b, _c;
|
|
641
641
|
const CONTROL_BOUNDARY_KINDS = new Set([
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
642
|
+
ast_1.astKind.IfStmt,
|
|
643
|
+
ast_1.astKind.WhileStmt,
|
|
644
|
+
ast_1.astKind.DoStmt,
|
|
645
|
+
ast_1.astKind.ForStmt,
|
|
646
|
+
ast_1.astKind.CaseStmt,
|
|
647
|
+
ast_1.astKind.DefaultStmt,
|
|
648
|
+
ast_1.astKind.CXXTryStmt,
|
|
649
649
|
]);
|
|
650
650
|
let p = node;
|
|
651
651
|
const rootId = this.astRoot.id;
|
|
@@ -668,17 +668,17 @@ class CfgBuilder {
|
|
|
668
668
|
if (nodeKind === 'LabelStmt' && this.gotoStmtMap.get(innerNode.name) !== undefined) {
|
|
669
669
|
gotoLabel = false;
|
|
670
670
|
}
|
|
671
|
-
if (gotoLabel && nodeKind !==
|
|
671
|
+
if (gotoLabel && nodeKind !== ast_1.astKind.CompoundStmt) { // Skip the code between goto and label in the code block
|
|
672
672
|
continue;
|
|
673
673
|
}
|
|
674
674
|
lastStatement = this.handleASTStmtSuccession(innerNode, lastStatement, scope);
|
|
675
|
-
if (nodeKind ===
|
|
675
|
+
if (nodeKind === ast_1.astKind.ReturnStmt) {
|
|
676
676
|
break;
|
|
677
677
|
}
|
|
678
|
-
else if (nodeKind ===
|
|
678
|
+
else if (nodeKind === ast_1.astKind.BreakStmt || nodeKind === ast_1.astKind.ContinueStmt) {
|
|
679
679
|
return;
|
|
680
680
|
}
|
|
681
|
-
else if (nodeKind ===
|
|
681
|
+
else if (nodeKind === ast_1.astKind.GotoStmt) {
|
|
682
682
|
if (this.hitsControlBoundaryBeforeRoot(innerNode)) {
|
|
683
683
|
return;
|
|
684
684
|
}
|
|
@@ -693,85 +693,85 @@ class CfgBuilder {
|
|
|
693
693
|
let s;
|
|
694
694
|
// 直接使用 innerNode.kind 进行 switch
|
|
695
695
|
switch (innerNode.kind) {
|
|
696
|
-
case
|
|
697
|
-
case
|
|
698
|
-
case
|
|
699
|
-
case
|
|
700
|
-
case
|
|
701
|
-
case
|
|
702
|
-
case
|
|
703
|
-
case
|
|
704
|
-
case
|
|
705
|
-
case
|
|
706
|
-
case
|
|
707
|
-
case
|
|
708
|
-
case
|
|
709
|
-
case
|
|
710
|
-
case
|
|
711
|
-
case
|
|
696
|
+
case ast_1.astKind.AtomicCallExpr:
|
|
697
|
+
case ast_1.astKind.BinaryOperator:
|
|
698
|
+
case ast_1.astKind.CallExpr:
|
|
699
|
+
case ast_1.astKind.CompoundAssignOperator:
|
|
700
|
+
case ast_1.astKind.CXXConstructExpr:
|
|
701
|
+
case ast_1.astKind.CXXCtorInitializer:
|
|
702
|
+
case ast_1.astKind.CXXDeleteExpr:
|
|
703
|
+
case ast_1.astKind.CXXOperatorCallExpr:
|
|
704
|
+
case ast_1.astKind.CXXThrowExpr:
|
|
705
|
+
case ast_1.astKind.DeclStmt:
|
|
706
|
+
case ast_1.astKind.RecoveryExpr:
|
|
707
|
+
case ast_1.astKind.TypedefDecl:
|
|
708
|
+
case ast_1.astKind.TypeAliasDecl:
|
|
709
|
+
case ast_1.astKind.TypeAliasTemplateDecl:
|
|
710
|
+
case ast_1.astKind.UnaryOperator:
|
|
711
|
+
case ast_1.astKind.VarDecl:
|
|
712
712
|
s = new StatementBuilder('statement', innerNode.code, innerNode, scope.id);
|
|
713
713
|
this.judgeLastType(s, lastStatement);
|
|
714
714
|
lastStatement = s;
|
|
715
715
|
break;
|
|
716
|
-
case
|
|
716
|
+
case ast_1.astKind.BreakStmt:
|
|
717
717
|
this.ASTNodeBreakStatement(innerNode, lastStatement);
|
|
718
718
|
break;
|
|
719
|
-
case
|
|
719
|
+
case ast_1.astKind.CompoundStmt:
|
|
720
720
|
let blockExit = new StatementBuilder('blockExit', '', innerNode, scope.id);
|
|
721
721
|
this.exits.push(blockExit);
|
|
722
722
|
this.walkAST(lastStatement, blockExit, [...innerNode.inner]);
|
|
723
723
|
lastStatement = blockExit;
|
|
724
724
|
break;
|
|
725
|
-
case
|
|
725
|
+
case ast_1.astKind.ContinueStmt:
|
|
726
726
|
const lastLoop = this.loopStack[this.loopStack.length - 1];
|
|
727
727
|
this.judgeLastType(lastLoop, lastStatement);
|
|
728
728
|
lastLoop.lasts.add(lastStatement);
|
|
729
729
|
break;
|
|
730
|
-
case
|
|
730
|
+
case ast_1.astKind.CXXMemberCallExpr:
|
|
731
731
|
lastStatement = this.ASTNodeCXXMemberCallExpr(innerNode, lastStatement, scope.id);
|
|
732
732
|
break;
|
|
733
|
-
case
|
|
734
|
-
case
|
|
733
|
+
case ast_1.astKind.CXXForRangeStmt:
|
|
734
|
+
case ast_1.astKind.ForStmt:
|
|
735
735
|
lastStatement = this.ASTNodeForStatement(innerNode, lastStatement, scope.id);
|
|
736
736
|
break;
|
|
737
|
-
case
|
|
737
|
+
case ast_1.astKind.CXXTryStmt:
|
|
738
738
|
lastStatement = this.ASTNodeTryStatement(innerNode, lastStatement, scope.id);
|
|
739
739
|
break;
|
|
740
|
-
case
|
|
740
|
+
case ast_1.astKind.DoStmt:
|
|
741
741
|
lastStatement = this.ASTNodeDoStatement(innerNode, lastStatement, scope.id);
|
|
742
742
|
break;
|
|
743
|
-
case
|
|
743
|
+
case ast_1.astKind.ExprWithCleanups:
|
|
744
744
|
lastStatement = this.ASTNodeImplicitCastExpr(innerNode, lastStatement, scope);
|
|
745
745
|
break;
|
|
746
|
-
case
|
|
747
|
-
case
|
|
746
|
+
case ast_1.astKind.GotoStmt:
|
|
747
|
+
case ast_1.astKind.IndirectGotoStmt:
|
|
748
748
|
this.ASTNodeGotoStatement(innerNode, lastStatement, scope.id);
|
|
749
749
|
break;
|
|
750
|
-
case
|
|
750
|
+
case ast_1.astKind.IfStmt:
|
|
751
751
|
lastStatement = this.ASTNodeIfStatement(innerNode, lastStatement, scope.id);
|
|
752
752
|
break;
|
|
753
|
-
case
|
|
753
|
+
case ast_1.astKind.LabelStmt:
|
|
754
754
|
lastStatement = this.ASTNodeLabelStatement(innerNode, lastStatement, scope.id);
|
|
755
755
|
break;
|
|
756
|
-
case
|
|
756
|
+
case ast_1.astKind.ReturnStmt:
|
|
757
757
|
s = new StatementBuilder('returnStatement', innerNode.code, innerNode, scope.id);
|
|
758
758
|
this.judgeLastType(s, lastStatement);
|
|
759
759
|
lastStatement = s;
|
|
760
760
|
break;
|
|
761
|
-
case
|
|
761
|
+
case ast_1.astKind.SwitchStmt:
|
|
762
762
|
lastStatement = this.ASTNodeSwitchStatement(innerNode, lastStatement, scope.id);
|
|
763
763
|
break;
|
|
764
|
-
case
|
|
764
|
+
case ast_1.astKind.WhileStmt:
|
|
765
765
|
lastStatement = this.ASTNodeWhileStatement(innerNode, lastStatement, scope.id);
|
|
766
766
|
break;
|
|
767
|
-
case
|
|
767
|
+
case ast_1.astKind.NullStmt:
|
|
768
768
|
break;
|
|
769
|
-
case
|
|
769
|
+
case ast_1.astKind.ParmVarDecl:
|
|
770
770
|
s = new StatementBuilder('statement', 'ParmVarDecl', innerNode, scope.id);
|
|
771
771
|
this.judgeLastType(s, lastStatement);
|
|
772
772
|
lastStatement = s;
|
|
773
773
|
break;
|
|
774
|
-
case
|
|
774
|
+
case ast_1.astKind.ImplicitCastExpr:
|
|
775
775
|
lastStatement = this.ASTNodeImplicitCastExpr(innerNode, lastStatement, scope);
|
|
776
776
|
break;
|
|
777
777
|
default:
|
|
@@ -1035,7 +1035,7 @@ class CfgBuilder {
|
|
|
1035
1035
|
if (notReturnStmts.length === 1 && notReturnStmts[0].block) {
|
|
1036
1036
|
let p = notReturnStmts[0].astNode;
|
|
1037
1037
|
while (p && p.id !== this.astRoot.id) {
|
|
1038
|
-
if (p.kind ===
|
|
1038
|
+
if (p.kind === ast_1.astKind.CXXTryStmt || p.kind === ast_1.astKind.SwitchStmt) {
|
|
1039
1039
|
TryOrSwitchExit = true;
|
|
1040
1040
|
break;
|
|
1041
1041
|
}
|
|
@@ -1137,19 +1137,19 @@ class CfgBuilder {
|
|
|
1137
1137
|
if (this.astRoot.inner) {
|
|
1138
1138
|
for (let i = 0; i < this.astRoot.inner.length; i++) {
|
|
1139
1139
|
const allowedInnerKinds = [
|
|
1140
|
-
|
|
1141
|
-
|
|
1140
|
+
ast_1.astKind.CXXConstructExpr,
|
|
1141
|
+
ast_1.astKind.CXXCtorInitializer
|
|
1142
1142
|
];
|
|
1143
|
-
if (this.astRoot.kind ===
|
|
1143
|
+
if (this.astRoot.kind === ast_1.astKind.CXXConstructorDecl && allowedInnerKinds.includes(this.astRoot.inner[i].kind)) {
|
|
1144
1144
|
stmts.push(this.astRoot.inner[i]);
|
|
1145
1145
|
}
|
|
1146
1146
|
const length = this.astRoot.inner[i].inner.length;
|
|
1147
|
-
if (this.astRoot.inner[i].kind ===
|
|
1148
|
-
this.astRoot.inner[i].inner[length - 1].kind !==
|
|
1147
|
+
if (this.astRoot.inner[i].kind === ast_1.astKind.ParmVarDecl && length > 0 &&
|
|
1148
|
+
this.astRoot.inner[i].inner[length - 1].kind !== ast_1.astKind.TypeRef) {
|
|
1149
1149
|
stmts.push(this.astRoot.inner[i]);
|
|
1150
1150
|
continue;
|
|
1151
1151
|
}
|
|
1152
|
-
if (this.astRoot.inner[i].kind ===
|
|
1152
|
+
if (this.astRoot.inner[i].kind === ast_1.astKind.CompoundStmt) {
|
|
1153
1153
|
stmts.push(...this.astRoot.inner[i].inner);
|
|
1154
1154
|
break;
|
|
1155
1155
|
}
|
|
@@ -1160,16 +1160,16 @@ class CfgBuilder {
|
|
|
1160
1160
|
buildCfgBuilder() {
|
|
1161
1161
|
let stmts = [];
|
|
1162
1162
|
const translationUnitKinds = [
|
|
1163
|
-
|
|
1164
|
-
|
|
1163
|
+
ast_1.astKind.TranslationUnitDecl,
|
|
1164
|
+
ast_1.astKind.NamespaceDecl
|
|
1165
1165
|
];
|
|
1166
1166
|
const functionKinds = [
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1167
|
+
ast_1.astKind.FunctionDecl,
|
|
1168
|
+
ast_1.astKind.CXXMethodDecl,
|
|
1169
|
+
ast_1.astKind.CXXConstructorDecl,
|
|
1170
|
+
ast_1.astKind.LambdaExpr,
|
|
1171
|
+
ast_1.astKind.FunctionTemplateDecl,
|
|
1172
|
+
ast_1.astKind.CXXDestructorDecl
|
|
1173
1173
|
];
|
|
1174
1174
|
if (translationUnitKinds.includes(this.astRoot.kind)) {
|
|
1175
1175
|
stmts = [...this.astRoot.inner];
|
|
@@ -1191,7 +1191,7 @@ class CfgBuilder {
|
|
|
1191
1191
|
return this.emptyBody;
|
|
1192
1192
|
}
|
|
1193
1193
|
buildCfg() {
|
|
1194
|
-
if (this.astRoot.kind ===
|
|
1194
|
+
if (this.astRoot.kind === ast_1.astKind.LambdaExpr && this.astRoot.inner[this.astRoot.inner.length - 1].kind !== ast_1.astKind.CompoundStmt) {
|
|
1195
1195
|
return this.buildCfgForSimpleArrowFunction();
|
|
1196
1196
|
}
|
|
1197
1197
|
return this.buildNormalCfg();
|
|
@@ -2,7 +2,7 @@ import { ArkFile } from '../../../../core/model/ArkFile';
|
|
|
2
2
|
import { ArkMethod } from '../../../../core/model/ArkMethod';
|
|
3
3
|
import { ArkNamespace } from '../../../../core/model/ArkNamespace';
|
|
4
4
|
import { ArkClass } from '../../../../core/model/ArkClass';
|
|
5
|
-
import { CxxAstNode } from '../../ast
|
|
5
|
+
import { CxxAstNode } from '../../ast';
|
|
6
6
|
export declare function buildNormalArkClassFromArkMethod(clsNode: CxxAstNode, cls: ArkClass, sourceFile: CxxAstNode, declaring?: ArkMethod | ArkClass): void;
|
|
7
7
|
export declare function buildNormalArkClassFromArkFile(clsNode: CxxAstNode, arkFile: ArkFile, cls: ArkClass, sourceFile: CxxAstNode, declaring?: ArkMethod | ArkClass): void;
|
|
8
8
|
export declare function buildNormalArkClassFromArkNamespace(clsNode: CxxAstNode, arkNamespace: ArkNamespace, cls: ArkClass, sourceFile: CxxAstNode, declaring?: ArkMethod | ArkClass): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArkClassBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/frontend/cppFrontend/model/builder/ArkClassBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAEnE,OAAO,EAAE,QAAQ,EAAwC,MAAM,iCAAiC,CAAC;AAUjG,OAAO,EAAE,UAAU,EAA8C,MAAM,
|
|
1
|
+
{"version":3,"file":"ArkClassBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/frontend/cppFrontend/model/builder/ArkClassBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAEnE,OAAO,EAAE,QAAQ,EAAwC,MAAM,iCAAiC,CAAC;AAUjG,OAAO,EAAE,UAAU,EAA8C,MAAM,WAAW,CAAC;AAcnF,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI,CAOnJ;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EACpD,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI,CAQ7G;AAED,wBAAgB,mCAAmC,CAC/C,OAAO,EAAE,UAAU,EACnB,YAAY,EAAE,YAAY,EAC1B,GAAG,EAAE,QAAQ,EACb,UAAU,EAAE,UAAU,EACtB,SAAS,CAAC,EAAE,SAAS,GAAG,QAAQ,GACjC,IAAI,CASN;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI,CAwBtI;AA+PD,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAInH"}
|
|
@@ -50,7 +50,7 @@ const IRUtils_1 = require("../../common/IRUtils");
|
|
|
50
50
|
const ArkSignature_1 = require("../../../../core/model/ArkSignature");
|
|
51
51
|
const ArkClassBuilder_1 = require("../../../../core/model/builder/ArkClassBuilder");
|
|
52
52
|
const ArkIRTransformer_1 = require("../../common/ArkIRTransformer");
|
|
53
|
-
const
|
|
53
|
+
const ast_1 = require("../../ast");
|
|
54
54
|
const ArkField_1 = require("../../../../core/model/ArkField");
|
|
55
55
|
const Constant_1 = require("../../../../core/base/Constant");
|
|
56
56
|
const ValueUtil_1 = require("../../../../core/common/ValueUtil");
|
|
@@ -74,7 +74,7 @@ exports.buildNormalArkClassFromArkMethod = buildNormalArkClassFromArkMethod;
|
|
|
74
74
|
function buildNormalArkClassFromArkFile(clsNode, arkFile, cls, sourceFile, declaring) {
|
|
75
75
|
cls.setDeclaringArkFile(arkFile);
|
|
76
76
|
cls.setCode(clsNode.code);
|
|
77
|
-
const nodePos = (0,
|
|
77
|
+
const nodePos = (0, ast_1.getNodeStartLineAndCol)(clsNode);
|
|
78
78
|
cls.setLine(nodePos.line);
|
|
79
79
|
cls.setColumn(nodePos.col);
|
|
80
80
|
buildNormalArkClass(clsNode, cls, sourceFile, declaring);
|
|
@@ -85,7 +85,7 @@ function buildNormalArkClassFromArkNamespace(clsNode, arkNamespace, cls, sourceF
|
|
|
85
85
|
cls.setDeclaringArkNamespace(arkNamespace);
|
|
86
86
|
cls.setDeclaringArkFile(arkNamespace.getDeclaringArkFile());
|
|
87
87
|
cls.setCode(clsNode.code);
|
|
88
|
-
const nodePos = (0,
|
|
88
|
+
const nodePos = (0, ast_1.getNodeStartLineAndCol)(clsNode);
|
|
89
89
|
cls.setLine(nodePos.line);
|
|
90
90
|
cls.setColumn(nodePos.col);
|
|
91
91
|
buildNormalArkClass(clsNode, cls, sourceFile, declaring);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ArkField } from '../../../../core/model/ArkField';
|
|
2
2
|
import { ArkClass } from '../../../../core/model/ArkClass';
|
|
3
|
-
import { CxxAstNode } from '../../ast
|
|
3
|
+
import { CxxAstNode } from '../../ast';
|
|
4
4
|
export declare function buildProperty2ArkField(member: CxxAstNode, sourceFile: CxxAstNode, cls: ArkClass): ArkField;
|
|
5
5
|
//# sourceMappingURL=ArkFieldBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArkFieldBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/frontend/cppFrontend/model/builder/ArkFieldBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,QAAQ,EAAiB,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAQ3D,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"ArkFieldBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/frontend/cppFrontend/model/builder/ArkFieldBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,QAAQ,EAAiB,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAQ3D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,GAAG,QAAQ,CAuB1G"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ArkFile } from '../../../../core/model/ArkFile';
|
|
2
2
|
import { ArkClass } from '../../../../core/model/ArkClass';
|
|
3
|
-
import { CxxAstNode } from '../../ast
|
|
3
|
+
import { CxxAstNode } from '../../ast';
|
|
4
4
|
export declare const classMap: Map<string, ArkClass>;
|
|
5
5
|
/**
|
|
6
6
|
* Entry of building ArkFile instance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArkFileBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/frontend/cppFrontend/model/builder/ArkFileBuilder.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAMzD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"ArkFileBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/frontend/cppFrontend/model/builder/ArkFileBuilder.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAMzD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAS3D,OAAO,EAAsB,UAAU,EAAkB,MAAM,WAAW,CAAC;AAa3E,eAAO,MAAM,QAAQ,EAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,CAA+B,CAAC;AAgD5E;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,GAAE,MAAM,EAAO,GAAG,IAAI,CAa1J;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAU5G"}
|
|
@@ -51,14 +51,13 @@ const ArkNamespaceBuilder_1 = require("./ArkNamespaceBuilder");
|
|
|
51
51
|
const ArkClass_1 = require("../../../../core/model/ArkClass");
|
|
52
52
|
const ArkClassBuilder_2 = require("./ArkClassBuilder");
|
|
53
53
|
const ArkMethod_1 = require("../../../../core/model/ArkMethod");
|
|
54
|
-
const astUtils_1 = require("../../ast/astUtils");
|
|
55
54
|
const ArkSignature_1 = require("../../../../core/model/ArkSignature");
|
|
56
55
|
const Position_1 = require("../../../../core/base/Position");
|
|
57
56
|
const ArkImportBuilder_1 = require("./ArkImportBuilder");
|
|
58
57
|
const ModelUtils_1 = require("../../common/ModelUtils");
|
|
59
58
|
const logger_1 = __importStar(require("../../../../utils/logger"));
|
|
60
59
|
const ArkClassBuilder_3 = require("../../../../core/model/builder/ArkClassBuilder");
|
|
61
|
-
const
|
|
60
|
+
const ast_1 = require("../../ast");
|
|
62
61
|
const ArkFieldBuilder_1 = require("./ArkFieldBuilder");
|
|
63
62
|
const Const_1 = require("../../../../core/common/Const");
|
|
64
63
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'ArkFileBuilder');
|
|
@@ -120,7 +119,7 @@ function buildArkFileFromFile(absoluteFilePath, projectDir, arkFile, projectName
|
|
|
120
119
|
arkFile.setCode(fs_1.default.readFileSync(arkFile.getFilePath(), 'utf8'));
|
|
121
120
|
let sdkPath = extractOhosSdkPath(arkFile.getScene().getProjectSdkMap());
|
|
122
121
|
let llvmPath = findLLVMPath(sdkPath);
|
|
123
|
-
const jsonObject =
|
|
122
|
+
const jsonObject = ast_1.AstParser.parse(absoluteFilePath, scene.getCcjsonPath(), includeDirs, llvmPath, scene.getCppAstPath());
|
|
124
123
|
genDefaultArkClass(arkFile, jsonObject);
|
|
125
124
|
buildArkFile(arkFile, jsonObject);
|
|
126
125
|
}
|
|
@@ -216,44 +215,44 @@ function buildArkFile(arkFile, astRoot) {
|
|
|
216
215
|
switch (childKind) {
|
|
217
216
|
// 'RecordDecl' ---C Language (struct/class/union)
|
|
218
217
|
// 'CXXRecordDecl' ---C++ Language (struct/class/union)
|
|
219
|
-
case
|
|
220
|
-
case
|
|
221
|
-
case
|
|
218
|
+
case ast_1.astKind.RecordDecl:
|
|
219
|
+
case ast_1.astKind.CXXRecordDecl:
|
|
220
|
+
case ast_1.astKind.ClassTemplateDecl:
|
|
222
221
|
buildArkClassFromCxxClass(child, arkFile, astRoot);
|
|
223
222
|
break;
|
|
224
|
-
case
|
|
225
|
-
case
|
|
226
|
-
case
|
|
223
|
+
case ast_1.astKind.FunctionDecl:
|
|
224
|
+
case ast_1.astKind.FriendDecl:
|
|
225
|
+
case ast_1.astKind.FunctionTemplateDecl:
|
|
227
226
|
buildArkMethodFromCxxMethod(child, arkFile, astRoot);
|
|
228
227
|
break;
|
|
229
|
-
case
|
|
228
|
+
case ast_1.astKind.NamespaceDecl:
|
|
230
229
|
let ns = new ArkNamespace_1.ArkNamespace();
|
|
231
230
|
ns.setDeclaringArkFile(arkFile);
|
|
232
231
|
(0, ArkNamespaceBuilder_1.buildArkNamespace)(child, arkFile, ns, astRoot);
|
|
233
232
|
arkFile.addNamespace(ns);
|
|
234
233
|
addExportInfoOnCondition(child, ns, arkFile);
|
|
235
234
|
break;
|
|
236
|
-
case
|
|
237
|
-
case
|
|
238
|
-
case
|
|
235
|
+
case ast_1.astKind.CXXMethodDecl:
|
|
236
|
+
case ast_1.astKind.CXXConstructorDecl:
|
|
237
|
+
case ast_1.astKind.CXXDestructorDecl:
|
|
239
238
|
// Member function, construction and destructor need to establish the function class first
|
|
240
239
|
const arkClass = getDeclaringArkClassOfMethod(child, arkFile);
|
|
241
240
|
buildArkMethodFromCxxMethod(child, arkFile, astRoot, arkClass);
|
|
242
241
|
break;
|
|
243
|
-
case
|
|
242
|
+
case ast_1.astKind.EnumDecl:
|
|
244
243
|
child = Object.assign(Object.assign({}, child), { tagUsed: 'enum' });
|
|
245
244
|
buildArkClassFromCxxClass(child, arkFile, astRoot);
|
|
246
245
|
break;
|
|
247
|
-
case
|
|
246
|
+
case ast_1.astKind.UsingDirectiveDecl:
|
|
248
247
|
buildImportInfoFromUsing(child, astRoot, arkFile);
|
|
249
248
|
break;
|
|
250
|
-
case
|
|
249
|
+
case ast_1.astKind.VarDecl:
|
|
251
250
|
// handle global variable
|
|
252
251
|
child.mangledName = Const_1.DEFAULT_ARK_CLASS_NAME;
|
|
253
252
|
const arkDefaultClass = getDeclaringArkClassOfMethod(child, arkFile);
|
|
254
253
|
(0, ArkFieldBuilder_1.buildProperty2ArkField)(child, astRoot, arkDefaultClass);
|
|
255
254
|
break;
|
|
256
|
-
case
|
|
255
|
+
case ast_1.astKind.LinkageSpecDecl:
|
|
257
256
|
buildArkFile(arkFile, child);
|
|
258
257
|
default:
|
|
259
258
|
logger.trace('Child joined default method of arkFile: ', (_a = child.kind) !== null && _a !== void 0 ? _a : child.code);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ImportInfo } from '../../../../core/model/ArkImport';
|
|
2
2
|
import { ArkFile } from '../../../../core/model/ArkFile';
|
|
3
|
-
import { CxxAstNode, CxxIncludeInfo } from '../../ast
|
|
3
|
+
import { CxxAstNode, CxxIncludeInfo } from '../../ast';
|
|
4
4
|
export declare function buildGenericImportInfo(includeInfo: CxxIncludeInfo, includeNode: CxxAstNode, sourceFile: CxxAstNode, arkFile: ArkFile): ImportInfo;
|
|
5
5
|
export declare function buildUsingNamespaceImportInfo(node: CxxAstNode, sourceFile: CxxAstNode, arkFile: ArkFile): ImportInfo | null;
|
|
6
6
|
//# sourceMappingURL=ArkImportBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArkImportBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/frontend/cppFrontend/model/builder/ArkImportBuilder.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"ArkImportBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/frontend/cppFrontend/model/builder/ArkImportBuilder.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGvD,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,UAAU,CAWjJ;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAmB3H"}
|
|
@@ -2,7 +2,7 @@ import { ArkClass } from '../../../../core/model/ArkClass';
|
|
|
2
2
|
import { ArkMethod } from '../../../../core/model/ArkMethod';
|
|
3
3
|
import { Stmt } from '../../../../core/base/Stmt';
|
|
4
4
|
import { Local } from '../../../../core/base/Local';
|
|
5
|
-
import { CxxAstNode } from '../../ast
|
|
5
|
+
import { CxxAstNode } from '../../ast';
|
|
6
6
|
export declare function buildDefaultArkMethodFromArkClass(declaringClass: ArkClass, mtd: ArkMethod, sourceFile: CxxAstNode, node?: CxxAstNode): void;
|
|
7
7
|
export declare function handleFunctionTemplateDecl(methodNode: CxxAstNode, mtd: ArkMethod, sourceFile: CxxAstNode): void;
|
|
8
8
|
export declare function buildArkMethodFromArkClass(methodNode: CxxAstNode, declaringClass: ArkClass, mtd: ArkMethod, sourceFile: CxxAstNode, declaringMethod?: ArkMethod): void;
|