aboutsummaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)Author
2012-09-07checkpointMihai Bazon
2012-09-07fix bug (forgot arg name)Mihai Bazon
2012-09-07always keep declarations found in unreachable codeMihai Bazon
a few more tests and some cleanups.
2012-09-07fixed tests (need to drop the toplevel block in "expected" if it's a single ↵Mihai Bazon
statement)
2012-09-05don't duplicate argument namesMihai Bazon
2012-09-05fix for variable names like `toString`Mihai Bazon
2012-09-05support for hoisting declarationsMihai Bazon
and finally it seems we beat v1 in terms of compression
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-04checkpointMihai Bazon
2012-09-04more fiddling with boolean expressions, etc.Mihai Bazon
optimize away while(false), and transform while(true) ==> for(;;). UNSAFE: some expressions are optimized away when we're in boolean context and can determine that the value will always be true or false. For example: x() || true ==> always `true` in boolean context x() && false ==> always `false` in boolean context It's not technically correct to drop these expressions since we drop the function call too (that might have side effects); on the other hand, I can't see any legitimate use for such expressions and they might simply indicate a bug (we do warn about it).
2012-09-04if present, the `else` in an `if` should always be forced statementMihai Bazon
2012-09-03boolean and if/exit optimizationsMihai Bazon
2012-09-03minorMihai Bazon
2012-09-03more optimizations for ifs/conditionalsMihai Bazon
(XXX: should add tests before anything else)
2012-09-03resolve constant expressionsMihai Bazon
2012-09-03jumps, try and definitions are statements tooMihai Bazon
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-03switch branches must be declared `required` so that the compressor doesn'tMihai Bazon
replace nodes with a single statement. looks stable for now, though mess begins to sink in. need to review the AST hierarchy.
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-02add source mappings for more node types; started CLI utilityMihai Bazon
2012-09-02minor perf. improvementsMihai Bazon
2012-08-29started support for generating source maps (WIP)Mihai Bazon
plugged in @fitzgen's source-map library
2012-08-29don't mangle names of setters/gettersMihai Bazon
2012-08-28docstring for AST_StatementWithBodyMihai Bazon
2012-08-28fix output for arrays containing undefined valuesMihai Bazon
[1,,2,] ==> [1,,2] instead of [1,undefined,2]
2012-08-28fix code generator for this case:Mihai Bazon
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-27update (c) yearsMihai Bazon
2012-08-27fix compressing `a,b; return c;` into `return a,b,c;`Mihai Bazon
2012-08-27added print_to_string helper methodMihai Bazon
2012-08-23fix current_col and force a newline every 32K (support options.max_line_len)Mihai Bazon
2012-08-22added licenseMihai Bazon
2012-08-22wrote more of the compressor and added some testsMihai Bazon
2012-08-22fix output for certain edge casesMihai Bazon
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-22declare some properties in the node constructor so that they're copied in cloneMihai Bazon
2012-08-21hint that brackets may be required in AST_BlockStatementMihai Bazon
2012-08-21cleaned up some mess and started the actual compressorMihai Bazon
2012-08-21some reorganizationMihai Bazon
(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-21handle labels properlyMihai Bazon
(they can't be handled the same way as variables in a scope)
2012-08-21warn about unreferenced symbolsMihai Bazon
2012-08-21more fixes:Mihai Bazon
- 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-20added mangler and other stuffMihai Bazon
2012-08-20doc (WIP)Mihai Bazon
2012-08-19simple visitor API and code to figure out scope and referencesMihai Bazon
2012-08-18some fixes (need testing) in AST_If codegenMihai Bazon
2012-08-17minor whitespace issuesMihai Bazon
2012-08-17big speed improvement (observable when beautify = false)Mihai Bazon
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-17don't output both space and semicolon when beautify=falseMihai Bazon
2012-08-17added some comments about the rules governing parensMihai Bazon
2012-08-17fix one more glitchMihai Bazon