Skip to content

Commit

Permalink
support ExtendScript parser quirks (#5648)
Browse files Browse the repository at this point in the history
closes #1144
  • Loading branch information
alexlamsl authored Sep 6, 2022
1 parent 318206d commit 32bd65a
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 1 deletion.
17 changes: 17 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -930,6 +930,9 @@ can pass additional arguments that control the code output:
}
```

- `extendscript` (default: `false`) — enable workarounds for Adobe ExtendScript
bugs

- `galio` (default: `false`) — enable workarounds for ANT Galio bugs

- `indent_level` (default: `4`) — indent by specified number of spaces or the
Expand Down Expand Up @@ -1446,3 +1449,17 @@ To allow for better optimizations, the compiler makes various assumptions:
// Actual: TypeError: invalid assignment to const 'f'
```
UglifyJS may modify the input which in turn may suppress those errors.
- Adobe ExtendScript will give incorrect results with the following:
```javascript
alert(true ? "PASS" : false ? "FAIL" : null);
// Expected: "PASS"
// Actual: "FAIL"
```
UglifyJS may modify the input which in turn may suppress those errors.
- Adobe ExtendScript will give incorrect results with the following:
```javascript
alert(42 ? null ? "FAIL" : "PASS" : "FAIL");
// Expected: "PASS"
// Actual: SyntaxError: Expected: :
```
UglifyJS may modify the input which in turn may suppress those errors.
6 changes: 5 additions & 1 deletion lib/output.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ function OutputStream(options) {
beautify : false,
braces : false,
comments : false,
extendscript : false,
galio : false,
ie : false,
indent_level : 4,
Expand Down Expand Up @@ -700,6 +701,7 @@ function OutputStream(options) {
if (p instanceof AST_Class) return true;
// (x++)[y]
// (typeof x).y
// https://github.com/mishoo/UglifyJS/issues/115
if (p instanceof AST_PropAccess) return p.expression === this;
// (~x)`foo`
if (p instanceof AST_Template) return p.tag === this;
Expand Down Expand Up @@ -875,7 +877,9 @@ function OutputStream(options) {
return needs_parens_assign_cond(this, output);
});
PARENS(AST_Conditional, function(output) {
return needs_parens_assign_cond(this, output);
return needs_parens_assign_cond(this, output)
// https://github.com/mishoo/UglifyJS/issues/1144
|| output.option("extendscript") && output.parent() instanceof AST_Conditional;
});
PARENS(AST_Yield, function(output) {
return needs_parens_assign_cond(this, output);
Expand Down
46 changes: 46 additions & 0 deletions test/compress/conditionals.js
Original file line number Diff line number Diff line change
Expand Up @@ -1176,6 +1176,52 @@ trivial_boolean_ternary_expressions : {
}
}

extendscript_1: {
beautify = {
extendscript: true,
}
input: {
var alert = console.log;
function f(a, b) {
return a ? b ? "foo" : "bar" : "baz";
}
alert(f());
alert(f(42));
alert(f(null, true));
alert(f([], {}));
}
expect_exact: 'var alert=console.log;function f(a,b){return a?(b?"foo":"bar"):"baz"}alert(f());alert(f(42));alert(f(null,true));alert(f([],{}));'
expect_stdout: [
"baz",
"bar",
"baz",
"foo",
]
}

extendscript_2: {
beautify = {
extendscript: true,
}
input: {
var alert = console.log;
function f(a, b) {
return a ? "foo" : b ? "bar" : "baz";
}
alert(f());
alert(f(42));
alert(f(null, true));
alert(f([], {}));
}
expect_exact: 'var alert=console.log;function f(a,b){return a?"foo":(b?"bar":"baz")}alert(f());alert(f(42));alert(f(null,true));alert(f([],{}));'
expect_stdout: [
"baz",
"foo",
"bar",
"foo",
]
}

issue_1154: {
options = {
booleans: true,
Expand Down

0 comments on commit 32bd65a

Please sign in to comment.