aboutsummaryrefslogtreecommitdiff
path: root/lib/parse.js
AgeCommit message (Collapse)Author
2014-10-20Add option to allow return outside of functions.Mihai Bazon
Close #288
2014-04-18Always quote property names that contain non-ASCII characters.Mihai Bazon
Fix #328
2014-01-21Fix end token for conditionals. Close #404Mihai Bazon
2013-12-22Mark `yield` as reserved word. Close #375.Mihai Bazon
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-10-30minorMihai Bazon
2013-10-03Only allow identifier start characters at the beginning of identifiers.David Glasser
Without this fix, the following source: x = {"\u200c": 42}; would incorrectly be converted into a quoteless key. But while \u200c is allowed to be in identifiers, it cannot be at the beginning, as per ES5. (For example, the SockJS client library doesn't work under uglify starting with d9ad3c7c.)
2013-09-06Support HTML5 comment syntax (enabled by default!)Mihai Bazon
See http://javascript.spec.whatwg.org/#comment-syntax https://github.com/mishoo/UglifyJS/issues/503 https://github.com/marijnh/acorn/issues/62
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-09-02Better fix for #286Mihai Bazon
2013-09-02Fix parsing `a.case /= 1`Mihai Bazon
Close #286
2013-09-02Fix parsing regexp after unary-prefix operatorMihai Bazon
++/x/.y Fix #284
2013-07-15Revert previous patch, it was no good.Mihai Bazon
2013-07-15Add "position" option to parser, to specify initial pos/line/colMihai Bazon
(for parsing embedded scripts)
2013-07-12Fix typo.Mihai Bazon
Close #239
2013-05-15Add `--expr`, an option to parse a single expression (suitable for JSON)Mihai Bazon
2013-05-14Fix a["1_1"]Mihai Bazon
Close #204
2013-05-09Fix is_assignableMihai Bazon
(not likely to be noticed, it's only used in `strict` parse mode)
2013-05-08Fix property namesMihai Bazon
Close #199
2013-05-07Fixed dot properties not optimizing unicode identifiers. Signed-off-by: ↵Justin Lau
Justin Lau <justin@tclau.com>
2013-03-24Don't print the warning on parse error, just throw a JS_Parse_Error.Mihai Bazon
Fix #159
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-02-01Fix end token for Assign nodesMihai Bazon
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-12-22Accept string or number as name of an accessor.Mihai Bazon
[not sure I'm happy about this fix] Reference mishoo/UglifyJS#478
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-13minorMihai Bazon
2012-10-12use AST_Lambda for object setters/gettersMihai Bazon
so that the optimization that drops the name if unused doesn't apply. close #12
2012-10-11fix pos in syntax error exceptionMihai Bazon
2012-10-11stealing more hacks from acorn in the name of speedMihai Bazon
2012-10-11using makeComparator from acorn to generate functions that tests whether aMihai Bazon
string is keyword, reserved etc. speeds up the parser a bit, though not spectacular.. still far from acorn.
2012-10-11cleanupMihai Bazon
- use prototype-less objects where feasible (minor speed improvement) - get rid of HOP
2012-10-09make `--comments` keep @cc_on tooMihai Bazon
2012-10-09added $propdoc to AST nodes and some cleanupsMihai Bazon
hopefully we can make the AST documentation self-generating
2012-10-04removed some unused variablesMihai Bazon
2012-10-03more cleanup (dropped AST_SwitchBlock)Mihai Bazon
2012-10-02line numbers start at 1Mihai Bazon
2012-10-02"use strict";Mihai Bazon
2012-10-02add AST_SymbolConst for names defined with `const`Mihai Bazon
2012-09-25discard all \uFEFF characters (https://github.com/mishoo/UglifyJS/issues/462)Mihai Bazon
2012-09-21log filename in parse errors / compressor warningsMihai Bazon
2012-09-21better support for multiple input files:Mihai Bazon
- use a single AST_Toplevel node for all files - keep original source filename in the tokens
2012-09-18support for directivesMihai Bazon
2012-09-14more optimizations that v1 does and some cleanupsMihai Bazon
- 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-05cleaned up usage of AST_BlockStatementMihai Bazon
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-03an AST_If is too a StatementWithBodyMihai Bazon
2012-09-03a LabeledStatement should be in fact a StatementWithBodyMihai Bazon
This fixes output for: if (foo) { moo: if (bar) { break moo; } } else { baz(); } (the labeled statement must be outputted inside brackets)
2012-09-03Reverting "minor perf. improvements"Mihai Bazon
Revert "minor perf. improvements" This reverts commit 24bfd55a22afd791d4a97694641831cfbd27fb14. broke the parser somehow; too early to optimize, let's get the other stuff running.
2012-09-02minor perf. improvementsMihai Bazon