【AST 还原】一、还原数值常量

实例

// 还原前
var flag = (326190 ^ 326191) > (60716 ^ 60709)

// 还原后
var flag = 1 > 9;

还原

遍历 二项式节点左右都是数字类型,则满足还原要求

是否通用:是

mark

 traverse(ast, {
    BinaryExpression(path) {
        // 判断这样的 326190 ^ 326191 特征
        if (type.isNumericLiteral(path.node.left) && type.isNumericLiteral(path.node.right)) {
            let {confident, value} = path.evaluate() // 使用提供的 api 计算
            confident && path.replaceWith(type.valueToNode(value))
        }
    }
})
发表评论 / Comment

用心评论~