aboutsummaryrefslogtreecommitdiff
path: root/lib/ast.js
AgeCommit message (Collapse)Author
2017-05-14fix bugs with getter/setter (#1926)Alex Lam S.L
- `reduce_vars` - `side_effects` - property access for object - `AST_SymbolAccessor` as key names enhance `test/ufuzz.js` - add object getter & setter - property assignment to setter - avoid infinite recursion in setter - fix & adjust assignment operators - 50% `=` - 25% `+=` - 2.5% each for the rest - avoid "Invalid array length" - fix `console.log()` - bypass getter - curb recursive reference - deprecate `-E`, always report runtime errors
2017-05-12remove support for `const` (#1910)Alex Lam S.L
As this is not part of ES5.
2017-05-08support dumping AST (#1879)Alex Lam S.L
Re-order `AST_Binary` properties to make dump more readable. closes #769
2017-04-22fix label-related bugs (#1835)Alex Lam S.L
- deep cloning of `AST_LabeledStatement` - `L:do{...}while(false)` - empty statement with label within block extend `test/ufuzz.js` - generate labels for blocks & loops - generate for-in statements - skip suspicious option search if `minify()` errs fixes #1833
2017-04-17enhance `reduce_vars` (#1814)Alex Lam S.L
- allow immediate assignment after declaration of variable - relax modification rule for immutable value - fix order of visit for TreeWalker - remove extraneous code
2017-04-15unify CLI & API under `minify()` (#1811)Alex Lam S.L
- rename `screw_ie8` to `ie8` - rename `mangle.except` to `mangle.reserved` - rename `mangle.properties.ignore_quoted` to `mangle.properties.keep_quoted` - compact `sourceMap` options - more stringent verification on input `options` - toplevel shorthands - `ie8` - `keep_fnames` - `toplevel` - `warnings` - support arrays and unquoted string values on CLI - drop `fromString` from `minify()` - `minify()` no longer handles any `fs` operations - unify order of operations for `mangle_properties()` on CLI & API - `bin/uglifyjs` used to `mangle_properties()` before even `Compressor` - `minify()` used to `mangle_properties()` after `Compressor` but before `mangle_names()` - both will now do `Compressor`, `mangle_names()` then `mangle_properties()` - `options.parse` / `--parse` for parser options beyond `bare_returns` - add `mangle.properties.builtins` to disable built-in reserved list - disable with `--mangle-props builtins` on CLI - `warnings` now off by default - add `--warn` and `--verbose` on CLI - drop `--enclose` - drop `--export-all` - drop `--reserved-file` - use `--mangle reserved` instead - drop `--reserve-domprops` - enabled by default, disable with `--mangle-props domprops` - drop `--prefix` - use `--source-map base` instead - drop `--lint` - remove `bin/extract-props.js` - limit exposure of internal APIs - update documentations closes #96 closes #102 closes #136 closes #166 closes #243 closes #254 closes #261 closes #311 closes #700 closes #748 closes #912 closes #1072 closes #1366 fixes #101 fixes #123 fixes #124 fixes #263 fixes #379 fixes #419 fixes #423 fixes #461 fixes #465 fixes #576 fixes #737 fixes #772 fixes #958 fixes #1036 fixes #1142 fixes #1175 fixes #1220 fixes #1223 fixes #1280 fixes #1359 fixes #1368
2017-04-12convert `AST_Seq` from binary tree to array (#1460)Alex Lam S.L
- rename `AST_Seq` to `AST_Sequence` - raise default sequences_limit from 200 to 800
2017-04-04optimise `do{...}while(false)` (#1785)Alex Lam S.L
- better heuristics to avoid issues like #1532 - fix `TreeWalker.loopcontrol_target()` - `continue` cannot refer to `switch` blocks
2017-03-14minor clean-ups (#1600)Alex Lam S.L
- remove obsolete optimisation in `AST_Binary` after #1477 - improve `TreeWalker.has_directive()` readability and resilience against multiple visits
2017-03-07fix deep cloning of labels (#1565)Alex Lam S.L
`AST_Label.references` get `.initialize()` to `[]` every time after `.clone()` So walk down the tree to pick up the cloned `AST_LoopControl` pieces and put it back together.
2017-03-07transform function calls to IIFEs (#1560)Alex Lam S.L
- expose function body to call sites for potential optimisations - suppress substitution of variable used within `AST_Defun`
2017-03-05handle variable declaration within catch blocks (#1546)Alex Lam S.L
accounts for IE8- scoping
2017-02-26faster tree transversal (#1462)Alex Lam S.L
- convert `[].forEach()` to for-loops
2017-02-24Avoid using exports when undefined (#1471)Ondřej Španěl
Makes direct usage within web browser easier, even if officially unsupported.
2016-04-12Actually limit sequence length.Mihai Bazon
Fix #1038
2016-04-07Avoid using inherited hasOwnPropertyMihai Bazon
Fix #1031
2015-11-12Fix output for "use asm" code from SpiderMonkey ASTMihai Bazon
(will only work properly if the SM tree contains "raw" properties for Literal number nodes)
2015-11-11Rework has_directiveMihai Bazon
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-10-07Fix handling of "use asm" when no command line flags are passed to uglifyjs. ↵kzc
SCOPE_IS_NEEDED is unconditionally true now. Refactored floating point literal parsing to be more in keeping with the AST class design.
2015-09-24No longer use `vm` to load code.Mihai Bazon
Improves performance 2x on node > 0.10. Ref #636
2015-09-24Fix wrap_commonjs to include code firstMihai Bazon
(code could have directives, i.e. "use strict")
2015-01-27Add option to preserve/enforce string quote styleMihai Bazon
`-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-06Track ending lines/columns; fix end locations in Mozilla AST.Ingvar Stepanyan
2015-01-06AST_Do nodes: walk body before conditionMihai Bazon
2014-03-22Allow colons in the pairs passed to AST_Toplevel.wrap_encloseArnavion
2013-12-05AST_Catch shouldn't really inherit from AST_Scope. Fix #363Mihai Bazon
I hereby acknowledge that figure_out_scope has become a mess.
2013-11-28Properly scope `catch` identifier when --screw-ie8Mihai Bazon
Fix #344
2013-10-30Fix parsing setters/getters (allow keywords for name).Mihai Bazon
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-09-06minorMihai Bazon
2013-09-02Fix names.Mihai Bazon
2013-09-02Disallow `continue` referring to a non-IterationStatement. Fix #287Mihai Bazon
Simplifies handling of labels (their definition/references can be easily figured out at parse time, no need to do it in `figure_out_scope`).
2013-06-07Don't swap binary ops when "use asm" is in effect.Mihai Bazon
Refs #167
2013-03-24Add support for enclose option. Closes #139.Jake Harding
2013-01-17Fix output for arrays containing undefined values.David Glasser
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.
2012-11-24fix #55Mihai Bazon
2012-11-08AST_LabelRef no longer inherits from AST_SymbolRefMihai Bazon
2012-11-07add AST_Accessor and AST_SymbolAccessor node typesMihai Bazon
AST_Accessor will represent the function for a setter or getter. Since they are not mangleable, and they should not introduce a name in scope, we have a new node for their name (AST_SymbolAccessor) which doesn't inherit from AST_SymbolDeclaration. fix #37
2012-10-22more sequence optimizations (lift some sequences above binary/unary ↵Mihai Bazon
expressions so that we can avoid parens)
2012-10-18more optimizations for some break/continue casesMihai Bazon
2012-10-12remove the $self hackMihai Bazon
operations are destructive anyway, so there's no point to clone the nodes in the transformer. speed++
2012-10-12fix in_boolean_context() (two tests were broken)Mihai Bazon
2012-10-11cleanupMihai Bazon
- use prototype-less objects where feasible (minor speed improvement) - get rid of HOP
2012-10-10fix node nameMihai Bazon
2012-10-10seems cleaner if AST_Label doesn't inherit from AST_SymbolDeclarationMihai Bazon
2012-10-10small improvements in wrap_commonjs:Mihai Bazon
- use MAP.splice instead of a BlockStatement to inject code (avoids some warnings in the linter) - use the original symbol in exports, so that we get the proper source mapping
2012-10-09add AST_Infinity nodeMihai Bazon
2012-10-09added $propdoc to AST nodes and some cleanupsMihai Bazon
hopefully we can make the AST documentation self-generating
2012-10-09minor AST cleanup (AST_BlockStatement may inherit from AST_Block)Mihai Bazon
2012-10-09add `--ast-help`Mihai Bazon
displays a rather cruel description of the AST classes, derived directly from the node definitions.
2012-10-08added --self to easily get a browser-runnable version of UglifyJSMihai Bazon