arkanalyzer 1.0.93 → 2.0.0-beta1
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 +7 -0
- package/lib/Config.d.ts.map +1 -1
- package/lib/Scene.d.ts +134 -170
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +412 -976
- package/lib/callgraph/algorithm/AbstractAnalysis.js +3 -2
- package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/RapidTypeAnalysis.js +2 -3
- package/lib/callgraph/model/CallGraph.js +1 -1
- package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts +1 -3
- package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PTAUtils.js +17 -7
- package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.js +4 -14
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +2 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +1 -2
- package/lib/callgraph/pointerAnalysis/plugins/WorkerPlugin.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/plugins/WorkerPlugin.js +0 -1
- package/lib/cli/commands/cg.d.ts +1 -0
- package/lib/cli/commands/cg.d.ts.map +1 -1
- package/lib/cli/commands/cg.js +22 -18
- package/lib/cli/commands/ir.d.ts +1 -0
- package/lib/cli/commands/ir.d.ts.map +1 -1
- package/lib/cli/commands/ir.js +5 -2
- package/lib/core/base/Constant.d.ts +5 -5
- package/lib/core/base/Constant.d.ts.map +1 -1
- package/lib/core/base/Constant.js +12 -9
- package/lib/core/base/Expr.d.ts +36 -20
- package/lib/core/base/Expr.d.ts.map +1 -1
- package/lib/core/base/Expr.js +206 -94
- package/lib/core/base/Local.d.ts +10 -20
- package/lib/core/base/Local.d.ts.map +1 -1
- package/lib/core/base/Local.js +25 -28
- package/lib/core/base/Position.d.ts +6 -0
- package/lib/core/base/Position.d.ts.map +1 -1
- package/lib/core/base/Position.js +37 -11
- package/lib/core/base/Ref.d.ts +45 -33
- package/lib/core/base/Ref.d.ts.map +1 -1
- package/lib/core/base/Ref.js +225 -51
- package/lib/core/base/Stmt.d.ts +19 -9
- package/lib/core/base/Stmt.d.ts.map +1 -1
- package/lib/core/base/Stmt.js +135 -52
- package/lib/core/base/Type.d.ts +67 -4
- package/lib/core/base/Type.d.ts.map +1 -1
- package/lib/core/base/Type.js +391 -20
- package/lib/core/base/TypeExpr.d.ts +6 -4
- package/lib/core/base/TypeExpr.d.ts.map +1 -1
- package/lib/core/base/TypeExpr.js +34 -10
- package/lib/core/base/Value.d.ts +20 -2
- package/lib/core/base/Value.d.ts.map +1 -1
- package/lib/core/base/Value.js +12 -0
- package/lib/core/common/ArkIRTransformer.d.ts +18 -0
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkIRTransformer.js +94 -75
- package/lib/core/common/ArkValueTransformer.d.ts +21 -3
- package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkValueTransformer.js +458 -266
- package/lib/core/common/Builtin.d.ts +48 -24
- package/lib/core/common/Builtin.d.ts.map +1 -1
- package/lib/core/common/Builtin.js +90 -52
- package/lib/core/common/CanonicalizerValidator.d.ts +308 -0
- package/lib/core/common/CanonicalizerValidator.d.ts.map +1 -0
- package/lib/core/common/CanonicalizerValidator.js +888 -0
- package/lib/core/common/Const.d.ts +3 -3
- package/lib/core/common/Const.d.ts.map +1 -1
- package/lib/core/common/Const.js +3 -3
- package/lib/core/common/DummyMainCreater.d.ts +2 -21
- package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
- package/lib/core/common/DummyMainCreater.js +8 -105
- package/lib/core/common/IRInference.d.ts +55 -3
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +407 -126
- package/lib/core/common/IRUtils.d.ts +1 -0
- package/lib/core/common/IRUtils.d.ts.map +1 -1
- package/lib/core/common/IRUtils.js +44 -13
- package/lib/core/common/ModelUtils.d.ts +44 -20
- package/lib/core/common/ModelUtils.d.ts.map +1 -1
- package/lib/core/common/ModelUtils.js +378 -208
- package/lib/core/common/SdkUtils.d.ts +35 -5
- package/lib/core/common/SdkUtils.d.ts.map +1 -1
- package/lib/core/common/SdkUtils.js +203 -59
- package/lib/core/common/SignatureCanonicalizer.d.ts +95 -0
- package/lib/core/common/SignatureCanonicalizer.d.ts.map +1 -0
- package/lib/core/common/SignatureCanonicalizer.js +116 -0
- package/lib/core/common/SignatureCanonicalizerRegistry.d.ts +176 -0
- package/lib/core/common/SignatureCanonicalizerRegistry.d.ts.map +1 -0
- package/lib/core/common/SignatureCanonicalizerRegistry.js +343 -0
- package/lib/core/common/SignatureModelCanonicalizer.d.ts +69 -0
- package/lib/core/common/SignatureModelCanonicalizer.d.ts.map +1 -0
- package/lib/core/common/SignatureModelCanonicalizer.js +109 -0
- package/lib/core/common/StmtUseReplacer.d.ts +1 -0
- package/lib/core/common/StmtUseReplacer.d.ts.map +1 -1
- package/lib/core/common/StmtUseReplacer.js +9 -0
- package/lib/core/common/StringUtils.d.ts +12 -1
- package/lib/core/common/StringUtils.d.ts.map +1 -1
- package/lib/core/common/StringUtils.js +36 -17
- package/lib/core/common/TempSignatureCanonicalizer.d.ts +82 -0
- package/lib/core/common/TempSignatureCanonicalizer.d.ts.map +1 -0
- package/lib/core/common/TempSignatureCanonicalizer.js +177 -0
- package/lib/core/common/TypeInference.d.ts +24 -6
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +243 -117
- package/lib/core/common/ValueUtil.d.ts +2 -1
- package/lib/core/common/ValueUtil.d.ts.map +1 -1
- package/lib/core/common/ValueUtil.js +4 -1
- package/lib/core/graph/Cfg.d.ts.map +1 -1
- package/lib/core/graph/Cfg.js +21 -6
- package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/CfgBuilder.js +46 -33
- package/lib/core/graph/builder/IfBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/IfBuilder.js +6 -2
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/ViewTreeBuilder.js +6 -2
- package/lib/core/inference/ModelInference.d.ts +24 -4
- package/lib/core/inference/ModelInference.d.ts.map +1 -1
- package/lib/core/inference/ModelInference.js +273 -79
- package/lib/core/inference/ValueInference.d.ts +3 -2
- package/lib/core/inference/ValueInference.d.ts.map +1 -1
- package/lib/core/inference/ValueInference.js +90 -40
- package/lib/core/inference/abc/AbcInference.d.ts.map +1 -1
- package/lib/core/inference/abc/AbcInference.js +28 -15
- package/lib/core/inference/arkts/ArkTsInference.d.ts +9 -3
- package/lib/core/inference/arkts/ArkTsInference.d.ts.map +1 -1
- package/lib/core/inference/arkts/ArkTsInference.js +54 -16
- package/lib/core/model/ArkClass.d.ts +192 -18
- package/lib/core/model/ArkClass.d.ts.map +1 -1
- package/lib/core/model/ArkClass.js +852 -122
- package/lib/core/model/ArkExport.d.ts.map +1 -1
- package/lib/core/model/ArkExport.js +1 -2
- package/lib/core/model/ArkField.d.ts +34 -2
- package/lib/core/model/ArkField.d.ts.map +1 -1
- package/lib/core/model/ArkField.js +89 -14
- package/lib/core/model/ArkFile.d.ts +72 -12
- package/lib/core/model/ArkFile.d.ts.map +1 -1
- package/lib/core/model/ArkFile.js +275 -65
- package/lib/core/model/ArkImport.d.ts.map +1 -1
- package/lib/core/model/ArkImport.js +1 -2
- package/lib/core/model/ArkMethod.d.ts +101 -15
- package/lib/core/model/ArkMethod.d.ts.map +1 -1
- package/lib/core/model/ArkMethod.js +252 -39
- package/lib/core/model/ArkModule.d.ts +1 -1
- package/lib/core/model/ArkModule.js +1 -1
- package/lib/core/model/ArkNamespace.d.ts +80 -10
- package/lib/core/model/ArkNamespace.d.ts.map +1 -1
- package/lib/core/model/ArkNamespace.js +309 -76
- package/lib/core/model/ArkSignature.d.ts +242 -18
- package/lib/core/model/ArkSignature.d.ts.map +1 -1
- package/lib/core/model/ArkSignature.js +725 -95
- package/lib/core/model/builder/ArkClassBuilder.d.ts +6 -3
- package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkClassBuilder.js +119 -73
- package/lib/core/model/builder/ArkExportBuilder.d.ts +1 -1
- package/lib/core/model/builder/ArkExportBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkExportBuilder.js +1 -1
- package/lib/core/model/builder/ArkFieldBuilder.d.ts +0 -2
- package/lib/core/model/builder/ArkFieldBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkFieldBuilder.js +9 -43
- package/lib/core/model/builder/ArkFileBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkFileBuilder.js +32 -33
- package/lib/core/model/builder/ArkMethodBuilder.d.ts +10 -3
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +40 -26
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts +3 -2
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkNamespaceBuilder.js +45 -77
- package/lib/core/model/builder/ArkSignatureBuilder.d.ts +9 -0
- package/lib/core/model/builder/ArkSignatureBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkSignatureBuilder.js +26 -3
- package/lib/core/model/builder/BodyBuilder.d.ts +1 -0
- package/lib/core/model/builder/BodyBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/BodyBuilder.js +37 -11
- package/lib/core/model/builder/builderUtils.d.ts +11 -1
- package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.js +124 -90
- package/lib/frontend/FrontendBuilder.d.ts +10 -6
- package/lib/frontend/FrontendBuilder.d.ts.map +1 -1
- package/lib/frontend/FrontendBuilder.js +19 -45
- package/lib/frontend/ModuleScene.d.ts +43 -0
- package/lib/frontend/ModuleScene.d.ts.map +1 -0
- package/lib/frontend/ModuleScene.js +143 -0
- package/lib/frontend/SceneBuildStage.d.ts +15 -0
- package/lib/frontend/SceneBuildStage.d.ts.map +1 -0
- package/lib/frontend/SceneBuildStage.js +32 -0
- package/lib/frontend/SceneBuilder.d.ts +153 -0
- package/lib/frontend/SceneBuilder.d.ts.map +1 -0
- package/lib/frontend/SceneBuilder.js +859 -0
- package/lib/frontend/arktsFrontend/ArktsFrontend.d.ts +0 -2
- package/lib/frontend/arktsFrontend/ArktsFrontend.d.ts.map +1 -1
- package/lib/frontend/arktsFrontend/ArktsFrontend.js +0 -18
- package/lib/frontend/arktsFrontend/FileBodyRemount.d.ts +17 -0
- package/lib/frontend/arktsFrontend/FileBodyRemount.d.ts.map +1 -0
- package/lib/frontend/arktsFrontend/FileBodyRemount.js +187 -0
- package/lib/frontend/common/ModuleBuilder.d.ts +4 -2
- package/lib/frontend/common/ModuleBuilder.d.ts.map +1 -1
- package/lib/frontend/common/ModuleBuilder.js +19 -9
- package/lib/frontend/cppFrontend/CppFrontend.d.ts +0 -6
- package/lib/frontend/cppFrontend/CppFrontend.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/CppFrontend.js +0 -56
- package/lib/frontend/cppFrontend/base/Type.d.ts +7 -0
- package/lib/frontend/cppFrontend/base/Type.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/base/Type.js +29 -0
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.js +56 -56
- 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 +124 -113
- package/lib/frontend/cppFrontend/common/Builtin.d.ts +29 -19
- package/lib/frontend/cppFrontend/common/Builtin.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/Builtin.js +56 -35
- package/lib/frontend/cppFrontend/common/IRInference.d.ts +7 -2
- package/lib/frontend/cppFrontend/common/IRInference.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/IRInference.js +61 -28
- package/lib/frontend/cppFrontend/common/IRUtils.d.ts +1 -0
- package/lib/frontend/cppFrontend/common/IRUtils.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/IRUtils.js +22 -10
- package/lib/frontend/cppFrontend/common/ModelUtils.d.ts +19 -0
- package/lib/frontend/cppFrontend/common/ModelUtils.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/ModelUtils.js +84 -3
- package/lib/frontend/cppFrontend/common/TypeInference.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/TypeInference.js +44 -54
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.js +2 -1
- package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts +1 -1
- package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/inference/CxxValueInference.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/inference/CxxValueInference.js +41 -5
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.js +18 -28
- package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.js +2 -3
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts +2 -2
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.js +31 -24
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.js +10 -16
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts +0 -2
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.js +19 -37
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts +1 -0
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.js +30 -3
- package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/builderUtils.js +8 -4
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +10 -2
- package/lib/save/json/JsonSerialization.js +2 -2
- package/lib/save/source/SourceStmt.js +1 -1
- package/lib/save/source/SourceTransformer.d.ts.map +1 -1
- package/lib/save/source/SourceTransformer.js +0 -9
- package/lib/statistics/StageStatistics.d.ts +195 -0
- package/lib/statistics/StageStatistics.d.ts.map +1 -0
- package/lib/statistics/StageStatistics.js +346 -0
- package/lib/statistics/StageStatisticsReporter.d.ts +58 -0
- package/lib/statistics/StageStatisticsReporter.d.ts.map +1 -0
- package/lib/statistics/StageStatisticsReporter.js +255 -0
- package/lib/utils/Canonicalizer.d.ts +9 -2
- package/lib/utils/Canonicalizer.d.ts.map +1 -1
- package/lib/utils/Canonicalizer.js +19 -2
- package/lib/utils/CxxSceneUtils.d.ts +7 -0
- package/lib/utils/CxxSceneUtils.d.ts.map +1 -1
- package/lib/utils/CxxSceneUtils.js +10 -1
- package/lib/utils/FileUtils.d.ts +0 -1
- package/lib/utils/FileUtils.d.ts.map +1 -1
- package/lib/utils/FileUtils.js +1 -9
- package/lib/utils/HashUtils.d.ts +9 -0
- package/lib/utils/HashUtils.d.ts.map +1 -0
- package/lib/utils/HashUtils.js +65 -0
- package/lib/utils/ModuleUtils.d.ts.map +1 -1
- package/lib/utils/ModuleUtils.js +24 -5
- package/lib/utils/VisitedSegment.d.ts +23 -0
- package/lib/utils/VisitedSegment.d.ts.map +1 -0
- package/lib/utils/VisitedSegment.js +64 -0
- package/lib/utils/callGraphUtils.d.ts.map +1 -1
- package/lib/utils/callGraphUtils.js +7 -7
- package/lib/utils/getAllFiles.d.ts.map +1 -1
- package/lib/utils/getAllFiles.js +11 -8
- package/lib/utils/logger.d.ts +4 -0
- package/lib/utils/logger.d.ts.map +1 -1
- package/lib/utils/logger.js +16 -0
- package/lib/utils/parseArkSourceFile.d.ts +33 -0
- package/lib/utils/parseArkSourceFile.d.ts.map +1 -0
- package/lib/utils/parseArkSourceFile.js +131 -0
- package/package.json +1 -1
- package/lib/node_modules/ohos-typescript/README.OpenSource +0 -11
- package/lib/node_modules/ohos-typescript/README.md +0 -81
- package/lib/node_modules/ohos-typescript/SECURITY.md +0 -41
- package/lib/node_modules/ohos-typescript/ThirdPartyNoticeText.txt +0 -193
- package/lib/node_modules/ohos-typescript/bin/tsc +0 -2
- package/lib/node_modules/ohos-typescript/bin/tsserver +0 -2
- package/lib/node_modules/ohos-typescript/lib/README.md +0 -5
- package/lib/node_modules/ohos-typescript/lib/cancellationToken.js +0 -86
- package/lib/node_modules/ohos-typescript/lib/cs/diagnosticMessages.generated.json +0 -1880
- package/lib/node_modules/ohos-typescript/lib/de/diagnosticMessages.generated.json +0 -1880
- package/lib/node_modules/ohos-typescript/lib/es/diagnosticMessages.generated.json +0 -1880
- package/lib/node_modules/ohos-typescript/lib/fr/diagnosticMessages.generated.json +0 -1880
- package/lib/node_modules/ohos-typescript/lib/it/diagnosticMessages.generated.json +0 -1880
- package/lib/node_modules/ohos-typescript/lib/ja/diagnosticMessages.generated.json +0 -1880
- package/lib/node_modules/ohos-typescript/lib/ko/diagnosticMessages.generated.json +0 -1880
- package/lib/node_modules/ohos-typescript/lib/lib.dom.d.ts +0 -18505
- package/lib/node_modules/ohos-typescript/lib/lib.dom.iterable.d.ts +0 -341
- package/lib/node_modules/ohos-typescript/lib/lib.scripthost.d.ts +0 -327
- package/lib/node_modules/ohos-typescript/lib/lib.webworker.d.ts +0 -6192
- package/lib/node_modules/ohos-typescript/lib/lib.webworker.importscripts.d.ts +0 -26
- package/lib/node_modules/ohos-typescript/lib/lib.webworker.iterable.d.ts +0 -175
- package/lib/node_modules/ohos-typescript/lib/pl/diagnosticMessages.generated.json +0 -1880
- package/lib/node_modules/ohos-typescript/lib/pt-br/diagnosticMessages.generated.json +0 -1880
- package/lib/node_modules/ohos-typescript/lib/ru/diagnosticMessages.generated.json +0 -1880
- package/lib/node_modules/ohos-typescript/lib/tr/diagnosticMessages.generated.json +0 -1880
- package/lib/node_modules/ohos-typescript/lib/tsc.js +0 -114551
- package/lib/node_modules/ohos-typescript/lib/tsserver.js +0 -179691
- package/lib/node_modules/ohos-typescript/lib/tsserverlibrary.d.ts +0 -13648
- package/lib/node_modules/ohos-typescript/lib/tsserverlibrary.js +0 -178688
- package/lib/node_modules/ohos-typescript/lib/typesMap.json +0 -497
- package/lib/node_modules/ohos-typescript/lib/typingsInstaller.js +0 -39871
- package/lib/node_modules/ohos-typescript/lib/watchGuard.js +0 -49
- package/lib/node_modules/ohos-typescript/lib/zh-cn/diagnosticMessages.generated.json +0 -1880
- package/lib/node_modules/ohos-typescript/lib/zh-tw/diagnosticMessages.generated.json +0 -1880
- package/lib/utils/DependenciesSort.d.ts +0 -3
- package/lib/utils/DependenciesSort.d.ts.map +0 -1
- package/lib/utils/DependenciesSort.js +0 -72
- package/lib/utils/crypto_utils.d.ts +0 -6
- package/lib/utils/crypto_utils.d.ts.map +0 -1
- package/lib/utils/crypto_utils.js +0 -57
|
@@ -204,15 +204,15 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
204
204
|
* struct Point q = (struct Point){.x = 5, .y = 8, .name = 'c'};
|
|
205
205
|
* int* arr = (int[5]){1, 2, 3, 4, 5};
|
|
206
206
|
* the right value is {},its kind is CompoundLiteralExpr or InitListExpr
|
|
207
|
-
|
|
207
|
+
*/
|
|
208
208
|
cxxAggregateToValueAndStmts(aggregate) {
|
|
209
209
|
var _a, _b;
|
|
210
210
|
const stmts = [];
|
|
211
211
|
const type = (0, builderUtils_1.cxxNode2Type)(aggregate, this.declaringMethod);
|
|
212
212
|
const typeName = (_b = (_a = aggregate.type) === null || _a === void 0 ? void 0 : _a.qualType) !== null && _b !== void 0 ? _b : 'unknown';
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
213
|
+
// getClassSignature() (not getClassSigID()): the class may still be unclear and live in
|
|
214
|
+
// the temp canonicalizer; the object overload interns it properly.
|
|
215
|
+
const classSignature = type instanceof Type_1.ClassType ? type.getClassSignature() : ArkSignatureBuilder_1.ArkSignatureBuilder.buildClassSignatureFromClassName(typeName);
|
|
216
216
|
const list = aggregate.kind === ArkCxxAstNode_1.AstKind.InitListExpr ? aggregate : aggregate.inner[aggregate.inner.length - 1];
|
|
217
217
|
const elements = [];
|
|
218
218
|
if (list.kind !== ArkCxxAstNode_1.AstKind.InitListExpr) {
|
|
@@ -263,7 +263,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
263
263
|
isNodeRelatedToImplicitNode(node) {
|
|
264
264
|
var _a, _b;
|
|
265
265
|
if (node.inner) {
|
|
266
|
-
return ((
|
|
266
|
+
return ((_b = (_a = node.inner) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.kind) === ArkCxxAstNode_1.AstKind.ImplicitCastExpr && node.name === '__tree_const_iterator';
|
|
267
267
|
}
|
|
268
268
|
return false;
|
|
269
269
|
}
|
|
@@ -275,7 +275,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
275
275
|
// Check if the child nodes of the current node are member function calls
|
|
276
276
|
isNodeRelatedToCXXMember(node) {
|
|
277
277
|
var _a, _b;
|
|
278
|
-
return (((
|
|
278
|
+
return (((_b = (_a = node.inner) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.kind) === ArkCxxAstNode_1.AstKind.CXXMemberCallExpr ||
|
|
279
279
|
(node.inner[0].kind === ArkCxxAstNode_1.AstKind.ImplicitCastExpr && node.inner[0].inner[0] && node.inner[0].inner[0].kind === ArkCxxAstNode_1.AstKind.CXXMemberCallExpr));
|
|
280
280
|
}
|
|
281
281
|
// Construction of std::pair type
|
|
@@ -299,7 +299,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
299
299
|
ArkCxxAstNode_1.AstKind.InitListExpr,
|
|
300
300
|
ArkCxxAstNode_1.AstKind.CompoundLiteralExpr,
|
|
301
301
|
ArkCxxAstNode_1.AstKind.CXXOperatorCallExpr,
|
|
302
|
-
ArkCxxAstNode_1.AstKind.BinaryOperator
|
|
302
|
+
ArkCxxAstNode_1.AstKind.BinaryOperator,
|
|
303
303
|
];
|
|
304
304
|
return (targetKinds.includes(firstChildKind) ||
|
|
305
305
|
(firstChildKind === ArkCxxAstNode_1.AstKind.ImplicitCastExpr &&
|
|
@@ -344,7 +344,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
344
344
|
if ((parentNode === null || parentNode === void 0 ? void 0 : parentNode.dtor) === ArkCxxAstNode_1.AstKind.CXXDestructorDecl && node.inner.length > 0) {
|
|
345
345
|
return this.cxxConstructExprToValueAndStmts(node.inner[0]);
|
|
346
346
|
}
|
|
347
|
-
if (!parentNode || parentNode.kind !== ArkCxxAstNode_1.AstKind.ExprWithCleanups && parentNode.kind !== ArkCxxAstNode_1.AstKind.ReturnStmt) {
|
|
347
|
+
if (!parentNode || (parentNode.kind !== ArkCxxAstNode_1.AstKind.ExprWithCleanups && parentNode.kind !== ArkCxxAstNode_1.AstKind.ReturnStmt)) {
|
|
348
348
|
return this.unprocessedNodeToValueAndStmts(node);
|
|
349
349
|
}
|
|
350
350
|
return this.cxxConstructExprToValueAndStmts(node);
|
|
@@ -359,9 +359,9 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
359
359
|
var _a, _b;
|
|
360
360
|
if (!this.isPairConstructExpr(node) &&
|
|
361
361
|
(this.isNodeRelatedToCXXLambdaFunc(node) ||
|
|
362
|
-
(this.isNodeRelatedToMaterializeTemporaryExpr(node) &&
|
|
363
|
-
|
|
364
|
-
|
|
362
|
+
(this.isNodeRelatedToMaterializeTemporaryExpr(node) && (0, builderUtils_1.isCxxBasicString)((_a = node.type.desugaredQualType) !== null && _a !== void 0 ? _a : '')) ||
|
|
363
|
+
this.isNodeRelatedToImplicitNode(node)) &&
|
|
364
|
+
((_b = node.inner) === null || _b === void 0 ? void 0 : _b.length) > 0) {
|
|
365
365
|
return this.cxxNodeToValueAndStmts(node.inner[0]);
|
|
366
366
|
}
|
|
367
367
|
return this.cxxNewExpressionToValueAndStmts(node);
|
|
@@ -462,8 +462,9 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
462
462
|
};
|
|
463
463
|
}
|
|
464
464
|
// Handle the invocation of static members of a class, such as A::a
|
|
465
|
-
if (((_d = node.name) === null || _d === void 0 ? void 0 : _d.includes('::')) &&
|
|
466
|
-
|
|
465
|
+
if (((_d = node.name) === null || _d === void 0 ? void 0 : _d.includes('::')) &&
|
|
466
|
+
node.inner.length > 0 &&
|
|
467
|
+
(((_e = node.inner[0]) === null || _e === void 0 ? void 0 : _e.kind) === ArkCxxAstNode_1.AstKind.TypeRef || (((_f = node.inner[0]) === null || _f === void 0 ? void 0 : _f.kind) === ArkCxxAstNode_1.AstKind.NamespaceRef && ((_g = node.inner[0]) === null || _g === void 0 ? void 0 : _g.name) !== Builtin_2.BuiltinCxx.CXXSTD))) {
|
|
467
468
|
return this.staticMemberExprToValueAndStmts(node);
|
|
468
469
|
}
|
|
469
470
|
return this.cxxIdentifierToValueAndStmts(node);
|
|
@@ -492,8 +493,9 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
492
493
|
if ((((_b = (_a = node.type) === null || _a === void 0 ? void 0 : _a.qualType) === null || _b === void 0 ? void 0 : _b.includes('[')) && node.type.qualType.includes(']')) || node.type.qualType === 'void') {
|
|
493
494
|
return this.cxxArrayLiteralExpressionToValueAndStmts(node);
|
|
494
495
|
}
|
|
495
|
-
let pNode = (_e = (
|
|
496
|
-
if (pNode &&
|
|
496
|
+
let pNode = (_e = (_c = node.parent) !== null && _c !== void 0 ? _c : (_d = node.getParent) === null || _d === void 0 ? void 0 : _d.call(node, true)) !== null && _e !== void 0 ? _e : null;
|
|
497
|
+
if (pNode &&
|
|
498
|
+
((_f = pNode === null || pNode === void 0 ? void 0 : pNode.inner) === null || _f === void 0 ? void 0 : _f.length) > 0 &&
|
|
497
499
|
(((_g = pNode.inner[0]) === null || _g === void 0 ? void 0 : _g.kind) === ArkCxxAstNode_1.AstKind.TypeRef || !node.type.qualType.includes('[') || (0, builderUtils_1.cxxNode2Type)(node, this.declaringMethod) instanceof Type_1.ClassType)) {
|
|
498
500
|
try {
|
|
499
501
|
return this.cxxAggregateToValueAndStmts(node);
|
|
@@ -576,9 +578,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
576
578
|
const rawArg = userDefinedLiteral.inner[1];
|
|
577
579
|
let argNode = rawArg;
|
|
578
580
|
if (literalStr && rawArg.value) {
|
|
579
|
-
const bare = rawArg.value.endsWith(literalStr)
|
|
580
|
-
? rawArg.value.slice(0, -literalStr.length)
|
|
581
|
-
: rawArg.value.replace(literalStr, '');
|
|
581
|
+
const bare = rawArg.value.endsWith(literalStr) ? rawArg.value.slice(0, -literalStr.length) : rawArg.value.replace(literalStr, '');
|
|
582
582
|
argNode = Object.assign(Object.assign({}, rawArg), { value: bare });
|
|
583
583
|
}
|
|
584
584
|
return this.buildValueAndStmtsForMemberCall(stmts, userDefinedLiteral.inner[0], [argNode], userDefinedLiteral, undefined);
|
|
@@ -608,7 +608,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
608
608
|
// If the kind of firstNode is CXXConstructExpr and firstNode does not correspond to a parent class initialization call,
|
|
609
609
|
// it is equivalent to directly assigning a value to the class member.
|
|
610
610
|
// For example, the constructor of class Circle in file 'tests/cppResources/exports/crossFileCase/include/myHeader.h'.
|
|
611
|
-
const assignRight =
|
|
611
|
+
const assignRight = firstInnerNode.kind === ArkCxxAstNode_1.AstKind.CXXConstructExpr && firstInnerNode.inner.length > 0 ? firstInnerNode.inner[0] : firstInnerNode;
|
|
612
612
|
const CtorInit2ThisMemberExpr = {
|
|
613
613
|
kind: ArkCxxAstNode_1.AstKind.MemberExpr,
|
|
614
614
|
name: (_b = (_a = cxxCtorInitializer.anyInit) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : '',
|
|
@@ -632,7 +632,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
632
632
|
cxxInheritedCtorInitExprToValueAndStmts(cxxInheritedCtorInitExpr) {
|
|
633
633
|
var _a;
|
|
634
634
|
const cls = this.declaringMethod.getDeclaringArkClass();
|
|
635
|
-
const clsInitMtd = cls.
|
|
635
|
+
const clsInitMtd = cls.getInstanceInitMethodOrNull();
|
|
636
636
|
if (!clsInitMtd) {
|
|
637
637
|
return this.unprocessedNodeToValueAndStmts(cxxInheritedCtorInitExpr);
|
|
638
638
|
}
|
|
@@ -674,7 +674,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
674
674
|
if (!cls) {
|
|
675
675
|
return this.cxxNewExpressionToValueAndStmts(cxxConstructExpr);
|
|
676
676
|
}
|
|
677
|
-
const clsInitMtd = cls.
|
|
677
|
+
const clsInitMtd = cls.getInstanceInitMethodOrNull();
|
|
678
678
|
if (!clsInitMtd) {
|
|
679
679
|
return this.cxxNewExpressionToValueAndStmts(cxxConstructExpr);
|
|
680
680
|
}
|
|
@@ -806,7 +806,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
806
806
|
*@ returns The object containing the converted value and statement array
|
|
807
807
|
*/
|
|
808
808
|
cxxDeleteExpressionToValueAndStmts(deleteExpression) {
|
|
809
|
-
const { value: exprValue, valueOriginalPositions: exprPositions, stmts: stmts
|
|
809
|
+
const { value: exprValue, valueOriginalPositions: exprPositions, stmts: stmts } = this.cxxNodeToValueAndStmts(deleteExpression.inner[0]);
|
|
810
810
|
const isArray = (0, cppUtils_1.hasNodeFlag)(deleteExpression, ArkCxxAstNode_1.CxxNodeFlag.Array);
|
|
811
811
|
const deleteExpr = isArray ? new Expr_2.ArkCxxDeleteArrayExpr(exprValue) : new Expr_1.ArkDeleteExpr(exprValue);
|
|
812
812
|
const deleteExprPosition = [Position_1.FullPosition.cxxBuildFromNode(deleteExpression, this.cxxSourceFile), ...exprPositions];
|
|
@@ -862,8 +862,9 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
862
862
|
const stmts = [];
|
|
863
863
|
const currConditionalOperatorIndex = this.conditionalOperatorNo++;
|
|
864
864
|
// Peel off 'ImplicitCastExpr'
|
|
865
|
-
const conditionNode = conditionalExpression.inner[InnerIdx].kind === ArkCxxAstNode_1.AstKind.ImplicitCastExpr
|
|
866
|
-
conditionalExpression.inner[InnerIdx].inner[0]
|
|
865
|
+
const conditionNode = conditionalExpression.inner[InnerIdx].kind === ArkCxxAstNode_1.AstKind.ImplicitCastExpr
|
|
866
|
+
? conditionalExpression.inner[InnerIdx].inner[0]
|
|
867
|
+
: conditionalExpression.inner[InnerIdx];
|
|
867
868
|
let conditionExpr;
|
|
868
869
|
const context = { conditionExpr: conditionExpr };
|
|
869
870
|
const ifStmts = this.ArkCxxIRTransformer.cxxIfStatementToStmts(conditionNode, 0, context);
|
|
@@ -893,7 +894,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
893
894
|
stmts.push(new ArkIRTransformer_2.DummyStmt(ArkIRTransformer_1.ArkCxxIRTransformer.DUMMY_CONDITIONAL_OPERATOR_IF_FALSE_STMT + currConditionalOperatorIndex));
|
|
894
895
|
// The last internal node is the value when the expression is false
|
|
895
896
|
InnerIdx = conditionalExpression.inner.length - 1;
|
|
896
|
-
const { value: whenFalseValue, valueOriginalPositions: whenFalsePositions, stmts: whenFalseStmts } = this.cxxNodeToValueAndStmts(conditionalExpression.inner[InnerIdx]);
|
|
897
|
+
const { value: whenFalseValue, valueOriginalPositions: whenFalsePositions, stmts: whenFalseStmts, } = this.cxxNodeToValueAndStmts(conditionalExpression.inner[InnerIdx]);
|
|
897
898
|
stmts.push(...whenFalseStmts);
|
|
898
899
|
const assignStmt = new Stmt_1.ArkAssignStmt(resultLocal, whenFalseValue);
|
|
899
900
|
assignStmt.setOperandOriginalPositions([...resultLocalPosition, ...whenFalsePositions]);
|
|
@@ -923,8 +924,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
923
924
|
return [undefined, []];
|
|
924
925
|
}
|
|
925
926
|
const call = this.getDeclRef(firstInner);
|
|
926
|
-
const args = ((_c = (_b = innerAstNodes.inner) === null || _b === void 0 ? void 0 : _b.slice(1)) !== null && _c !== void 0 ? _c : [])
|
|
927
|
-
.map(n => this.getDeclRef(n));
|
|
927
|
+
const args = ((_c = (_b = innerAstNodes.inner) === null || _b === void 0 ? void 0 : _b.slice(1)) !== null && _c !== void 0 ? _c : []).map(n => this.getDeclRef(n));
|
|
928
928
|
return [call, args];
|
|
929
929
|
}
|
|
930
930
|
// Several callable kinds
|
|
@@ -1000,6 +1000,8 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1000
1000
|
const { value: newExprLocal, valueOriginalPositions: newExprPositions, stmts: newExprStmts, } = this.ArkCxxIRTransformer.generateAssignStmtForValue(newExpr, [componentExpressionPosition]);
|
|
1001
1001
|
stmts.push(...newExprStmts);
|
|
1002
1002
|
const constructorMethodSubSignature = ArkSignatureBuilder_1.ArkSignatureBuilder.buildMethodSubSignatureFromMethodName(TSConst_1.CONSTRUCTOR_NAME);
|
|
1003
|
+
// Object path: a stub class signature (unclear) is routed to the temp canonicalizer
|
|
1004
|
+
// inside the constructor — no formal interning without a model.
|
|
1003
1005
|
const constructorMethodSignature = new ArkSignature_1.MethodSignature(classSignature, constructorMethodSubSignature);
|
|
1004
1006
|
const instanceInvokeExpr = new Expr_1.ArkInstanceInvokeExpr(newExprLocal, constructorMethodSignature, args);
|
|
1005
1007
|
const instanceInvokeExprPositions = [componentExpressionPosition, ...newExprPositions, ...argPositionsAllFlat];
|
|
@@ -1055,7 +1057,8 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1055
1057
|
identifierValue = this.addNewLocal(varName, varType);
|
|
1056
1058
|
}
|
|
1057
1059
|
else {
|
|
1058
|
-
if ((_a = identifier.name) === null || _a === void 0 ? void 0 : _a.includes('::' + varName + '<')) {
|
|
1060
|
+
if ((_a = identifier.name) === null || _a === void 0 ? void 0 : _a.includes('::' + varName + '<')) {
|
|
1061
|
+
// Determine whether it is a variable template
|
|
1059
1062
|
varName = identifier.name;
|
|
1060
1063
|
}
|
|
1061
1064
|
identifierValue = this.getOrCreateLocal(varName, varType);
|
|
@@ -1088,12 +1091,15 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1088
1091
|
}
|
|
1089
1092
|
// [Scenario 2] Recursively process base object, such as testMap in testMap.insert
|
|
1090
1093
|
// Get baseValue (e.g., testMap), position information, and possible preceding statements (e.g., auto tmp = ...;)
|
|
1091
|
-
let { value: baseValue, valueOriginalPositions: basePositions, stmts: baseStmts
|
|
1094
|
+
let { value: baseValue, valueOriginalPositions: basePositions, stmts: baseStmts } = this.cxxNodeToValueAndStmts(memberExpression.inner[0]);
|
|
1092
1095
|
// [Scenario 3] Processing chained member access, such as a.b.c or (* ptr). field
|
|
1093
1096
|
// If the base is a member access, generate an assignment statement to ensure the validity of SSA
|
|
1094
1097
|
if (((_a = memberExpression.inner[0]) === null || _a === void 0 ? void 0 : _a.kind) === ArkCxxAstNode_1.AstKind.MemberExpr || memberExpression.kind === ArkCxxAstNode_1.AstKind.MemberRef) {
|
|
1095
|
-
({
|
|
1096
|
-
|
|
1098
|
+
({
|
|
1099
|
+
value: baseValue,
|
|
1100
|
+
valueOriginalPositions: basePositions,
|
|
1101
|
+
stmts: baseStmts,
|
|
1102
|
+
} = this.ArkCxxIRTransformer.generateAssignStmtForValue(baseValue, basePositions));
|
|
1097
1103
|
}
|
|
1098
1104
|
// [Scenario 4] On special occasions, the caller directly specifies the baseValue (generally used to replace the base,
|
|
1099
1105
|
// such as virtual members, generics, etc.)
|
|
@@ -1113,7 +1119,8 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1113
1119
|
else {
|
|
1114
1120
|
fieldRef = new Ref_2.ArkCxxInstanceFieldRef(baseValue, // baseValue(eg: testMap)
|
|
1115
1121
|
(0, cppUtils_1.hasNodeFlag)(memberExpression, ArkCxxAstNode_1.CxxNodeFlag.Arrow), // Whether it is arrow access (->)
|
|
1116
|
-
fieldSignature)
|
|
1122
|
+
fieldSignature // Field signature (such as insert)
|
|
1123
|
+
);
|
|
1117
1124
|
}
|
|
1118
1125
|
// Record node location information for subsequent traceability and debugging
|
|
1119
1126
|
const fieldRefPositions = [Position_1.FullPosition.cxxBuildFromNode(memberExpression, this.cxxSourceFile), ...basePositions];
|
|
@@ -1128,10 +1135,13 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1128
1135
|
if (((_b = memberExpression.referencedDecl) === null || _b === void 0 ? void 0 : _b.kind) === ArkCxxAstNode_1.AstKind.EnumConstantDecl) {
|
|
1129
1136
|
const enumClassName = memberExpression.type.qualType.replace('enum', '').trim();
|
|
1130
1137
|
const enumArkClass = ModelUtils_2.CxxModelUtils.findSymbolInFileWithName(enumClassName, this.declaringMethod.getDeclaringArkClass());
|
|
1131
|
-
|
|
1132
|
-
enumArkClass.getSignature()
|
|
1133
|
-
|
|
1134
|
-
|
|
1138
|
+
if (enumArkClass instanceof ArkClass_1.ArkClass) {
|
|
1139
|
+
return new ArkSignature_1.FieldSignature(memberName, enumArkClass.getClassSigID(), enumArkClass.getSignature().getType(), true);
|
|
1140
|
+
}
|
|
1141
|
+
// Object path: the stub enum class signature (unclear) is routed to the temp
|
|
1142
|
+
// canonicalizer inside the constructor — no formal interning without a model.
|
|
1143
|
+
const enumStubSignature = ArkSignatureBuilder_1.ArkSignatureBuilder.buildClassSignatureFromClassName(enumClassName);
|
|
1144
|
+
return new ArkSignature_1.FieldSignature(memberName, enumStubSignature, enumStubSignature.getType(), true);
|
|
1135
1145
|
}
|
|
1136
1146
|
// ==Handling common scenarios==
|
|
1137
1147
|
let baseType = baseValue.getType();
|
|
@@ -1155,9 +1165,12 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1155
1165
|
// Construction field signature
|
|
1156
1166
|
// If base is a class local variable, use the complete class signature
|
|
1157
1167
|
if ((baseValue instanceof Local_1.Local || baseValue instanceof Ref_1.ArkArrayRef) && baseClassType !== null) {
|
|
1168
|
+
// getClassSignature() (not getClassSigID()): the class may still be unclear and
|
|
1169
|
+
// live in the temp canonicalizer; the object overload interns it properly.
|
|
1158
1170
|
fieldSignature = new ArkSignature_1.FieldSignature(memberName, // Field name (such as insert)
|
|
1159
1171
|
baseClassType.getClassSignature(), // Base class type signature
|
|
1160
|
-
baseType
|
|
1172
|
+
baseType // baseType as its type
|
|
1173
|
+
);
|
|
1161
1174
|
}
|
|
1162
1175
|
else {
|
|
1163
1176
|
// Otherwise, it is generated only according to the field name
|
|
@@ -1175,7 +1188,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1175
1188
|
*/
|
|
1176
1189
|
cxxElementAccessExpressionToValueAndStmts(elementAccessExpression) {
|
|
1177
1190
|
const stmts = [];
|
|
1178
|
-
let { value: baseValue, valueOriginalPositions: basePositions, stmts: baseStmts
|
|
1191
|
+
let { value: baseValue, valueOriginalPositions: basePositions, stmts: baseStmts } = this.cxxNodeToValueAndStmts(elementAccessExpression.inner[0]);
|
|
1179
1192
|
stmts.push(...baseStmts);
|
|
1180
1193
|
if (!(baseValue instanceof Local_1.Local)) {
|
|
1181
1194
|
({
|
|
@@ -1276,9 +1289,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1276
1289
|
// If there is no nested CXXOperatorCallExpr, the ValueAndStmts of overloaded stream operators will be built directly
|
|
1277
1290
|
return this.buildValueAndStmtsForStreamOrLambdaCall(innerNode.inner[1], callArgus.reverse(), stmts, callExpression);
|
|
1278
1291
|
}
|
|
1279
|
-
while (innerNode.kind === ArkCxxAstNode_1.AstKind.ImplicitCastExpr &&
|
|
1280
|
-
innerNode.valueCategory === ArkCxxAstNode_1.CxxValueCategory.Lvalue &&
|
|
1281
|
-
innerNode.inner.length > 0) {
|
|
1292
|
+
while (innerNode.kind === ArkCxxAstNode_1.AstKind.ImplicitCastExpr && innerNode.valueCategory === ArkCxxAstNode_1.CxxValueCategory.Lvalue && innerNode.inner.length > 0) {
|
|
1282
1293
|
innerNode = innerNode.inner[0];
|
|
1283
1294
|
}
|
|
1284
1295
|
if (innerNode.kind === ArkCxxAstNode_1.AstKind.DeclRefExpr &&
|
|
@@ -1457,13 +1468,11 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1457
1468
|
}
|
|
1458
1469
|
// Unary operators (++ / --)
|
|
1459
1470
|
const unaryOpToken = this.getOperatorTokenFromNode(callExpression.inner[0]);
|
|
1460
|
-
if (((_f = callExpression.inner[0]) === null || _f === void 0 ? void 0 : _f.kind) === ArkCxxAstNode_1.AstKind.ImplicitCastExpr &&
|
|
1461
|
-
['++', '--', '*'].includes(unaryOpToken)) {
|
|
1471
|
+
if (((_f = callExpression.inner[0]) === null || _f === void 0 ? void 0 : _f.kind) === ArkCxxAstNode_1.AstKind.ImplicitCastExpr && ['++', '--', '*'].includes(unaryOpToken)) {
|
|
1462
1472
|
return this.CXXOperatorExpressionToUnaryOperator(callExpression);
|
|
1463
1473
|
}
|
|
1464
1474
|
// Arrow operator (->) in iteration
|
|
1465
|
-
if (((_g = callExpression.inner[0]) === null || _g === void 0 ? void 0 : _g.kind) === ArkCxxAstNode_1.AstKind.ImplicitCastExpr &&
|
|
1466
|
-
unaryOpToken === '->') {
|
|
1475
|
+
if (((_g = callExpression.inner[0]) === null || _g === void 0 ? void 0 : _g.kind) === ArkCxxAstNode_1.AstKind.ImplicitCastExpr && unaryOpToken === '->') {
|
|
1467
1476
|
return this.cxxNodeToValueAndStmts(callExpression.inner[1]);
|
|
1468
1477
|
}
|
|
1469
1478
|
return null;
|
|
@@ -1478,7 +1487,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1478
1487
|
ArkCxxAstNode_1.AstKind.CXXOperatorCallExpr,
|
|
1479
1488
|
ArkCxxAstNode_1.AstKind.MaterializeTemporaryExpr,
|
|
1480
1489
|
ArkCxxAstNode_1.AstKind.CXXBindTemporaryExpr,
|
|
1481
|
-
ArkCxxAstNode_1.AstKind.CXXConstructExpr
|
|
1490
|
+
ArkCxxAstNode_1.AstKind.CXXConstructExpr,
|
|
1482
1491
|
];
|
|
1483
1492
|
if (recursiveKinds.includes(innerNode.kind) ||
|
|
1484
1493
|
(innerNode.kind === ArkCxxAstNode_1.AstKind.ImplicitCastExpr && innerNode.castKind !== ArkCxxAstNode_1.AstKind.FunctionToPointerDecay)) {
|
|
@@ -1517,9 +1526,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1517
1526
|
const qualifiedName = (_a = callNode.name) !== null && _a !== void 0 ? _a : '';
|
|
1518
1527
|
const suffix = '::' + funcName;
|
|
1519
1528
|
if (qualifiedName.includes('::')) {
|
|
1520
|
-
return qualifiedName.endsWith(suffix)
|
|
1521
|
-
? qualifiedName.slice(0, -suffix.length)
|
|
1522
|
-
: (_b = qualifiedName.split('::')[0]) !== null && _b !== void 0 ? _b : qualifiedName;
|
|
1529
|
+
return qualifiedName.endsWith(suffix) ? qualifiedName.slice(0, -suffix.length) : ((_b = qualifiedName.split('::')[0]) !== null && _b !== void 0 ? _b : qualifiedName);
|
|
1523
1530
|
}
|
|
1524
1531
|
const scopeNode = callNode.inner.find(child => child.kind === ArkCxxAstNode_1.AstKind.NamespaceRef || child.kind === ArkCxxAstNode_1.AstKind.TypeRef);
|
|
1525
1532
|
return (_c = scopeNode === null || scopeNode === void 0 ? void 0 : scopeNode.name) !== null && _c !== void 0 ? _c : qualifiedName;
|
|
@@ -1550,16 +1557,13 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1550
1557
|
*/
|
|
1551
1558
|
handleOverloadedOp(cxxOperatorCallExpr) {
|
|
1552
1559
|
var _a, _b, _c, _d;
|
|
1553
|
-
if (((_a = cxxOperatorCallExpr.type) === null || _a === void 0 ? void 0 : _a.qualType) === '' ||
|
|
1554
|
-
((_c = (_b = cxxOperatorCallExpr.inner) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.castKind) !== ArkCxxAstNode_1.AstKind.FunctionToPointerDecay) {
|
|
1560
|
+
if (((_a = cxxOperatorCallExpr.type) === null || _a === void 0 ? void 0 : _a.qualType) === '' || ((_c = (_b = cxxOperatorCallExpr.inner) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.castKind) !== ArkCxxAstNode_1.AstKind.FunctionToPointerDecay) {
|
|
1555
1561
|
return null;
|
|
1556
1562
|
}
|
|
1557
1563
|
// Handling Recursive function, e.g. Case10 in lambdaFuncSample.cpp
|
|
1558
1564
|
if ((_d = cxxOperatorCallExpr.inner) === null || _d === void 0 ? void 0 : _d[1]) {
|
|
1559
1565
|
let callNode = cxxOperatorCallExpr.inner[1];
|
|
1560
|
-
while (callNode.kind === ArkCxxAstNode_1.AstKind.ImplicitCastExpr &&
|
|
1561
|
-
callNode.valueCategory === ArkCxxAstNode_1.CxxValueCategory.Lvalue &&
|
|
1562
|
-
callNode.inner.length > 0) {
|
|
1566
|
+
while (callNode.kind === ArkCxxAstNode_1.AstKind.ImplicitCastExpr && callNode.valueCategory === ArkCxxAstNode_1.CxxValueCategory.Lvalue && callNode.inner.length > 0) {
|
|
1563
1567
|
callNode = callNode.inner[0];
|
|
1564
1568
|
}
|
|
1565
1569
|
if (callNode.type.qualType.includes('std::function') || this.isNodeRelatedToCXXLambdaFunc(callNode)) {
|
|
@@ -1605,7 +1609,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1605
1609
|
return null;
|
|
1606
1610
|
}
|
|
1607
1611
|
const stmts = [];
|
|
1608
|
-
const { args, argPositions: argPositionsAll
|
|
1612
|
+
const { args, argPositions: argPositionsAll } = this.cxxParseArguments(stmts, cxxOperatorCallExpr.inner.slice(1));
|
|
1609
1613
|
// The input/output operator must be overloaded as a global function, and the overloaded function only has 2 parameters,
|
|
1610
1614
|
// because the input/output operator is actually a binary operation: stream (left operand)+object (right operand)
|
|
1611
1615
|
const defaultClass = this.declaringMethod.getDeclaringArkFile().getDefaultClass();
|
|
@@ -1689,7 +1693,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1689
1693
|
var _a;
|
|
1690
1694
|
functionNameNode = functionNameNode !== null && functionNameNode !== void 0 ? functionNameNode : callExpression;
|
|
1691
1695
|
const stmts = [...currStmts];
|
|
1692
|
-
let { value: callerValue, valueOriginalPositions: callerPositions, stmts: callerStmts
|
|
1696
|
+
let { value: callerValue, valueOriginalPositions: callerPositions, stmts: callerStmts } = this.cxxNodeToValueAndStmts(functionNameNode);
|
|
1693
1697
|
stmts.push(...callerStmts);
|
|
1694
1698
|
let invokeValue;
|
|
1695
1699
|
let invokeValuePositions = [Position_1.FullPosition.cxxBuildFromNode(callExpression, this.cxxSourceFile)];
|
|
@@ -1699,7 +1703,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1699
1703
|
}
|
|
1700
1704
|
else if (callerValue instanceof Local_1.Local) {
|
|
1701
1705
|
const callerName = callerValue.getName();
|
|
1702
|
-
let classSignature =
|
|
1706
|
+
let classSignature = new ArkSignature_1.ClassSignature(callerName, this.declaringMethod.getDeclaringArkFileID());
|
|
1703
1707
|
let cls = ModelUtils_1.ModelUtils.getClass(this.declaringMethod, classSignature);
|
|
1704
1708
|
const callExprs = [ArkCxxAstNode_1.AstKind.CallExpr, ArkCxxAstNode_1.AstKind.CXXOperatorCallExpr];
|
|
1705
1709
|
if ((cls === null || cls === void 0 ? void 0 : cls.hasComponentDecorator()) && callExprs.includes(callExpression.kind)) {
|
|
@@ -1711,7 +1715,8 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1711
1715
|
}
|
|
1712
1716
|
const methodSignature = ArkSignatureBuilder_1.ArkSignatureBuilder.buildMethodSignatureFromMethodName(callerName);
|
|
1713
1717
|
const callerType = callerValue.getType();
|
|
1714
|
-
if (callerType instanceof Type_1.FunctionType ||
|
|
1718
|
+
if (callerType instanceof Type_1.FunctionType ||
|
|
1719
|
+
(callerType instanceof Type_2.PointerType && callerType.getBaseType() instanceof Type_1.FunctionType) ||
|
|
1715
1720
|
!((_a = this.getGlobals()) === null || _a === void 0 ? void 0 : _a.has(callerName))) {
|
|
1716
1721
|
invokeValue = new Expr_1.ArkPtrInvokeExpr(methodSignature, callerValue, args, realGenericTypes);
|
|
1717
1722
|
}
|
|
@@ -1720,10 +1725,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1720
1725
|
}
|
|
1721
1726
|
}
|
|
1722
1727
|
else {
|
|
1723
|
-
({
|
|
1724
|
-
value: callerValue,
|
|
1725
|
-
stmts: callerStmts,
|
|
1726
|
-
} = this.ArkCxxIRTransformer.generateAssignStmtForValue(callerValue, callerPositions));
|
|
1728
|
+
({ value: callerValue, stmts: callerStmts } = this.ArkCxxIRTransformer.generateAssignStmtForValue(callerValue, callerPositions));
|
|
1727
1729
|
stmts.push(...callerStmts);
|
|
1728
1730
|
const methodSignature = ArkSignatureBuilder_1.ArkSignatureBuilder.buildMethodSignatureFromMethodName(callerValue.getName());
|
|
1729
1731
|
invokeValue = new Expr_1.ArkStaticInvokeExpr(methodSignature, args, realGenericTypes);
|
|
@@ -1763,7 +1765,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1763
1765
|
buildValueAndStmtsForMemberCall(stmts, callerNode, argNodes, callExpression, realGenericTypes, cxxMemberCallExprType) {
|
|
1764
1766
|
const { args, argPositions: argPositionsAll } = this.cxxParseArguments(stmts, argNodes);
|
|
1765
1767
|
const argPositionsAllFlat = argPositionsAll.flat();
|
|
1766
|
-
let { value: callerValue, valueOriginalPositions: callerPositions, stmts: callerStmts
|
|
1768
|
+
let { value: callerValue, valueOriginalPositions: callerPositions, stmts: callerStmts } = this.cxxNodeToValueAndStmts(callerNode);
|
|
1767
1769
|
stmts.push(...callerStmts);
|
|
1768
1770
|
let invokeValue;
|
|
1769
1771
|
let invokeValuePositions = [Position_1.FullPosition.cxxBuildFromNode(callExpression, this.cxxSourceFile)];
|
|
@@ -1805,6 +1807,8 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1805
1807
|
let methodSignature;
|
|
1806
1808
|
const declareSignature = callerValue.getFieldSignature().getDeclaringSignature();
|
|
1807
1809
|
if (declareSignature instanceof ArkSignature_1.ClassSignature) {
|
|
1810
|
+
// Object path: an unclear declaring signature is routed to the temp canonicalizer
|
|
1811
|
+
// inside the constructor — no formal interning without a model.
|
|
1808
1812
|
methodSignature = new ArkSignature_1.MethodSignature(declareSignature, ArkSignatureBuilder_1.ArkSignatureBuilder.buildMethodSubSignatureFromMethodName(callerValue.getFieldName()));
|
|
1809
1813
|
}
|
|
1810
1814
|
else {
|
|
@@ -1833,7 +1837,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1833
1837
|
cxxParseArgumentsOfCallExpression(currStmts, callExpression, callNode) {
|
|
1834
1838
|
let realGenericTypes = this.getRealGenericTypes(callNode);
|
|
1835
1839
|
let builderMethodIndexes;
|
|
1836
|
-
const { args: args, argPositions: argPositions
|
|
1840
|
+
const { args: args, argPositions: argPositions } = this.cxxParseArguments(currStmts, callExpression, builderMethodIndexes);
|
|
1837
1841
|
return {
|
|
1838
1842
|
realGenericTypes: realGenericTypes,
|
|
1839
1843
|
args: args,
|
|
@@ -1865,9 +1869,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1865
1869
|
if (qualType) {
|
|
1866
1870
|
return qualType;
|
|
1867
1871
|
}
|
|
1868
|
-
return
|
|
1869
|
-
? node.type.desugaredQualType
|
|
1870
|
-
: node.type.qualType;
|
|
1872
|
+
return node.type.desugaredQualType && node.type.typeAliasDeclId ? node.type.desugaredQualType : node.type.qualType;
|
|
1871
1873
|
}
|
|
1872
1874
|
/**
|
|
1873
1875
|
* Splits template arguments by comma, but remains aware of nested brackets
|
|
@@ -1911,7 +1913,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1911
1913
|
this.builderMethodContextFlag = true;
|
|
1912
1914
|
this.ArkCxxIRTransformer.setBuilderMethodContextFlag(true);
|
|
1913
1915
|
}
|
|
1914
|
-
let { value: argValue, valueOriginalPositions: argPositionsSingle, stmts: argStmts
|
|
1916
|
+
let { value: argValue, valueOriginalPositions: argPositionsSingle, stmts: argStmts } = this.cxxNodeToValueAndStmts(argument);
|
|
1915
1917
|
this.builderMethodContextFlag = prevBuilderMethodContextFlag;
|
|
1916
1918
|
this.ArkCxxIRTransformer.setBuilderMethodContextFlag(prevBuilderMethodContextFlag);
|
|
1917
1919
|
currStmts.push(...argStmts);
|
|
@@ -1931,7 +1933,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1931
1933
|
}
|
|
1932
1934
|
cxxCallableNodeToValueAndStmts(callableNode) {
|
|
1933
1935
|
const declaringClass = this.declaringMethod.getDeclaringArkClass();
|
|
1934
|
-
const lambdaArkMethod = new ArkMethod_1.ArkMethod();
|
|
1936
|
+
const lambdaArkMethod = new ArkMethod_1.ArkMethod(declaringClass.getClassSigID());
|
|
1935
1937
|
(0, ArkMethodBuilder_1.buildArkMethodFromArkClass)(callableNode, declaringClass, lambdaArkMethod, this.cxxSourceFile, this.declaringMethod);
|
|
1936
1938
|
const callableType = new Type_1.FunctionType(lambdaArkMethod.getSignature());
|
|
1937
1939
|
const callableValue = this.addNewLocal(lambdaArkMethod.getName(), callableType);
|
|
@@ -1942,7 +1944,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1942
1944
|
};
|
|
1943
1945
|
}
|
|
1944
1946
|
cxxNewExpressionToValueAndStmts(newExpression) {
|
|
1945
|
-
var _a, _b;
|
|
1947
|
+
var _a, _b, _c;
|
|
1946
1948
|
let className = this.getNewExpressionClassName(newExpression);
|
|
1947
1949
|
// Add handling for dynamic array creation: int *arr = new int[10]
|
|
1948
1950
|
if (className === Builtin_1.Builtin.ARRAY || (0, cppUtils_1.hasNodeFlag)(newExpression, ArkCxxAstNode_1.CxxNodeFlag.Array)) {
|
|
@@ -1956,23 +1958,30 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
1956
1958
|
// If the parent node has a namespaceRef or TypeRef, it indicates a constructor call,
|
|
1957
1959
|
// and should infer the type of the corresponding namespace/class.
|
|
1958
1960
|
if (parentClassOrNs && parentClassOrNs.length > 0) {
|
|
1959
|
-
refType =
|
|
1961
|
+
refType =
|
|
1962
|
+
(_b = TypeInference_1.TypeInference.inferUnclearRefName(className, this.declaringMethod.getDeclaringArkClass())) !== null && _b !== void 0 ? _b : (0, builderUtils_1.cxxNode2Type)(newExpression, this.declaringMethod.getDeclaringArkClass());
|
|
1960
1963
|
}
|
|
1961
1964
|
let classType;
|
|
1962
1965
|
let classSignature;
|
|
1963
|
-
|
|
1966
|
+
// unclear stub 守卫——inferUnclearRefName 兜底会构造 %unk stub ClassType(file 级函数上下文的局部类等场景解析 miss),被这里短路采纳会把
|
|
1967
|
+
// %unk 泄漏进 IR(structBinding Person 实证)。stub 降级走 else 的域内解析链(findClassByShortName 局部类候选 + file 级直查),域内也 miss
|
|
1968
|
+
// 时兜底构造与原 stub 等价——行为仅在"域内可解析却被 stub 短路"的场景升级。
|
|
1969
|
+
if (refType instanceof Type_1.ClassType && !refType.isUnclear()) {
|
|
1964
1970
|
classType = refType;
|
|
1965
1971
|
}
|
|
1966
1972
|
else if (refType instanceof Type_1.AliasType && refType.getOriginalType() instanceof Type_1.ClassType) {
|
|
1967
1973
|
classType = refType.getOriginalType();
|
|
1968
1974
|
}
|
|
1969
1975
|
else {
|
|
1970
|
-
|
|
1976
|
+
// Nested classes are referenced by their bare short name inside the
|
|
1977
|
+
// enclosing class scope; resolve via the candidate chain first, then
|
|
1978
|
+
// the exact top-level lookup.
|
|
1979
|
+
let curClass = (_c = ModelUtils_2.CxxModelUtils.findClassByShortName(className, this.declaringMethod.getDeclaringArkClass(), this.declaringMethod)) !== null && _c !== void 0 ? _c : this.declaringMethod.getDeclaringArkFile().getClassWithName(className);
|
|
1971
1980
|
classSignature = curClass ? curClass.getSignature() : ArkSignatureBuilder_1.ArkSignatureBuilder.buildClassSignatureFromClassName(className);
|
|
1972
1981
|
classType = new Type_1.ClassType(classSignature, realGenericTypes);
|
|
1973
1982
|
}
|
|
1974
1983
|
const expr = new Expr_1.ArkNewExpr(classType);
|
|
1975
|
-
const { value: newLocal, valueOriginalPositions: newLocalPositions, stmts: newExprStmts } = this.ArkCxxIRTransformer.generateAssignStmtForValue(expr, [Position_1.FullPosition.cxxBuildFromNode(newExpression, this.cxxSourceFile)]);
|
|
1984
|
+
const { value: newLocal, valueOriginalPositions: newLocalPositions, stmts: newExprStmts, } = this.ArkCxxIRTransformer.generateAssignStmtForValue(expr, [Position_1.FullPosition.cxxBuildFromNode(newExpression, this.cxxSourceFile)]);
|
|
1976
1985
|
// When using the new keyword, the type of Local should be a pointer type.
|
|
1977
1986
|
if (newExpression.kind === ArkCxxAstNode_1.AstKind.CXXNewExpr) {
|
|
1978
1987
|
newLocal.setType(new Type_2.PointerType(classType, 1));
|
|
@@ -2006,15 +2015,14 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
2006
2015
|
// if case : struct LargeStruct s;, inner.length is 0, so we need to avoid it
|
|
2007
2016
|
newExpression.kind === ArkCxxAstNode_1.AstKind.CXXConstructExpr &&
|
|
2008
2017
|
newExpression.type.qualType.startsWith('struct') &&
|
|
2009
|
-
args.length > 0 &&
|
|
2018
|
+
args.length > 0 &&
|
|
2019
|
+
((_b = args[0].inner[0]) === null || _b === void 0 ? void 0 : _b.kind) === ArkCxxAstNode_1.AstKind.CompoundLiteralExpr) {
|
|
2010
2020
|
return this.getConstructArgs(args[0].inner[0].inner);
|
|
2011
2021
|
}
|
|
2012
2022
|
else if (newExpression.kind === ArkCxxAstNode_1.AstKind.InitListExpr) {
|
|
2013
2023
|
return this.getConstructArgs(newExpression);
|
|
2014
2024
|
}
|
|
2015
|
-
return args.filter(arg => (arg === null || arg === void 0 ? void 0 : arg.kind) !== ArkCxxAstNode_1.AstKind.TemplateRef &&
|
|
2016
|
-
(arg === null || arg === void 0 ? void 0 : arg.kind) !== ArkCxxAstNode_1.AstKind.NamespaceRef &&
|
|
2017
|
-
(arg === null || arg === void 0 ? void 0 : arg.kind) !== ArkCxxAstNode_1.AstKind.TypeRef);
|
|
2025
|
+
return args.filter(arg => (arg === null || arg === void 0 ? void 0 : arg.kind) !== ArkCxxAstNode_1.AstKind.TemplateRef && (arg === null || arg === void 0 ? void 0 : arg.kind) !== ArkCxxAstNode_1.AstKind.NamespaceRef && (arg === null || arg === void 0 ? void 0 : arg.kind) !== ArkCxxAstNode_1.AstKind.TypeRef);
|
|
2018
2026
|
})();
|
|
2019
2027
|
const { args: argValues, argPositions } = this.cxxParseArguments(stmts, constructArgs);
|
|
2020
2028
|
const constructorMethodSignature = this.getConstructorSignatureByClassTypeAndArgs(classType, argValues);
|
|
@@ -2033,10 +2041,14 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
2033
2041
|
const arkClass = file.getClass(classType.getClassSignature());
|
|
2034
2042
|
const constructorMethodSubSignature = ArkSignatureBuilder_1.ArkSignatureBuilder.buildMethodSubSignatureFromMethodName(TSConst_1.CONSTRUCTOR_NAME);
|
|
2035
2043
|
if (!arkClass) {
|
|
2044
|
+
// Object path: the stub class signature (unclear) is routed to the temp canonicalizer
|
|
2045
|
+
// inside the constructor — no formal interning without a model.
|
|
2036
2046
|
return new ArkSignature_1.MethodSignature(ArkSignatureBuilder_1.ArkSignatureBuilder.buildClassSignatureFromClassName(classType.getClassSignature().getClassName()), constructorMethodSubSignature);
|
|
2037
2047
|
}
|
|
2038
2048
|
const constructors = arkClass.getMethodsWithName(TSConst_1.CONSTRUCTOR_NAME);
|
|
2039
2049
|
if (constructors.length === 0) {
|
|
2050
|
+
// getClassSignature() (not getClassSigID()): the class may still be unclear and live in
|
|
2051
|
+
// the temp canonicalizer; the object overload interns it properly.
|
|
2040
2052
|
return new ArkSignature_1.MethodSignature(classType.getClassSignature(), constructorMethodSubSignature);
|
|
2041
2053
|
}
|
|
2042
2054
|
else if (constructors.length === 1) {
|
|
@@ -2058,6 +2070,8 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
2058
2070
|
}
|
|
2059
2071
|
}
|
|
2060
2072
|
}
|
|
2073
|
+
// getClassSignature() (not getClassSigID()): the class may still be unclear and live in
|
|
2074
|
+
// the temp canonicalizer; the object overload interns it properly.
|
|
2061
2075
|
return new ArkSignature_1.MethodSignature(classType.getClassSignature(), constructorMethodSubSignature);
|
|
2062
2076
|
}
|
|
2063
2077
|
getConstructArgs(constructArgs) {
|
|
@@ -2158,7 +2172,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
2158
2172
|
}
|
|
2159
2173
|
}
|
|
2160
2174
|
const stmts = [];
|
|
2161
|
-
const { args: argumentValues, argPositions: argPositions
|
|
2175
|
+
const { args: argumentValues, argPositions: argPositions } = this.cxxParseArguments(stmts, newArrayExpression.inner);
|
|
2162
2176
|
let argumentsLength = newArrayExpression.inner ? newArrayExpression.inner.length : 0;
|
|
2163
2177
|
let arrayLengthValue;
|
|
2164
2178
|
let fromLiteral; // Does it contain specific elements
|
|
@@ -2204,8 +2218,8 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
2204
2218
|
arrayLength = (_a = dimensions[0]) !== null && _a !== void 0 ? _a : arrayLiteralExpression.inner.length;
|
|
2205
2219
|
elementsNumber = (_b = dimensions.reduce((acc, cur) => acc * cur, 1)) !== null && _b !== void 0 ? _b : arrayLength;
|
|
2206
2220
|
dimensions.shift();
|
|
2207
|
-
isInitZero =
|
|
2208
|
-
((_d = arrayLiteralExpression.inner) === null || _d === void 0 ? void 0 : _d.length) === 0
|
|
2221
|
+
isInitZero =
|
|
2222
|
+
(((_c = arrayLiteralExpression.inner) === null || _c === void 0 ? void 0 : _c.length) === 1 && arrayLiteralExpression.inner[0].value === '0') || ((_d = arrayLiteralExpression.inner) === null || _d === void 0 ? void 0 : _d.length) === 0;
|
|
2209
2223
|
this.getArrayLiteralExpression(arrayLiteralExpression, stmts, elementTypes, elementValues, elementPositions, dimensions, isInitZero);
|
|
2210
2224
|
if ((0, builderUtils_1.isCxxFunctionPointer)(oriType)) {
|
|
2211
2225
|
// If it's an array of function pointers, the array symbols in the type should be removed here before resolving for the base type.
|
|
@@ -2228,8 +2242,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
2228
2242
|
return [];
|
|
2229
2243
|
}
|
|
2230
2244
|
// Parse numbers and return a dimension array
|
|
2231
|
-
return dimensions
|
|
2232
|
-
.map(dim => parseInt(dim.replace(/[\[\]]/g, '')));
|
|
2245
|
+
return dimensions.map(dim => parseInt(dim.replace(/[\[\]]/g, '')));
|
|
2233
2246
|
}
|
|
2234
2247
|
/**
|
|
2235
2248
|
*Process array literal expression and convert it to intermediate representation
|
|
@@ -2242,7 +2255,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
2242
2255
|
getArrayLiteralExpression(arrayLiteralExpression, stmts, elementTypes, elementValues, elementPositions, dimensions, isInitZero) {
|
|
2243
2256
|
for (const element of arrayLiteralExpression.inner) {
|
|
2244
2257
|
// If there is still dimension information in the array, build an internal array
|
|
2245
|
-
let { value: elementValue, valueOriginalPositions: elementPosition, stmts: elementStmts } = dimensions.length > 0 ? this.cxxArrayLiteralExpressionToValueAndStmts(element, dimensions) : this.cxxNodeToValueAndStmts(element);
|
|
2258
|
+
let { value: elementValue, valueOriginalPositions: elementPosition, stmts: elementStmts, } = dimensions.length > 0 ? this.cxxArrayLiteralExpressionToValueAndStmts(element, dimensions) : this.cxxNodeToValueAndStmts(element);
|
|
2246
2259
|
stmts.push(...elementStmts);
|
|
2247
2260
|
if (IRUtils_1.IRUtils.moreThanOneAddress(elementValue)) {
|
|
2248
2261
|
({
|
|
@@ -2310,8 +2323,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
2310
2323
|
*@ returns The object containing the converted value and the generated statement list
|
|
2311
2324
|
*/
|
|
2312
2325
|
cxxPrefixIncDecToValueAndStmts(prefixUnaryExpression, operatorToken, operandValue, operandPositions, stmts) {
|
|
2313
|
-
const binaryOperator = operatorToken === (0, cppUtils_1.cxxOpcodeToString)(ArkCxxAstNode_1.CxxOpcode.Inc) ?
|
|
2314
|
-
Expr_1.NormalBinaryOperator.Addition : Expr_1.NormalBinaryOperator.Subtraction;
|
|
2326
|
+
const binaryOperator = operatorToken === (0, cppUtils_1.cxxOpcodeToString)(ArkCxxAstNode_1.CxxOpcode.Inc) ? Expr_1.NormalBinaryOperator.Addition : Expr_1.NormalBinaryOperator.Subtraction;
|
|
2315
2327
|
const binopExpr = new Expr_2.ArkCxxNormalBinOpExpr(operandValue, ValueUtil_1.CxxValueUtil.getOrCreateNumberConst(1), binaryOperator);
|
|
2316
2328
|
const exprPositions = [Position_1.FullPosition.cxxBuildFromNode(prefixUnaryExpression, this.cxxSourceFile)];
|
|
2317
2329
|
exprPositions.push(...operandPositions, Position_1.FullPosition.DEFAULT);
|
|
@@ -2326,7 +2338,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
2326
2338
|
}
|
|
2327
2339
|
cxxPrefixUnaryExpressionToValueAndStmts(prefixUnaryExpression, opcodeOverride) {
|
|
2328
2340
|
const stmts = [];
|
|
2329
|
-
let { value: operandValue, valueOriginalPositions: operandPositions, stmts: operandStmts } = this.cxxNodeToValueAndStmts(prefixUnaryExpression.inner[0]);
|
|
2341
|
+
let { value: operandValue, valueOriginalPositions: operandPositions, stmts: operandStmts, } = this.cxxNodeToValueAndStmts(prefixUnaryExpression.inner[0]);
|
|
2330
2342
|
stmts.push(...operandStmts);
|
|
2331
2343
|
if (IRUtils_1.IRUtils.moreThanOneAddress(operandValue)) {
|
|
2332
2344
|
({
|
|
@@ -2373,11 +2385,13 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
2373
2385
|
cxxPostfixUnaryExpressionToValueAndStmts(postfixUnaryExpression, opcodeOverride) {
|
|
2374
2386
|
var _a, _b, _c;
|
|
2375
2387
|
const stmts = [];
|
|
2376
|
-
let { value: operandValue, valueOriginalPositions: operandPositions, stmts: exprStmts
|
|
2388
|
+
let { value: operandValue, valueOriginalPositions: operandPositions, stmts: exprStmts } = this.cxxNodeToValueAndStmts(postfixUnaryExpression.inner[0]);
|
|
2377
2389
|
stmts.push(...exprStmts);
|
|
2378
2390
|
if (IRUtils_1.IRUtils.moreThanOneAddress(operandValue)) {
|
|
2379
2391
|
({
|
|
2380
|
-
value: operandValue,
|
|
2392
|
+
value: operandValue,
|
|
2393
|
+
valueOriginalPositions: operandPositions,
|
|
2394
|
+
stmts: exprStmts,
|
|
2381
2395
|
} = this.ArkCxxIRTransformer.generateAssignStmtForValue(operandValue, operandPositions));
|
|
2382
2396
|
stmts.push(...exprStmts);
|
|
2383
2397
|
}
|
|
@@ -2387,17 +2401,19 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
2387
2401
|
// Use temporary variables to store the value before self increment, and avoid this expression for some non assignment operation scenarios
|
|
2388
2402
|
if (operatorToken === (0, cppUtils_1.cxxOpcodeToString)(ArkCxxAstNode_1.CxxOpcode.Inc) || operatorToken === (0, cppUtils_1.cxxOpcodeToString)(ArkCxxAstNode_1.CxxOpcode.Dec)) {
|
|
2389
2403
|
const needAssign = [
|
|
2390
|
-
ArkCxxAstNode_1.AstKind.VarDecl,
|
|
2391
|
-
ArkCxxAstNode_1.AstKind.
|
|
2404
|
+
ArkCxxAstNode_1.AstKind.VarDecl,
|
|
2405
|
+
ArkCxxAstNode_1.AstKind.BinaryOperator,
|
|
2406
|
+
ArkCxxAstNode_1.AstKind.BinaryConditionalOperator,
|
|
2407
|
+
ArkCxxAstNode_1.AstKind.ConditionalOperator,
|
|
2408
|
+
ArkCxxAstNode_1.AstKind.ArraySubscriptExpr,
|
|
2392
2409
|
];
|
|
2393
|
-
let parent = (_c = (
|
|
2410
|
+
let parent = (_c = (_a = postfixUnaryExpression.parent) !== null && _a !== void 0 ? _a : (_b = postfixUnaryExpression.getParent) === null || _b === void 0 ? void 0 : _b.call(postfixUnaryExpression, true)) !== null && _c !== void 0 ? _c : null;
|
|
2394
2411
|
if (parent && needAssign.includes(parent.kind)) {
|
|
2395
|
-
let { value: tempValue, stmts: tempStmts
|
|
2412
|
+
let { value: tempValue, stmts: tempStmts } = this.arkIRTransformer.generateAssignStmtForValue(operandValue, exprPositions);
|
|
2396
2413
|
stmts.push(...tempStmts);
|
|
2397
2414
|
value = tempValue;
|
|
2398
2415
|
}
|
|
2399
|
-
const binaryOperator = operatorToken === (0, cppUtils_1.cxxOpcodeToString)(ArkCxxAstNode_1.CxxOpcode.Inc) ?
|
|
2400
|
-
Expr_1.NormalBinaryOperator.Addition : Expr_1.NormalBinaryOperator.Subtraction;
|
|
2416
|
+
const binaryOperator = operatorToken === (0, cppUtils_1.cxxOpcodeToString)(ArkCxxAstNode_1.CxxOpcode.Inc) ? Expr_1.NormalBinaryOperator.Addition : Expr_1.NormalBinaryOperator.Subtraction;
|
|
2401
2417
|
const binopExpr = new Expr_2.ArkCxxNormalBinOpExpr(operandValue, ValueUtil_1.CxxValueUtil.getOrCreateNumberConst(1), binaryOperator);
|
|
2402
2418
|
exprPositions.push(...operandPositions, Position_1.FullPosition.DEFAULT);
|
|
2403
2419
|
const assignStmt = new Stmt_1.ArkAssignStmt(operandValue, binopExpr);
|
|
@@ -2412,7 +2428,9 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
2412
2428
|
exprPositions = [Position_1.FullPosition.DEFAULT];
|
|
2413
2429
|
}
|
|
2414
2430
|
return {
|
|
2415
|
-
value: value,
|
|
2431
|
+
value: value,
|
|
2432
|
+
valueOriginalPositions: exprPositions,
|
|
2433
|
+
stmts: stmts,
|
|
2416
2434
|
};
|
|
2417
2435
|
}
|
|
2418
2436
|
declStmtToValueAndStmts(decl) {
|
|
@@ -2485,14 +2503,15 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
2485
2503
|
const { value: leftValue, valueOriginalPositions: leftPositions, stmts: leftStmts } = leftValueAndStmts;
|
|
2486
2504
|
let stmts = [];
|
|
2487
2505
|
if (needRightOp) {
|
|
2488
|
-
const { value: rightValue, valueOriginalPositions: rightPositions, stmts: rightStmts } = this.cxxAssignmentRightOpToValueAndStmts(rightOpNode, leftValue);
|
|
2506
|
+
const { value: rightValue, valueOriginalPositions: rightPositions, stmts: rightStmts, } = this.cxxAssignmentRightOpToValueAndStmts(rightOpNode, leftValue);
|
|
2489
2507
|
if (leftValue instanceof Local_1.Local) {
|
|
2490
2508
|
if (variableDefFlag) {
|
|
2491
2509
|
leftValue.setConstFlag(isConst);
|
|
2492
2510
|
leftValue.setType(declarationType);
|
|
2493
2511
|
}
|
|
2494
2512
|
if ((leftValue.getType() instanceof Type_1.UnknownType || leftValue.getType() instanceof Type_1.UnclearReferenceType) &&
|
|
2495
|
-
!(rightValue.getType() instanceof Type_1.UnknownType) &&
|
|
2513
|
+
!(rightValue.getType() instanceof Type_1.UnknownType) &&
|
|
2514
|
+
!(rightValue.getType() instanceof Type_1.UndefinedType)) {
|
|
2496
2515
|
leftValue.setType(rightValue.getType());
|
|
2497
2516
|
}
|
|
2498
2517
|
}
|
|
@@ -2530,11 +2549,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
2530
2549
|
let tempRightStmts = [];
|
|
2531
2550
|
const rightStmts = [];
|
|
2532
2551
|
if (rightOpNode) {
|
|
2533
|
-
({
|
|
2534
|
-
value: rightValue,
|
|
2535
|
-
valueOriginalPositions: rightPositions,
|
|
2536
|
-
stmts: tempRightStmts,
|
|
2537
|
-
} = this.cxxNodeToValueAndStmts(rightOpNode));
|
|
2552
|
+
({ value: rightValue, valueOriginalPositions: rightPositions, stmts: tempRightStmts } = this.cxxNodeToValueAndStmts(rightOpNode));
|
|
2538
2553
|
rightStmts.push(...tempRightStmts);
|
|
2539
2554
|
}
|
|
2540
2555
|
else {
|
|
@@ -2565,11 +2580,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
2565
2580
|
let { value, valueOriginalPositions, stmts } = this.cxxNodeToValueAndStmts(node);
|
|
2566
2581
|
allStmts.push(...stmts);
|
|
2567
2582
|
if (IRUtils_1.IRUtils.moreThanOneAddress(value)) {
|
|
2568
|
-
({
|
|
2569
|
-
value,
|
|
2570
|
-
valueOriginalPositions,
|
|
2571
|
-
stmts,
|
|
2572
|
-
} = this.arkIRTransformer.generateAssignStmtForValue(value, valueOriginalPositions));
|
|
2583
|
+
({ value, valueOriginalPositions, stmts } = this.arkIRTransformer.generateAssignStmtForValue(value, valueOriginalPositions));
|
|
2573
2584
|
allStmts.push(...stmts);
|
|
2574
2585
|
}
|
|
2575
2586
|
return { value, valueOriginalPositions, stmts: allStmts };
|
|
@@ -2591,9 +2602,9 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
2591
2602
|
}
|
|
2592
2603
|
const stmts = [];
|
|
2593
2604
|
const binaryExpressionPosition = Position_1.FullPosition.cxxBuildFromNode(binaryExpression, this.cxxSourceFile);
|
|
2594
|
-
const { value: opValue1, valueOriginalPositions: opPositions1, stmts: opStmts1
|
|
2605
|
+
const { value: opValue1, valueOriginalPositions: opPositions1, stmts: opStmts1 } = this.cxxNodeToSingleAddressValueAndStmts(binaryExpressionLeft);
|
|
2595
2606
|
stmts.push(...opStmts1);
|
|
2596
|
-
const { value: opValue2, valueOriginalPositions: opPositions2, stmts: opStmts2
|
|
2607
|
+
const { value: opValue2, valueOriginalPositions: opPositions2, stmts: opStmts2 } = this.cxxNodeToSingleAddressValueAndStmts(binaryExpressionRight);
|
|
2597
2608
|
stmts.push(...opStmts2);
|
|
2598
2609
|
let exprValue;
|
|
2599
2610
|
let exprValuePositions = [binaryExpressionPosition];
|
|
@@ -2632,9 +2643,9 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
2632
2643
|
cxxCompoundAssignmentToValueAndStmts(binaryExpression) {
|
|
2633
2644
|
var _a;
|
|
2634
2645
|
const stmts = [];
|
|
2635
|
-
let { value: leftValue, valueOriginalPositions: leftPositions, stmts: leftStmts
|
|
2646
|
+
let { value: leftValue, valueOriginalPositions: leftPositions, stmts: leftStmts } = this.cxxNodeToValueAndStmts(binaryExpression.inner[0]);
|
|
2636
2647
|
stmts.push(...leftStmts);
|
|
2637
|
-
let { value: rightValue, valueOriginalPositions: rightPositions, stmts: rightStmts
|
|
2648
|
+
let { value: rightValue, valueOriginalPositions: rightPositions, stmts: rightStmts } = this.cxxNodeToValueAndStmts(binaryExpression.inner[1]);
|
|
2638
2649
|
stmts.push(...rightStmts);
|
|
2639
2650
|
if (IRUtils_1.IRUtils.moreThanOneAddress(leftValue) && IRUtils_1.IRUtils.moreThanOneAddress(rightValue)) {
|
|
2640
2651
|
const { value: newRightValue, valueOriginalPositions: newRightPositions, stmts: rightStmts, } = this.ArkCxxIRTransformer.generateAssignStmtForValue(rightValue, rightPositions);
|
|
@@ -2703,7 +2714,7 @@ class ArkCxxValueTransformer extends ArkValueTransformer_1.ArkValueTransformer {
|
|
|
2703
2714
|
*/
|
|
2704
2715
|
cxxConditionToValueAndStmts(condition) {
|
|
2705
2716
|
const stmts = [];
|
|
2706
|
-
let { value: conditionValue, valueOriginalPositions: conditionPositions, stmts: conditionStmts
|
|
2717
|
+
let { value: conditionValue, valueOriginalPositions: conditionPositions, stmts: conditionStmts } = this.cxxNodeToValueAndStmts(condition);
|
|
2707
2718
|
stmts.push(...conditionStmts);
|
|
2708
2719
|
let conditionExpr;
|
|
2709
2720
|
if (conditionValue instanceof Expr_1.AbstractBinopExpr && this.isRelationalOperator(conditionValue.getOperator())) {
|