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
Anthony Van de Gejuchte
2246c79318
Merge branch 'master' into fix-harmony
2016-06-20 19:21:25 +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
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
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
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
00ad57e393
Do not allow newlines in regex
2016-06-05 17:02:19 +02:00
Richard van Velzen
e36e07fa77
Merge branch 'master' into harmony
2016-05-04 20:13:35 +02:00
kzc
f39fd3d583
Handle CR line endings in comments.
...
Fixes #1050
2016-05-04 20:02:29 +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
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
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
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
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
viclm
6780d0906c
Fix eager parsing of arrow functions for non-punc tokens
2016-03-10 22:18:48 +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
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
Fugiman
1f75232062
Fix template string parsing
2016-01-19 19:22:22 +01:00
Fábio Santos
028ff64e9a
Default values inside destructurings
2016-01-19 19:22:22 +01:00
Anthony Van de Gejuchte
6f3e35bb3f
Fix ch that could contain other newline characters
2015-12-27 22:24:37 +01:00
Richard van Velzen
7f3dbb6df7
Merge branch 'master' into harmony
2015-12-26 17:59:38 +01:00
Anthony Van de Gejuchte
174404c0f3
Do not allow newlines in string literals
2015-12-26 15:08:37 +01:00
Anthony Van de Gejuchte
bd99b00413
Semicolon after do...while statement is optional
2015-12-17 23:02:35 +01:00
Fábio Santos
a800356ad0
Implement new.target
2015-11-21 14:48:23 +00:00
Fábio Santos
69da8e53e0
Separate class expressions from class declarations and their symbols like defuns
2015-11-21 09:17:32 +00:00
Mihai Bazon
08623aa6a7
Fix output for "use asm" code from SpiderMonkey AST
...
(will only work properly if the SM tree contains "raw" properties for
Literal number nodes)
2015-11-12 12:18:25 +02:00
Mihai Bazon
7691bebea5
Rework has_directive
...
It's now available during tree walking, i.e. walker.has_directive("use
asm"), rather than as part of the scope. It's thus no longer necessary
to call `figure_out_scope` before codegen. Added special bits in the
code generator to overcome the fact that it doesn't inherit from
TreeWalker.
Fix #861
2015-11-11 22:15:25 +02:00
Mihai Bazon
18d37ac761
Fix parsing invalid input
...
i.e. `x = 1.xe` — because parseFloat("1.xe") returns 1, this parsed as
`x = 1`.
Ref #857
2015-11-09 13:15:20 +02:00
Richard van Velzen
63d35f8f6d
Prevent ReDoS by not using a regexp to verify floating point numbers
...
`parseFloat` will return `NaN` for invalid numbers anyway, which is the check used to throw the parse error.
Fixes #857
2015-11-09 11:28:27 +01:00
Fábio Santos
9ffed2bea6
static properties
2015-10-27 12:24:37 +00:00
Fábio Santos
5f7cb6939c
Starting ES6 classes
2015-10-27 12:24:37 +00:00
Fábio Santos
64e7a00399
Accept keyword names as concise method names
2015-10-27 09:31:16 +01:00
Fábio Santos
34213ea2f8
Create a new symbol for methods' names
2015-10-27 09:31:16 +01:00
Fábio Santos
0d8dea9538
start concise methods
2015-10-27 09:31:16 +01:00
Fábio Santos
2cce61c564
Allow 'of' to be a name.
2015-10-26 20:56:59 +00:00
Fábio Santos
b31918bbf0
computed properties
2015-10-12 21:38:20 +01:00
Richard van Velzen
b14496c742
Merge branch 'master' into harmony
...
Conflicts:
lib/compress.js
2015-10-12 08:54:44 +02:00
kzc
4d2f7d83af
Fix handling of "use asm" when no command line flags are passed to uglifyjs. SCOPE_IS_NEEDED is unconditionally true now. Refactored floating point literal parsing to be more in keeping with the AST class design.
2015-10-07 13:10:53 -04:00
kzc
593677d2ff
Add proper support for "use asm"; blocks. Disable -c optimization within "use asm"; sections and preserve floating point literals in their original form. Non-asm.js sections are optimized as before. Asm.js sections can still be mangled and minified of whitespace. No special command line flags are required.
2015-10-07 10:00:28 +02:00
Anthony Van de Gejuchte
c69294c449
Implement shebang support
2015-10-06 22:35:45 +02:00
Richard van Velzen
991fa99655
Merge branch 'master' into harmony
2015-09-13 14:17:45 +02:00
Fábio Santos
dde9e293df
parse, output the let statement
2015-09-13 14:15:53 +02:00
Richard van Velzen
34685a6f55
Merge pull request #794 from fabiosantoscode/feature/harmony-template-strings-2
...
Harmony: template strings
2015-09-08 21:23:41 +02:00
Fábio Santos
2fac2bbfe4
Remove unused state variable in_parameters, and also remove unreachable code (try_an_object always returned an object!)
2015-09-05 23:01:29 +01:00
Fábio Santos
242c61be94
prefixed template strings, like "String.rawfoo\nbar".
2015-09-05 22:48:38 +01:00
Fábio Santos
e1cb1a0e3c
Parse and output ES6 template strings. Yikes!
2015-09-05 22:32:57 +01:00
Richard van Velzen
fcde6109b0
Fix bad parsing of new new x()() constructs
...
Fixes #739
2015-08-27 12:29:36 +03:00
Fábio Santos
dc5db9b6ca
Starting destructuring expressions
2015-08-25 17:49:27 +01:00
Fábio Santos
079aaa0d48
Tolerate expansions in vardefs, too!
2015-08-21 12:04:26 +02:00
Fábio Santos
d4f17f29ae
Destructuring vardef in for..of and for..in
2015-08-21 12:04:26 +02:00
Fábio Santos
025d34bfa2
Add holes in destructuring defs, also make them nestable
2015-08-21 12:04:26 +02:00
Fábio Santos
c44c2d6c21
Parse and compress destructuring VarDefs
2015-08-21 12:04:26 +02:00
Richard van Velzen
872231a0ca
Merge pull request #775 from fabiosantoscode/feature/binary-literals
...
Parse ES6 number literals, round 2
2015-08-21 11:50:39 +02:00
Fábio Santos
a8f8aa518b
Add new-style octal literals and make the B and the O case insensitive.
2015-08-17 11:50:56 +01:00
Richard van Velzen
56c0b834d6
Merge pull request #771 from fabiosantoscode/feature/binary-literals
...
Parse binary number literals
2015-08-14 14:59:55 +02:00
Fábio Santos
6f864402d3
Parse binary number literals
2015-08-14 03:24:54 +01:00
Richard van Velzen
8909e9e1cb
Merge pull request #763 from fabiosantoscode/feature/harmony-super
...
Feature/harmony super
2015-08-07 08:54:20 +02:00
Fábio Santos
e80ed38772
Super!
2015-08-07 02:44:53 +01:00
Fábio Santos
9863f0efa3
expand parameters
...
Conflicts:
test/compress/harmony.js
2015-08-05 21:15:23 +02:00
Richard van Velzen
e8664e63ef
Merge branch 'master' into harmony
2015-08-05 21:13:11 +02:00
Fábio Santos
a68953c491
=> with destructuring arguments. Requires a lot of parser changes
2015-08-04 00:57:53 +01:00
Fábio Santos
fa5c4f2d03
Adding arrow functions
2015-08-04 00:57:53 +01:00
Fábio Santos
9d7d365c2b
for...of
2015-07-29 15:10:54 +02:00
Chris Cowan
9854deb626
Re-use the caught exception's error message in the parse error call.
2015-07-29 15:06:52 +02:00
Chris Cowan
d6814050dd
Give a good error message if an invalid regular expression is found.
2015-07-29 15:05:59 +02:00
Fábio Santos
32f76f7ff8
Starting destructuring.
2015-07-29 14:54:45 +02:00
Mihai Bazon
bce4307e9e
Treat \uFEFF as whitespace.
...
Fix #714
2015-05-20 16:17:46 +03:00
Mihai Bazon
e637bdaf4e
Only drop the BOM when it's the first character.
...
Close #704
2015-05-05 10:11:38 +03:00
Mihai Bazon
92e4340732
Fix parsing strings with literal DOS newlines
...
(should not set newline_before)
Fix #693
2015-04-23 12:08:19 +03:00
Mihai Bazon
d36faffeca
Fix parsing for U+2028 / U+2029
...
(they should be treated as whitespace)
2015-03-18 10:09:30 +02:00
Edward Casbon
ae07714927
Add filename to the JS_Parse_Error exception.
...
It would be nice to have access to the filename of the file that includes the code that causes a JavaScript error. This is especially handy if uglifying multiple files at once.
Only a small change is needed for this to happen as it's already available in the function that throws the error.
2015-02-11 23:21:22 +01:00
Mihai Bazon
fbbaa42ee5
Add option to preserve/enforce string quote style
...
`-q 0` (default) use single or double quotes such as to minimize the number of
bytes (prefers double quotes when both will do); this is the previous
behavior.
`-q 1` -- always use single quotes
`-q 2` -- always use double quotes
`-q 3` or just `-q` -- always use the original quotes.
Related codegen option: `quote_style`.
Close #495
Close #460
Some `yargs` guru please tell me why `uglifyjs --help` doesn't display the
help string for `-q` / `--quotes`, and why it doesn't output the expected
argument types anymore, like good old `optimist` did.
2015-01-27 22:26:27 +02:00
Anthony Van de Gejuchte
74cda80d3b
Add unicode digit parsing support
2015-01-20 00:17:24 +01:00
Anthony Van de Gejuchte
9a3a848cc8
Update unicode letter
2015-01-20 00:17:03 +01:00
Ingvar Stepanyan
ae5366a31d
Track ending lines/columns; fix end locations in Mozilla AST.
2015-01-06 11:32:41 +01:00
Mihai Bazon
13219cebcb
Fix handling \r\n
...
Close #437
2015-01-05 12:14:42 +02:00
Mihai Bazon
f36a1eaa8b
Add option to allow return outside of functions.
...
Close #288
2014-10-20 18:12:13 +03:00
Mihai Bazon
8fbe200012
Always quote property names that contain non-ASCII characters.
...
Fix #328
2014-04-18 10:48:44 +03:00
Mihai Bazon
1d0127de21
Fix end token for conditionals. Close #404
2014-01-21 10:38:59 +02:00
Mihai Bazon
aa9de76370
Mark yield as reserved word. Close #375 .
2013-12-22 20:52:19 +02:00
Mihai Bazon
c5ed2292bf
Fix parsing setters/getters (allow keywords for name).
...
The "key" property was always "set" or "get", which didn't make much sense.
Now it'll be the actual name of the setter/getter (AST_Node), and the
AST_Accessor object itself, which represents the function, won't store any
name.
Close #319
2013-10-30 11:50:22 +02:00
Mihai Bazon
bea3d90771
minor
2013-10-30 09:10:56 +02:00
David Glasser
bb0a762d12
Only allow identifier start characters at the beginning of identifiers.
...
Without this fix, the following source:
x = {"\u200c": 42};
would incorrectly be converted into a quoteless key. But while \u200c is allowed
to be in identifiers, it cannot be at the beginning, as per ES5.
(For example, the SockJS client library doesn't work under uglify starting with
d9ad3c7c.)
2013-10-03 17:02:19 -07:00