- 此代码可以解决大部分 while if else 控制流平坦化
- 原理:
- 先将
if
语句转为switch
语句,再将switch
分支合并,最后删除已合并的分支(具体看代码)
- 先将
- 实现效果图
- 首先安装依赖:
npm install @babel/parser
npm install @babel/generator
npm install @babel/traverse
npm install @babel/types
代码:
/*
* 控制流平坦化 if语句转 switch* */
function del_code(name, consequent) {
// 删除合并分支后多余的 赋值和break代码
let assignment_bool, break_bool;
for (let i = consequent.length - 1; i >= 0; i--) {
if (consequent[i].type === "BreakStatement") {
if (break_bool) {
consequent.splice(i, 1);
} else {
break_bool = true;
}
} else if (consequent[i].type === "ExpressionStatement" && consequent[i].expression.type === "AssignmentExpression" && consequent[i].expression.left.name === name) {
if (assignment_bool) {
consequent.splice(i, 1);
} else {
assignment_bool = true;
}
}
}
}
function merge_branch(name, key