arkanalyzer 1.0.16 → 1.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/callgraph/pointerAnalysis/Pag.d.ts +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.js +9 -0
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +6 -2
- package/lib/core/base/Decorator.d.ts +1 -0
- package/lib/core/base/Decorator.d.ts.map +1 -1
- package/lib/core/base/Decorator.js +4 -1
- package/lib/core/base/Type.d.ts +45 -3
- package/lib/core/base/Type.d.ts.map +1 -1
- package/lib/core/base/Type.js +84 -4
- package/lib/core/common/ArkIRTransformer.d.ts +1 -0
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkIRTransformer.js +42 -23
- package/lib/core/common/ArkValueTransformer.d.ts +1 -0
- package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkValueTransformer.js +45 -10
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +6 -0
- package/lib/core/common/ModelUtils.d.ts.map +1 -1
- package/lib/core/common/ModelUtils.js +5 -1
- package/lib/core/common/TypeInference.d.ts +1 -0
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +27 -8
- package/lib/core/{common → graph/builder}/CfgBuilder.d.ts +34 -46
- package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -0
- package/lib/core/graph/builder/CfgBuilder.js +1139 -0
- package/lib/core/graph/builder/ConditionBuilder.d.ts +16 -0
- package/lib/core/graph/builder/ConditionBuilder.d.ts.map +1 -0
- package/lib/core/graph/builder/ConditionBuilder.js +252 -0
- package/lib/core/graph/builder/LoopBuilder.d.ts +21 -0
- package/lib/core/graph/builder/LoopBuilder.d.ts.map +1 -0
- package/lib/core/graph/builder/LoopBuilder.js +251 -0
- package/lib/core/graph/builder/SwitchBuilder.d.ts +12 -0
- package/lib/core/graph/builder/SwitchBuilder.d.ts.map +1 -0
- package/lib/core/graph/builder/SwitchBuilder.js +152 -0
- package/lib/core/graph/builder/TrapBuilder.d.ts +17 -0
- package/lib/core/graph/builder/TrapBuilder.d.ts.map +1 -0
- package/lib/core/graph/builder/TrapBuilder.js +272 -0
- package/lib/core/model/ArkMethod.d.ts +1 -1
- package/lib/core/model/ArkMethod.js +1 -1
- package/lib/core/model/ArkSignature.d.ts +9 -1
- package/lib/core/model/ArkSignature.d.ts.map +1 -1
- package/lib/core/model/ArkSignature.js +17 -1
- package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkClassBuilder.js +2 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +1 -1
- package/lib/core/{common → model/builder}/BodyBuilder.d.ts +5 -5
- package/lib/core/model/builder/BodyBuilder.d.ts.map +1 -0
- package/lib/core/{common → model/builder}/BodyBuilder.js +12 -12
- package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.js +31 -5
- package/lib/save/JsonPrinter.d.ts +1 -1
- package/lib/save/JsonPrinter.d.ts.map +1 -1
- package/lib/save/JsonPrinter.js +2 -2
- package/lib/save/PrinterBuilder.d.ts +22 -0
- package/lib/save/PrinterBuilder.d.ts.map +1 -1
- package/lib/save/PrinterBuilder.js +54 -1
- package/lib/save/arkir/ArkIRClassPrinter.d.ts +14 -0
- package/lib/save/arkir/ArkIRClassPrinter.d.ts.map +1 -0
- package/lib/save/arkir/ArkIRClassPrinter.js +92 -0
- package/lib/save/arkir/ArkIRFieldPrinter.d.ts +12 -0
- package/lib/save/arkir/ArkIRFieldPrinter.d.ts.map +1 -0
- package/lib/save/arkir/ArkIRFieldPrinter.js +64 -0
- package/lib/save/arkir/ArkIRFilePrinter.d.ts +13 -0
- package/lib/save/arkir/ArkIRFilePrinter.d.ts.map +1 -0
- package/lib/save/arkir/ArkIRFilePrinter.js +54 -0
- package/lib/save/arkir/ArkIRMethodPrinter.d.ts +17 -0
- package/lib/save/arkir/ArkIRMethodPrinter.d.ts.map +1 -0
- package/lib/save/arkir/ArkIRMethodPrinter.js +159 -0
- package/lib/save/arkir/ArkIRNamespacePrinter.d.ts +12 -0
- package/lib/save/arkir/ArkIRNamespacePrinter.d.ts.map +1 -0
- package/lib/save/arkir/ArkIRNamespacePrinter.js +66 -0
- package/lib/save/base/BasePrinter.d.ts +24 -0
- package/lib/save/base/BasePrinter.d.ts.map +1 -0
- package/lib/save/base/BasePrinter.js +70 -0
- package/lib/save/base/ExportPrinter.d.ts +9 -0
- package/lib/save/base/ExportPrinter.d.ts.map +1 -0
- package/lib/save/base/ExportPrinter.js +67 -0
- package/lib/save/base/ImportPrinter.d.ts +10 -0
- package/lib/save/base/ImportPrinter.d.ts.map +1 -0
- package/lib/save/base/ImportPrinter.js +92 -0
- package/lib/save/{source/SourceUtils.d.ts → base/PrinterUtils.d.ts} +2 -2
- package/lib/save/{source/SourceUtils.d.ts.map → base/PrinterUtils.d.ts.map} +1 -1
- package/lib/save/{source/SourceUtils.js → base/PrinterUtils.js} +10 -10
- package/lib/save/source/SourceBase.d.ts +2 -11
- package/lib/save/source/SourceBase.d.ts.map +1 -1
- package/lib/save/source/SourceBase.js +3 -25
- package/lib/save/source/SourceBody.js +3 -3
- package/lib/save/source/SourceClass.d.ts +2 -1
- package/lib/save/source/SourceClass.d.ts.map +1 -1
- package/lib/save/source/SourceClass.js +18 -17
- package/lib/save/source/SourceFilePrinter.d.ts +1 -1
- package/lib/save/source/SourceFilePrinter.d.ts.map +1 -1
- package/lib/save/source/SourceFilePrinter.js +9 -10
- package/lib/save/source/SourceMethod.d.ts +1 -1
- package/lib/save/source/SourceMethod.d.ts.map +1 -1
- package/lib/save/source/SourceMethod.js +37 -22
- package/lib/save/source/SourceNamespace.d.ts.map +1 -1
- package/lib/save/source/SourceNamespace.js +6 -6
- package/lib/save/source/SourceStmt.d.ts +1 -1
- package/lib/save/source/SourceStmt.d.ts.map +1 -1
- package/lib/save/source/SourceStmt.js +29 -42
- package/lib/save/source/SourceTransformer.d.ts +3 -1
- package/lib/save/source/SourceTransformer.d.ts.map +1 -1
- package/lib/save/source/SourceTransformer.js +65 -29
- package/package.json +1 -1
- package/lib/core/common/BodyBuilder.d.ts.map +0 -1
- package/lib/core/common/CfgBuilder.d.ts.map +0 -1
- package/lib/core/common/CfgBuilder.js +0 -1886
- package/lib/save/source/SourceModule.d.ts +0 -16
- package/lib/save/source/SourceModule.d.ts.map +0 -1
- package/lib/save/source/SourceModule.js +0 -125
|
@@ -61,6 +61,7 @@ const Constant_1 = require("../base/Constant");
|
|
|
61
61
|
const Const_1 = require("./Const");
|
|
62
62
|
const ArkIRTransformer_1 = require("./ArkIRTransformer");
|
|
63
63
|
const logger_1 = __importStar(require("../../utils/logger"));
|
|
64
|
+
const TypeInference_1 = require("./TypeInference");
|
|
64
65
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'ArkValueTransformer');
|
|
65
66
|
class ArkValueTransformer {
|
|
66
67
|
constructor(arkIRTransformer, sourceFile, declaringMethod) {
|
|
@@ -1266,6 +1267,11 @@ class ArkValueTransformer {
|
|
|
1266
1267
|
type.types.forEach(t => mayTypes.push(this.resolveTypeNode(t)));
|
|
1267
1268
|
return new Type_1.UnionType(mayTypes);
|
|
1268
1269
|
}
|
|
1270
|
+
case ts.SyntaxKind.IntersectionType: {
|
|
1271
|
+
const intersectionTypes = [];
|
|
1272
|
+
type.types.forEach(t => intersectionTypes.push(this.resolveTypeNode(t)));
|
|
1273
|
+
return new Type_1.IntersectionType(intersectionTypes);
|
|
1274
|
+
}
|
|
1269
1275
|
case ts.SyntaxKind.TupleType: {
|
|
1270
1276
|
const types = [];
|
|
1271
1277
|
type.elements.forEach(element => {
|
|
@@ -1287,6 +1293,10 @@ class ArkValueTransformer {
|
|
|
1287
1293
|
return Type_1.UnknownType.getInstance();
|
|
1288
1294
|
case ts.SyntaxKind.TypeQuery:
|
|
1289
1295
|
return this.resolveTypeQueryNode(type);
|
|
1296
|
+
case ts.SyntaxKind.ParenthesizedType:
|
|
1297
|
+
return this.resolveTypeNode(type.type);
|
|
1298
|
+
case ts.SyntaxKind.TypeOperator:
|
|
1299
|
+
return this.resolveTypeOperatorNode(type);
|
|
1290
1300
|
default:
|
|
1291
1301
|
return Type_1.UnknownType.getInstance();
|
|
1292
1302
|
}
|
|
@@ -1305,6 +1315,25 @@ class ArkValueTransformer {
|
|
|
1305
1315
|
}
|
|
1306
1316
|
return new Type_1.UnclearReferenceType(exprName, genericTypes);
|
|
1307
1317
|
}
|
|
1318
|
+
resolveTypeOperatorNode(typeOperatorNode) {
|
|
1319
|
+
switch (typeOperatorNode.operator) {
|
|
1320
|
+
case ts.SyntaxKind.ReadonlyKeyword: {
|
|
1321
|
+
let type = this.resolveTypeNode(typeOperatorNode.type);
|
|
1322
|
+
if (type instanceof Type_1.ArrayType || type instanceof Type_1.TupleType) {
|
|
1323
|
+
type.setReadonlyFlag(true);
|
|
1324
|
+
}
|
|
1325
|
+
return type;
|
|
1326
|
+
}
|
|
1327
|
+
case ts.SyntaxKind.KeyOfKeyword: {
|
|
1328
|
+
return Type_1.UnknownType.getInstance();
|
|
1329
|
+
}
|
|
1330
|
+
case ts.SyntaxKind.UniqueKeyword: {
|
|
1331
|
+
return Type_1.UnknownType.getInstance();
|
|
1332
|
+
}
|
|
1333
|
+
default:
|
|
1334
|
+
return Type_1.UnknownType.getInstance();
|
|
1335
|
+
}
|
|
1336
|
+
}
|
|
1308
1337
|
static resolveLiteralTypeNode(literalTypeNode, sourceFile) {
|
|
1309
1338
|
const literal = literalTypeNode.literal;
|
|
1310
1339
|
const kind = literal.kind;
|
|
@@ -1366,24 +1395,30 @@ class ArkValueTransformer {
|
|
|
1366
1395
|
return templateTypes[0];
|
|
1367
1396
|
}
|
|
1368
1397
|
resolveTypeReferenceNode(typeReferenceNode) {
|
|
1369
|
-
const typeReferenceFullName = typeReferenceNode.getText(this.sourceFile);
|
|
1370
|
-
const
|
|
1371
|
-
|
|
1398
|
+
const typeReferenceFullName = typeReferenceNode.typeName.getText(this.sourceFile);
|
|
1399
|
+
const aliasTypeAndStmt = this.aliasTypeMap.get(typeReferenceFullName);
|
|
1400
|
+
const genericTypes = [];
|
|
1401
|
+
if (typeReferenceNode.typeArguments) {
|
|
1402
|
+
for (const typeArgument of typeReferenceNode.typeArguments) {
|
|
1403
|
+
genericTypes.push(this.resolveTypeNode(typeArgument));
|
|
1404
|
+
}
|
|
1405
|
+
}
|
|
1406
|
+
if (!aliasTypeAndStmt) {
|
|
1372
1407
|
const typeName = typeReferenceNode.typeName.getText(this.sourceFile);
|
|
1373
1408
|
const local = this.locals.get(typeName);
|
|
1374
1409
|
if (local !== undefined) {
|
|
1375
1410
|
return local.getType();
|
|
1376
1411
|
}
|
|
1377
|
-
const genericTypes = [];
|
|
1378
|
-
if (typeReferenceNode.typeArguments) {
|
|
1379
|
-
for (const typeArgument of typeReferenceNode.typeArguments) {
|
|
1380
|
-
genericTypes.push(this.resolveTypeNode(typeArgument));
|
|
1381
|
-
}
|
|
1382
|
-
}
|
|
1383
1412
|
return new Type_1.UnclearReferenceType(typeName, genericTypes);
|
|
1384
1413
|
}
|
|
1385
1414
|
else {
|
|
1386
|
-
|
|
1415
|
+
if (genericTypes.length > 0) {
|
|
1416
|
+
const oldAlias = aliasTypeAndStmt[0];
|
|
1417
|
+
let alias = new Type_1.AliasType(oldAlias.getName(), TypeInference_1.TypeInference.replaceTypeWithReal(oldAlias.getOriginalType(), genericTypes), oldAlias.getSignature(), oldAlias.getGenericTypes());
|
|
1418
|
+
alias.setRealGenericTypes(genericTypes);
|
|
1419
|
+
return alias;
|
|
1420
|
+
}
|
|
1421
|
+
return aliasTypeAndStmt[0];
|
|
1387
1422
|
}
|
|
1388
1423
|
}
|
|
1389
1424
|
resolveTypeLiteralNode(typeLiteralNode) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IRInference.d.ts","sourceRoot":"","sources":["../../../src/core/common/IRInference.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAKH,SAAS,EAIT,IAAI,EAIP,MAAM,cAAc,CAAC;AAGtB,OAAO,EACH,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAI7C,OAAO,EAGH,cAAc,EAEd,eAAe,EAElB,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EAEH,WAAW,EAEX,mBAAmB,EAGtB,MAAM,aAAa,CAAC;AAYrB,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAI3C,qBAAa,WAAW;IAEpB,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAY/B,OAAO,CAAC,MAAM,CAAC,gBAAgB;WAMjB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;WAwB9B,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,GAAG,kBAAkB;IA8BxG,OAAO,CAAC,MAAM,CAAC,iCAAiC;IAmChD,OAAO,CAAC,MAAM,CAAC,0BAA0B;WAU3B,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,SAAS,GAAG,kBAAkB;WAsB9F,aAAa,CAAC,GAAG,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,GAAG,WAAW;IAiBxF,OAAO,CAAC,MAAM,CAAC,SAAS;IAoBxB,OAAO,CAAC,MAAM,CAAC,QAAQ;WAqBT,qBAAqB,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;WAehF,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,GAAG,IAAI;IAgBxF,OAAO,CAAC,MAAM,CAAC,eAAe;IA0C9B,OAAO,CAAC,MAAM,CAAC,gCAAgC;IAgD/C,OAAO,CAAC,MAAM,CAAC,YAAY;WAYb,sBAAsB,CAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,GAAG,eAAe;IAcvG,OAAO,CAAC,MAAM,CAAC,cAAc;IAmB7B,OAAO,CAAC,MAAM,CAAC,UAAU;IAsBzB,OAAO,CAAC,MAAM,CAAC,yBAAyB;WA4C1B,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,iBAAiB,EAAE,cAAc,EAAE,GAAG,GAAE,GAAG,CAAC,MAAM,CAAa,GAAG,IAAI;IA+B/H,OAAO,CAAC,MAAM,CAAC,eAAe;WA+BhB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,GAAG,YAAY;
|
|
1
|
+
{"version":3,"file":"IRInference.d.ts","sourceRoot":"","sources":["../../../src/core/common/IRInference.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAKH,SAAS,EAIT,IAAI,EAIP,MAAM,cAAc,CAAC;AAGtB,OAAO,EACH,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAI7C,OAAO,EAGH,cAAc,EAEd,eAAe,EAElB,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EAEH,WAAW,EAEX,mBAAmB,EAGtB,MAAM,aAAa,CAAC;AAYrB,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAI3C,qBAAa,WAAW;IAEpB,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAY/B,OAAO,CAAC,MAAM,CAAC,gBAAgB;WAMjB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;WAwB9B,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,GAAG,kBAAkB;IA8BxG,OAAO,CAAC,MAAM,CAAC,iCAAiC;IAmChD,OAAO,CAAC,MAAM,CAAC,0BAA0B;WAU3B,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,SAAS,GAAG,kBAAkB;WAsB9F,aAAa,CAAC,GAAG,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,GAAG,WAAW;IAiBxF,OAAO,CAAC,MAAM,CAAC,SAAS;IAoBxB,OAAO,CAAC,MAAM,CAAC,QAAQ;WAqBT,qBAAqB,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;WAehF,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,GAAG,IAAI;IAgBxF,OAAO,CAAC,MAAM,CAAC,eAAe;IA0C9B,OAAO,CAAC,MAAM,CAAC,gCAAgC;IAgD/C,OAAO,CAAC,MAAM,CAAC,YAAY;WAYb,sBAAsB,CAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,GAAG,eAAe;IAcvG,OAAO,CAAC,MAAM,CAAC,cAAc;IAmB7B,OAAO,CAAC,MAAM,CAAC,UAAU;IAsBzB,OAAO,CAAC,MAAM,CAAC,yBAAyB;WA4C1B,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,iBAAiB,EAAE,cAAc,EAAE,GAAG,GAAE,GAAG,CAAC,MAAM,CAAa,GAAG,IAAI;IA+B/H,OAAO,CAAC,MAAM,CAAC,eAAe;WA+BhB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,GAAG,YAAY;CA6B5F"}
|
|
@@ -557,10 +557,16 @@ class IRInference {
|
|
|
557
557
|
}
|
|
558
558
|
else if (originalObject instanceof Type_1.Type) {
|
|
559
559
|
const type = TypeInference_1.TypeInference.inferUnclearedType(originalObject, arkMethod.getDeclaringArkClass());
|
|
560
|
+
// If original Object is ClassType, AliasType or UnclearReferenceType with real generic types,
|
|
561
|
+
// the type after infer should be revert back to the object itself.
|
|
560
562
|
if (type instanceof Type_1.ClassType) {
|
|
561
563
|
const scene = arkMethod.getDeclaringArkFile().getScene();
|
|
562
564
|
model = ModelUtils_1.ModelUtils.findArkModelBySignature(type.getClassSignature(), scene);
|
|
563
565
|
}
|
|
566
|
+
else if (type instanceof Type_1.AliasType) {
|
|
567
|
+
const scene = arkMethod.getDeclaringArkFile().getScene();
|
|
568
|
+
model = ModelUtils_1.ModelUtils.findArkModelBySignature(type.getSignature(), scene);
|
|
569
|
+
}
|
|
564
570
|
else if (type) {
|
|
565
571
|
model = type;
|
|
566
572
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelUtils.d.ts","sourceRoot":"","sources":["../../../src/core/common/ModelUtils.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"ModelUtils.d.ts","sourceRoot":"","sources":["../../../src/core/common/ModelUtils.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAEH,cAAc,EAKd,eAAe,EAEf,SAAS,EACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAc,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAO7C,OAAO,EAA2B,SAAS,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC,qBAAa,UAAU;IACnB,OAAc,2BAA2B,EAAE,GAAG,CAAC,SAAS,CAAC,CAAa;WAExD,8BAA8B,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;WAS9F,sCAAsC,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,GAAG,QAAQ,GAAG,IAAI;WAiB5F,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI;IAwBhG;;OAEG;WACW,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI;IAWvF,yCAAyC;WAC3B,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,QAAQ,GAAG,IAAI;WAQ5E,4BAA4B,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,QAAQ,GAAG,IAAI;IAQhG,qDAAqD;WACvC,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI;IAIhG,kEAAkE;WACpD,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI;WA2B7E,6BAA6B,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,GAAG,YAAY,GAAG,IAAI;WAc9F,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,GAAG,YAAY,GAAG,IAAI;WAarF,0BAA0B,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI;WASxF,gCAAgC,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI;WAQ9F,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,IAAI;WAelF,6BAA6B,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI;WAWrF,mCAAmC,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI;WAQ3F,4BAA4B,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,KAAK,GAAG,IAAI;WAS/E,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,EAAE;WASxD,2BAA2B,CAAC,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,IAAI;WAO5F,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,EAAE;WAQjD,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,EAAE;WAQlD,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;WAiBnD,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI;WAUvE,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI;WAIpD,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,GAAG,QAAQ,GAAG,IAAI;WA2BvE,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,GAAG,SAAS,GAAG,SAAS;WASrF,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,IAAI;WAmBlF,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,GAAE,MAAU,GAAG,KAAK,GAAG,IAAI;WAqCtF,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,IAAI;WAmB/E,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,IAAI;WA4BvF,uBAAuB,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,QAAQ,GAAG,IAAI;CAyBzG;AAMD,eAAO,MAAM,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAA8B,CAAC;AAE7E;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CA6BnE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,IAAI,CA4BpE;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,CA4BlF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAiB7F;AAiED,wBAAgB,iBAAiB,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,GAAG,IAAI,CAK9F"}
|
|
@@ -425,7 +425,7 @@ class ModelUtils {
|
|
|
425
425
|
return model;
|
|
426
426
|
}
|
|
427
427
|
static findArkModelBySignature(signature, scene) {
|
|
428
|
-
var _a, _b, _c, _d;
|
|
428
|
+
var _a, _b, _c, _d, _e, _f;
|
|
429
429
|
if (signature instanceof ArkSignature_1.ClassSignature) {
|
|
430
430
|
return scene.getClass(signature);
|
|
431
431
|
}
|
|
@@ -449,6 +449,10 @@ class ModelUtils {
|
|
|
449
449
|
const declare = scene.getMethod(signature.getDeclaringMethodSignature());
|
|
450
450
|
return (_d = (_b = (_a = declare === null || declare === void 0 ? void 0 : declare.getBody()) === null || _a === void 0 ? void 0 : _a.getLocals().get(signature.getName())) !== null && _b !== void 0 ? _b : (_c = declare === null || declare === void 0 ? void 0 : declare.getBody()) === null || _c === void 0 ? void 0 : _c.getAliasTypeByName(signature.getName())) !== null && _d !== void 0 ? _d : null;
|
|
451
451
|
}
|
|
452
|
+
else if (signature instanceof ArkSignature_1.AliasTypeSignature) {
|
|
453
|
+
const declare = scene.getMethod(signature.getDeclaringMethodSignature());
|
|
454
|
+
return (_f = (_e = declare === null || declare === void 0 ? void 0 : declare.getBody()) === null || _e === void 0 ? void 0 : _e.getAliasTypeByName(signature.getName())) !== null && _f !== void 0 ? _f : null;
|
|
455
|
+
}
|
|
452
456
|
return null;
|
|
453
457
|
}
|
|
454
458
|
}
|
|
@@ -45,6 +45,7 @@ export declare class TypeInference {
|
|
|
45
45
|
static resolveArkAssignStmt(stmt: Stmt, arkMethod: ArkMethod): void;
|
|
46
46
|
private static setValueType;
|
|
47
47
|
static isUnclearType(type: Type | null | undefined): boolean;
|
|
48
|
+
private static hasUnclearReferenceType;
|
|
48
49
|
static inferSimpleTypeInStmt(stmt: Stmt): void;
|
|
49
50
|
static buildTypeFromStr(typeStr: string): Type;
|
|
50
51
|
static inferValueType(value: Value, arkMethod: ArkMethod): Type | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeInference.d.ts","sourceRoot":"","sources":["../../../src/core/common/TypeInference.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAyC,IAAI,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAOH,YAAY,EACZ,WAAW,
|
|
1
|
+
{"version":3,"file":"TypeInference.d.ts","sourceRoot":"","sources":["../../../src/core/common/TypeInference.ts"],"names":[],"mappings":"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"}
|
|
@@ -112,7 +112,7 @@ class TypeInference {
|
|
|
112
112
|
leftOpType.getClassSignature().getDeclaringFileSignature().getFileName() === Const_1.UNKNOWN_FILE_NAME) {
|
|
113
113
|
type = TypeInference.inferUnclearRefName(leftOpType.getClassSignature().getClassName(), declaringArkClass);
|
|
114
114
|
}
|
|
115
|
-
else if (leftOpType instanceof Type_1.UnionType) {
|
|
115
|
+
else if (leftOpType instanceof Type_1.UnionType || leftOpType instanceof Type_1.IntersectionType || leftOpType instanceof Type_1.TupleType) {
|
|
116
116
|
let types = leftOpType.getTypes();
|
|
117
117
|
for (let i = 0; i < types.length; i++) {
|
|
118
118
|
let newType = this.inferUnclearedType(types[i], declaringArkClass);
|
|
@@ -315,6 +315,7 @@ class TypeInference {
|
|
|
315
315
|
}
|
|
316
316
|
}
|
|
317
317
|
static isUnclearType(type) {
|
|
318
|
+
// TODO: For UnionType, IntersectionType and TupleType, it should recurse check every item of them.
|
|
318
319
|
if (!type || type instanceof Type_1.UnknownType || type instanceof Type_1.UnclearReferenceType
|
|
319
320
|
|| type instanceof Type_1.NullType || type instanceof Type_1.UndefinedType) {
|
|
320
321
|
return true;
|
|
@@ -323,14 +324,30 @@ class TypeInference {
|
|
|
323
324
|
&& type.getClassSignature().getDeclaringFileSignature().getFileName() === Const_1.UNKNOWN_FILE_NAME) {
|
|
324
325
|
return true;
|
|
325
326
|
}
|
|
326
|
-
else if (type instanceof Type_1.UnionType) {
|
|
327
|
-
return !!type.getTypes().find(t => t
|
|
327
|
+
else if (type instanceof Type_1.UnionType || type instanceof Type_1.IntersectionType || type instanceof Type_1.TupleType) {
|
|
328
|
+
return !!type.getTypes().find(t => this.hasUnclearReferenceType(t));
|
|
328
329
|
}
|
|
329
330
|
else if (type instanceof Type_1.ArrayType) {
|
|
330
|
-
return (type.getBaseType()
|
|
331
|
+
return this.hasUnclearReferenceType(type.getBaseType());
|
|
331
332
|
}
|
|
332
333
|
else if (type instanceof Type_1.AliasType) {
|
|
333
|
-
return (type.getOriginalType()
|
|
334
|
+
return this.hasUnclearReferenceType(type.getOriginalType());
|
|
335
|
+
}
|
|
336
|
+
return false;
|
|
337
|
+
}
|
|
338
|
+
// This is the temporally function to check unclearReferenceType recursively and can be removed after typeInfer supports multiple candidate types.
|
|
339
|
+
static hasUnclearReferenceType(type) {
|
|
340
|
+
if (type instanceof Type_1.UnclearReferenceType) {
|
|
341
|
+
return true;
|
|
342
|
+
}
|
|
343
|
+
else if (type instanceof Type_1.UnionType || type instanceof Type_1.IntersectionType || type instanceof Type_1.TupleType) {
|
|
344
|
+
return !!type.getTypes().find(t => this.hasUnclearReferenceType(t));
|
|
345
|
+
}
|
|
346
|
+
else if (type instanceof Type_1.ArrayType) {
|
|
347
|
+
return this.hasUnclearReferenceType(type.getBaseType());
|
|
348
|
+
}
|
|
349
|
+
else if (type instanceof Type_1.AliasType) {
|
|
350
|
+
return this.hasUnclearReferenceType(type.getOriginalType());
|
|
334
351
|
}
|
|
335
352
|
return false;
|
|
336
353
|
}
|
|
@@ -447,9 +464,6 @@ class TypeInference {
|
|
|
447
464
|
return new Type_1.ArrayType((_a = realTypes[0]) !== null && _a !== void 0 ? _a : Type_1.AnyType.getInstance(), 1);
|
|
448
465
|
}
|
|
449
466
|
let type = this.inferUnclearRefName(urType.getName(), arkClass);
|
|
450
|
-
if (type instanceof Type_1.AliasType) {
|
|
451
|
-
return type;
|
|
452
|
-
}
|
|
453
467
|
return type ? this.replaceTypeWithReal(type, realTypes) : null;
|
|
454
468
|
}
|
|
455
469
|
/**
|
|
@@ -629,6 +643,11 @@ class TypeInference {
|
|
|
629
643
|
type.flatType().forEach(t => types.push(this.replaceTypeWithReal(t, realTypes)));
|
|
630
644
|
return new Type_1.UnionType(types, this.replaceTypeWithReal(type.getCurrType(), realTypes));
|
|
631
645
|
}
|
|
646
|
+
else if (type instanceof Type_1.IntersectionType && realTypes) {
|
|
647
|
+
const types = [];
|
|
648
|
+
type.getTypes().forEach(t => types.push(this.replaceTypeWithReal(t, realTypes)));
|
|
649
|
+
return new Type_1.IntersectionType(types);
|
|
650
|
+
}
|
|
632
651
|
else if (type instanceof Type_1.ArrayType && realTypes) {
|
|
633
652
|
const replacedBaseType = this.replaceTypeWithReal(type.getBaseType(), realTypes);
|
|
634
653
|
return new Type_1.ArrayType(replacedBaseType, type.getDimension());
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import * as ts from 'ohos-typescript';
|
|
2
|
-
import { Local } from '
|
|
3
|
-
import { ArkAliasTypeDefineStmt } from '
|
|
4
|
-
import { Cfg } from '../
|
|
5
|
-
import { ArkClass } from '
|
|
6
|
-
import { ArkMethod } from '
|
|
7
|
-
import { AliasType } from '
|
|
8
|
-
import { Trap } from '
|
|
9
|
-
import { GlobalRef } from '
|
|
2
|
+
import { Local } from '../../base/Local';
|
|
3
|
+
import { ArkAliasTypeDefineStmt } from '../../base/Stmt';
|
|
4
|
+
import { Cfg } from '../Cfg';
|
|
5
|
+
import { ArkClass } from '../../model/ArkClass';
|
|
6
|
+
import { ArkMethod } from '../../model/ArkMethod';
|
|
7
|
+
import { AliasType } from '../../base/Type';
|
|
8
|
+
import { Trap } from '../../base/Trap';
|
|
9
|
+
import { GlobalRef } from '../../base/Ref';
|
|
10
10
|
declare class StatementBuilder {
|
|
11
11
|
type: string;
|
|
12
12
|
code: string;
|
|
@@ -19,7 +19,7 @@ declare class StatementBuilder {
|
|
|
19
19
|
astNode: ts.Node | null;
|
|
20
20
|
scopeID: number;
|
|
21
21
|
addressCode3: string[];
|
|
22
|
-
block:
|
|
22
|
+
block: BlockBuilder | null;
|
|
23
23
|
ifExitPass: boolean;
|
|
24
24
|
passTmies: number;
|
|
25
25
|
numOfIdentifier: number;
|
|
@@ -29,18 +29,27 @@ declare class StatementBuilder {
|
|
|
29
29
|
declare class ConditionStatementBuilder extends StatementBuilder {
|
|
30
30
|
nextT: StatementBuilder | null;
|
|
31
31
|
nextF: StatementBuilder | null;
|
|
32
|
-
loopBlock:
|
|
32
|
+
loopBlock: BlockBuilder | null;
|
|
33
33
|
condition: string;
|
|
34
34
|
doStatement: StatementBuilder | null;
|
|
35
35
|
constructor(type: string, code: string, astNode: ts.Node, scopeID: number);
|
|
36
36
|
}
|
|
37
|
-
declare class SwitchStatementBuilder extends StatementBuilder {
|
|
37
|
+
export declare class SwitchStatementBuilder extends StatementBuilder {
|
|
38
38
|
nexts: StatementBuilder[];
|
|
39
39
|
cases: Case[];
|
|
40
40
|
default: StatementBuilder | null;
|
|
41
41
|
afterSwitch: StatementBuilder | null;
|
|
42
42
|
constructor(type: string, code: string, astNode: ts.Node, scopeID: number);
|
|
43
43
|
}
|
|
44
|
+
export declare class TryStatementBuilder extends StatementBuilder {
|
|
45
|
+
tryFirst: StatementBuilder | null;
|
|
46
|
+
tryExit: StatementBuilder | null;
|
|
47
|
+
catchStatement: StatementBuilder | null;
|
|
48
|
+
catchError: string;
|
|
49
|
+
finallyStatement: StatementBuilder | null;
|
|
50
|
+
afterFinal: StatementBuilder | null;
|
|
51
|
+
constructor(type: string, code: string, astNode: ts.Node, scopeID: number);
|
|
52
|
+
}
|
|
44
53
|
declare class Case {
|
|
45
54
|
value: string;
|
|
46
55
|
stmt: StatementBuilder;
|
|
@@ -64,11 +73,11 @@ declare class Scope {
|
|
|
64
73
|
id: number;
|
|
65
74
|
constructor(id: number);
|
|
66
75
|
}
|
|
67
|
-
declare class
|
|
76
|
+
export declare class BlockBuilder {
|
|
68
77
|
id: number;
|
|
69
78
|
stmts: StatementBuilder[];
|
|
70
|
-
nexts:
|
|
71
|
-
lasts:
|
|
79
|
+
nexts: BlockBuilder[];
|
|
80
|
+
lasts: BlockBuilder[];
|
|
72
81
|
walked: boolean;
|
|
73
82
|
constructor(id: number, stmts: StatementBuilder[]);
|
|
74
83
|
}
|
|
@@ -93,7 +102,7 @@ export declare class CfgBuilder {
|
|
|
93
102
|
scopes: Scope[];
|
|
94
103
|
tempVariableNum: number;
|
|
95
104
|
current3ACstm: StatementBuilder;
|
|
96
|
-
blocks:
|
|
105
|
+
blocks: BlockBuilder[];
|
|
97
106
|
currentDeclarationKeyword: string;
|
|
98
107
|
variables: Variable[];
|
|
99
108
|
declaringClass: ArkClass;
|
|
@@ -122,9 +131,9 @@ export declare class CfgBuilder {
|
|
|
122
131
|
addStmt2BlockStmtQueueInSpecialCase(stmt: StatementBuilder, stmtQueue: StatementBuilder[]): StatementBuilder | null;
|
|
123
132
|
addStmt2BlockStmtQueue(stmt: StatementBuilder, stmtQueue: StatementBuilder[]): StatementBuilder | null;
|
|
124
133
|
buildBlocks(): void;
|
|
125
|
-
buildConditionNextBlocks(originStatement: ConditionStatementBuilder, block:
|
|
126
|
-
buildSwitchNextBlocks(originStatement: SwitchStatementBuilder, block:
|
|
127
|
-
buildNormalNextBlocks(originStatement: StatementBuilder, block:
|
|
134
|
+
buildConditionNextBlocks(originStatement: ConditionStatementBuilder, block: BlockBuilder, isLastStatement: boolean): void;
|
|
135
|
+
buildSwitchNextBlocks(originStatement: SwitchStatementBuilder, block: BlockBuilder, isLastStatement: boolean): void;
|
|
136
|
+
buildNormalNextBlocks(originStatement: StatementBuilder, block: BlockBuilder, isLastStatement: boolean): void;
|
|
128
137
|
buildBlocksNextLast(): void;
|
|
129
138
|
addReturnBlock(returnStatement: StatementBuilder, notReturnStmts: StatementBuilder[]): void;
|
|
130
139
|
addReturnStmt(): void;
|
|
@@ -133,57 +142,36 @@ export declare class CfgBuilder {
|
|
|
133
142
|
CfgBuilder2Array(stmt: StatementBuilder): void;
|
|
134
143
|
getDotEdges(stmt: StatementBuilder): void;
|
|
135
144
|
errorTest(stmt: StatementBuilder): void;
|
|
136
|
-
printBlocks(): string;
|
|
137
145
|
buildStatementBuilder4ArrowFunction(stmt: ts.Node): void;
|
|
138
146
|
buildCfgBuilder(): void;
|
|
139
147
|
private handleBuilder;
|
|
140
148
|
isBodyEmpty(): boolean;
|
|
141
|
-
|
|
149
|
+
buildCfg(): {
|
|
142
150
|
cfg: Cfg;
|
|
143
151
|
locals: Set<Local>;
|
|
144
152
|
globals: Map<string, GlobalRef> | null;
|
|
145
153
|
aliasTypeMap: Map<string, [AliasType, ArkAliasTypeDefineStmt]>;
|
|
146
154
|
traps: Trap[];
|
|
147
155
|
};
|
|
148
|
-
|
|
156
|
+
buildCfgForSimpleArrowFunction(): {
|
|
149
157
|
cfg: Cfg;
|
|
150
158
|
locals: Set<Local>;
|
|
151
159
|
globals: Map<string, GlobalRef> | null;
|
|
152
160
|
aliasTypeMap: Map<string, [AliasType, ArkAliasTypeDefineStmt]>;
|
|
153
161
|
traps: Trap[];
|
|
154
162
|
};
|
|
155
|
-
|
|
163
|
+
buildNormalCfg(): {
|
|
156
164
|
cfg: Cfg;
|
|
157
165
|
locals: Set<Local>;
|
|
158
166
|
globals: Map<string, GlobalRef> | null;
|
|
159
167
|
aliasTypeMap: Map<string, [AliasType, ArkAliasTypeDefineStmt]>;
|
|
160
168
|
traps: Trap[];
|
|
161
169
|
};
|
|
170
|
+
private initializeBuild;
|
|
171
|
+
private processBlocks;
|
|
172
|
+
private adjustBlocks;
|
|
173
|
+
private createCfg;
|
|
162
174
|
private linkBasicBlocks;
|
|
163
|
-
private rebuildBlocksContainConditionalOperator;
|
|
164
|
-
private relinkPrevAndSuccOfBlockContainConditionalOperator;
|
|
165
|
-
private generateBlocksContainConditionalOperatorGroup;
|
|
166
|
-
private generateBlocksContainSingleConditionalOperator;
|
|
167
|
-
private generateBlockWithoutConditionalOperator;
|
|
168
|
-
private deleteDummyConditionalOperatorStmt;
|
|
169
|
-
private findFirstConditionalOperator;
|
|
170
|
-
private removeUnnecessaryBlocksInConditionalOperator;
|
|
171
|
-
private replaceTempRecursively;
|
|
172
|
-
private rebuildBlocksInLoop;
|
|
173
|
-
private doesPrevBlockBuilderContainLoop;
|
|
174
|
-
private insertBeforeConditionBlockBuilder;
|
|
175
|
-
private findIteratorIdx;
|
|
176
|
-
private adjustIncrementorStmts;
|
|
177
|
-
private buildTraps;
|
|
178
|
-
private buildTrapsIfNoFinally;
|
|
179
|
-
private buildTrapsIfFinallyExist;
|
|
180
|
-
private getAllBlocksBFS;
|
|
181
|
-
private copyFinallyBlocks;
|
|
182
|
-
private copyBlocks;
|
|
183
|
-
private copyStmt;
|
|
184
|
-
private buildSwitch;
|
|
185
|
-
private generateIfBlocksForCases;
|
|
186
|
-
private linkIfBlockAndCaseBlock;
|
|
187
175
|
}
|
|
188
176
|
export {};
|
|
189
177
|
//# sourceMappingURL=CfgBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CfgBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/CfgBuilder.ts"],"names":[],"mappings":"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"}
|