uglify-js
Advanced tools
Comparing version 3.12.5 to 3.12.6
@@ -252,3 +252,3 @@ /*********************************************************************** | ||
parent_scope: "[AST_Scope?/S] link to the parent scope", | ||
variables: "[Object/S] a map of name -> SymbolDef for all variables/functions defined in this scope", | ||
variables: "[Object/S] a map of name ---> SymbolDef for all variables/functions defined in this scope", | ||
}, | ||
@@ -476,3 +476,3 @@ clone: function(deep) { | ||
$propdoc: { | ||
globals: "[Object/S] a map of name -> SymbolDef for all undeclared names", | ||
globals: "[Object/S] a map of name ---> SymbolDef for all undeclared names", | ||
}, | ||
@@ -1445,5 +1445,18 @@ wrap: function(name) { | ||
if (typeof this.value != "number") throw new Error("value must be number"); | ||
if (!isFinite(this.value)) throw new Error("value must be finite"); | ||
if (this.value < 0) throw new Error("value cannot be negative"); | ||
}, | ||
}, AST_Constant); | ||
var AST_BigInt = DEFNODE("BigInt", "value", { | ||
$documentation: "A BigInt literal", | ||
$propdoc: { | ||
value: "[string] the numeric representation", | ||
}, | ||
_validate: function() { | ||
if (typeof this.value != "string") throw new Error("value must be string"); | ||
if (this.value[0] == "-") throw new Error("value cannot be negative"); | ||
}, | ||
}, AST_Constant); | ||
var AST_RegExp = DEFNODE("RegExp", "value", { | ||
@@ -1450,0 +1463,0 @@ $documentation: "A regexp literal", |
@@ -687,2 +687,6 @@ /*********************************************************************** | ||
var p = output.parent(); | ||
// (-x) ** y | ||
if (p instanceof AST_Binary) return p.operator == "**" && p.left === this; | ||
// (x++).toString(3) | ||
// (typeof x).length | ||
return (p instanceof AST_Call || p instanceof AST_PropAccess) && p.expression === this; | ||
@@ -693,9 +697,9 @@ }); | ||
var p = output.parent(); | ||
// [ 1, (2, 3), 4 ] ==> [ 1, 3, 4 ] | ||
// [ 1, (2, 3), 4 ] ---> [ 1, 3, 4 ] | ||
return p instanceof AST_Array | ||
// () => (foo, bar) | ||
// () ---> (foo, bar) | ||
|| is_arrow(p) && p.value === this | ||
// await (foo, bar) | ||
|| p instanceof AST_Await | ||
// 1 + (2, 3) + 4 ==> 8 | ||
// 1 + (2, 3) + 4 ---> 8 | ||
|| p instanceof AST_Binary | ||
@@ -705,11 +709,11 @@ // new (foo, bar) or foo(1, (2, 3), 4) | ||
// (false, true) ? (a = 10, b = 20) : (c = 30) | ||
// ==> 20 (side effect, set a := 10 and b := 20) | ||
// ---> 20 (side effect, set a := 10 and b := 20) | ||
|| p instanceof AST_Conditional | ||
// [ a = (1, 2) ] = [] ==> a == 2 | ||
// [ a = (1, 2) ] = [] ---> a == 2 | ||
|| p instanceof AST_DefaultValue | ||
// { [(1, 2)]: 3 }[2] ==> 3 | ||
// { foo: (1, 2) }.foo ==> 2 | ||
// { [(1, 2)]: 3 }[2] ---> 3 | ||
// { foo: (1, 2) }.foo ---> 2 | ||
|| p instanceof AST_DestructuredKeyVal | ||
|| p instanceof AST_ObjectProperty | ||
// (1, {foo:2}).foo or (1, {foo:2})["foo"] ==> 2 | ||
// (1, {foo:2}).foo or (1, {foo:2})["foo"] ---> 2 | ||
|| p instanceof AST_PropAccess && p.expression === this | ||
@@ -720,3 +724,3 @@ // ...(foo, bar, baz) | ||
|| p instanceof AST_Unary | ||
// var a = (1, 2), b = a + a; ==> b == 4 | ||
// var a = (1, 2), b = a + a; ---> b == 4 | ||
|| p instanceof AST_VarDef; | ||
@@ -729,7 +733,10 @@ }); | ||
if (p instanceof AST_Await) return true; | ||
// this deals with precedence: 3 * (2 + 1) | ||
// this deals with precedence: | ||
// 3 * (2 + 1) | ||
// 3 - (2 - 1) | ||
// (1 ** 2) ** 3 | ||
if (p instanceof AST_Binary) { | ||
var po = p.operator, pp = PRECEDENCE[po]; | ||
var so = this.operator, sp = PRECEDENCE[so]; | ||
return pp > sp || (pp == sp && this === p.right); | ||
return pp > sp || (pp == sp && this === p[po == "**" ? "left" : "right"]); | ||
} | ||
@@ -785,10 +792,6 @@ // (foo && bar)() | ||
PARENS(AST_Number, function(output) { | ||
if (!output.option("galio")) return false; | ||
// https://github.com/mishoo/UglifyJS/pull/1009 | ||
var p = output.parent(); | ||
if (p instanceof AST_PropAccess && p.expression === this) { | ||
var value = this.value; | ||
// https://github.com/mishoo/UglifyJS/issues/115 | ||
return value < 0 | ||
// https://github.com/mishoo/UglifyJS/pull/1009 | ||
|| output.option("galio") && /^0/.test(make_num(value)); | ||
} | ||
return p instanceof AST_PropAccess && p.expression === this && /^0/.test(make_num(this.value)); | ||
}); | ||
@@ -816,4 +819,4 @@ | ||
if (needs_parens_assign_cond(this, output)) return true; | ||
// v8 parser bug => workaround | ||
// f([1], [a] = []) => f([1], ([a] = [])) | ||
// v8 parser bug ---> workaround | ||
// f([1], [a] = []) ---> f([1], ([a] = [])) | ||
if (output.option("v8")) return this.left instanceof AST_Destructured; | ||
@@ -832,2 +835,4 @@ // ({ p: a } = o); | ||
var p = output.parent(); | ||
// (await x) ** y | ||
if (p instanceof AST_Binary) return p.operator == "**" && p.left === this; | ||
// new (await foo) | ||
@@ -834,0 +839,0 @@ // (await foo)(bar) |
@@ -231,3 +231,3 @@ /*********************************************************************** | ||
if (debug) { | ||
// debug mode: use a prefix and suffix to preserve readability, e.g. o.foo -> o._$foo$NNN_. | ||
// debug mode: use a prefix and suffix to preserve readability, e.g. o.foo ---> o._$foo$NNN_. | ||
var debug_mangled = "_$" + name + "$" + debug_suffix + "_"; | ||
@@ -234,0 +234,0 @@ if (can_mangle(debug_mangled)) mangled = debug_mangled; |
@@ -6,3 +6,3 @@ { | ||
"license": "BSD-2-Clause", | ||
"version": "3.12.5", | ||
"version": "3.12.6", | ||
"engines": { | ||
@@ -9,0 +9,0 @@ "node": ">=0.8.0" |
@@ -1257,1 +1257,7 @@ UglifyJS 3 | ||
UglifyJS may modify the input which in turn may suppress those errors. | ||
- Some arithmetic operations with `BigInt` may throw `TypeError`: | ||
```javascript | ||
1n + 1; | ||
// TypeError: can't convert BigInt to number | ||
``` | ||
UglifyJS may modify the input which in turn may suppress those errors. |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
1024764
26325
1263