use the appropriate constructor for symbols
This commit is contained in:
parent
708ec0467c
commit
a9b6f9909a
|
|
@ -69,18 +69,21 @@
|
||||||
end : my_end_token(M),
|
end : my_end_token(M),
|
||||||
properties : M.properties.map(function(prop){
|
properties : M.properties.map(function(prop){
|
||||||
var key = prop.key;
|
var key = prop.key;
|
||||||
|
var name = key.type == "Identifier" ? key.name : key.value;
|
||||||
var args = {
|
var args = {
|
||||||
start : my_start_token(key),
|
start : my_start_token(key),
|
||||||
end : my_end_token(prop.value),
|
end : my_end_token(prop.value),
|
||||||
key : key.type == "Identifier" ? key.name : key.value,
|
key : name,
|
||||||
value : from_moz(prop.value)
|
value : from_moz(prop.value)
|
||||||
};
|
};
|
||||||
switch (prop.kind) {
|
switch (prop.kind) {
|
||||||
case "init":
|
case "init":
|
||||||
return new AST_ObjectKeyVal(args);
|
return new AST_ObjectKeyVal(args);
|
||||||
case "set":
|
case "set":
|
||||||
|
args.value.name = from_moz(key);
|
||||||
return new AST_ObjectSetter(args);
|
return new AST_ObjectSetter(args);
|
||||||
case "get":
|
case "get":
|
||||||
|
args.value.name = from_moz(key);
|
||||||
return new AST_ObjectGetter(args);
|
return new AST_ObjectGetter(args);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
@ -129,7 +132,22 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
UnaryExpression: From_Moz_Unary,
|
UnaryExpression: From_Moz_Unary,
|
||||||
UpdateExpression: From_Moz_Unary
|
UpdateExpression: From_Moz_Unary,
|
||||||
|
Identifier: function(M) {
|
||||||
|
var p = FROM_MOZ_STACK[FROM_MOZ_STACK.length - 2];
|
||||||
|
return new (M.name == "this" ? AST_This
|
||||||
|
: p.type == "LabeledStatement" ? AST_Label
|
||||||
|
: p.type == "VariableDeclarator" && p.id === M ? (p.kind == "const" ? AST_SymbolConst : AST_SymbolVar)
|
||||||
|
: p.type == "FunctionExpression" ? (p.id === M ? AST_SymbolLambda : AST_SymbolFunarg)
|
||||||
|
: p.type == "FunctionDeclaration" ? (p.id === M ? AST_SymbolDefun : AST_SymbolFunarg)
|
||||||
|
: p.type == "CatchClause" ? AST_SymbolCatch
|
||||||
|
: p.type == "BreakStatement" || p.type == "ContinueStatement" ? AST_LabelRef
|
||||||
|
: AST_SymbolRef)({
|
||||||
|
start : my_start_token(M),
|
||||||
|
end : my_end_token(M),
|
||||||
|
name : M.name
|
||||||
|
});
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function From_Moz_Unary(M) {
|
function From_Moz_Unary(M) {
|
||||||
|
|
@ -175,7 +193,6 @@
|
||||||
map("ConditionalExpression", AST_Conditional, "test>condition, consequent>consequent, alternate>alternative");
|
map("ConditionalExpression", AST_Conditional, "test>condition, consequent>consequent, alternate>alternative");
|
||||||
map("NewExpression", AST_New, "callee>expression, arguments@args");
|
map("NewExpression", AST_New, "callee>expression, arguments@args");
|
||||||
map("CallExpression", AST_Call, "callee>expression, arguments@args");
|
map("CallExpression", AST_Call, "callee>expression, arguments@args");
|
||||||
map("Identifier", AST_Symbol, "name=name");
|
|
||||||
|
|
||||||
/* -----[ tools ]----- */
|
/* -----[ tools ]----- */
|
||||||
|
|
||||||
|
|
@ -233,10 +250,21 @@
|
||||||
return MOZ_TO_ME[moztype] = moz_to_me;
|
return MOZ_TO_ME[moztype] = moz_to_me;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var FROM_MOZ_STACK = null;
|
||||||
|
|
||||||
function from_moz(node) {
|
function from_moz(node) {
|
||||||
return node != null ? MOZ_TO_ME[node.type](node) : null;
|
FROM_MOZ_STACK.push(node);
|
||||||
|
var ret = node != null ? MOZ_TO_ME[node.type](node) : null;
|
||||||
|
FROM_MOZ_STACK.pop();
|
||||||
|
return ret;
|
||||||
};
|
};
|
||||||
|
|
||||||
AST_Node.from_mozilla_ast = from_moz;
|
AST_Node.from_mozilla_ast = function(node){
|
||||||
|
var save_stack = FROM_MOZ_STACK;
|
||||||
|
FROM_MOZ_STACK = [];
|
||||||
|
var ast = from_moz(node);
|
||||||
|
FROM_MOZ_STACK = save_stack;
|
||||||
|
return ast;
|
||||||
|
};
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user