From 9bdb95c9e34cef640534e5e5a1e2225a80442000 Mon Sep 17 00:00:00 2001 From: HelenHuang <LinHuang@pollex.com.tw> Date: 星期四, 09 六月 2022 15:48:15 +0800 Subject: [PATCH] TODO#139894 [ footer -最下方說明與保經代合作 ] 文案修改 --- PAMapp/node_modules/uglify-js/lib/ast.js | 143 ++++++++++++++++++++++++++++++++++------------- 1 files changed, 104 insertions(+), 39 deletions(-) diff --git a/PAMapp/node_modules/uglify-js/lib/ast.js b/PAMapp/node_modules/uglify-js/lib/ast.js index c4866f8..e826cec 100644 --- a/PAMapp/node_modules/uglify-js/lib/ast.js +++ b/PAMapp/node_modules/uglify-js/lib/ast.js @@ -50,6 +50,8 @@ if (base && base.PROPS) props = props.concat(base.PROPS); var code = [ "return function AST_", type, "(props){", + // not essential, but speeds up compress by a few percent + "this._bits=0;", "if(props){", ]; props.forEach(function(prop) { @@ -134,6 +136,53 @@ })); }, }, null); + +DEF_BITPROPS(AST_Node, [ + "_optimized", + "_squeezed", + // AST_Call + "call_only", + // AST_Lambda + "collapse_scanning", + // AST_SymbolRef + "defined", + "evaluating", + "falsy", + // AST_SymbolRef + "in_arg", + // AST_Return + "in_bool", + // AST_SymbolRef + "is_undefined", + // AST_LambdaExpression + // AST_LambdaDefinition + "inlined", + // AST_Lambda + "length_read", + // AST_Yield + "nested", + // AST_Lambda + "new", + // AST_Call + // AST_PropAccess + "optional", + // AST_ClassProperty + "private", + // AST_Call + "pure", + // AST_Assign + "redundant", + // AST_ClassProperty + "static", + // AST_Call + // AST_PropAccess + "terminal", + "truthy", + // AST_Scope + "uses_eval", + // AST_Scope + "uses_with", +]); (AST_Node.log_function = function(fn, verbose) { if (typeof fn != "function") { @@ -253,7 +302,7 @@ }, }, AST_Statement); -var AST_BlockScope = DEFNODE("BlockScope", "enclosed functions make_def parent_scope variables", { +var AST_BlockScope = DEFNODE("BlockScope", "_var_names enclosed functions make_def parent_scope variables", { $documentation: "Base class for all statements introducing a lexical scope", $propdoc: { enclosed: "[SymbolDef*/S] a list of all symbol definitions that are accessed from this scope or any subscopes", @@ -484,7 +533,7 @@ /* -----[ scope and functions ]----- */ -var AST_Scope = DEFNODE("Scope", "uses_eval uses_with", { +var AST_Scope = DEFNODE("Scope", "fn_defs may_call_this uses_eval uses_with", { $documentation: "Base class for all statements introducing a lexical scope", $propdoc: { uses_eval: "[boolean/S] tells whether this scope contains a direct call to the global `eval`", @@ -543,13 +592,13 @@ } }, AST_Scope); -var AST_Lambda = DEFNODE("Lambda", "argnames length_read rest uses_arguments", { +var AST_Lambda = DEFNODE("Lambda", "argnames length_read rest safe_ids uses_arguments", { $documentation: "Base class for functions", $propdoc: { argnames: "[(AST_DefaultValue|AST_Destructured|AST_SymbolFunarg)*] array of function arguments and/or destructured literals", length_read: "[boolean/S] whether length property of this function is accessed", rest: "[(AST_Destructured|AST_SymbolFunarg)?] rest parameter, or null if absent", - uses_arguments: "[boolean/S] whether this function accesses the arguments array", + uses_arguments: "[boolean|number/S] whether this function accesses the arguments array", }, each_argname: function(visit) { var tw = new TreeWalker(function(node) { @@ -801,6 +850,9 @@ $documentation: "A class definition", $propdoc: { name: "[AST_SymbolDefClass] the name of this class", + }, + resolve: function(def_class) { + return def_class ? this : this.parent_scope.resolve(); }, _validate: function() { if (!(this.name instanceof AST_SymbolDefClass)) throw new Error("name must be AST_SymbolDefClass"); @@ -1295,7 +1347,7 @@ args: "[AST_Node*] array of arguments", expression: "[AST_Node] expression to invoke as function", optional: "[boolean] whether the expression is optional chaining", - pure: "[string/S] marker for side-effect-free call expression", + pure: "[boolean/S] marker for side-effect-free call expression", terminal: "[boolean] whether the chain has ended", }, walk: function(visitor) { @@ -1489,6 +1541,12 @@ throw new Error("left must be assignable: " + node.TYPE); } }); + } else if (!(this.left instanceof AST_Infinity + || this.left instanceof AST_NaN + || this.left instanceof AST_PropAccess && !this.left.optional + || this.left instanceof AST_SymbolRef + || this.left instanceof AST_Undefined)) { + throw new Error("left must be assignable"); } }, }, AST_Binary); @@ -1747,7 +1805,7 @@ $documentation: "Symbol defining a variable", }, AST_SymbolDeclaration); -var AST_SymbolFunarg = DEFNODE("SymbolFunarg", null, { +var AST_SymbolFunarg = DEFNODE("SymbolFunarg", "unused", { $documentation: "Symbol naming a function argument", }, AST_SymbolVar); @@ -1923,27 +1981,27 @@ var AST_Null = DEFNODE("Null", null, { $documentation: "The `null` atom", - value: null + value: null, }, AST_Atom); var AST_NaN = DEFNODE("NaN", null, { $documentation: "The impossible value", - value: 0/0 + value: 0/0, }, AST_Atom); var AST_Undefined = DEFNODE("Undefined", null, { $documentation: "The `undefined` value", - value: function(){}() + value: function(){}(), }, AST_Atom); var AST_Hole = DEFNODE("Hole", null, { $documentation: "A hole in an array", - value: function(){}() + value: function(){}(), }, AST_Atom); var AST_Infinity = DEFNODE("Infinity", null, { $documentation: "The `Infinity` value", - value: 1/0 + value: 1/0, }, AST_Atom); var AST_Boolean = DEFNODE("Boolean", null, { @@ -1955,12 +2013,12 @@ var AST_False = DEFNODE("False", null, { $documentation: "The `false` atom", - value: false + value: false, }, AST_Boolean); var AST_True = DEFNODE("True", null, { $documentation: "The `true` atom", - value: true + value: true, }, AST_Boolean); /* -----[ TreeWalker ]----- */ @@ -1999,7 +2057,7 @@ }, find_parent: function(type) { var stack = this.stack; - for (var i = stack.length; --i >= 0;) { + for (var i = stack.length - 1; --i >= 0;) { var x = stack[i]; if (x instanceof type) return x; } @@ -2030,33 +2088,40 @@ } }, in_boolean_context: function() { - var self = this.self(); - for (var i = 0, p; p = this.parent(i); i++) { - if (p instanceof AST_Conditional && p.condition === self - || p instanceof AST_DWLoop && p.condition === self - || p instanceof AST_For && p.condition === self - || p instanceof AST_If && p.condition === self - || p instanceof AST_Return && p.in_bool - || p instanceof AST_Sequence && p.tail_node() !== self - || p instanceof AST_SimpleStatement - || p instanceof AST_UnaryPrefix && p.operator == "!" && p.expression === self) { - return true; - } - if (p instanceof AST_Binary && (p.operator == "&&" || p.operator == "||") - || p instanceof AST_Conditional - || p.tail_node() === self) { - self = p; - } else if (p instanceof AST_Return) { - for (var call, fn = p; call = this.parent(++i); fn = call) { - if (call.TYPE == "Call") { - if (!(fn instanceof AST_Lambda) || fn.name) return false; - } else if (fn instanceof AST_Lambda) { - return false; - } - } - } else { + for (var drop = true, level = 0, parent, self = this.self(); parent = this.parent(level++); self = parent) { + if (parent instanceof AST_Binary) switch (parent.operator) { + case "&&": + case "||": + if (parent.left === self) drop = false; + continue; + default: return false; } + if (parent instanceof AST_Conditional) { + if (parent.condition === self) return true; + continue; + } + if (parent instanceof AST_DWLoop) return parent.condition === self; + if (parent instanceof AST_For) return parent.condition === self; + if (parent instanceof AST_If) return parent.condition === self; + if (parent instanceof AST_Return) { + if (parent.in_bool) return true; + while (parent = this.parent(level++)) { + if (parent instanceof AST_Lambda) { + if (parent.name) return false; + parent = this.parent(level++); + if (parent.TYPE != "Call") return false; + break; + } + } + } + if (parent instanceof AST_Sequence) { + if (parent.tail_node() === self) continue; + return drop ? "d" : true; + } + if (parent instanceof AST_SimpleStatement) return drop ? "d" : true; + if (parent instanceof AST_UnaryPrefix) return parent.operator == "!"; + return false; } } }; -- Gitblit v1.8.0