arkanalyzer 1.0.6 → 1.0.8
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/config/arkanalyzer.json +8 -0
- package/docs/IR2ts-stmt.md +81 -0
- package/docs/IR2ts.md +82 -0
- package/lib/Config.d.ts +29 -1
- package/lib/Config.d.ts.map +1 -1
- package/lib/Config.js +44 -11
- package/lib/Scene.d.ts +152 -9
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +233 -66
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts +2 -1
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/AbstractAnalysis.js +14 -7
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.js +2 -4
- package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/RapidTypeAnalysis.js +2 -3
- package/lib/callgraph/common/Statistics.js +1 -1
- package/lib/callgraph/model/BaseGraph.js +2 -2
- package/lib/callgraph/model/CallGraph.d.ts +3 -2
- package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
- package/lib/callgraph/model/CallGraph.js +23 -14
- package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +2 -2
- package/lib/callgraph/model/builder/CallGraphBuilder.js +3 -3
- package/lib/callgraph/pointerAnalysis/Context.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Context.js +0 -1
- package/lib/callgraph/pointerAnalysis/Pag.d.ts +36 -9
- package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.js +130 -37
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +34 -5
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +479 -126
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +6 -0
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +107 -45
- package/lib/callgraph/pointerAnalysis/PtsDS.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PtsDS.js +0 -2
- package/lib/core/base/Constant.d.ts +37 -5
- package/lib/core/base/Constant.d.ts.map +1 -1
- package/lib/core/base/Constant.js +58 -8
- package/lib/core/base/Expr.d.ts +98 -13
- package/lib/core/base/Expr.d.ts.map +1 -1
- package/lib/core/base/Expr.js +295 -127
- package/lib/core/base/Local.d.ts +70 -5
- package/lib/core/base/Local.d.ts.map +1 -1
- package/lib/core/base/Local.js +77 -4
- package/lib/core/base/Ref.d.ts +79 -5
- package/lib/core/base/Ref.d.ts.map +1 -1
- package/lib/core/base/Ref.js +143 -38
- package/lib/core/base/Stmt.d.ts +126 -12
- package/lib/core/base/Stmt.d.ts.map +1 -1
- package/lib/core/base/Stmt.js +135 -28
- package/lib/core/base/Type.d.ts +11 -2
- package/lib/core/base/Type.d.ts.map +1 -1
- package/lib/core/base/Type.js +47 -42
- package/lib/core/base/Value.d.ts +24 -2
- package/lib/core/base/Value.d.ts.map +1 -1
- package/lib/core/common/ArkError.d.ts +15 -0
- package/lib/core/common/ArkError.d.ts.map +1 -0
- package/lib/core/common/ArkError.js +28 -0
- package/lib/core/common/ArkIRTransformer.d.ts +12 -5
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkIRTransformer.js +90 -45
- package/lib/core/common/BodyBuilder.d.ts +2 -0
- package/lib/core/common/BodyBuilder.d.ts.map +1 -1
- package/lib/core/common/BodyBuilder.js +5 -2
- package/lib/core/common/Builtin.js +1 -1
- package/lib/core/common/CfgBuilder.d.ts +12 -7
- package/lib/core/common/CfgBuilder.d.ts.map +1 -1
- package/lib/core/common/CfgBuilder.js +336 -140
- package/lib/core/common/Const.d.ts +15 -10
- package/lib/core/common/Const.d.ts.map +1 -1
- package/lib/core/common/Const.js +18 -11
- package/lib/core/common/DummyMainCreater.d.ts +5 -4
- package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
- package/lib/core/common/DummyMainCreater.js +43 -28
- package/lib/core/common/EtsConst.d.ts +1 -0
- package/lib/core/common/EtsConst.d.ts.map +1 -1
- package/lib/core/common/EtsConst.js +2 -1
- package/lib/core/common/ExprUseReplacer.js +8 -8
- package/lib/core/common/IRUtils.d.ts +7 -0
- package/lib/core/common/IRUtils.d.ts.map +1 -1
- package/lib/core/common/IRUtils.js +34 -2
- package/lib/core/common/ModelUtils.d.ts +1 -0
- package/lib/core/common/ModelUtils.d.ts.map +1 -1
- package/lib/core/common/ModelUtils.js +39 -36
- package/lib/core/common/RefUseReplacer.js +3 -3
- package/lib/core/common/StmtUseReplacer.js +4 -4
- package/lib/core/common/TSConst.d.ts +10 -3
- package/lib/core/common/TSConst.d.ts.map +1 -1
- package/lib/core/common/TSConst.js +11 -4
- package/lib/core/common/TypeInference.d.ts +8 -2
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +222 -90
- package/lib/core/common/ValueUtil.d.ts +0 -4
- package/lib/core/common/ValueUtil.d.ts.map +1 -1
- package/lib/core/common/ValueUtil.js +10 -27
- package/lib/core/common/VisibleValue.js +1 -1
- package/lib/core/dataflow/DataflowProblem.d.ts +1 -0
- package/lib/core/dataflow/DataflowProblem.d.ts.map +1 -1
- package/lib/core/dataflow/DataflowProblem.js +4 -4
- package/lib/core/dataflow/DataflowSolver.d.ts +20 -16
- package/lib/core/dataflow/DataflowSolver.d.ts.map +1 -1
- package/lib/core/dataflow/DataflowSolver.js +67 -78
- package/lib/core/dataflow/TiantAnalysis.d.ts +1 -0
- package/lib/core/dataflow/TiantAnalysis.d.ts.map +1 -1
- package/lib/core/dataflow/TiantAnalysis.js +42 -28
- package/lib/core/dataflow/UndefinedVariable.d.ts +15 -1
- package/lib/core/dataflow/UndefinedVariable.d.ts.map +1 -1
- package/lib/core/dataflow/UndefinedVariable.js +122 -76
- package/lib/core/dataflow/Util.d.ts +5 -1
- package/lib/core/dataflow/Util.d.ts.map +1 -1
- package/lib/core/dataflow/Util.js +43 -22
- package/lib/core/graph/BasicBlock.d.ts +72 -0
- package/lib/core/graph/BasicBlock.d.ts.map +1 -1
- package/lib/core/graph/BasicBlock.js +165 -3
- package/lib/core/graph/Cfg.d.ts +30 -1
- package/lib/core/graph/Cfg.d.ts.map +1 -1
- package/lib/core/graph/Cfg.js +131 -11
- package/lib/core/graph/DominanceFinder.js +7 -7
- package/lib/core/graph/DominanceTree.js +4 -4
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/ViewTreeBuilder.js +6 -5
- package/lib/core/model/ArkBaseModel.d.ts +59 -0
- package/lib/core/model/ArkBaseModel.d.ts.map +1 -0
- package/lib/core/model/ArkBaseModel.js +271 -0
- package/lib/core/model/ArkBody.d.ts +3 -9
- package/lib/core/model/ArkBody.d.ts.map +1 -1
- package/lib/core/model/ArkBody.js +3 -14
- package/lib/core/model/ArkClass.d.ts +107 -13
- package/lib/core/model/ArkClass.d.ts.map +1 -1
- package/lib/core/model/ArkClass.js +152 -54
- package/lib/core/model/ArkExport.d.ts +8 -7
- package/lib/core/model/ArkExport.d.ts.map +1 -1
- package/lib/core/model/ArkExport.js +16 -18
- package/lib/core/model/ArkField.d.ts +16 -13
- package/lib/core/model/ArkField.d.ts.map +1 -1
- package/lib/core/model/ArkField.js +18 -62
- package/lib/core/model/ArkFile.d.ts +42 -0
- package/lib/core/model/ArkFile.d.ts.map +1 -1
- package/lib/core/model/ArkFile.js +58 -0
- package/lib/core/model/ArkImport.d.ts +9 -7
- package/lib/core/model/ArkImport.d.ts.map +1 -1
- package/lib/core/model/ArkImport.js +11 -12
- package/lib/core/model/ArkMetadata.d.ts +20 -0
- package/lib/core/model/ArkMetadata.d.ts.map +1 -0
- package/lib/core/model/ArkMetadata.js +44 -0
- package/lib/core/model/ArkMethod.d.ts +195 -17
- package/lib/core/model/ArkMethod.d.ts.map +1 -1
- package/lib/core/model/ArkMethod.js +363 -46
- package/lib/core/model/ArkNamespace.d.ts +6 -8
- package/lib/core/model/ArkNamespace.d.ts.map +1 -1
- package/lib/core/model/ArkNamespace.js +16 -20
- package/lib/core/model/ArkSignature.d.ts +41 -0
- package/lib/core/model/ArkSignature.d.ts.map +1 -1
- package/lib/core/model/ArkSignature.js +76 -19
- package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkClassBuilder.js +60 -49
- package/lib/core/model/builder/ArkExportBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkExportBuilder.js +12 -6
- package/lib/core/model/builder/ArkFieldBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkFieldBuilder.js +13 -9
- package/lib/core/model/builder/ArkFileBuilder.js +1 -3
- package/lib/core/model/builder/ArkImportBuilder.d.ts +2 -1
- package/lib/core/model/builder/ArkImportBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkImportBuilder.js +16 -13
- package/lib/core/model/builder/ArkMethodBuilder.d.ts +3 -1
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +105 -45
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkNamespaceBuilder.js +4 -5
- package/lib/core/model/builder/builderUtils.d.ts +2 -1
- package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.js +63 -43
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +4 -3
- package/lib/save/ArkStream.js +1 -1
- package/lib/save/DotPrinter.d.ts.map +1 -1
- package/lib/save/DotPrinter.js +1 -15
- package/lib/save/GraphPrinter.d.ts.map +1 -1
- package/lib/save/GraphPrinter.js +4 -2
- package/lib/save/JsonPrinter.js +5 -5
- package/lib/save/ViewTreePrinter.d.ts +16 -0
- package/lib/save/ViewTreePrinter.d.ts.map +1 -0
- package/lib/save/ViewTreePrinter.js +130 -0
- package/lib/save/source/SourceBase.d.ts +2 -2
- package/lib/save/source/SourceBase.d.ts.map +1 -1
- package/lib/save/source/SourceBase.js +6 -13
- package/lib/save/source/SourceBody.d.ts.map +1 -1
- package/lib/save/source/SourceBody.js +27 -14
- package/lib/save/source/SourceClass.d.ts.map +1 -1
- package/lib/save/source/SourceClass.js +12 -8
- package/lib/save/source/SourceField.d.ts.map +1 -1
- package/lib/save/source/SourceField.js +6 -2
- package/lib/save/source/SourceMethod.d.ts.map +1 -1
- package/lib/save/source/SourceMethod.js +10 -3
- package/lib/save/source/SourceModule.d.ts.map +1 -1
- package/lib/save/source/SourceModule.js +16 -10
- package/lib/save/source/SourceNamespace.d.ts.map +1 -1
- package/lib/save/source/SourceNamespace.js +4 -0
- 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 +37 -25
- package/lib/save/source/SourceTransformer.d.ts +6 -0
- package/lib/save/source/SourceTransformer.d.ts.map +1 -1
- package/lib/save/source/SourceTransformer.js +82 -51
- package/lib/save/source/SourceUtils.d.ts.map +1 -1
- package/lib/save/source/SourceUtils.js +12 -11
- package/lib/transformer/StaticSingleAssignmentFormer.js +3 -3
- package/lib/utils/CfgStructualAnalysis.d.ts +1 -0
- package/lib/utils/CfgStructualAnalysis.d.ts.map +1 -1
- package/lib/utils/CfgStructualAnalysis.js +103 -72
- package/lib/utils/callGraphUtils.d.ts.map +1 -1
- package/lib/utils/callGraphUtils.js +7 -10
- package/lib/utils/crypto_utils.d.ts +6 -0
- package/lib/utils/crypto_utils.d.ts.map +1 -0
- package/lib/utils/crypto_utils.js +57 -0
- package/lib/utils/entryMethodUtils.d.ts.map +1 -1
- package/lib/utils/entryMethodUtils.js +27 -26
- package/lib/utils/getAllFiles.d.ts +1 -1
- package/lib/utils/getAllFiles.d.ts.map +1 -1
- package/lib/utils/getAllFiles.js +4 -5
- package/lib/utils/logger.js +2 -2
- package/package.json +3 -2
|
@@ -46,6 +46,8 @@ export declare class PointerAnalysis extends AbstractAnalysis {
|
|
|
46
46
|
* 3. 在addDynamicCall里对传入指针过滤(已处理指针和未处理指针)
|
|
47
47
|
*/
|
|
48
48
|
private onTheFlyDynamicCallSolve;
|
|
49
|
+
private processDynCallSite;
|
|
50
|
+
private processUnknownCallSite;
|
|
49
51
|
private addToReanalyze;
|
|
50
52
|
/**
|
|
51
53
|
* compare interface
|
|
@@ -53,6 +55,9 @@ export declare class PointerAnalysis extends AbstractAnalysis {
|
|
|
53
55
|
noAlias(leftValue: Value, rightValue: Value): boolean;
|
|
54
56
|
mayAlias(leftValue: Value, rightValue: Value): boolean;
|
|
55
57
|
getRelatedNodes(value: Value): Set<Value>;
|
|
58
|
+
private processRelatedNode;
|
|
59
|
+
private addIncomingEdgesToWorkList;
|
|
60
|
+
private addOutgoingEdgesToWorkList;
|
|
56
61
|
private detectTypeDiff;
|
|
57
62
|
getTypeDiffMap(): Map<Value, Set<Type>>;
|
|
58
63
|
protected resolveCall(sourceMethod: NodeID, invokeStmt: Stmt): CallSite[];
|
|
@@ -60,5 +65,6 @@ export declare class PointerAnalysis extends AbstractAnalysis {
|
|
|
60
65
|
getHandledFuncs(): FuncID[];
|
|
61
66
|
getPTAConfig(): PointerAnalysisConfig;
|
|
62
67
|
private dumpUnhandledFunctions;
|
|
68
|
+
mergeInstanceFieldMap(src: Map<number, number[]>, dst: Map<number, number[]>): Map<number, number[]>;
|
|
63
69
|
}
|
|
64
70
|
//# sourceMappingURL=PointerAnalysis.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PointerAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PointerAnalysis.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,OAAO,EAAE,SAAS,EAAiB,QAAQ,EAAe,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAa,IAAI,EAAe,MAAM,sBAAsB,CAAC;AAEpE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAI5C,OAAO,EAAE,GAAG,EAAgF,MAAM,OAAO,CAAC;AAE1G,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"PointerAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PointerAnalysis.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,OAAO,EAAE,SAAS,EAAiB,QAAQ,EAAe,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAa,IAAI,EAAe,MAAM,sBAAsB,CAAC;AAEpE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAI5C,OAAO,EAAE,GAAG,EAAgF,MAAM,OAAO,CAAC;AAE1G,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAMhE,qBAAa,eAAgB,SAAQ,gBAAgB;IACjD,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,GAAG,CAA6C;IACxD,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,QAAQ,CAAY;IAE5B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,MAAM,CAAwB;gBAE1B,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB;IAW1E,MAAM,CAAC,8BAA8B,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,qBAAqB,GAAG,eAAe;IAuB3G,SAAS,CAAC,IAAI;IAYP,KAAK;IAMZ,OAAO,CAAC,WAAW;IAgBnB,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAK/C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE;IAIhC,OAAO,CAAC,eAAe;IAoBvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,eAAe;IAkDvB,OAAO,CAAC,kBAAkB;IA2B1B,OAAO,CAAC,mBAAmB;IA0B3B;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,SAAS;IAoBjB;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAuBhC,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,sBAAsB;IAoB9B,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACI,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,GAAG,OAAO;IAmCrD,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,GAAG,OAAO;IAItD,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IA6BhD,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,0BAA0B;IAYlC,OAAO,CAAC,0BAA0B;IAYlC,OAAO,CAAC,cAAc;IA2Cf,cAAc,IAAI,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAI9C,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IAIlE,iBAAiB,IAAI,MAAM,EAAE;IAI7B,eAAe,IAAI,MAAM,EAAE;IAI3B,YAAY,IAAI,qBAAqB;IAI5C,OAAO,CAAC,sBAAsB;IAgCvB,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAU9G"}
|
|
@@ -54,6 +54,7 @@ const Pag_1 = require("./Pag");
|
|
|
54
54
|
const PagBuilder_1 = require("./PagBuilder");
|
|
55
55
|
const PointerAnalysisConfig_1 = require("./PointerAnalysisConfig");
|
|
56
56
|
const PtsDS_1 = require("./PtsDS");
|
|
57
|
+
const Local_1 = require("../../core/base/Local");
|
|
57
58
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'PTA');
|
|
58
59
|
class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
59
60
|
constructor(p, cg, s, config) {
|
|
@@ -181,19 +182,29 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
181
182
|
return true;
|
|
182
183
|
}
|
|
183
184
|
handleLoadWrite(nodeID) {
|
|
185
|
+
var _a;
|
|
184
186
|
let node = this.pag.getNode(nodeID);
|
|
187
|
+
let nodeValue = node.getValue();
|
|
185
188
|
let diffPts = this.ptd.getDiffPts(nodeID);
|
|
186
|
-
if (!diffPts || diffPts.count()
|
|
189
|
+
if (!diffPts || diffPts.count() === 0) {
|
|
187
190
|
return false;
|
|
188
191
|
}
|
|
189
192
|
// get related field node with current node's value
|
|
190
|
-
let instanceFieldNodeMap = this.pag.getNodesByBaseValue(
|
|
191
|
-
|
|
192
|
-
|
|
193
|
+
let instanceFieldNodeMap = (_a = this.pag.getNodesByBaseValue(nodeValue)) !== null && _a !== void 0 ? _a : new Map();
|
|
194
|
+
// get intra procedural field node by exportMap
|
|
195
|
+
let intraProceduralFieldNodeMap = new Map();
|
|
196
|
+
if (nodeValue instanceof Local_1.Local) {
|
|
197
|
+
this.pagBuilder.getExportVariableMap(nodeValue).forEach((dst) => {
|
|
198
|
+
var _a;
|
|
199
|
+
let temp = (_a = this.pag.getNodesByBaseValue(dst)) !== null && _a !== void 0 ? _a : new Map();
|
|
200
|
+
intraProceduralFieldNodeMap = this.mergeInstanceFieldMap(instanceFieldNodeMap, temp);
|
|
201
|
+
});
|
|
193
202
|
}
|
|
194
203
|
instanceFieldNodeMap.forEach((nodeIDs, cid) => {
|
|
195
204
|
// TODO: check cid
|
|
196
|
-
|
|
205
|
+
// cid === -1 will escape the check, mainly for globalThis
|
|
206
|
+
let baseCid = node.getCid();
|
|
207
|
+
if (baseCid !== -1 && cid !== baseCid) {
|
|
197
208
|
return;
|
|
198
209
|
}
|
|
199
210
|
nodeIDs.forEach((nodeID) => {
|
|
@@ -203,13 +214,21 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
203
214
|
this.handleFieldOutEdges(fieldNode, diffPts);
|
|
204
215
|
});
|
|
205
216
|
});
|
|
217
|
+
// without cid check, because closure and export is under different cid
|
|
218
|
+
intraProceduralFieldNodeMap.forEach((nodeIDs) => {
|
|
219
|
+
nodeIDs.forEach((nodeID) => {
|
|
220
|
+
// get abstract field node
|
|
221
|
+
let fieldNode = this.pag.getNode(nodeID);
|
|
222
|
+
this.handleFieldInEdges(fieldNode, diffPts);
|
|
223
|
+
this.handleFieldOutEdges(fieldNode, diffPts);
|
|
224
|
+
});
|
|
225
|
+
});
|
|
206
226
|
return true;
|
|
207
227
|
}
|
|
208
228
|
handleFieldInEdges(fieldNode, diffPts) {
|
|
209
229
|
fieldNode.getIncomingEdge().forEach((edge) => {
|
|
210
230
|
if (edge.getKind() !== Pag_1.PagEdgeKind.Write) {
|
|
211
231
|
return;
|
|
212
|
-
//throw new Error ("field node in edge is not write edge")
|
|
213
232
|
}
|
|
214
233
|
let srcNode = edge.getSrcNode();
|
|
215
234
|
this.ptaStat.numProcessedWrite++;
|
|
@@ -271,7 +290,7 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
271
290
|
}
|
|
272
291
|
handlePt(nodeID) {
|
|
273
292
|
let realDiff = this.ptd.calculateDiff(nodeID, nodeID);
|
|
274
|
-
if (realDiff.count()
|
|
293
|
+
if (realDiff.count() !== 0) {
|
|
275
294
|
// record the updated nodes
|
|
276
295
|
this.pagBuilder.addUpdatedNode(nodeID, realDiff);
|
|
277
296
|
}
|
|
@@ -308,19 +327,8 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
308
327
|
logger.warn(`node ${nodeID} is not local node, value: ${node.getValue()}`);
|
|
309
328
|
return;
|
|
310
329
|
}
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
logger.warn(`node ${nodeID} has no related dynamic call site`);
|
|
314
|
-
return;
|
|
315
|
-
}
|
|
316
|
-
logger.info(`[process dynamic callsite] node ${nodeID}`);
|
|
317
|
-
dynCallSites.forEach((dynCallsite) => {
|
|
318
|
-
for (let pt of pts) {
|
|
319
|
-
let srcNodes = this.pagBuilder.addDynamicCallEdge(dynCallsite, pt, node.getCid());
|
|
320
|
-
changed = this.addToReanalyze(srcNodes) || changed;
|
|
321
|
-
}
|
|
322
|
-
processedCallSites.add(dynCallsite);
|
|
323
|
-
});
|
|
330
|
+
changed = this.processDynCallSite(node, pts, processedCallSites) || changed;
|
|
331
|
+
changed = this.processUnknownCallSite(node, pts) || changed;
|
|
324
332
|
});
|
|
325
333
|
this.pagBuilder.resetUpdatedNodes();
|
|
326
334
|
let srcNodes = this.pagBuilder.handleUnprocessedCallSites(processedCallSites);
|
|
@@ -329,6 +337,39 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
329
337
|
this.initWorklist();
|
|
330
338
|
return changed;
|
|
331
339
|
}
|
|
340
|
+
processDynCallSite(node, pts, processedCallSites) {
|
|
341
|
+
let changed = false;
|
|
342
|
+
let dynCallSites = node.getRelatedDynCallSites();
|
|
343
|
+
if (!dynCallSites && !node.isSdkParam()) {
|
|
344
|
+
logger.warn(`node ${node.getID()} has no related dynamic call site`);
|
|
345
|
+
return changed;
|
|
346
|
+
}
|
|
347
|
+
logger.info(`[process dynamic callsite] node ${node.getID()}`);
|
|
348
|
+
dynCallSites.forEach((dynCallsite) => {
|
|
349
|
+
for (let pt of pts) {
|
|
350
|
+
let srcNodes = this.pagBuilder.addDynamicCallEdge(dynCallsite, pt, node.getCid());
|
|
351
|
+
changed = this.addToReanalyze(srcNodes) || changed;
|
|
352
|
+
}
|
|
353
|
+
processedCallSites.add(dynCallsite);
|
|
354
|
+
});
|
|
355
|
+
return changed;
|
|
356
|
+
}
|
|
357
|
+
processUnknownCallSite(node, pts) {
|
|
358
|
+
let changed = false;
|
|
359
|
+
let unknownCallSites = node.getRelatedUnknownCallSites();
|
|
360
|
+
if (!unknownCallSites) {
|
|
361
|
+
logger.warn(`node ${node.getID()} has no related unknown call site`);
|
|
362
|
+
return changed;
|
|
363
|
+
}
|
|
364
|
+
logger.info(`[process unknown callsite] node ${node.getID()}`);
|
|
365
|
+
unknownCallSites.forEach((unknownCallSite) => {
|
|
366
|
+
for (let pt of pts) {
|
|
367
|
+
let srcNodes = this.pagBuilder.addDynamicCallEdge(unknownCallSite, pt, node.getCid());
|
|
368
|
+
changed = this.addToReanalyze(srcNodes) || changed;
|
|
369
|
+
}
|
|
370
|
+
});
|
|
371
|
+
return changed;
|
|
372
|
+
}
|
|
332
373
|
addToReanalyze(startNodes) {
|
|
333
374
|
let flag = false;
|
|
334
375
|
for (let node of startNodes) {
|
|
@@ -346,7 +387,8 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
346
387
|
var _a, _b;
|
|
347
388
|
let leftValueNodes = (_a = this.pag.getNodesByValue(leftValue)) === null || _a === void 0 ? void 0 : _a.values();
|
|
348
389
|
let rightValueNodes = (_b = this.pag.getNodesByValue(rightValue)) === null || _b === void 0 ? void 0 : _b.values();
|
|
349
|
-
let leftValuePts = new Set()
|
|
390
|
+
let leftValuePts = new Set();
|
|
391
|
+
let rightValuePts = new Set();
|
|
350
392
|
for (let nodeID of leftValueNodes) {
|
|
351
393
|
let node = this.pag.getNode(nodeID);
|
|
352
394
|
for (let pt of node.getPointTo()) {
|
|
@@ -374,51 +416,59 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
374
416
|
return !this.noAlias(leftValue, rightValue);
|
|
375
417
|
}
|
|
376
418
|
getRelatedNodes(value) {
|
|
377
|
-
|
|
378
|
-
let valueNodes = (_a = this.pag.getNodesByValue(value)) === null || _a === void 0 ? void 0 : _a.values();
|
|
419
|
+
let valueNodes = this.pag.getNodesByValue(value);
|
|
379
420
|
let relatedAllNodes = new Set();
|
|
380
421
|
let workListNodes = [];
|
|
381
422
|
let processedNodes = new Set();
|
|
382
|
-
|
|
383
|
-
|
|
423
|
+
if (valueNodes) {
|
|
424
|
+
for (const nodeID of valueNodes.values()) {
|
|
425
|
+
workListNodes.push(nodeID);
|
|
426
|
+
}
|
|
384
427
|
}
|
|
385
428
|
while (workListNodes.length !== 0) {
|
|
386
429
|
let valueNodeID = workListNodes.shift();
|
|
387
430
|
if (processedNodes.has(valueNodeID)) {
|
|
388
431
|
continue;
|
|
389
432
|
}
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
433
|
+
this.processRelatedNode(valueNodeID, workListNodes, processedNodes);
|
|
434
|
+
}
|
|
435
|
+
processedNodes.forEach(nodeID => {
|
|
436
|
+
let valueNode = this.pag.getNode(nodeID);
|
|
437
|
+
relatedAllNodes.add(valueNode.getValue());
|
|
438
|
+
});
|
|
439
|
+
return relatedAllNodes;
|
|
440
|
+
}
|
|
441
|
+
processRelatedNode(valueNodeID, workListNodes, processedNodes) {
|
|
442
|
+
let valueNode = this.pag.getNode(valueNodeID);
|
|
443
|
+
this.addIncomingEdgesToWorkList(valueNode, workListNodes, processedNodes);
|
|
444
|
+
this.addOutgoingEdgesToWorkList(valueNode, workListNodes, processedNodes);
|
|
445
|
+
processedNodes.add(valueNodeID);
|
|
446
|
+
}
|
|
447
|
+
addIncomingEdgesToWorkList(valueNode, workListNodes, processedNodes) {
|
|
448
|
+
let inCopyEdges = valueNode.getIncomingCopyEdges();
|
|
449
|
+
if (inCopyEdges) {
|
|
395
450
|
inCopyEdges.forEach(edge => {
|
|
396
451
|
let srcID = edge.getSrcID();
|
|
397
452
|
if (!processedNodes.has(srcID)) {
|
|
398
453
|
workListNodes.push(srcID);
|
|
399
454
|
}
|
|
400
455
|
});
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
addOutgoingEdgesToWorkList(valueNode, workListNodes, processedNodes) {
|
|
459
|
+
let outCopyEdges = valueNode.getOutgoingCopyEdges();
|
|
460
|
+
if (outCopyEdges) {
|
|
405
461
|
outCopyEdges.forEach(edge => {
|
|
406
462
|
let dstID = edge.getDstID();
|
|
407
463
|
if (!processedNodes.has(dstID)) {
|
|
408
464
|
workListNodes.push(dstID);
|
|
409
465
|
}
|
|
410
466
|
});
|
|
411
|
-
processedNodes.add(valueNodeID);
|
|
412
467
|
}
|
|
413
|
-
processedNodes.forEach(nodeID => {
|
|
414
|
-
let valueNode = this.pag.getNode(nodeID);
|
|
415
|
-
relatedAllNodes.add(valueNode.getValue());
|
|
416
|
-
});
|
|
417
|
-
return relatedAllNodes;
|
|
418
468
|
}
|
|
419
469
|
detectTypeDiff(nodeId) {
|
|
420
470
|
var _a;
|
|
421
|
-
if (this.config.detectTypeDiff
|
|
471
|
+
if (this.config.detectTypeDiff === false) {
|
|
422
472
|
return;
|
|
423
473
|
}
|
|
424
474
|
this.typeDiffMap = (_a = this.typeDiffMap) !== null && _a !== void 0 ? _a : new Map();
|
|
@@ -431,14 +481,14 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
431
481
|
}
|
|
432
482
|
let findSameType = false;
|
|
433
483
|
let pts = node.getPointTo();
|
|
434
|
-
if (pts.size
|
|
484
|
+
if (pts.size === 0) {
|
|
435
485
|
return;
|
|
436
486
|
}
|
|
437
487
|
pts.forEach(pt => {
|
|
438
488
|
var _a;
|
|
439
489
|
let ptNode = this.pag.getNode(pt);
|
|
440
490
|
let type = ptNode.getValue().getType();
|
|
441
|
-
if (type.toString()
|
|
491
|
+
if (type.toString() !== origType.toString()) {
|
|
442
492
|
let diffSet = (_a = this.typeDiffMap.get(value)) !== null && _a !== void 0 ? _a : new Set();
|
|
443
493
|
this.typeDiffMap.set(value, diffSet);
|
|
444
494
|
if (!diffSet.has(type)) {
|
|
@@ -457,7 +507,8 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
457
507
|
}
|
|
458
508
|
}
|
|
459
509
|
getTypeDiffMap() {
|
|
460
|
-
|
|
510
|
+
var _a;
|
|
511
|
+
return (_a = this.typeDiffMap) !== null && _a !== void 0 ? _a : new Map();
|
|
461
512
|
}
|
|
462
513
|
resolveCall(sourceMethod, invokeStmt) {
|
|
463
514
|
return [];
|
|
@@ -484,7 +535,7 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
484
535
|
let updatedContent = '';
|
|
485
536
|
this.getUnhandledFuncs().forEach(funcID => {
|
|
486
537
|
let cgNode = this.cg.getNode(funcID);
|
|
487
|
-
if (cgNode.
|
|
538
|
+
if (cgNode.isSdkMethod()) {
|
|
488
539
|
return;
|
|
489
540
|
}
|
|
490
541
|
let f = this.cg.getArkMethodByFuncID(funcID);
|
|
@@ -499,5 +550,16 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
499
550
|
});
|
|
500
551
|
});
|
|
501
552
|
}
|
|
553
|
+
mergeInstanceFieldMap(src, dst) {
|
|
554
|
+
dst.forEach((value, key) => {
|
|
555
|
+
if (src.has(key)) {
|
|
556
|
+
src.set(key, [...src.get(key), ...value]);
|
|
557
|
+
}
|
|
558
|
+
else {
|
|
559
|
+
src.set(key, value);
|
|
560
|
+
}
|
|
561
|
+
});
|
|
562
|
+
return src;
|
|
563
|
+
}
|
|
502
564
|
}
|
|
503
565
|
exports.PointerAnalysis = PointerAnalysis;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PtsDS.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PtsDS.ts"],"names":[],"mappings":"AAeA,UAAU,GAAG;CAEZ;AAED,UAAU,cAAc,CAAC,CAAC,SAAS,GAAG;IAElC,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC;IAC3B,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC;IACzB,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC;IACzB,KAAK,IAAI,IAAI,CAAC;IACd,KAAK,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC;IAC/B,KAAK,IAAI,IAAI,CAAC;IACd,KAAK,IAAI,MAAM,CAAC;IAChB,OAAO,IAAI,OAAO,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC;IAC/B,SAAS,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC;IAChC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC;CAC5C;AAKD,qBAAa,MAAM,CAAC,CAAC,SAAS,GAAG,CAAE,YAAW,cAAc,CAAC,CAAC,CAAC;IAC3D,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;;IASZ,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;IAI1B,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;IAQxB,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;IAQxB,KAAK,IAAG,IAAI;IAOZ,KAAK,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO;IAQ3B,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO;IAS9B,KAAK,IAAI,IAAI;IAIZ,KAAK,IAAI,MAAM;IAIhB,OAAO,IAAI,OAAO;IAKlB,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO;IAU9B,SAAS,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO;IASxB,cAAc,IAAI,GAAG,CAAC,CAAC,CAAC;IAI/B,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC;CAG3C;AAED,qBAAa,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,EAAE,EAAE,SAAS,cAAc,CAAC,CAAC,CAAC;IAItD,OAAO,CAAC,SAAS;IAH7B,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvB,WAAW,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAEJ,SAAS,EAAE,UAAS,EAAE;IAK1C,KAAK,IAAI,IAAI;IAKb,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO;IAU9B,SAAS,CAAC,CAAC,EAAC,CAAC,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"PtsDS.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PtsDS.ts"],"names":[],"mappings":"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"}
|
|
@@ -120,7 +120,6 @@ class DiffPTData {
|
|
|
120
120
|
let propa = this.propaPtsMap.get(v);
|
|
121
121
|
if (propa) {
|
|
122
122
|
this.diffPtsMap.set(v, propa.clone());
|
|
123
|
-
// this.propaPtsMap.set(v, new this.DSCreator());
|
|
124
123
|
return true;
|
|
125
124
|
}
|
|
126
125
|
return false;
|
|
@@ -193,7 +192,6 @@ class DiffPTData {
|
|
|
193
192
|
let diff = this.diffPtsMap.get(v);
|
|
194
193
|
let propa = this.getPropaPtsMut(v);
|
|
195
194
|
// do not clear origin propa, only copy the pt and add it to diff
|
|
196
|
-
//let propa = this.propaPtsMap.get(v) || new this.DSCreator();
|
|
197
195
|
propa.union(diff);
|
|
198
196
|
diff.clear();
|
|
199
197
|
}
|
|
@@ -4,14 +4,46 @@ import { Value } from './Value';
|
|
|
4
4
|
* @category core/base
|
|
5
5
|
*/
|
|
6
6
|
export declare class Constant implements Value {
|
|
7
|
-
private value;
|
|
8
|
-
private type;
|
|
9
|
-
constructor(value: string, type
|
|
7
|
+
private readonly value;
|
|
8
|
+
private readonly type;
|
|
9
|
+
constructor(value: string, type: Type);
|
|
10
|
+
/**
|
|
11
|
+
* Returns the constant's value as a **string**.
|
|
12
|
+
* @returns The constant's value.
|
|
13
|
+
*/
|
|
10
14
|
getValue(): string;
|
|
11
|
-
setValue(newValue: string): void;
|
|
12
15
|
getUses(): Value[];
|
|
16
|
+
/**
|
|
17
|
+
* Returns the type of this constant.
|
|
18
|
+
* @returns The type of this constant.
|
|
19
|
+
*/
|
|
13
20
|
getType(): Type;
|
|
14
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Get a string of constant value in Constant.
|
|
23
|
+
* @returns The string of constant value.
|
|
24
|
+
*/
|
|
15
25
|
toString(): string;
|
|
16
26
|
}
|
|
27
|
+
export declare class BooleanConstant extends Constant {
|
|
28
|
+
private static readonly FALSE;
|
|
29
|
+
private static readonly TRUE;
|
|
30
|
+
constructor(value: boolean);
|
|
31
|
+
static getInstance(value: boolean): NullConstant;
|
|
32
|
+
}
|
|
33
|
+
export declare class NumberConstant extends Constant {
|
|
34
|
+
constructor(value: number);
|
|
35
|
+
}
|
|
36
|
+
export declare class StringConstant extends Constant {
|
|
37
|
+
constructor(value: string);
|
|
38
|
+
}
|
|
39
|
+
export declare class NullConstant extends Constant {
|
|
40
|
+
private static readonly INSTANCE;
|
|
41
|
+
constructor();
|
|
42
|
+
static getInstance(): NullConstant;
|
|
43
|
+
}
|
|
44
|
+
export declare class UndefinedConstant extends Constant {
|
|
45
|
+
private static readonly INSTANCE;
|
|
46
|
+
constructor();
|
|
47
|
+
static getInstance(): UndefinedConstant;
|
|
48
|
+
}
|
|
17
49
|
//# sourceMappingURL=Constant.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Constant.d.ts","sourceRoot":"","sources":["../../../src/core/base/Constant.ts"],"names":[],"mappings":"AAeA,OAAO,
|
|
1
|
+
{"version":3,"file":"Constant.d.ts","sourceRoot":"","sources":["../../../src/core/base/Constant.ts"],"names":[],"mappings":"AAeA,OAAO,EAAiD,IAAI,EAAiB,MAAM,QAAQ,CAAC;AAC5F,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC;;GAEG;AACH,qBAAa,QAAS,YAAW,KAAK;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAO;gBAEhB,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI;IAKrC;;;OAGG;IACI,QAAQ,IAAI,MAAM;IAIlB,OAAO,IAAI,KAAK,EAAE;IAIzB;;;OAGG;IACI,OAAO,IAAI,IAAI;IAItB;;;OAGG;IACI,QAAQ,IAAI,MAAM;CAS5B;AAED,qBAAa,eAAgB,SAAQ,QAAQ;IACzC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAA8B;IAC3D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAA6B;gBAE7C,KAAK,EAAE,OAAO;WAIZ,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY;CAG1D;AAED,qBAAa,cAAe,SAAQ,QAAQ;gBAC5B,KAAK,EAAE,MAAM;CAG5B;AAED,qBAAa,cAAe,SAAQ,QAAQ;gBAC5B,KAAK,EAAE,MAAM;CAG5B;AAED,qBAAa,YAAa,SAAQ,QAAQ;IACtC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAsB;;WAMxC,WAAW,IAAI,YAAY;CAG5C;AAED,qBAAa,iBAAkB,SAAQ,QAAQ;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAA2B;;WAM7C,WAAW,IAAI,iBAAiB;CAGjD"}
|
|
@@ -14,31 +14,38 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.Constant = void 0;
|
|
17
|
+
exports.UndefinedConstant = exports.NullConstant = exports.StringConstant = exports.NumberConstant = exports.BooleanConstant = exports.Constant = void 0;
|
|
18
18
|
const Type_1 = require("./Type");
|
|
19
|
+
const TSConst_1 = require("../common/TSConst");
|
|
19
20
|
/**
|
|
20
21
|
* @category core/base
|
|
21
22
|
*/
|
|
22
23
|
class Constant {
|
|
23
|
-
constructor(value, type
|
|
24
|
+
constructor(value, type) {
|
|
24
25
|
this.value = value;
|
|
25
26
|
this.type = type;
|
|
26
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Returns the constant's value as a **string**.
|
|
30
|
+
* @returns The constant's value.
|
|
31
|
+
*/
|
|
27
32
|
getValue() {
|
|
28
33
|
return this.value;
|
|
29
34
|
}
|
|
30
|
-
setValue(newValue) {
|
|
31
|
-
this.value = newValue;
|
|
32
|
-
}
|
|
33
35
|
getUses() {
|
|
34
36
|
return [];
|
|
35
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Returns the type of this constant.
|
|
40
|
+
* @returns The type of this constant.
|
|
41
|
+
*/
|
|
36
42
|
getType() {
|
|
37
43
|
return this.type;
|
|
38
44
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
45
|
+
/**
|
|
46
|
+
* Get a string of constant value in Constant.
|
|
47
|
+
* @returns The string of constant value.
|
|
48
|
+
*/
|
|
42
49
|
toString() {
|
|
43
50
|
let str = '';
|
|
44
51
|
if (this.type instanceof Type_1.StringType) {
|
|
@@ -51,3 +58,46 @@ class Constant {
|
|
|
51
58
|
}
|
|
52
59
|
}
|
|
53
60
|
exports.Constant = Constant;
|
|
61
|
+
class BooleanConstant extends Constant {
|
|
62
|
+
constructor(value) {
|
|
63
|
+
super(value.toString(), Type_1.BooleanType.getInstance());
|
|
64
|
+
}
|
|
65
|
+
static getInstance(value) {
|
|
66
|
+
return value ? this.TRUE : this.FALSE;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.BooleanConstant = BooleanConstant;
|
|
70
|
+
BooleanConstant.FALSE = new BooleanConstant(false);
|
|
71
|
+
BooleanConstant.TRUE = new BooleanConstant(true);
|
|
72
|
+
class NumberConstant extends Constant {
|
|
73
|
+
constructor(value) {
|
|
74
|
+
super(value.toString(), Type_1.NumberType.getInstance());
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.NumberConstant = NumberConstant;
|
|
78
|
+
class StringConstant extends Constant {
|
|
79
|
+
constructor(value) {
|
|
80
|
+
super(value.toString(), Type_1.StringType.getInstance());
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.StringConstant = StringConstant;
|
|
84
|
+
class NullConstant extends Constant {
|
|
85
|
+
constructor() {
|
|
86
|
+
super(TSConst_1.NULL_KEYWORD, Type_1.NullType.getInstance());
|
|
87
|
+
}
|
|
88
|
+
static getInstance() {
|
|
89
|
+
return this.INSTANCE;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.NullConstant = NullConstant;
|
|
93
|
+
NullConstant.INSTANCE = new NullConstant();
|
|
94
|
+
class UndefinedConstant extends Constant {
|
|
95
|
+
constructor() {
|
|
96
|
+
super(TSConst_1.UNDEFINED_KEYWORD, Type_1.UndefinedType.getInstance());
|
|
97
|
+
}
|
|
98
|
+
static getInstance() {
|
|
99
|
+
return this.INSTANCE;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
exports.UndefinedConstant = UndefinedConstant;
|
|
103
|
+
UndefinedConstant.INSTANCE = new UndefinedConstant();
|