diff options
author | Florian Dold <florian.dold@gmail.com> | 2018-09-20 02:56:13 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2018-09-20 02:56:13 +0200 |
commit | bbff7403fbf46f9ad92240ac213df8d30ef31b64 (patch) | |
tree | c58400ec5124da1c7d56b01aea83309f80a56c3b /node_modules/uglify-js/lib/mozilla-ast.js | |
parent | 003fb34971cf63466184351b4db5f7c67df4f444 (diff) |
update packages
Diffstat (limited to 'node_modules/uglify-js/lib/mozilla-ast.js')
-rw-r--r-- | node_modules/uglify-js/lib/mozilla-ast.js | 80 |
1 files changed, 47 insertions, 33 deletions
diff --git a/node_modules/uglify-js/lib/mozilla-ast.js b/node_modules/uglify-js/lib/mozilla-ast.js index 8d7ee4b85..dace808ab 100644 --- a/node_modules/uglify-js/lib/mozilla-ast.js +++ b/node_modules/uglify-js/lib/mozilla-ast.js @@ -43,11 +43,9 @@ "use strict"; -(function(){ - - var normalize_directives = function(body) { +(function() { + function normalize_directives(body) { var in_directive = true; - for (var i = 0; i < body.length; i++) { if (in_directive && body[i] instanceof AST_Statement && body[i].body instanceof AST_String) { body[i] = new AST_Directive({ @@ -59,9 +57,8 @@ in_directive = false; } } - return body; - }; + } var MOZ_TO_ME = { Program: function(M) { @@ -129,7 +126,7 @@ return new AST_Array({ start : my_start_token(M), end : my_end_token(M), - elements : M.elements.map(function(elem){ + elements : M.elements.map(function(elem) { return elem === null ? new AST_Hole() : from_moz(elem); }) }); @@ -138,7 +135,7 @@ return new AST_Object({ start : my_start_token(M), end : my_end_token(M), - properties : M.properties.map(function(prop){ + properties : M.properties.map(function(prop) { prop.type = "Property"; return from_moz(prop) }) @@ -180,6 +177,17 @@ end : my_end_token(M) }; if (val === null) return new AST_Null(args); + var rx = M.regex; + if (rx && rx.pattern) { + // RegExpLiteral as per ESTree AST spec + args.value = new RegExp(rx.pattern, rx.flags); + args.value.raw_source = rx.pattern; + return new AST_RegExp(args); + } else if (rx) { + // support legacy RegExp + args.value = M.regex && M.raw ? M.raw : val; + return new AST_RegExp(args); + } switch (typeof val) { case "string": args.value = val; @@ -189,16 +197,6 @@ return new AST_Number(args); case "boolean": return new (val ? AST_True : AST_False)(args); - default: - var rx = M.regex; - if (rx && rx.pattern) { - // RegExpLiteral as per ESTree AST spec - args.value = new RegExp(rx.pattern, rx.flags).toString(); - } else { - // support legacy RegExp - args.value = M.regex && M.raw ? M.raw : val; - } - return new AST_RegExp(args); } }, Identifier: function(M) { @@ -410,14 +408,15 @@ }); def_to_moz(AST_RegExp, function To_Moz_RegExpLiteral(M) { - var value = M.value; + var flags = M.value.toString().match(/[gimuy]*$/)[0]; + var value = "/" + M.value.raw_source + "/" + flags; return { type: "Literal", value: value, - raw: value.toString(), + raw: value, regex: { - pattern: value.source, - flags: value.toString().match(/[gimuy]*$/)[0] + pattern: M.value.raw_source, + flags: flags } }; }); @@ -478,7 +477,7 @@ endpos : range ? range[0] : moznode.start, raw : raw_token(moznode), }); - }; + } function my_end_token(moznode) { var loc = moznode.loc, end = loc && loc.end; @@ -493,7 +492,7 @@ endpos : range ? range[1] : moznode.end, raw : raw_token(moznode), }); - }; + } function map(moztype, mytype, propmap) { var moz_to_me = "function From_Moz_" + moztype + "(M){\n"; @@ -505,7 +504,7 @@ me_to_moz += "return {\n" + "type: " + JSON.stringify(moztype); - if (propmap) propmap.split(/\s*,\s*/).forEach(function(prop){ + if (propmap) propmap.split(/\s*,\s*/).forEach(function(prop) { var m = /([a-z0-9$_]+)(=|@|>|%)([a-z0-9$_]+)/i.exec(prop); if (!m) throw new Error("Can't understand property map: " + prop); var moz = m[1], how = m[2], my = m[3]; @@ -548,7 +547,7 @@ ); MOZ_TO_ME[moztype] = moz_to_me; def_to_moz(mytype, me_to_moz); - }; + } var FROM_MOZ_STACK = null; @@ -557,13 +556,28 @@ var ret = node != null ? MOZ_TO_ME[node.type](node) : null; FROM_MOZ_STACK.pop(); return ret; - }; + } - AST_Node.from_mozilla_ast = function(node){ + 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; + ast.walk(new TreeWalker(function(node) { + if (node instanceof AST_LabelRef) { + for (var level = 0, parent; parent = this.parent(level); level++) { + if (parent instanceof AST_Scope) break; + if (parent instanceof AST_LabeledStatement && parent.label.name == node.name) { + node.thedef = parent.label; + break; + } + } + if (!node.thedef) { + var s = node.start; + js_error("Undefined label " + node.name, s.file, s.line, s.col, s.pos); + } + } + })); return ast; }; @@ -583,24 +597,24 @@ } } return moznode; - }; + } function def_to_moz(mytype, handler) { mytype.DEFMETHOD("to_mozilla_ast", function() { return set_moz_loc(this, handler(this)); }); - }; + } function to_moz(node) { return node != null ? node.to_mozilla_ast() : null; - }; + } function to_moz_block(node) { return { type: "BlockStatement", body: node.body.map(to_moz) }; - }; + } function to_moz_scope(type, node) { var body = node.body.map(to_moz); @@ -611,5 +625,5 @@ type: type, body: body }; - }; + } })(); |