Commit Graph

251 Commits

Author SHA1 Message Date
alexlamsl
09f9ae2de9 improve --beautify bracketize
reduce whitespaces from if-else statements

fixes #1482
closes #1483
2017-02-21 13:29:58 +08:00
alexlamsl
f0ff6189be clean up negate_iife
- remove extra tree scanning phase for `negate_iife`
- `negate_iife` now only deals with the narrowest form, i.e. IIFE sitting directly under `AST_SimpleStatement`
- `booleans`, `conditionals` etc. will now take care the rest via more accurate accounting
- `a(); void b();` => `a(); b();`

fixes #1288
closes #1451
2017-02-21 13:29:58 +08:00
Anthony Van de Gejuchte
79b98a9fe8 Do not overwrite options.comments + cleanup 2016-11-29 20:24:08 +01:00
Anthony Van de Gejuchte
8d74f34373 Don't filter shebangs when using the 'some' comment filter
Also clarify documentation a bit more about using regexp as filter
2016-10-23 21:31:03 +02:00
Richard van Velzen
6389e52305 Remove console.log and add extra test case 2016-10-06 14:11:32 +02:00
Richard van Velzen
e05510f3bc Add an option to wrap IIFEs in parenthesis
For #1307.
2016-10-06 14:11:32 +02:00
Anthony Van de Gejuchte
0111497fc9 Make all comment options in cli available in js api
Also removing more code within "loop" while at it.
2016-09-06 17:54:45 +02:00
Richard van Velzen
8430123e9d Fix negate_iife transform to return a correct tree for nested IIFEs
Fix for #1256, partially reverts d854523783
2016-08-17 11:55:59 +02:00
kzc
d854523783 Fix negate_iife regression #1254 2016-08-17 01:29:34 -04:00
kzc
fb049d3a81 Fix unneeded parens around unary args in new expression. 2016-08-14 21:38:38 +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
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
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
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
5c4cfaa0a7 Re-add parens after new expression in beautify mode 2016-06-12 20:03:48 +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
8287ef6781 Fix uglify attempting to rewrite invalid new expressions 2016-06-08 19:45:21 +02:00
kzc
a0e03c9df4 Retain comments before AST_Constants during mangle. 2016-05-04 20:11:45 +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
philippsimon
ee6c9fabb7 Fix: Uglified Number.prototype functions on big numbers 2016-03-14 12:41:06 +01:00
Anthony Van de Gejuchte
70e5b6f15b Add some tests for comment-filters through api
Also never bother comment options to filter comment5/shebang comments
as they have their custom filter.
2016-01-19 19:14:19 +01: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
Richard van Velzen
335e349314 Allow specification beautify options in tests
Caught an error in #847 as well - `output` wasn't passed anywhere which led to an exception. `options` was available though.
2015-10-28 20:50:01 +01:00
Michael Ficarra
a887cde9f2 fixes #845: \v escaping should be restricted to "screw_ie8" mode 2015-10-27 09:05:21 -07:00
Fábio Santos
b5623b19d4 Fix #836 2015-10-20 19:48:56 +01:00
startswithaj
6b2861e086 Make_string was missing \v and wasnt reversing vertical tabs even though read_escaped_char coverts them 2015-10-15 17:42:16 +10:00
kzc
dff54a6552 Fix other operator output related to <!-- or --> 2015-10-13 01:17:10 -04:00
Mihai Bazon
17eef5a3c2 Only encode <!-- and --> in strings when inline_script 2015-10-12 10:21:22 +03:00
kzc
9f1f21b810 Output -- > instead of --> in expressions. Escape <!-- and --> within string literals. 2015-10-12 10:19:17 +03: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
66761d7ecf Fix semicolon printing when restricting max line length
Fixes #755
2015-07-30 16:13:32 +02:00
Mihai Bazon
4aed0830e5 Fix blank lines in the output.
The issue was more obvious when max_line_len has a small value, rather than
the default 32K characters.  A blank line showed up after most statements.
2015-05-04 17:55:42 +03: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
099992ecae Keep single line comments after nlb, after nlb
Fixes #583
2015-01-26 12:11:52 +01:00
Richard van Velzen
24bc09b79b Fix #556
`\uFEFF` (ZERO WIDTH NO-BREAK SPACE) is removed when parsing, but was
un-escaped for the output when `ascii_only` was false.

When using
UglifyJS multiple times (creating packages from minified sources, for
example), this would lead to problems because the byte was removed when
parsing for the second time.
2015-01-04 15:01:55 +01:00
Richard van Velzen
66e6f0c3cb Merge pull request #592 from micschro/patch-1
Fix max_line_len not working for JSON files
2015-01-04 13:53:31 +01:00
Richard van Velzen
c75f5a1fd8 Fix #597
NaN and Infinity were replaced in the output generation, instead of
during compression. This could lead to results where `1/0` was inserted
without parens leading to invalid output.

The nodes are replaced in the compression step now, and the output
generation returns their regular names. This should not be a problem,
since they're already only constructed from the original name.
2014-12-31 12:23:00 +01:00
micschro
39d8880f2c Fix max_line_len not working for JSON files
As `maybe_newline()` is only called when `might_need_semicolon` is `true`, the `max_line_len` option has no effect for files without (or with very few) semicolons (like JSON files). A simple for this problem is to use `maybe_newline()` instead of `noop` as the `newline()` function in non-beautify mode.
2014-12-17 16:31:03 +01:00
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