From a1001819bbdf2f0e17590b27740e2a35c4075939 Mon Sep 17 00:00:00 2001 From: Vitaly Magerya Date: Sun, 21 Jun 2015 18:34:37 +0300 Subject: [PATCH 1/2] Fix Mozilla AST import of arrays with holes --- lib/mozilla-ast.js | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/mozilla-ast.js b/lib/mozilla-ast.js index 1deb18e2..749d3179 100644 --- a/lib/mozilla-ast.js +++ b/lib/mozilla-ast.js @@ -163,6 +163,20 @@ end : my_end_token(M), name : M.name }); + }, + ArrayExpression: function (M) { + var start = my_start_token(M); + var end = my_end_token(M); + return new AST_Array({ + start: start, + end: end, + elements: M.elements.map(function (E) { + return E ? from_moz(E) : new AST_Hole({ + start: start, + end: end + }); + }) + }); } }; @@ -199,7 +213,6 @@ map("CatchClause", AST_Catch, "param>argname, body%body"); map("ThisExpression", AST_This); - map("ArrayExpression", AST_Array, "elements@elements"); map("FunctionExpression", AST_Function, "id>name, params@argnames, body%body"); map("BinaryExpression", AST_Binary, "operator=operator, left>left, right>right"); map("LogicalExpression", AST_Binary, "operator=operator, left>left, right>right"); @@ -208,6 +221,13 @@ map("NewExpression", AST_New, "callee>expression, arguments@args"); map("CallExpression", AST_Call, "callee>expression, arguments@args"); + def_to_moz(AST_Array, function To_Moz_ArrayExpression(M) { + return { + type: "ArrayExpression", + elements: M.elements.map(to_moz) + } + }); + def_to_moz(AST_Directive, function To_Moz_Directive(M) { return { type: "ExpressionStatement", From 4bdd12c17d2681e525c5ca419bedbc61d6d19ab3 Mon Sep 17 00:00:00 2001 From: Vitaly Magerya Date: Sun, 21 Jun 2015 19:27:03 +0300 Subject: [PATCH 2/2] Fix MemberExpression's end token when importing from Mozilla AST --- lib/mozilla-ast.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/mozilla-ast.js b/lib/mozilla-ast.js index 749d3179..def42b68 100644 --- a/lib/mozilla-ast.js +++ b/lib/mozilla-ast.js @@ -110,7 +110,7 @@ MemberExpression: function(M) { return new (M.computed ? AST_Sub : AST_Dot)({ start : my_start_token(M), - end : my_end_token(M), + end : M.computed ? my_end_token(M) : my_full_token(M.property), property : M.computed ? from_moz(M.property) : M.property.name, expression : from_moz(M.object) }); @@ -417,6 +417,22 @@ }); }; + function my_full_token(moznode) { + var loc = moznode.loc, + start = loc && loc.start, + end = loc && loc.end; + var range = moznode.range; + return new AST_Token({ + file : loc && loc.source, + line : start && start.line, + col : start && start.column, + pos : range ? range[0] : moznode.start, + endline : end && end.line, + endcol : end && end.column, + endpos : range ? range[1] : moznode.end + }); + }; + function map(moztype, mytype, propmap) { var moz_to_me = "function From_Moz_" + moztype + "(M){\n"; moz_to_me += "return new " + mytype.name + "({\n" +