arkanalyzer 1.0.29 → 1.0.30
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/Scene.d.ts +7 -0
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +196 -173
- package/lib/VFG/builder/DVFGBuilder.d.ts.map +1 -1
- package/lib/VFG/builder/DVFGBuilder.js +11 -6
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts +3 -1
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/AbstractAnalysis.js +18 -10
- package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/RapidTypeAnalysis.js +8 -7
- package/lib/callgraph/common/Statistics.d.ts.map +1 -1
- package/lib/callgraph/common/Statistics.js +25 -24
- package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
- package/lib/callgraph/model/CallGraph.js +0 -1
- 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.map +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.js +26 -26
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +3 -0
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +112 -92
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +15 -14
- package/lib/core/base/Type.d.ts +10 -1
- package/lib/core/base/Type.d.ts.map +1 -1
- package/lib/core/base/Type.js +18 -1
- package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkValueTransformer.js +3 -1
- package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
- package/lib/core/common/DummyMainCreater.js +17 -20
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +18 -10
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +12 -1
- package/lib/core/dataflow/DataflowSolver.d.ts +1 -0
- package/lib/core/dataflow/DataflowSolver.d.ts.map +1 -1
- package/lib/core/dataflow/DataflowSolver.js +21 -17
- package/lib/core/dataflow/ReachingDef.d.ts.map +1 -1
- package/lib/core/dataflow/ReachingDef.js +6 -0
- package/lib/core/dataflow/UndefinedVariable.d.ts.map +1 -1
- package/lib/core/dataflow/UndefinedVariable.js +0 -25
- package/lib/core/graph/Cfg.d.ts +1 -0
- package/lib/core/graph/Cfg.d.ts.map +1 -1
- package/lib/core/graph/Cfg.js +49 -45
- package/lib/core/graph/DominanceFinder.js +19 -19
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts +1 -0
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/ViewTreeBuilder.js +34 -31
- package/lib/core/model/ArkMethod.d.ts.map +1 -1
- package/lib/core/model/ArkMethod.js +13 -6
- package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.js +72 -63
- package/lib/save/serializeArkIR.d.ts.map +1 -1
- package/lib/save/serializeArkIR.js +11 -24
- package/lib/save/source/SourceBody.js +10 -10
- package/lib/save/source/SourceFilePrinter.d.ts +1 -0
- package/lib/save/source/SourceFilePrinter.d.ts.map +1 -1
- package/lib/save/source/SourceFilePrinter.js +11 -8
- package/lib/save/source/SourceNamespace.d.ts +1 -0
- package/lib/save/source/SourceNamespace.d.ts.map +1 -1
- package/lib/save/source/SourceNamespace.js +11 -8
- package/lib/save/source/SourceStmt.d.ts +1 -0
- package/lib/save/source/SourceStmt.d.ts.map +1 -1
- package/lib/save/source/SourceStmt.js +37 -35
- package/lib/save/source/SourceTransformer.d.ts +2 -0
- package/lib/save/source/SourceTransformer.d.ts.map +1 -1
- package/lib/save/source/SourceTransformer.js +64 -54
- package/lib/transformer/StaticSingleAssignmentFormer.d.ts +5 -0
- package/lib/transformer/StaticSingleAssignmentFormer.d.ts.map +1 -1
- package/lib/transformer/StaticSingleAssignmentFormer.js +119 -101
- package/lib/utils/CfgStructualAnalysis.d.ts +1 -0
- package/lib/utils/CfgStructualAnalysis.d.ts.map +1 -1
- package/lib/utils/CfgStructualAnalysis.js +28 -24
- package/lib/utils/FileUtils.d.ts.map +1 -1
- package/lib/utils/FileUtils.js +14 -12
- package/lib/utils/callGraphUtils.d.ts.map +1 -1
- package/lib/utils/callGraphUtils.js +26 -23
- package/lib/utils/entryMethodUtils.d.ts.map +1 -1
- package/lib/utils/entryMethodUtils.js +11 -8
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SourceStmt.d.ts","sourceRoot":"","sources":["../../../src/save/source/SourceStmt.ts"],"names":[],"mappings":"AAgBA,OAAO,EAEH,eAAe,EAIlB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE9C,OAAO,EAEH,aAAa,EACb,SAAS,EACT,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,IAAI,EACP,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAmB,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAQ5E,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAK3C,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;IAC1D,aAAa,IAAI,UAAU,CAAC;IAE5B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9C,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAEpC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAE9B,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAEhC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAEhC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;IAEtC,iBAAiB,IAAI,OAAO,CAAC;CAChC;AAED,8BAAsB,UAAW,YAAW,IAAI;IAC5C,QAAQ,EAAE,IAAI,CAAC;IACf,OAAO,EAAE,kBAAkB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAM;IAClB,WAAW,EAAE,iBAAiB,CAAC;gBAEnB,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI;IAOhD,OAAO,IAAI,MAAM;IAIjB,OAAO,CAAC,IAAI,EAAE,MAAM;IAIpB,IAAI,IAAI,MAAM;IAOrB,SAAS,CAAC,UAAU,IAAI,IAAI;IAE5B,SAAS,CAAC,SAAS,IAAI,IAAI;IAE3B,SAAS,CAAC,MAAM,IAAI,MAAM;IAe1B,SAAS,KAAK,OAAO,IAAI,aAAa,CAErC;IAEM,QAAQ,IAAI,MAAM;IAIzB,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIrC,SAAS,CAAC,SAAS,IAAI,MAAM;aAIb,WAAW,IAAI,IAAI;IAEnC,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;CAOpD;AAQD,qBAAa,gBAAiB,SAAQ,UAAU;IAC5C,OAAO,CAAC,MAAM,CAAwC;IACtD,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,CAAqB;IACtC,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa;IAKzD,WAAW,IAAI,IAAI;IA+D1B,SAAS,CAAC,UAAU,IAAI,IAAI;IAqC5B,SAAS,CAAC,SAAS,IAAI,IAAI;IAM3B,OAAO,CAAC,kBAAkB;IAa1B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;
|
|
1
|
+
{"version":3,"file":"SourceStmt.d.ts","sourceRoot":"","sources":["../../../src/save/source/SourceStmt.ts"],"names":[],"mappings":"AAgBA,OAAO,EAEH,eAAe,EAIlB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE9C,OAAO,EAEH,aAAa,EACb,SAAS,EACT,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,IAAI,EACP,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAmB,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAQ5E,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAK3C,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;IAC1D,aAAa,IAAI,UAAU,CAAC;IAE5B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9C,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAEpC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAE9B,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAEhC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAEhC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;IAEtC,iBAAiB,IAAI,OAAO,CAAC;CAChC;AAED,8BAAsB,UAAW,YAAW,IAAI;IAC5C,QAAQ,EAAE,IAAI,CAAC;IACf,OAAO,EAAE,kBAAkB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAM;IAClB,WAAW,EAAE,iBAAiB,CAAC;gBAEnB,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI;IAOhD,OAAO,IAAI,MAAM;IAIjB,OAAO,CAAC,IAAI,EAAE,MAAM;IAIpB,IAAI,IAAI,MAAM;IAOrB,SAAS,CAAC,UAAU,IAAI,IAAI;IAE5B,SAAS,CAAC,SAAS,IAAI,IAAI;IAE3B,SAAS,CAAC,MAAM,IAAI,MAAM;IAe1B,SAAS,KAAK,OAAO,IAAI,aAAa,CAErC;IAEM,QAAQ,IAAI,MAAM;IAIzB,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIrC,SAAS,CAAC,SAAS,IAAI,MAAM;aAIb,WAAW,IAAI,IAAI;IAEnC,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;CAOpD;AAQD,qBAAa,gBAAiB,SAAQ,UAAU;IAC5C,OAAO,CAAC,MAAM,CAAwC;IACtD,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,CAAqB;IACtC,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa;IAKzD,WAAW,IAAI,IAAI;IA+D1B,SAAS,CAAC,UAAU,IAAI,IAAI;IAqC5B,SAAS,CAAC,SAAS,IAAI,IAAI;IAM3B,OAAO,CAAC,kBAAkB;IAa1B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA6B5B,OAAO,CAAC,uBAAuB;IAmB/B;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IAqBjC,OAAO,CAAC,4BAA4B;IAmBpC,OAAO,CAAC,+BAA+B;CAK1C;AAED,qBAAa,gBAAiB,SAAQ,UAAU;gBAChC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa;IAIzD,WAAW,IAAI,IAAI;IAwB1B,SAAS,CAAC,UAAU,IAAI,IAAI;IAW5B,SAAS,CAAC,SAAS,IAAI,IAAI;CAO9B;AAED,qBAAa,YAAa,SAAQ,UAAU;gBAC5B,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,SAAS;IAIrD,WAAW,IAAI,IAAI;IAS1B,SAAS,CAAC,SAAS,IAAI,IAAI;CAG9B;AAED,qBAAa,eAAgB,SAAQ,UAAU;IAC3C,KAAK,EAAE,UAAU,CAAC;gBAEN,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU;IAK/E,SAAS,CAAC,SAAS,IAAI,IAAI;IAI3B;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ;IA+HT,WAAW,IAAI,IAAI;IAY1B,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM;CA4BhD;AAED,qBAAa,aAAc,SAAQ,eAAe;IAC9C,QAAQ,EAAE,UAAU,CAAC;gBAET,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU;IAK9F,WAAW,IAAI,IAAI;CAmB7B;AAED,qBAAa,YAAa,SAAQ,UAAU;gBAC5B,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI;IAI5C,WAAW,IAAI,IAAI;IAI1B,SAAS,CAAC,SAAS,IAAI,IAAI;CAG9B;AAED,qBAAa,iBAAkB,SAAQ,eAAe;gBACtC,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU;IAIpE,WAAW,IAAI,IAAI;IAS1B,SAAS,CAAC,UAAU,IAAI,IAAI;IAI5B,SAAS,CAAC,SAAS,IAAI,IAAI;CAC9B;AAED,qBAAa,cAAe,SAAQ,UAAU;gBAC9B,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI;IAIhD,WAAW,IAAI,IAAI;IAI1B,SAAS,CAAC,UAAU,IAAI,IAAI;IAI5B,SAAS,CAAC,SAAS,IAAI,IAAI;CAG9B;AAED,qBAAa,kBAAmB,SAAQ,UAAU;gBAClC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI;IAKhD,WAAW,IAAI,IAAI;CAG7B;AAED,qBAAa,eAAgB,SAAQ,UAAU;gBAC/B,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI;IAKhD,WAAW,IAAI,IAAI;CAG7B;AAED,qBAAa,gBAAiB,SAAQ,UAAU;gBAChC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa;IAIzD,WAAW,IAAI,IAAI;CAG7B;AAED,qBAAa,oBAAqB,SAAQ,UAAU;gBACpC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,iBAAiB;IAI7D,WAAW,IAAI,IAAI;CAO7B;AAED,qBAAa,qBAAsB,SAAQ,UAAU;gBACrC,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM;IAK1D,WAAW,IAAI,IAAI;IAE1B,SAAS,CAAC,UAAU,IAAI,IAAI;CAG/B;AAED,qBAAa,gBAAiB,SAAQ,UAAU;gBAChC,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI;IAI5C,WAAW,IAAI,IAAI;CAG7B;AAED,qBAAa,eAAgB,SAAQ,UAAU;gBAC/B,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY;IAIxD,WAAW,IAAI,IAAI;CAG7B;AAED,qBAAa,mBAAoB,SAAQ,UAAU;IAC/C,SAAS,EAAE,SAAS,CAAC;gBACT,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;IAKtE,WAAW,IAAI,IAAI;IA0C1B,OAAO,CAAC,eAAe;CAU1B;AAED,qBAAa,aAAc,SAAQ,UAAU;gBAC7B,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI;IAI5C,WAAW,IAAI,IAAI;IAI1B,SAAS,CAAC,SAAS,IAAI,IAAI;CAG9B;AAED,qBAAa,eAAgB,SAAQ,UAAU;IAC3C,KAAK,EAAE,UAAU,GAAG,SAAS,CAAC;gBAClB,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,UAAU;IAKhE,WAAW,IAAI,IAAI;IAe1B,SAAS,CAAC,UAAU,IAAI,IAAI;IAI5B,SAAS,CAAC,SAAS,IAAI,IAAI;CAG9B;AAED,qBAAa,iBAAkB,SAAQ,UAAU;gBACjC,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI;IAI5C,WAAW,IAAI,IAAI;IAI1B,SAAS,CAAC,UAAU,IAAI,IAAI;IAI5B,SAAS,CAAC,SAAS,IAAI,IAAI;CAG9B;AAED,qBAAa,kBAAkB;IAC3B,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;gBAEL,IAAI,EAAE,eAAe;IAK1B,YAAY,CAAC,KAAK,EAAE,MAAM;IAI1B,QAAQ,IAAI,MAAM;CAG5B;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,GAAG,UAAU,CAqBnF"}
|
|
@@ -188,36 +188,35 @@ class SourceAssignStmt extends SourceStmt {
|
|
|
188
188
|
}
|
|
189
189
|
if (this.context.hasTempVisit(this.leftCode)) {
|
|
190
190
|
this.setText('');
|
|
191
|
+
return;
|
|
191
192
|
}
|
|
192
193
|
else if (PrinterUtils_1.PrinterUtils.isTemp(this.leftCode)) {
|
|
193
194
|
this.setText(`${this.rightCode};`);
|
|
195
|
+
return;
|
|
194
196
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
197
|
+
if (this.leftOp instanceof Local_1.Local &&
|
|
198
|
+
this.context.getLocals().has(this.leftOp.getName()) &&
|
|
199
|
+
!this.isLocalTempValue(this.leftOp)) {
|
|
200
|
+
if (this.context.isLocalDefined(this.leftOp)) {
|
|
201
|
+
this.setText(`${this.leftCode} = ${this.rightCode};`);
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
let flag = this.leftOp.getConstFlag() ? 'const' : 'let';
|
|
205
|
+
if (this.context.getArkFile().getExportInfoBy(this.leftCode) && this.context.isInDefaultMethod()) {
|
|
206
|
+
this.setText(`export ${flag} ${this.leftCode} = ${this.rightCode};`);
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
if (this.leftTypeCode.length > 0) {
|
|
210
|
+
this.setText(`${flag} ${this.leftCode}: ${this.leftTypeCode} = ${this.rightCode};`);
|
|
201
211
|
}
|
|
202
212
|
else {
|
|
203
|
-
|
|
204
|
-
if (this.context.getArkFile().getExportInfoBy(this.leftCode) && this.context.isInDefaultMethod()) {
|
|
205
|
-
this.setText(`export ${flag} ${this.leftCode} = ${this.rightCode};`);
|
|
206
|
-
}
|
|
207
|
-
else {
|
|
208
|
-
if (this.leftTypeCode.length > 0) {
|
|
209
|
-
this.setText(`${flag} ${this.leftCode}: ${this.leftTypeCode} = ${this.rightCode};`);
|
|
210
|
-
}
|
|
211
|
-
else {
|
|
212
|
-
this.setText(`${flag} ${this.leftCode} = ${this.rightCode};`);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
this.context.defineLocal(this.leftOp);
|
|
213
|
+
this.setText(`${flag} ${this.leftCode} = ${this.rightCode};`);
|
|
216
214
|
}
|
|
217
215
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
216
|
+
this.context.defineLocal(this.leftOp);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
this.setText(`${this.leftCode} = ${this.rightCode};`);
|
|
221
220
|
}
|
|
222
221
|
}
|
|
223
222
|
afterDump() {
|
|
@@ -249,19 +248,7 @@ class SourceAssignStmt extends SourceStmt {
|
|
|
249
248
|
let instanceInvokeExpr = stmt.getInvokeExpr();
|
|
250
249
|
if ('constructor' === instanceInvokeExpr.getMethodSignature().getMethodSubSignature().getMethodName() &&
|
|
251
250
|
instanceInvokeExpr.getBase().getName() === this.leftOp.getName()) {
|
|
252
|
-
|
|
253
|
-
instanceInvokeExpr.getArgs().forEach((v) => {
|
|
254
|
-
args.push(this.transformer.valueToString(v));
|
|
255
|
-
});
|
|
256
|
-
if (originType === PrinterUtils_1.CLASS_CATEGORY_COMPONENT) {
|
|
257
|
-
this.rightCode = `${this.transformer.typeToString(this.rightOp.getType())}(${args.join(', ')})`;
|
|
258
|
-
}
|
|
259
|
-
else if (originType === ArkClass_1.ClassCategory.TYPE_LITERAL || originType === ArkClass_1.ClassCategory.OBJECT) {
|
|
260
|
-
this.rightCode = `${this.transformer.literalObjectToString(this.rightOp.getType())}`;
|
|
261
|
-
}
|
|
262
|
-
else {
|
|
263
|
-
this.rightCode = `new ${this.transformer.typeToString(this.rightOp.getType())}(${args.join(', ')})`;
|
|
264
|
-
}
|
|
251
|
+
this.handleConstructorInvoke(instanceInvokeExpr, originType);
|
|
265
252
|
return;
|
|
266
253
|
}
|
|
267
254
|
}
|
|
@@ -279,6 +266,21 @@ class SourceAssignStmt extends SourceStmt {
|
|
|
279
266
|
this.rightCode = `new ${this.transformer.typeToString(this.rightOp.getType())}()`;
|
|
280
267
|
}
|
|
281
268
|
}
|
|
269
|
+
handleConstructorInvoke(instanceInvokeExpr, originType) {
|
|
270
|
+
let args = [];
|
|
271
|
+
instanceInvokeExpr.getArgs().forEach((v) => {
|
|
272
|
+
args.push(this.transformer.valueToString(v));
|
|
273
|
+
});
|
|
274
|
+
if (originType === PrinterUtils_1.CLASS_CATEGORY_COMPONENT) {
|
|
275
|
+
this.rightCode = `${this.transformer.typeToString(this.rightOp.getType())}(${args.join(', ')})`;
|
|
276
|
+
}
|
|
277
|
+
else if (originType === ArkClass_1.ClassCategory.TYPE_LITERAL || originType === ArkClass_1.ClassCategory.OBJECT) {
|
|
278
|
+
this.rightCode = `${this.transformer.literalObjectToString(this.rightOp.getType())}`;
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
this.rightCode = `new ${this.transformer.typeToString(this.rightOp.getType())}(${args.join(', ')})`;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
282
284
|
/**
|
|
283
285
|
* $temp0 = newarray[4]
|
|
284
286
|
* $temp0[0] = 1
|
|
@@ -25,6 +25,7 @@ export declare class SourceTransformer {
|
|
|
25
25
|
private anonymousMethodToString;
|
|
26
26
|
private anonymousClassToString;
|
|
27
27
|
instanceInvokeExprToString(invokeExpr: ArkInstanceInvokeExpr): string;
|
|
28
|
+
private transBuilderMethod;
|
|
28
29
|
staticInvokeExprToString(invokeExpr: ArkStaticInvokeExpr): string;
|
|
29
30
|
private genericTypesToString;
|
|
30
31
|
typeArrayToString(types: Type[], split?: string): string;
|
|
@@ -32,6 +33,7 @@ export declare class SourceTransformer {
|
|
|
32
33
|
private exprToString;
|
|
33
34
|
refToString(value: AbstractRef): string;
|
|
34
35
|
valueToString(value: Value, operator?: string): string;
|
|
36
|
+
private localToString;
|
|
35
37
|
literalObjectToString(type: ClassType): string;
|
|
36
38
|
typeToString(type: Type): string;
|
|
37
39
|
private literalType2string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SourceTransformer.d.ts","sourceRoot":"","sources":["../../../src/save/source/SourceTransformer.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAMH,qBAAqB,EAKrB,mBAAmB,EAKtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAiB,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAI7C,OAAO,EAGH,SAAS,EAQT,IAAI,EAKP,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAmE,MAAM,qBAAqB,CAAC;AACnH,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AASnD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAU7D,MAAM,WAAW,kBAAkB;IAC/B,UAAU,IAAI,OAAO,CAAC;IAEtB,wBAAwB,IAAI,YAAY,GAAG,SAAS,CAAC;IAErD,SAAS,CAAC,SAAS,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,CAAC;IAExD,QAAQ,CAAC,SAAS,EAAE,cAAc,GAAG,QAAQ,GAAG,IAAI,CAAC;IAErD,UAAU,IAAI,aAAa,CAAC;IAE5B,cAAc,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IAEpC,iBAAiB,IAAI,OAAO,CAAC;CAChC;AAED,qBAAa,iBAAiB;IAC1B,SAAS,CAAC,OAAO,EAAE,kBAAkB,CAAC;gBAE1B,OAAO,EAAE,kBAAkB;IAIvC,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,sBAAsB;IAKvB,0BAA0B,CAAC,UAAU,EAAE,qBAAqB,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"SourceTransformer.d.ts","sourceRoot":"","sources":["../../../src/save/source/SourceTransformer.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAMH,qBAAqB,EAKrB,mBAAmB,EAKtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAiB,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAI7C,OAAO,EAGH,SAAS,EAQT,IAAI,EAKP,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAmE,MAAM,qBAAqB,CAAC;AACnH,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AASnD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAU7D,MAAM,WAAW,kBAAkB;IAC/B,UAAU,IAAI,OAAO,CAAC;IAEtB,wBAAwB,IAAI,YAAY,GAAG,SAAS,CAAC;IAErD,SAAS,CAAC,SAAS,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,CAAC;IAExD,QAAQ,CAAC,SAAS,EAAE,cAAc,GAAG,QAAQ,GAAG,IAAI,CAAC;IAErD,UAAU,IAAI,aAAa,CAAC;IAE5B,cAAc,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IAEpC,iBAAiB,IAAI,OAAO,CAAC;CAChC;AAED,qBAAa,iBAAiB;IAC1B,SAAS,CAAC,OAAO,EAAE,kBAAkB,CAAC;gBAE1B,OAAO,EAAE,kBAAkB;IAIvC,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,sBAAsB;IAKvB,0BAA0B,CAAC,UAAU,EAAE,qBAAqB,GAAG,MAAM;IAkB5E,OAAO,CAAC,kBAAkB;IAwCnB,wBAAwB,CAAC,UAAU,EAAE,mBAAmB,GAAG,MAAM;IA8BxE,OAAO,CAAC,oBAAoB;IAYrB,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,GAAE,MAAa,GAAG,MAAM;WASvD,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM;IAUpD,OAAO,CAAC,YAAY;IA2Db,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM;IA8BvC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAqB7D,OAAO,CAAC,aAAa;IAgCd,qBAAqB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IAW9C,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IA+DvC,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,2BAA2B;IAQnC,OAAO,CAAC,gBAAgB;CAkB3B"}
|
|
@@ -88,6 +88,41 @@ class SourceTransformer {
|
|
|
88
88
|
}
|
|
89
89
|
return `${this.valueToString(invokeExpr.getBase())}.${methodName}${genericCode}(${args.join(', ')})`;
|
|
90
90
|
}
|
|
91
|
+
transBuilderMethod(className, methodName, args, invokeExpr, genericCode) {
|
|
92
|
+
if (className === EtsConst_1.COMPONENT_CUSTOMVIEW) {
|
|
93
|
+
if (methodName === EtsConst_1.COMPONENT_CREATE_FUNCTION) {
|
|
94
|
+
// Anonymous @Builder method
|
|
95
|
+
if (args.length > 1) {
|
|
96
|
+
// remove the substring '() =>' or '(x, y): type =>' at the beginning of args[1]
|
|
97
|
+
const pattern = /^\([^)]*\)\s*:\s*\w*\s*=>\s*/;
|
|
98
|
+
args[1] = args[1].replace(pattern, '');
|
|
99
|
+
}
|
|
100
|
+
return `${args.join(' ')}`;
|
|
101
|
+
}
|
|
102
|
+
if (methodName === EtsConst_1.COMPONENT_POP_FUNCTION) {
|
|
103
|
+
return '';
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (PrinterUtils_1.PrinterUtils.isComponentCreate(invokeExpr)) {
|
|
107
|
+
if (className === EtsConst_1.COMPONENT_IF) {
|
|
108
|
+
return `if (${args.join(', ')})`;
|
|
109
|
+
}
|
|
110
|
+
return `${className}${genericCode}(${args.join(', ')})`;
|
|
111
|
+
}
|
|
112
|
+
if (PrinterUtils_1.PrinterUtils.isComponentIfBranchInvoke(invokeExpr)) {
|
|
113
|
+
let arg0 = invokeExpr.getArg(0);
|
|
114
|
+
if (arg0.getValue() === '0') {
|
|
115
|
+
return ``;
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
return '} else {';
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (PrinterUtils_1.PrinterUtils.isComponentPop(invokeExpr)) {
|
|
122
|
+
return '}';
|
|
123
|
+
}
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
91
126
|
staticInvokeExprToString(invokeExpr) {
|
|
92
127
|
let methodSignature = invokeExpr.getMethodSignature();
|
|
93
128
|
let method = this.context.getMethod(methodSignature);
|
|
@@ -103,37 +138,9 @@ class SourceTransformer {
|
|
|
103
138
|
});
|
|
104
139
|
let genericCode = this.genericTypesToString(invokeExpr.getRealGenericTypes());
|
|
105
140
|
if (this.context.isInBuilderMethod()) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
if (args.length > 1) {
|
|
110
|
-
// remove the substring '() =>' or '(x, y): type =>' at the beginning of args[1]
|
|
111
|
-
const pattern = /^\([^)]*\)\s*:\s*\w*\s*=>\s*/;
|
|
112
|
-
args[1] = args[1].replace(pattern, '');
|
|
113
|
-
}
|
|
114
|
-
return `${args.join(' ')}`;
|
|
115
|
-
}
|
|
116
|
-
if (methodName === EtsConst_1.COMPONENT_POP_FUNCTION) {
|
|
117
|
-
return '';
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
if (PrinterUtils_1.PrinterUtils.isComponentCreate(invokeExpr)) {
|
|
121
|
-
if (className === EtsConst_1.COMPONENT_IF) {
|
|
122
|
-
return `if (${args.join(', ')})`;
|
|
123
|
-
}
|
|
124
|
-
return `${className}${genericCode}(${args.join(', ')})`;
|
|
125
|
-
}
|
|
126
|
-
if (PrinterUtils_1.PrinterUtils.isComponentIfBranchInvoke(invokeExpr)) {
|
|
127
|
-
let arg0 = invokeExpr.getArg(0);
|
|
128
|
-
if (arg0.getValue() === '0') {
|
|
129
|
-
return ``;
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
return '} else {';
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
if (PrinterUtils_1.PrinterUtils.isComponentPop(invokeExpr)) {
|
|
136
|
-
return '}';
|
|
141
|
+
const res = this.transBuilderMethod(className, methodName, args, invokeExpr, genericCode);
|
|
142
|
+
if (res !== null) {
|
|
143
|
+
return res;
|
|
137
144
|
}
|
|
138
145
|
}
|
|
139
146
|
if (className && className.length > 0 && methodName !== TSConst_1.SUPER_NAME) {
|
|
@@ -248,34 +255,37 @@ class SourceTransformer {
|
|
|
248
255
|
return SourceTransformer.constToString(value);
|
|
249
256
|
}
|
|
250
257
|
if (value instanceof Local_1.Local) {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
258
|
+
return this.localToString(value, operator);
|
|
259
|
+
}
|
|
260
|
+
logger.info(`valueToString ${value.constructor} not support.`);
|
|
261
|
+
return `${value}`;
|
|
262
|
+
}
|
|
263
|
+
localToString(value, operator) {
|
|
264
|
+
if (PrinterUtils_1.PrinterUtils.isAnonymousMethod(value.getName())) {
|
|
265
|
+
let methodSignature = value.getType().getMethodSignature();
|
|
266
|
+
let anonymousMethod = this.context.getMethod(methodSignature);
|
|
267
|
+
if (anonymousMethod) {
|
|
268
|
+
return this.anonymousMethodToString(anonymousMethod, this.context.getPrinter().getIndent());
|
|
257
269
|
}
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
270
|
+
}
|
|
271
|
+
if (PrinterUtils_1.PrinterUtils.isAnonymousClass(value.getName())) {
|
|
272
|
+
let clsSignature = value.getType().getClassSignature();
|
|
273
|
+
let cls = this.context.getClass(clsSignature);
|
|
274
|
+
if (cls) {
|
|
275
|
+
return this.anonymousClassToString(cls, this.context.getPrinter().getIndent());
|
|
264
276
|
}
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
}
|
|
277
|
+
}
|
|
278
|
+
if (operator === Expr_1.NormalBinaryOperator.Division ||
|
|
279
|
+
operator === Expr_1.NormalBinaryOperator.Multiplication ||
|
|
280
|
+
operator === Expr_1.NormalBinaryOperator.Remainder) {
|
|
281
|
+
if (PrinterUtils_1.PrinterUtils.isTemp(value.getName())) {
|
|
282
|
+
let stmt = value.getDeclaringStmt();
|
|
283
|
+
if (stmt instanceof Stmt_1.ArkAssignStmt && stmt.getRightOp() instanceof Expr_1.ArkNormalBinopExpr) {
|
|
284
|
+
return `(${this.context.transTemp2Code(value)})`;
|
|
273
285
|
}
|
|
274
286
|
}
|
|
275
|
-
return this.context.transTemp2Code(value);
|
|
276
287
|
}
|
|
277
|
-
|
|
278
|
-
return `${value}`;
|
|
288
|
+
return this.context.transTemp2Code(value);
|
|
279
289
|
}
|
|
280
290
|
literalObjectToString(type) {
|
|
281
291
|
let name = type.getClassSignature().getClassName();
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { ArkBody } from '../core/model/ArkBody';
|
|
2
2
|
export declare class StaticSingleAssignmentFormer {
|
|
3
3
|
transformBody(body: ArkBody): void;
|
|
4
|
+
private transformStmt;
|
|
4
5
|
private decideBlockToPhiStmts;
|
|
6
|
+
private handleDf;
|
|
7
|
+
private handleBlockWithSucc;
|
|
5
8
|
private addPhiStmts;
|
|
9
|
+
private renameUseAndDef;
|
|
6
10
|
private renameLocals;
|
|
11
|
+
private removeVisitedTree;
|
|
7
12
|
private constainsPhiExpr;
|
|
8
13
|
private getOriginalLocal;
|
|
9
14
|
private addNewArgToPhi;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StaticSingleAssignmentFormer.d.ts","sourceRoot":"","sources":["../../src/transformer/StaticSingleAssignmentFormer.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,qBAAa,4BAA4B;IAC9B,aAAa,CAAC,IAAI,EAAE,OAAO;
|
|
1
|
+
{"version":3,"file":"StaticSingleAssignmentFormer.d.ts","sourceRoot":"","sources":["../../src/transformer/StaticSingleAssignmentFormer.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,qBAAa,4BAA4B;IAC9B,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAqBzC,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,qBAAqB;IAuB7B,OAAO,CAAC,QAAQ;IA4BhB,OAAO,CAAC,mBAAmB;IAkB3B,OAAO,CAAC,WAAW;IA4BnB,OAAO,CAAC,eAAe;IA8BvB,OAAO,CAAC,YAAY;IA8CpB,OAAO,CAAC,iBAAiB;IAwBzB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,kBAAkB;CAI7B"}
|
|
@@ -22,25 +22,13 @@ const DominanceFinder_1 = require("../core/graph/DominanceFinder");
|
|
|
22
22
|
const DominanceTree_1 = require("../core/graph/DominanceTree");
|
|
23
23
|
class StaticSingleAssignmentFormer {
|
|
24
24
|
transformBody(body) {
|
|
25
|
-
var _a;
|
|
26
25
|
let cfg = body.getCfg();
|
|
27
26
|
let blockToDefs = new Map();
|
|
28
27
|
let localToBlocks = new Map();
|
|
29
28
|
for (const block of cfg.getBlocks()) {
|
|
30
29
|
let defs = new Set();
|
|
31
30
|
for (const stmt of block.getStmts()) {
|
|
32
|
-
|
|
33
|
-
let local = stmt.getDef();
|
|
34
|
-
defs.add(local);
|
|
35
|
-
if (localToBlocks.has(local)) {
|
|
36
|
-
(_a = localToBlocks.get(local)) === null || _a === void 0 ? void 0 : _a.add(block);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
let blcoks = new Set();
|
|
40
|
-
blcoks.add(block);
|
|
41
|
-
localToBlocks.set(local, blcoks);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
31
|
+
this.transformStmt(stmt, defs, localToBlocks, block);
|
|
44
32
|
}
|
|
45
33
|
blockToDefs.set(block, defs);
|
|
46
34
|
}
|
|
@@ -50,8 +38,22 @@ class StaticSingleAssignmentFormer {
|
|
|
50
38
|
let dominanceTree = new DominanceTree_1.DominanceTree(dominanceFinder);
|
|
51
39
|
this.renameLocals(body, dominanceTree, blockToPhiStmts);
|
|
52
40
|
}
|
|
41
|
+
transformStmt(stmt, defs, localToBlocks, block) {
|
|
42
|
+
var _a;
|
|
43
|
+
if (stmt.getDef() != null && stmt.getDef() instanceof Local_1.Local) {
|
|
44
|
+
let local = stmt.getDef();
|
|
45
|
+
defs.add(local);
|
|
46
|
+
if (localToBlocks.has(local)) {
|
|
47
|
+
(_a = localToBlocks.get(local)) === null || _a === void 0 ? void 0 : _a.add(block);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
let blcoks = new Set();
|
|
51
|
+
blcoks.add(block);
|
|
52
|
+
localToBlocks.set(local, blcoks);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
53
56
|
decideBlockToPhiStmts(body, dominanceFinder, blockToDefs, localToBlocks) {
|
|
54
|
-
var _a, _b, _c, _d;
|
|
55
57
|
let blockToPhiStmts = new Map();
|
|
56
58
|
let blockToPhiLocals = new Map();
|
|
57
59
|
let localToPhiBlock = new Map();
|
|
@@ -63,50 +65,57 @@ class StaticSingleAssignmentFormer {
|
|
|
63
65
|
let block = blocks.splice(0, 1).at(0);
|
|
64
66
|
let dfs = dominanceFinder.getDominanceFrontiers(block);
|
|
65
67
|
for (const df of dfs) {
|
|
66
|
-
|
|
67
|
-
phiBlocks.add(df);
|
|
68
|
-
let phiStmt = this.createEmptyPhiStmt(local);
|
|
69
|
-
if (blockToPhiStmts.has(df)) {
|
|
70
|
-
(_a = blockToPhiStmts.get(df)) === null || _a === void 0 ? void 0 : _a.add(phiStmt);
|
|
71
|
-
(_b = blockToPhiLocals.get(df)) === null || _b === void 0 ? void 0 : _b.add(local);
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
let phiStmts = new Set();
|
|
75
|
-
phiStmts.add(phiStmt);
|
|
76
|
-
blockToPhiStmts.set(df, phiStmts);
|
|
77
|
-
let phiLocals = new Set();
|
|
78
|
-
phiLocals.add(local);
|
|
79
|
-
blockToPhiLocals.set(df, phiLocals);
|
|
80
|
-
}
|
|
81
|
-
(_c = blockToDefs.get(df)) === null || _c === void 0 ? void 0 : _c.add(local);
|
|
82
|
-
if (!((_d = blockToDefs.get(df)) === null || _d === void 0 ? void 0 : _d.has(local))) {
|
|
83
|
-
blocks.push(df);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
68
|
+
this.handleDf(blockToPhiStmts, blockToPhiLocals, phiBlocks, df, local, blockToDefs, blocks);
|
|
86
69
|
}
|
|
87
70
|
}
|
|
88
71
|
}
|
|
89
72
|
return blockToPhiStmts;
|
|
90
73
|
}
|
|
91
|
-
|
|
74
|
+
handleDf(blockToPhiStmts, blockToPhiLocals, phiBlocks, df, local, blockToDefs, blocks) {
|
|
75
|
+
var _a, _b, _c, _d;
|
|
76
|
+
if (!phiBlocks.has(df)) {
|
|
77
|
+
phiBlocks.add(df);
|
|
78
|
+
let phiStmt = this.createEmptyPhiStmt(local);
|
|
79
|
+
if (blockToPhiStmts.has(df)) {
|
|
80
|
+
(_a = blockToPhiStmts.get(df)) === null || _a === void 0 ? void 0 : _a.add(phiStmt);
|
|
81
|
+
(_b = blockToPhiLocals.get(df)) === null || _b === void 0 ? void 0 : _b.add(local);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
let phiStmts = new Set();
|
|
85
|
+
phiStmts.add(phiStmt);
|
|
86
|
+
blockToPhiStmts.set(df, phiStmts);
|
|
87
|
+
let phiLocals = new Set();
|
|
88
|
+
phiLocals.add(local);
|
|
89
|
+
blockToPhiLocals.set(df, phiLocals);
|
|
90
|
+
}
|
|
91
|
+
(_c = blockToDefs.get(df)) === null || _c === void 0 ? void 0 : _c.add(local);
|
|
92
|
+
if (!((_d = blockToDefs.get(df)) === null || _d === void 0 ? void 0 : _d.has(local))) {
|
|
93
|
+
blocks.push(df);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
handleBlockWithSucc(blockToPhiStmts, succ, blockToDefs, block, phiArgsNum) {
|
|
92
98
|
var _a;
|
|
99
|
+
for (const phi of blockToPhiStmts.get(succ)) {
|
|
100
|
+
let local = phi.getDef();
|
|
101
|
+
if ((_a = blockToDefs.get(block)) === null || _a === void 0 ? void 0 : _a.has(local)) {
|
|
102
|
+
if (phiArgsNum.has(phi)) {
|
|
103
|
+
let num = phiArgsNum.get(phi);
|
|
104
|
+
phiArgsNum.set(phi, num + 1);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
phiArgsNum.set(phi, 1);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
addPhiStmts(blockToPhiStmts, cfg, blockToDefs) {
|
|
93
113
|
let phiArgsNum = new Map();
|
|
94
114
|
for (const block of cfg.getBlocks()) {
|
|
95
115
|
let succs = Array.from(block.getSuccessors());
|
|
96
116
|
for (const succ of succs) {
|
|
97
117
|
if (blockToPhiStmts.has(succ)) {
|
|
98
|
-
|
|
99
|
-
let local = phi.getDef();
|
|
100
|
-
if ((_a = blockToDefs.get(block)) === null || _a === void 0 ? void 0 : _a.has(local)) {
|
|
101
|
-
if (phiArgsNum.has(phi)) {
|
|
102
|
-
let num = phiArgsNum.get(phi);
|
|
103
|
-
phiArgsNum.set(phi, num + 1);
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
phiArgsNum.set(phi, 1);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
118
|
+
this.handleBlockWithSucc(blockToPhiStmts, succ, blockToDefs, block, phiArgsNum);
|
|
110
119
|
}
|
|
111
120
|
}
|
|
112
121
|
}
|
|
@@ -123,8 +132,35 @@ class StaticSingleAssignmentFormer {
|
|
|
123
132
|
}
|
|
124
133
|
}
|
|
125
134
|
}
|
|
135
|
+
renameUseAndDef(stmt, localToNameStack, nextFreeIdx, newLocals, newPhiStmts) {
|
|
136
|
+
var _a;
|
|
137
|
+
let uses = stmt.getUses();
|
|
138
|
+
if (uses.length > 0 && !this.constainsPhiExpr(stmt)) {
|
|
139
|
+
for (const use of uses) {
|
|
140
|
+
if (use instanceof Local_1.Local) {
|
|
141
|
+
let nameStack = localToNameStack.get(use);
|
|
142
|
+
let newUse = nameStack[nameStack.length - 1];
|
|
143
|
+
stmt.replaceUse(use, newUse);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// rename def
|
|
148
|
+
let def = stmt.getDef();
|
|
149
|
+
if (def != null && def instanceof Local_1.Local) {
|
|
150
|
+
let newName = def.getName() + '#' + nextFreeIdx;
|
|
151
|
+
nextFreeIdx++;
|
|
152
|
+
let newDef = new Local_1.Local(newName);
|
|
153
|
+
newDef.setOriginalValue(def);
|
|
154
|
+
newLocals.add(newDef);
|
|
155
|
+
(_a = localToNameStack.get(def)) === null || _a === void 0 ? void 0 : _a.push(newDef);
|
|
156
|
+
stmt.setLeftOp(newDef);
|
|
157
|
+
if (this.constainsPhiExpr(stmt)) {
|
|
158
|
+
newPhiStmts.add(stmt);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return nextFreeIdx;
|
|
162
|
+
}
|
|
126
163
|
renameLocals(body, dominanceTree, blockToPhiStmts) {
|
|
127
|
-
var _a, _b;
|
|
128
164
|
let newLocals = new Set(body.getLocals().values());
|
|
129
165
|
let localToNameStack = new Map();
|
|
130
166
|
for (const local of newLocals) {
|
|
@@ -137,31 +173,8 @@ class StaticSingleAssignmentFormer {
|
|
|
137
173
|
for (const block of dfsBlocks) {
|
|
138
174
|
let newPhiStmts = new Set();
|
|
139
175
|
for (const stmt of block.getStmts()) {
|
|
140
|
-
// rename uses
|
|
141
|
-
|
|
142
|
-
if (uses.length > 0 && !this.constainsPhiExpr(stmt)) {
|
|
143
|
-
for (const use of uses) {
|
|
144
|
-
if (use instanceof Local_1.Local) {
|
|
145
|
-
let nameStack = localToNameStack.get(use);
|
|
146
|
-
let newUse = nameStack[nameStack.length - 1];
|
|
147
|
-
stmt.replaceUse(use, newUse);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
// rename def
|
|
152
|
-
let def = stmt.getDef();
|
|
153
|
-
if (def != null && def instanceof Local_1.Local) {
|
|
154
|
-
let newName = def.getName() + '#' + nextFreeIdx;
|
|
155
|
-
nextFreeIdx++;
|
|
156
|
-
let newDef = new Local_1.Local(newName);
|
|
157
|
-
newDef.setOriginalValue(def);
|
|
158
|
-
newLocals.add(newDef);
|
|
159
|
-
(_a = localToNameStack.get(def)) === null || _a === void 0 ? void 0 : _a.push(newDef);
|
|
160
|
-
stmt.setLeftOp(newDef);
|
|
161
|
-
if (this.constainsPhiExpr(stmt)) {
|
|
162
|
-
newPhiStmts.add(stmt);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
176
|
+
// rename uses and def
|
|
177
|
+
nextFreeIdx = this.renameUseAndDef(stmt, localToNameStack, nextFreeIdx, newLocals, newPhiStmts);
|
|
165
178
|
}
|
|
166
179
|
visited.add(block);
|
|
167
180
|
blockStack.push(block);
|
|
@@ -171,40 +184,45 @@ class StaticSingleAssignmentFormer {
|
|
|
171
184
|
// rename phiStmts' args
|
|
172
185
|
let succs = Array.from(block.getSuccessors());
|
|
173
186
|
for (const succ of succs) {
|
|
174
|
-
if (blockToPhiStmts.has(succ)) {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
187
|
+
if (!blockToPhiStmts.has(succ)) {
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
let phiStmts = blockToPhiStmts.get(succ);
|
|
191
|
+
for (const phiStmt of phiStmts) {
|
|
192
|
+
let def = phiStmt.getDef();
|
|
193
|
+
let oriDef = this.getOriginalLocal(def, new Set(localToNameStack.keys()));
|
|
194
|
+
let nameStack = localToNameStack.get(oriDef);
|
|
195
|
+
let arg = nameStack[nameStack.length - 1];
|
|
196
|
+
this.addNewArgToPhi(phiStmt, arg, block);
|
|
183
197
|
}
|
|
184
198
|
}
|
|
185
199
|
// if a block's children in dominance tree are visited, remove it
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
if (
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
}
|
|
202
|
-
else {
|
|
203
|
-
break;
|
|
200
|
+
this.removeVisitedTree(blockStack, dominanceTree, visited, localToNameStack);
|
|
201
|
+
}
|
|
202
|
+
body.setLocals(newLocals);
|
|
203
|
+
}
|
|
204
|
+
removeVisitedTree(blockStack, dominanceTree, visited, localToNameStack) {
|
|
205
|
+
var _a;
|
|
206
|
+
let top = blockStack[blockStack.length - 1];
|
|
207
|
+
let children = dominanceTree.getChildren(top);
|
|
208
|
+
while (this.containsAllChildren(visited, children)) {
|
|
209
|
+
blockStack.pop();
|
|
210
|
+
for (const stmt of top.getStmts()) {
|
|
211
|
+
let def = stmt.getDef();
|
|
212
|
+
if (def != null && def instanceof Local_1.Local) {
|
|
213
|
+
let oriDef = this.getOriginalLocal(def, new Set(localToNameStack.keys()));
|
|
214
|
+
(_a = localToNameStack.get(oriDef)) === null || _a === void 0 ? void 0 : _a.pop();
|
|
204
215
|
}
|
|
205
216
|
}
|
|
217
|
+
// next block to check
|
|
218
|
+
if (blockStack.length > 0) {
|
|
219
|
+
top = blockStack[blockStack.length - 1];
|
|
220
|
+
children = dominanceTree.getChildren(top);
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
break;
|
|
224
|
+
}
|
|
206
225
|
}
|
|
207
|
-
body.setLocals(newLocals);
|
|
208
226
|
}
|
|
209
227
|
constainsPhiExpr(stmt) {
|
|
210
228
|
if (stmt instanceof Stmt_1.ArkAssignStmt && stmt.getUses().length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CfgStructualAnalysis.d.ts","sourceRoot":"","sources":["../../src/utils/CfgStructualAnalysis.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAExC,oBAAY,aAAa;IACrB,MAAM,IAAA;IACN,EAAE,IAAA;IACF,IAAI,IAAA;IACJ,KAAK,IAAA;IACL,QAAQ,IAAA;IACR,EAAE,IAAA;IACF,QAAQ,IAAA;IACR,KAAK,IAAA;IACL,GAAG,IAAA;IACH,YAAY,IAAA;IACZ,GAAG,KAAA;IACH,KAAK,KAAA;IACL,OAAO,KAAA;CACV;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;AAE7F,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,YAAY,CAAmD;IACvE,OAAO,CAAC,OAAO,CAAmD;gBAEtD,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE;IA0B7B,QAAQ,IAAI,YAAY;IAIxB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU;IAM7C,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,OAAO,GAAE,GAAG,CAAC,YAAY,CAAa;IAUvG,OAAO,CAAC,kBAAkB;IA2C1B,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,qBAAqB;
|
|
1
|
+
{"version":3,"file":"CfgStructualAnalysis.d.ts","sourceRoot":"","sources":["../../src/utils/CfgStructualAnalysis.ts"],"names":[],"mappings":"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"}
|