kzc
b7ef7840f3
Allow sequences maximum length to be user configurable.
2016-07-01 09:41:31 +02:00
Anthony Van de Gejuchte
fb2f8d1a51
Add reserved words to list unescapable keywords
...
Additionals:
* Update list reserved keywords
2016-06-30 22:47:44 +02:00
Anthony Van de Gejuchte
54a783ba84
Add ecma5 flag for codegen
2016-06-30 22:47:44 +02:00
Anthony Van de Gejuchte
63c432f4fa
Extend unicode support
...
* Support \u{xxxx} syntax
* Add support for surrogate pairs
* Allow identifiers to have unicode escape sequence
2016-06-30 22:47:44 +02:00
Anthony Van de Gejuchte
a97690fc72
Various LineTerminator changes
...
* Escaped newlines should also produce SyntaxError
* Fix multiline comment parsing and add tests
* Adapt makePredicate to handle \u2028 and \u2029
* Move up nlb check in regex so it's checked before any escape handling
* Change error messages to conform ecma standard
* Find_eol not recornizing \u2028 and \u2029 as line terminator
* Remove \u180e as it is removed in unicode 6.3.0 from the category zs
2016-06-30 22:12:50 +02:00
kzc
02c638209e
Enable --screw-ie8 by default.
...
catch identifier is mangled correctly for ES5 standards-compliant JS engines by default.
Unconditionally use the ie8 if/do-while workaround whether or not --screw-ie8 is enabled.
To support non-standard ie8 javascript use: uglifyjs --support-ie8
2016-06-30 21:49:48 +02:00
kzc
335b72df03
Fix spidermonkey AST (ESTree) export and import, Array holes
...
Fixes : #1156 #1161
Also add test to exercise Uglify after spidermonkey export/import of itself.
2016-06-30 21:44:12 +02:00
Anthony Van de Gejuchte
3a7d53f3cf
Move OctalEscapeSequence to read_escape_char
...
This should simplify and improve implementation, make it easier to
implement template strings, and keep master a bit more in sync with
harmony.
Previous implementation wasn't broken, though the loop gave me the
impression it could read infinite numbers and annoyed me a bit. It was
also slightly unnecessary because the lookup involved only 3 characters.
2016-06-30 21:42:15 +02:00
Anthony Van de Gejuchte
07785d0003
Throw error if new.target is like new.foo
2016-06-25 19:32:53 +02:00
Anthony Van de Gejuchte
6eaeb19a4a
Add exponentiation operator
2016-06-22 12:23:37 +02:00
kzc
ace8aaa0f4
Fix conditional expressions of form (x ? -1 : -1)
...
Fixes #1154 , #1153
2016-06-21 14:52:13 -04:00
kzc
0c003c92a8
Don't replace undefined, NaN and Infinity within with scope
2016-06-21 10:53:29 +02:00
Anthony Van de Gejuchte
2246c79318
Merge branch 'master' into fix-harmony
2016-06-20 19:21:25 +02:00
Anthony Van de Gejuchte
85fbf86d7b
Keep master in sync with harmony
...
* Do not mangle when no mangle is required
* Improve use_asm reset while printing code
2016-06-20 18:42:17 +02:00
Anthony Van de Gejuchte
dda58244b6
Fixes to prevent failing tests after merging master
...
* Add missing quote properties to AST_ObjectKeyVal
* Avoid test results being interpret as directives
2016-06-20 15:02:09 +02:00
Shrey Banga
e645ba84cf
Respect quote style in object literals
...
The option added in fbbaa42ee5 wasn't
being respected inside object literals, so quoted property names would
still be stripped out with this option.
This is mostly a corner-case, but useful when the output is passed to
something like the Closure compiler, where quoted property names can be
used to prevent mangling.
2016-06-19 21:13:31 +02:00
Anthony Van de Gejuchte
6c99816855
Normalize error messages
2016-06-19 21:08:34 +02:00
Anthony Van de Gejuchte
ca04508cd1
Restrict yield outside generators in strict mode
...
* Move some yield/generic tests from compress/harmony.js to
compress/yield.js
* Adjust error messages to conform ecmascript standards
2016-06-19 21:03:36 +02:00
Anthony Van de Gejuchte
2149bfb707
Don't mix strings with directives in output
...
* Don't interpret strings with escaped content as directive
* Don't interpret strings after empty statement as directive
* Adapt output to prevent strings being represent as directive
* Introduce UGLIFY_DEBUG to allow internal testing like EXPECT_DIRECTIVE
2016-06-19 20:59:17 +02:00
Anthony Van de Gejuchte
6b03b800b3
Only last parameter between parentheses can have spread
2016-06-19 20:51:29 +02:00
Anthony Van de Gejuchte
f9cab7ad61
Allow expand in array literals
2016-06-19 20:49:18 +02:00
Anthony Van de Gejuchte
d7971ba0e4
Fix test262 failures related to <, <=, in and instanceof
...
Fixed-by: @kzc
2016-06-15 23:11:08 +02:00
Anthony Van de Gejuchte
5c4cfaa0a7
Re-add parens after new expression in beautify mode
2016-06-12 20:03:48 +02:00
Anthony Van de Gejuchte
bb9c9707aa
Don't allow with statements in strict mode
2016-06-12 19:08:16 +02:00
Richard van Velzen
0a3d780327
Merge branch 'master' into harmony
2016-06-12 17:29:42 +02:00
Anthony Van de Gejuchte
6c8e001fee
Stop dropping args in new expressions
2016-06-12 17:17:17 +02:00
David Bau
f99b7b630d
Escape null characters as \0 unless followed by 0-7.
2016-06-12 14:32:32 +02:00
Anthony Van de Gejuchte
ea31da2455
Don't drop unused if scope uses with statement
...
Fix provided by @kzc
2016-06-12 14:30:28 +02:00
Anthony Van de Gejuchte
4d7746baf3
Throw errors in strict mode for octal strings
...
Adds a directive tracker for the parser/tokenizer to
allow parsing depending on directive context.
2016-06-12 14:27:08 +02:00
Anthony Van de Gejuchte
b0555a123a
Fix newline handling after yield
...
YieldExpressions can only be defined as:
* `yield`
* `yield` [no nlb] AssignmentExpression
* `yield` [no nlb] `*` AssignmentExpression
2016-06-11 21:41:16 +02:00
Richard van Velzen
fa29344781
Merge branch 'master' into harmony
2016-06-09 22:29:52 +02:00
Anthony Van de Gejuchte
dcfc514c38
Improve yield support and restrict usage of strict
...
- Partially reverting 91cdb93e57 and eaf3911c31 and reimplement
- Add generators support for objects and classes
- Only classes can have static methods so restrict use of it
Special thanks to @rvanvelzen and @kzc for reviewing this patch and
providing constructive feedback over and over again.
2016-06-09 22:22:15 +02:00
Anthony Van de Gejuchte
8287ef6781
Fix uglify attempting to rewrite invalid new expressions
2016-06-08 19:45:21 +02:00
Anthony Van de Gejuchte
00ad57e393
Do not allow newlines in regex
2016-06-05 17:02:19 +02:00
kzc
09d5707a8a
collapse_vars: Do not consider RegExp literals to be constants
...
Fixes #1100
2016-05-27 00:03:51 -04:00
Anthony Van de Gejuchte
8ad8d7b717
Add Symbol to builtins
2016-05-24 17:57:18 +02:00
Richard van Velzen
0357e5923f
Merge branch 'master' into harmony
2016-05-24 17:56:20 +02:00
kzc
1e390269d4
Optimize if_return for single if/return cases.
...
Fixes #1089
2016-05-24 17:54:08 +02:00
Richard van Velzen
bc49dfd27a
Completely allow evaluating -0
2016-05-24 17:50:29 +02:00
Richard van Velzen
27eedbc302
Never produce -0 when evaluating expressions (like -"")
...
Fix for #1085 . The major case was already there, but more expressions can result in -0.
2016-05-17 22:34:38 +02:00
Richard van Velzen
f63803e3e3
Merge branch 'master' into harmony
2016-05-16 09:53:13 +02:00
kzc
5f464b41e2
Simplify iife new fix
...
as suggested by @rvanvelzen.
Added a test for IIFEs in nested contexts.
2016-05-15 19:12:17 -04:00
Richard van Velzen
63be1f3a4d
Only allow var definitions to be moved into the for-init clause
...
Fixes #1079
2016-05-15 21:00:51 +02:00
kzc
bcc1318d4b
Do not apply negate_iife optimization to new expression
2016-05-09 03:19:28 -04:00
Richard van Velzen
e36e07fa77
Merge branch 'master' into harmony
2016-05-04 20:13:35 +02:00
kzc
a0e03c9df4
Retain comments before AST_Constants during mangle.
2016-05-04 20:11:45 +02:00
kzc
f39fd3d583
Handle CR line endings in comments.
...
Fixes #1050
2016-05-04 20:02:29 +02:00
not-an-aardvark
5b893c8ec3
Avoid syntax error in yield assignments ( fixes #1054 )
2016-04-25 19:14:44 -04:00
Richard van Velzen
4fe630431c
Hoist functions when reversing if (x) return; ... vs. if (!x) ...
...
Fixes #1052
2016-04-23 23:48:33 +02:00
kzc
c55dd5ed74
Add passes compress option. Fix duplicate compress warnings.
2016-04-19 20:05:33 +02:00
Richard van Velzen
8571a08a93
Do not attempt evaluating class expressions
...
Broadly the same as function expressions - these actually are statements but
we're limited by the inheritance tree.
Fixes #1044
2016-04-19 20:01:26 +02:00
Richard van Velzen
68cc14f846
Fixups after merge
2016-04-18 15:51:32 +02:00
Richard van Velzen
f94497d1d6
Merge branch 'master' into harmony
2016-04-18 15:50:35 +02:00
kzc
e4fa4b109a
Parse comments without recursion to avoid RangeError.
...
Fixes #993
2016-04-16 02:02:47 -04:00
Richard van Velzen
4b4528ee05
Prevent endless recursion when evaluating self-referencing consts
...
Fix #1041
2016-04-13 15:03:31 +02:00
Richard van Velzen
eaf3911c31
Consider yield expressions as having side-effects
...
See #1043
2016-04-13 14:39:49 +02:00
Darío Javier Cravero
91cdb93e57
Implement harmony generators and yield
...
Uses #716 's implementation and adds tests.
Fixes #716 .
2016-04-13 14:22:08 +02:00
Mihai Bazon
b5a7a231f7
Actually limit sequence length.
...
Fix #1038
2016-04-12 14:17:24 +03:00
kzc
3907a5e3b2
Fix warnings for referenced non-hoisted functions.
...
Fixes #1034
Also added `expect_warnings` functionality to test framework.
2016-04-11 18:15:20 +02:00
kzc
c70d176f35
Simplify member(name, array) implementation.
2016-04-07 09:57:30 -04:00
Mihai Bazon
9317237372
Avoid using inherited hasOwnProperty
...
Fix #1031
2016-04-07 13:16:22 +03:00
kzc
98434258d0
Optimize ternaries with boolean consequent or alternative.
...
Fixes #511
2016-04-02 17:22:12 +02:00
kzc
45ddb9caeb
Speedup unused compress option for already minified code
...
Fixes : #321 #917 #1022
2016-03-28 17:58:50 -04:00
Fábio Santos
634f231b78
First class block scope
...
- Make let, const, and class symbols be declared in a block scope.
- Piggy back on existing catch symbol implementation to get block-aware mangling working
- Make sure unused block-scoped declarations can be dropped
- Don't eliminate a block if it has a block-scoped declaration
- Remove silly empty anonymous blocks left over from drop_unused
- AST_Toplevel now gets to call drop_unused too, since block-scoped variables aren't global!
- Don't consider block declarations global
2016-03-27 19:40:20 +02:00
Fábio Santos
6702cae918
fix #1021
2016-03-27 12:21:39 +01:00
Mihai Bazon
f68de86a17
Merge pull request #1011 from kzc/dont-produce-let-in-mangle
...
Do not produce `let` as a variable name in mangle.
2016-03-24 18:16:26 +02:00
kzc
07bb7262d0
Escape all ASCII control characters within strings when using ascii_only.
...
Fixes #1017 .
Tab characters within strings are now output as `\t` in all output modes.
2016-03-24 11:51:54 -04:00
kzc
a9d4a6291b
Do not produce let as a variable name in mangle.
...
Would previously occur in large generated functions with 21,000+ variables.
Fixes #986 .
2016-03-15 11:20:32 -04:00
Fábio Santos
6d2f77c180
fix #1003 by removing AST_ObjectSymbol and using AST_ObjectKeyVal for the same effect
2016-03-14 13:42:50 +01:00
Fábio Santos
accca2445f
fix crash: Import statements don't abort
2016-03-14 12:54:05 +01:00
Fábio Santos
0bc4f6edb4
Don't mangle exported symbols
2016-03-14 12:54:05 +01:00
Fábio Santos
ce84a706a3
Implement the export statement
2016-03-14 12:54:05 +01:00
Fábio Santos
86b5248837
Mangling externally imported names by using aliasing
2016-03-14 12:54:05 +01:00
Fábio Santos
59e1601fb8
importing names in the modules, not just default imports
2016-03-14 12:54:05 +01:00
Fábio Santos
d35a9e7839
Importing names from places
2016-03-14 12:54:05 +01:00
Fábio Santos
0465bd270d
Starting out the import statement
2016-03-14 12:54:05 +01:00
philippsimon
ee6c9fabb7
Fix: Uglified Number.prototype functions on big numbers
2016-03-14 12:41:06 +01:00
viclm
6780d0906c
Fix eager parsing of arrow functions for non-punc tokens
2016-03-10 22:18:48 +01:00
kzc
102d1b9137
#877 Ignore mangle sort option
2016-02-27 15:33:10 -05:00
kzc
11b0efdf84
boolean_expression ? true : false --> boolean_expression
2016-02-22 17:59:36 +01:00
kzc
5486b68850
Take operator || precendence into account for AST_If optimization.
...
Fixes #979 .
2016-02-21 12:05:02 -05:00
alexlamsl
6547437725
preserve ThisBinding for side_effects
2016-02-17 19:34:01 +01:00
Richard van Velzen
9662228f6a
Don't compress (0, eval)() to eval()
2016-02-16 19:00:48 +01:00
alexlamsl
31a9b05c96
Preserve ThisBinding in conditionals & collapse_vars
...
Fixes #973
2016-02-16 18:47:49 +01:00
sergeyv
7a4ed9d200
Revert "using the original sourcemap as the base"
...
This reverts commit ad18689d92 .
Reason for revert: introduce issue #882
Currently, generated sourcemap contains copy of all existing mappings and adds new mappings from uglified code to original one.
However, previous mapping are no longer valid and shouldn't be added.
2016-02-10 10:19:39 +01:00
Darío Javier Cravero
0b303379c0
fix: don't fail if definition is undefined
...
Running `uglifyjs --verbose --compress --mangle --screw-ie8 class.js`
with
`class.js`:
```
class Foo {
bar() {
}
}
```
Fails with:
```
undefined:4041
return this.definition().unmangleable(options);
TypeError: Cannot read property 'unmangleable' of undefined
...
```
2016-02-10 10:17:32 +01:00
Fábio Santos
d7ec2ecc12
Fix #931 : Create arrow functions in maybe_assign so that they can be used in assignments
2016-02-09 00:02:23 +00:00
kzc
7c3fee9e31
collapse_vars: avoid replacement across AST_Case nodes to be on safe side even though no issues seen.
2016-01-29 10:35:07 -05:00
kzc
929de2b0de
collapse_vars: fix if/else and ternary operator side effects
2016-01-28 12:17:06 -05:00
kzc
af2472d85e
collapse_vars: fix bug in repeated var defs of same name
2016-01-28 16:48:50 +01:00
kzc
0a38a688f9
fix bug in collapse_vars for right side of "||" and "&&"
2016-01-27 14:18:46 -05:00
kzc
f4c2ea37bf
Collapse single use var definitions
...
Fix #721
2016-01-27 11:48:15 +02:00
Mihai Bazon
915f907186
Add start/end in the arguments definition
...
(keeps my https://github.com/mishoo/jsinfo.el working)
2016-01-27 11:36:03 +02:00
Richard van Velzen
b5a7197ae5
Merge pull request #928 from STRML/constPragma
...
Mark vars with /** @const */ pragma as consts so they can be eliminated.
2016-01-20 19:04:36 +01:00
Samuel Reed
1b703349cf
Tighten up @const regex.
2016-01-20 11:35:45 -06:00
Samuel Reed
4a7179ff91
Simplify by skipping extra tree walk.
2016-01-20 11:03:41 -06:00
Samuel Reed
f97da4294a
Use TreeWalker for more accurate @const results and update tests
2016-01-20 10:54:00 -06:00
Samuel Reed
8b71c6559b
Mark vars with /** @const */ pragma as consts so they can be eliminated.
...
Fixes older browser support for consts and allows more flexibility
in dead code removal.
2016-01-19 13:23:02 -06:00
Anthony Van de Gejuchte
26641f3fb2
Allow operator names as getters/setters
...
Fixes #919
Fix provided by @kzc
2016-01-19 19:28:51 +01:00
Fugiman
5e78f20f1c
Remove duplicate error message
2016-01-19 19:22:22 +01:00