SpiderMonkey AST javascript操作

时间:2014-02-28 09:16:11

标签: javascript abstract-syntax-tree spidermonkey visitor

我有SpiderMonkey AST,这是javascript对象。我使用“Esprima”,“Acorn”或其他库从javascript文件生成AST。我的AST由Mozilla解析器API指定。

我想从javascript中操作此AST - 删除/添加/编辑其中的节点。怎么安全地做? 例如,我想用!1或!0替换所有布尔文字。

现在我使用来自“Acorn”lib的walker:

acornWalk.simple(tree, {
    Literal: function(node, scope) {
        if(typeof node.value === 'boolean'){
            var expressionTrue = {
                    "type": "UnaryExpression",
                    "operator": "!",
                    "prefix": true,
                    "argument": {
                        "type": "Literal",
                        "value": 0,
                        "raw": "0"
                    }
                },
                expressionFalse = {
                    "type": "UnaryExpression",
                    "operator": "!",
                    "prefix": true,
                    "argument": {
                        "type": "Literal",
                        "value": 1,
                        "raw": "1"
                    }
                },

                replace = function(node, newNode){
                    for(var prop in newNode){
                        node[prop] = newNode[prop];
                    }
                };

            replace(node, node.value ? expressionTrue : expressionFalse);
        }
    }
 });

但它似乎不是一个好习惯,因为节点中的“start”,“end”属性没有改变,它可以破坏从该AST生成的代码。我是对的吗?

0 个答案:

没有答案