aboutsummaryrefslogtreecommitdiff
path: root/lib/scope.js
AgeCommit message (Expand)Author
2017-03-31sort options in alphabetical order (#1743)...They started off as functional groups I guess, but given the sheer number of options this is becoming too difficult to read.Alex Lam S.L
2017-03-31fix catch symbol mangling (#1734)...Only need to look up the immediate non-block/catch scope for the same-name special case. fixes #1733Alex Lam S.L
2017-03-28handle var within catch of the same name (#1711)...The following code prints `1`: var a = 1; !function(){ a = 4; try{ throw 2; } catch (a) { var a = 3; } }(); console.log(a); fixes #1708Alex Lam S.L
2017-03-28fix mangle for variable declared within catch block (#1706)...fixes #1704Alex Lam S.L
2017-03-27handle overlapped variable definitions (#1691)...Process variable definitions with or without assigned values against: - `arguments` - named function arguments - multiple definitions within same scope Essentially demote variable declarations with no value assignments. Also fixed invalid use of `AST_VarDef` over `arguments` - should use a member of `AST_SymbolDeclaration` instead.Alex Lam S.L
2017-03-10fix catch variable reference in IE8 (#1587)...`AST_Scope.def_variable()` will overwrite `AST_Symbol.thedef`, so save a copy before calling. fixes #1586Alex Lam S.L
2017-03-05handle variable declaration within catch blocks (#1546)...accounts for IE8- scopingAlex Lam S.L
2017-03-05stay safe with constants in IE8- (#1547)...- `undefined` etc. can be redefined at top-level for IE8-, so disable related optimisations - fixed `--support-ie8` catch mangle bugAlex Lam S.L
2017-02-26consolidate `evaluate` & `reduce_vars` (#1505)...- improve marking efficiency - apply smarter `const` replacement to `var` fixes #1501Alex Lam S.L
2017-02-24enable `collapse_vars` & `reduce_vars` by default...- fix corner cases in `const` optimisation - deprecate `/*@const*/` fixes #1497 closes #1498 alexlamsl
2017-02-21enhance `global_defs`...- support arrays, objects & AST_Node - support `"a.b":1` on both cli & API - emit warning if variable is modified - override top-level variables fixes #1416 closes #1198 closes #1469 alexlamsl
2017-02-21improve reduce_vars and fix a bug...- update modified flag between compress() passes - support IIFE arguments - fix corner case with multiple definitions closes #1473 alexlamsl
2017-02-18fix corner case in keep_fnames...happens when inner function: - just below top level - not referenced - `unused` is disabled closes #1445 alexlamsl
2017-02-18remove unused AST_Scope.nesting & AST_SymbolRef.frame...they are computed but never used closes #1444 alexlamsl
2017-01-26fix mangling collision with keep_fnames (#1431)...* fix mangling collision with keep_fnames fixes #1423 * pass mangle options to figure_out_scope() bring command-line in line with minify() Alex Lam S.L
2017-01-26augment evaluate to extract within objects (#1425)...- 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 functionsAlex Lam S.L
2017-01-19add missing LHS cases which global_defs should avoidalexlamsl
2016-10-23fix uses_arguments handling (broken since 6605d1578351)...Using the symbol declaration tracking of UglifyJS doesn't make sense here anyway, `arguments` always comes from something in the current scope. fixes #1299 Jann Horn
2016-10-01Optimize unmodified variablesalexlamsl
2016-07-15Fix mangle with option keep_fnames=true for Safari....Fixes: #1202 kzc
2016-06-30Enable --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 kzc
2016-03-28Speedup `unused` compress option for already minified code...Fixes: #321 #917 #1022 kzc
2016-02-27#877 Ignore mangle sort optionkzc
2016-02-17preserve ThisBinding for side_effectsalexlamsl
2016-01-27Add start/end in the `arguments` definition...(keeps my https://github.com/mishoo/jsinfo.el working) Mihai Bazon
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....Fixes older browser support for consts and allows more flexibility in dead code removal. Samuel Reed
2016-01-14Never mangle arguments and keep them in their scope...Fixes #892 Helped-by: kzc Anthony Van de Gejuchte
2015-11-12Build label def/refs info when figuring out scope...Fix #862 Mihai Bazon
2015-11-11Rework 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 Mihai Bazon
2015-10-07Add proper support for "use asm"; blocks. Disable -c optimization within "use...kzc
2015-03-16rename --prop-cache to --name-cache...... and support storing there variable names as well, to help with multiple invocations when mangling toplevel. Mihai Bazon
2015-01-04Add an option to prevent function names from being mangled...See #552. This is mostly useful for having the actual function names in traces. Richard van Velzen
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....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). Mihai Bazon
2013-12-16minorMihai Bazon
2013-12-16bugfix #242colorhook
2013-12-05AST_Catch shouldn't really inherit from AST_Scope. Fix #363...I hereby acknowledge that figure_out_scope has become a mess. Mihai Bazon
2013-11-28Properly scope `catch` identifier when --screw-ie8...Fix #344 Mihai Bazon
2013-10-29Fix typoMihai Bazon
2013-10-29Avoid shadowing name of function expression with function argument...Close #179, #326, #327 Mihai Bazon
2013-10-17`arguments` outside of a function is an ordinary variable....Fix #501 Mihai Bazon
2013-09-02Disallow `continue` referring to a non-IterationStatement. Fix #287...Simplifies handling of labels (their definition/references can be easily figured out at parse time, no need to do it in `figure_out_scope`). Mihai Bazon
2013-05-22Set "global" on undeclared SymbolDef-sMihai Bazon
2013-03-25renamed --screw-ie to --screw-ie8, documented it in README.md, indicated it d...Michał Gołębiowski
2013-03-22Keep legit code working even when --screw-ie is not passed....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 Mihai Bazon
2013-03-13Support mangling toplevel names...Close #127 Mihai Bazon