aboutsummaryrefslogtreecommitdiff
path: root/lib/scope.js
AgeCommit message (Collapse)Author
2017-01-26fix mangling collision with keep_fnames (#1431)Alex Lam S.L
* fix mangling collision with keep_fnames fixes #1423 * pass mangle options to figure_out_scope() bring command-line in line with minify()
2017-01-26augment evaluate to extract within objects (#1425)Alex Lam S.L
- gated by `unsafe` - replaces previous optimisation specific to String.length - "123"[0] => 1 - [1, 2, 3][0] => 1 - [1, 2, 3].length => 3 - does not apply to objects with overridden prototype functions
2017-01-19add missing LHS cases which global_defs should avoidalexlamsl
2016-10-23fix uses_arguments handling (broken since 6605d1578351)Jann Horn
Using the symbol declaration tracking of UglifyJS doesn't make sense here anyway, `arguments` always comes from something in the current scope. fixes #1299
2016-10-01Optimize unmodified variablesalexlamsl
2016-07-15Fix mangle with option keep_fnames=true for Safari.kzc
Fixes: #1202
2016-06-30Enable --screw-ie8 by default.kzc
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-03-28Speedup `unused` compress option for already minified codekzc
Fixes: #321 #917 #1022
2016-02-27#877 Ignore mangle sort optionkzc
2016-02-17preserve ThisBinding for side_effectsalexlamsl
2016-01-27Add start/end in the `arguments` definitionMihai Bazon
(keeps my https://github.com/mishoo/jsinfo.el working)
2016-01-20Tighten up @const regex.Samuel Reed
2016-01-20Simplify by skipping extra tree walk.Samuel Reed
2016-01-20Use TreeWalker for more accurate @const results and update testsSamuel Reed
2016-01-19Mark vars with /** @const */ pragma as consts so they can be eliminated.Samuel Reed
Fixes older browser support for consts and allows more flexibility in dead code removal.
2016-01-14Never mangle arguments and keep them in their scopeAnthony Van de Gejuchte
Fixes #892 Helped-by: kzc
2015-11-12Build label def/refs info when figuring out scopeMihai Bazon
Fix #862
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-07Add proper support for "use asm"; blocks. Disable -c optimization within ↵kzc
"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-03-16rename --prop-cache to --name-cacheMihai Bazon
... and support storing there variable names as well, to help with multiple invocations when mangling toplevel.
2015-01-04Add an option to prevent function names from being mangledRichard van Velzen
See #552. This is mostly useful for having the actual function names in traces.
2014-12-01fix base54Cheng Liangyu
2014-09-12Don't warn for an unreferenced exception symbol in a catch block.Arnavion
2014-02-14Mangle name of exception when --screw-ie8. Fix #430.Mihai Bazon
The effect of not mangling it was visible only with --screw-ie8 (otherwise the names would be mangled exactly because they leaked into the parent scope).
2013-12-16minorMihai Bazon
2013-12-16bugfix #242colorhook
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-29Fix typoMihai Bazon
2013-10-29Avoid shadowing name of function expression with function argumentMihai Bazon
Close #179, #326, #327
2013-10-17`arguments` outside of a function is an ordinary variable.Mihai Bazon
Fix #501
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-05-22Set "global" on undeclared SymbolDef-sMihai Bazon
2013-03-25renamed --screw-ie to --screw-ie8, documented it in README.md, indicated it ↵Michał Gołębiowski
doesn't break IE9+
2013-03-22Keep legit code working even when --screw-ie is not passed.Mihai Bazon
Previously: Without `--screw-ie`, UglifyJS would always leak names of function expressions into the containing scope, as if they were function declarations. That was to emulate IE<9 behavior. Code relying on this IE bug would continue to work properly after mangling, although it would only work in IE (since other engines don't share the bug). Sometimes this broke legitimage code (see #153 and #155). With `--screw-ie` the names would not be leaked into the current scope, working properly in legit cases; but still it broke legit code when running in IE<9 (see #24). Currently: Regardless of the `--screw-ie` setting, the names will not be leaked. Code relying on the IE bug will not work properly after mangling. <evil laughter here> Without `--screw-ie`: a hack has been added to the mangler to avoid using the same name for a function expression and some other variable in the same scope. This keeps legit code working, at the (negligible, indeed) cost of one more identifier. With `--screw-ie` you allow the mangler to name function expressions with the same identifier as another variable in scope. After mangling code might break in IE<9. Oh man, the commit message is longer than the patch. Fix #153, #155
2013-03-13Support mangling toplevel namesMihai Bazon
Close #127
2013-03-02Add `--screw-ie` optionMihai Bazon
For now the implication is that UglifyJS will not leak a function expression's name in the surrounding scope (IE < 9 does that). (ref. mishoo/UglifyJS#485)
2013-02-06Fix handling of constantsMihai Bazon
Close #113
2013-01-04Fix handling of labels in nested scopesMihai Bazon
2013-01-02Implement `-m sort=true`Mihai Bazon
close #83
2012-12-05When hoisting variables, try to merge in assignments that follow.Mihai Bazon
2012-11-08fix API breakageMihai Bazon
close #36, #38
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-11-06add option to mangle names even if eval/with is in useMihai Bazon
(for more fair comparison to Closure compiler)
2012-11-02use a Dictionary object instead of plain object for hashesMihai Bazon
to mitigate the `__proto__` issue related to #30
2012-10-25cripple scope to make IE happy :-(Mihai Bazon
close #24
2012-10-17the `sort` option is broken anyway, removed itMihai Bazon
we need to mangle names from outermost to innermost scope; mangling names from inner scopes before we got to the outer scope won't work correctly, therefore sorting doesn't make sense.
2012-10-13fix regression from fb5c01c073d06034815d5f3b782fd11cbdf6d6f5Mihai Bazon
is_digit takes a char code now, not a string
2012-10-11cleanupMihai Bazon
- use prototype-less objects where feasible (minor speed improvement) - get rid of HOP
2012-10-11fix propagation of symbol referencesMihai Bazon