Mihai Bazon
62bda71c85
Fix parens for AST_Undefined
...
Do the same as for AST_Unary, since we output undefined as `void 0`.
Reported at https://github.com/mishoo/UglifyJS2/issues/338#issuecomment-48858341
2014-07-18 11:31:41 +03:00
Mihai Bazon
ac2caf1088
Check for the case an AST_For's init is an EmptyStatement
...
(lame fix for #503 )
2014-07-01 23:10:44 +03:00
Mihai Bazon
7bf59b5bcd
Actually, even better. #475
...
- also handle x = + ++y, x = - --y;
- don't use parens, a space suffices.
2014-04-27 21:42:14 +03:00
Mihai Bazon
025f3e9596
Better fix for #475
2014-04-27 20:54:54 +03:00
Mihai Bazon
8258edd8a5
Fix parens in +(+x). Close #475
2014-04-27 20:51:01 +03:00
Mihai Bazon
e29048b54a
Merge branch 'master' of github.com:mishoo/UglifyJS2
2014-01-26 10:07:10 +02:00
Mihai Bazon
ceb200fe81
Move unescaping regexps under a codegen option (unescape_regexps)
2014-01-26 10:05:55 +02:00
Daniel Stutzman
f5f8239057
Don't unescape \x00 in regexes (it breaks IE8)
2014-01-25 11:55:39 -07:00
Mihai Bazon
931862e97f
More chars that cannot be unescaped in regexps.
2014-01-21 11:44:00 +02:00
Ville Lautanala
1e31011874
Don't unescape byte order marks in regexps
2014-01-19 12:27:03 +02:00
Mihai Bazon
4339bd5cfa
Don't unescape \x2f (slash) in regexps. #54
2014-01-18 12:31:50 +02:00
Mihai Bazon
90a330da16
simplify
2014-01-10 10:36:15 +02:00
Mihai Bazon
cad1f9cbd1
Unescape Unicode sequences in regexps when ascii_only is false. #54
2014-01-10 10:33:58 +02:00
Mihai Bazon
5e4c7f4245
Fix parens for property access -- (foo, bar)["baz"]
2014-01-05 11:48:01 +02:00
Mihai Bazon
7a30d826b8
Better fix for comments in AST_Exit
...
Close #374
2013-12-18 15:54:12 +02:00
Mihai Bazon
be55a09edf
Take out all comments from an AST_Exit's value
...
Fix #372
2013-12-18 13:30:26 +02:00
Mihai Bazon
63287c0e68
Workaround for Safari bug
...
Close #313
2013-10-30 13:59:59 +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
e4c5302406
Fix output for x = 2 * (a % b / b * c)
...
(issue #337 )
2013-10-30 09:11:55 +02:00
Mihai Bazon
f1b7094a57
Add "preamble" output option
...
Close #335
2013-10-29 11:09:18 +02:00
Mihai Bazon
0358e376f0
Fix codegen for when comments_before is undefined.
...
Fix #333
2013-10-28 09:39:29 +02:00
Mihai Bazon
83ba338bd0
Avoid printing <!-- in the output (HTML5 comment)
2013-09-06 10:10:45 +03:00
Mihai Bazon
7c10b25346
Support HTML5 comment syntax (enabled by default!)
...
See http://javascript.spec.whatwg.org/#comment-syntax
https://github.com/mishoo/UglifyJS/issues/503
https://github.com/marijnh/acorn/issues/62
2013-09-06 09:54:30 +03:00
Mihai Bazon
ed80b4a534
Move support for negate_iife in the compressor, rather than code generator
...
(the code generator doesn't maintain enough context to know whether
the return value is important or discarded)
Fixes #272
2013-08-20 17:45:52 +03:00
Michael Ficarra
d9ad3c7cbf
fixes #259 : don't unnecessarily quote object properties when --screw-ie8
2013-08-18 19:45:06 -05:00
David Glasser
b1febde3e9
Fix output for arrays whose last element is a hole: [1,,]
...
1529ab96 started to do this (by considering holes to be separate from
"undefined") but it still converted
[1,,] (length 2, last element hole, trailing comma)
to
[1,] (length 1, trailing comma)
Unfortunately the test suite doesn't really make this clear: the new test here
passes with or without this patch because run-tests.js beautifys the expected
output (in "make_code"), which does the incorrect transformation! If you make
some manual change to arrays.js to make the test fail and see the INPUT and
OUTPUT, then you can see that without this fix, [1,,] -> [1,], and with this fix
it stays [1,,].
2013-07-18 15:39:22 +03:00
Ville Lautanala
f29f07aabd
Escape null characters as \x00
...
Since \0 might be mistakenly interpreted as octal if followed by a
number and using literal null is in some cases interpreted as end of
string, escape null as \x00.
2013-06-03 20:46:42 +03:00
Mihai Bazon
9fc6796d2a
Add negate_iife option to the code generator.
...
See discussion in a9511dfbe5
2013-05-22 21:22:14 +03:00
Mihai Bazon
22a038e6a2
Fix output of statement: new function(){...};
...
Close #209
2013-05-20 08:27:37 +03:00
Mihai Bazon
a9511dfbe5
Use the negation hack rather than parens for a toplevel function expression call
...
(only in !beautify mode)
2013-05-09 08:58:47 +03:00
Vladimir Zhuravlev
37d7cb8565
Quote objects with numeric keys
2013-03-31 19:52:28 +03:00
Mihai Bazon
a869b854fa
Don't use \xYY for identifiers
...
Fix #173
2013-03-31 13:36:22 +03:00
Andreas Lind Petersen
81f5efe39a
Output, to_ascii: Escape non-ascii chars with \xnn instead of \unnnn whenever possible.
2013-03-31 13:36:22 +03:00
Mihai Bazon
916faf0a48
Force space after literal regexp when used in "instanceof" or "in"
...
Close #118
2013-02-06 11:57:59 +02:00
Mihai Bazon
fdf8b5eb71
Fix parens for NaN
...
Close #116
2013-02-06 11:38:29 +02:00
Mihai Bazon
de7ec7f1b7
Fix parens for negative numbers
...
Close #115
2013-02-06 11:36:04 +02:00
Mihai Bazon
3c8a0bdff4
Fix parens for AST_New
...
Close #114
2013-02-06 11:28:49 +02:00
Mihai Bazon
719a8fd102
Ugly hack to print comments before return/throw statements
...
Close #112
2013-02-05 19:11:39 +02:00
Mihai Bazon
faa354f5ca
[AST_Hole] the print function can be a no-op.
2013-01-17 11:36:10 +02:00
David Glasser
1529ab965a
Fix output for arrays containing undefined values.
...
1b6bcca7 was a first attempt at this. That commit made Uglify stop replacing
holes with undefined, but instead it started replacing undefined with
holes. This is slightly problematic, because there is a difference between a
hole and an undefined value. More problematically, it changed [1,undefined] to
[1,] which generally doesn't even parse as a hole (just as a trailing comma), so
it didn't even preserve the length of the array!
Instead, parse holes as their own special AST node which prints invisibly.
2013-01-17 11:36:10 +02:00
Mihai Bazon
08219f0cee
Fix output when semicolons is off.
...
(need to force a semicolon for the empty body of an `if`)
Close #72
2012-12-21 11:57:08 +02:00
Mihai Bazon
c4993e1e5c
Small cleanup
2012-12-12 11:51:55 +02:00
Mihai Bazon
98978fc827
Add proper parens in "NoIn" expressions.
...
fix #60 .
2012-12-06 12:27:57 +02:00
Richard van Velzen
e98119496a
Add support for somewhat preserving line numbers.
...
Usage: uglifyjs2 -b "beautify=0,preserve_line=1" /path/to/js
ref #46
2012-11-14 15:30:18 +02:00
Mihai Bazon
46be3f2bf1
fix another small regression
...
we do need parens here: `new (foo.bar().baz)`, but not here: `new foo.bar.baz`
2012-11-07 13:31:43 +02:00
Mihai Bazon
80da21dab4
fix regression from 5346fb94 (shouldn't parenthesize i++ in x[i++])
2012-11-07 13:02:51 +02:00
Mihai Bazon
a1ae0c8609
parenthesize property access when it's the expression in New
...
refs #35
2012-11-07 12:26:33 +02:00
Mihai Bazon
a90c1aeafe
further fix for parens around New (refs #35 )
2012-11-07 11:49:06 +02:00
Mihai Bazon
ff388a8d2d
parenthesize a Call expression when its parent is New
...
fix #35
2012-11-07 11:36:15 +02:00
Mihai Bazon
5346fb94bb
add proper parens around unary expressions
...
fix #34
2012-11-07 11:23:50 +02:00
Mihai Bazon
85af942d64
print final semicolon
...
close #28
2012-11-05 13:09:39 +02:00
Mihai Bazon
30faaf13ed
more sequence optimizations (lift some sequences above binary/unary expressions so that we can avoid parens)
2012-10-22 11:58:06 +03:00
Mihai Bazon
6472f9410e
add semicolons option in the code generator (default: true)
...
pass `false` to separate statements with newlines instead of semicolons
2012-10-17 14:52:08 +03:00
Mihai Bazon
8957b3a694
fix small glitches in source map generation
2012-10-16 15:54:12 +03:00
Mihai Bazon
b071c9d079
add parens to AST_Seq whose parent is AST_Unary
2012-10-13 14:32:08 +03:00
Mihai Bazon
a84d07e312
add AST_Infinity node
2012-10-09 18:35:53 +03:00
Mihai Bazon
1b0aab2ce9
added $propdoc to AST nodes and some cleanups
...
hopefully we can make the AST documentation self-generating
2012-10-09 18:20:39 +03:00
Mihai Bazon
80a18fe2fa
for certain nodes that we invent we might not have a original source file to
...
map from, so just use "?". and in any case, don't fail hard when addMapping throws.
2012-10-08 12:52:25 +03:00
Mihai Bazon
708ec0467c
minor
2012-10-04 17:28:09 +03:00
Mihai Bazon
11863d6f9a
more cleanup (dropped AST_SwitchBlock)
2012-10-03 15:52:31 +03:00
Mihai Bazon
815abcfe18
support for --comments option to keep comments containing @license or @preserve
2012-10-02 16:40:42 +03:00
Mihai Bazon
075f93ec0d
line numbers start at 1
2012-10-02 16:39:53 +03:00
Mihai Bazon
2a5456260e
added option to keep some comments in the output
2012-10-02 14:32:30 +03:00
Mihai Bazon
e1098b04a7
"use strict";
2012-10-02 12:45:58 +03:00
Mihai Bazon
9e5dd81f1e
a shy attempt to obey width in the beautifier; added bracketize option to always print brackets around if/do/while/for statements; export more options via the CLI
2012-10-02 11:22:38 +03:00
Mihai Bazon
42038fd67f
Support input source map
...
This is useful while compressing generated code; for example compressing JS
compiled by CoffeeScript (assuming you got a source map):
uglifyjs2 --in-source-map generated.js.map \
--source-map uglified.js.map \
-o uglified.js
The above assumes you have a "generated.js.map" file which is the source
mapping between your CoffeeScript and the generated.js (compiled output from
CoffeeScript). The name of the input file is not present in this example;
it will be fetched from the source map (but it can be passed manually too).
The output will be in "uglified.js" and the output map "uglified.js.map"
will actually map to the original CoffeeScript code, rather than to
generated.js.
2012-09-24 17:02:18 +03:00
Mihai Bazon
5491e1d7b1
better support for multiple input files:
...
- use a single AST_Toplevel node for all files
- keep original source filename in the tokens
2012-09-21 14:19:05 +03:00
Mihai Bazon
3da0ac4897
support for directives
2012-09-18 13:21:09 +03:00
Mihai Bazon
21968285e8
added AST_NaN (output as 0/0)
2012-09-18 10:53:46 +03:00
Mihai Bazon
7b6a402916
rewrite handle_if_return
...
optimizations of if/return/continue seem to be even better now
2012-09-16 15:46:20 +03:00
Mihai Bazon
5e83e7ec17
adding an imaginary "return undefined" can sometimes help
...
function f() {
if (foo) return x();
if (!bar) return y();
}
==>
function f() {
return foo ? x() : bar ? void 0 : y();
}
2012-09-14 16:26:30 +03:00
Mihai Bazon
924aa58060
more optimizations that v1 does and some cleanups
...
- a = a + x ==> a+=x
- joining consecutive var statements (hoisting is not always desirable)
- x == false ==> x == 0, x != true ==> x != 1
- x, x ==> x; x = exp(), x ==> x = exp()
- discarding useless break-s
2012-09-14 15:36:38 +03:00
Mihai Bazon
2b4093ba83
fixed run-tests and an issue about reversing the condition in AST_If
2012-09-12 13:00:13 +03:00
Mihai Bazon
8e82d8d94c
fixed some mess with symbols/scope
...
- all symbols now have a `thedef` property which is a SymbolDef object,
instead of the `uniq` that we had before (pointing to the first occurrence
of the name as declaration).
- for undeclared symbols we still create a SymbolDef object in the toplevel
scope but mark it "undeclared"
- we can now call figure_out_scope after squeezing, which is useful in order
not to mangle names that were dropped by the squeezer
2012-09-11 15:42:28 +03:00
Mihai Bazon
a41e6cfabb
more progress on the compressor (WIP)
2012-09-10 16:37:05 +03:00
Mihai Bazon
5a8e6ce735
fix output for division followed by regexp
...
( v1 report: https://github.com/mishoo/UglifyJS/pull/458 )
2012-09-08 15:38:58 +03:00
Mihai Bazon
8633b0073f
cleaned up usage of AST_BlockStatement
...
The following nodes were instances of AST_BlockStatement: AST_Scope,
AST_SwitchBlock, AST_SwitchBranch. Also, AST_Try, AST_Catch, AST_Finally
were having a body instanceof AST_BlockStatement.
Overloading the meaning of AST_BlockStatement this way turned out to be a
mess; we now have an AST_Block class that is the base class for things
having a block of statements (might or might not be bracketed). The
`this.body` of AST_Scope, AST_Try, AST_Catch, AST_Finally is now an array of
statements (as they inherit from AST_Block).
Avoiding calling superclass's _walk function in walkers (turns out we walked
a node multiple times).
2012-09-05 11:39:43 +03:00
Mihai Bazon
3459c40cf9
if present, the else in an if should always be forced statement
2012-09-04 13:17:13 +03:00
Mihai Bazon
f702264617
jumps, try and definitions are statements too
2012-09-03 12:39:02 +03:00
Mihai Bazon
6d0db4ce14
an AST_If is too a StatementWithBody
2012-09-03 12:11:44 +03:00
Mihai Bazon
d7c1dc6c05
a LabeledStatement should be in fact a StatementWithBody
...
This fixes output for:
if (foo) {
moo: if (bar) {
break moo;
}
} else {
baz();
}
(the labeled statement must be outputted inside brackets)
2012-09-03 12:05:10 +03:00
Mihai Bazon
66c869c8f6
switch branches must be declared required so that the compressor doesn't
...
replace nodes with a single statement.
looks stable for now, though mess begins to sink in. need to review the AST
hierarchy.
2012-09-03 11:05:59 +03:00
Mihai Bazon
f2f370cee3
add source mappings for more node types; started CLI utility
2012-09-02 14:32:00 +03:00
Mihai Bazon
52bcca288f
started support for generating source maps (WIP)
...
plugged in @fitzgen's source-map library
2012-08-29 19:39:19 +03:00
Mihai Bazon
1b6bcca717
fix output for arrays containing undefined values
...
[1,,2,] ==> [1,,2] instead of [1,undefined,2]
2012-08-28 15:38:35 +03:00
Mihai Bazon
7fcb6bcb12
fix code generator for this case:
...
if (foo) {
with (bar)
if (baz)
x();
} else y();
(the compressor removes the brackets since the consequent consists of a
single statement, but the codegen must include the brackets because
otherwise the `else` would refer to the inner `if`)
2012-08-28 15:29:58 +03:00
Mihai Bazon
58a3b5e93f
update (c) years
2012-08-27 11:01:41 +03:00
Mihai Bazon
a8e49f1536
added print_to_string helper method
2012-08-27 10:59:33 +03:00
Mihai Bazon
8d233c38d4
fix current_col and force a newline every 32K (support options.max_line_len)
2012-08-23 10:39:33 +03:00
Mihai Bazon
95b18e54a4
added license
2012-08-22 21:28:59 +03:00
Mihai Bazon
f53e139d3c
fix output for certain edge cases
...
the statements if, for, do, while and with might have an AST_EmptyStatement
as body; if that's the case, we need to make sure that the semicolon gets in
the output.
2012-08-22 13:20:05 +03:00
Mihai Bazon
fb8c9e3a48
declare some properties in the node constructor so that they're copied in clone
2012-08-22 00:01:55 +03:00
Mihai Bazon
ffe58a9961
cleaned up some mess and started the actual compressor
2012-08-21 16:14:43 +03:00
Mihai Bazon
7ae1c600a2
some reorganization
...
(moved pretty much everything that relates to scope in scope.js, added a
module for NodeJS that can be used with require() and exports everything.)
2012-08-21 13:53:16 +03:00
Mihai Bazon
159333f4c5
warn about unreferenced symbols
2012-08-21 12:07:34 +03:00
Mihai Bazon
99456c6156
more fixes:
...
- added walker for AST_ObjectProperty
- handle redefinitions properly (only mangle one symbol, make them all point
to a single definition)
DynarchLIB seems to run fine after mangling + compressed output.
2012-08-21 11:38:49 +03:00
Mihai Bazon
458e251d7e
added mangler and other stuff
2012-08-20 17:32:35 +03:00
Mihai Bazon
6c35135ace
simple visitor API and code to figure out scope and references
2012-08-19 15:57:50 +03:00
Mihai Bazon
4488758d48
some fixes (need testing) in AST_If codegen
2012-08-18 12:29:57 +03:00
Mihai Bazon
cd8ae5f712
minor whitespace issues
2012-08-17 23:08:09 +03:00
Mihai Bazon
ef87c9fd8f
big speed improvement (observable when beautify = false)
...
who would have thought that str.charAt(str.length - 1) is not a constant,
instant operation? seems to get slower and slower as the string grows.
0.6s vs. 3s
2012-08-17 19:04:23 +03:00
Mihai Bazon
901f77047e
don't output both space and semicolon when beautify=false
2012-08-17 18:33:26 +03:00
Mihai Bazon
07cbc8d3af
added some comments about the rules governing parens
2012-08-17 18:06:29 +03:00
Mihai Bazon
4fb6021b0b
fix one more glitch
2012-08-17 16:27:43 +03:00
Mihai Bazon
13f7b119bb
code generator finally seems to work properly
2012-08-17 15:59:42 +03:00
Mihai Bazon
c7c163b82e
lots'o'fixes in the output routines; still a looong way to go.
2012-08-16 21:36:16 +03:00
Mihai Bazon
7f273c3b89
codegen and dropped the useless walker
2012-08-16 18:11:04 +03:00
Mihai Bazon
c0ba9e2986
WIP
2012-08-15 14:50:27 +03:00
Mihai Bazon
861e26a666
WIP
2012-06-03 23:10:31 +03:00