{"version":3,"sources":["jsdelivr-header.js","/npm/butternut@0.4.6/src/utils/parse.js","/npm/butternut@0.4.6/src/utils/sentinels.js","/npm/butternut@0.4.6/src/utils/locate.js","/npm/butternut@0.4.6/src/utils/getSnippet.js","/npm/butternut@0.4.6/src/utils/CompileError.js","/npm/butternut@0.4.6/src/program/Node.js","/npm/butternut@0.4.6/src/program/types/shared/Array.js","/npm/butternut@0.4.6/src/utils/reserved.js","/npm/butternut@0.4.6/src/program/Scope.js","/npm/butternut@0.4.6/src/program/extractNames.js","/npm/butternut@0.4.6/src/program/types/AssignmentExpression.js","/npm/butternut@0.4.6/src/program/types/ArrowFunctionExpression.js","/npm/butternut@0.4.6/src/utils/isNegativeZero.js","/npm/butternut@0.4.6/src/utils/stringify.js","/npm/butternut@0.4.6/src/utils/getValuePrecedence.js","/npm/butternut@0.4.6/src/program/types/BinaryExpression.js","/npm/butternut@0.4.6/src/program/types/CallExpression.js","/npm/butternut@0.4.6/src/program/types/CatchClause.js","/npm/butternut@0.4.6/src/program/types/ClassBody.js","/npm/butternut@0.4.6/src/program/types/shared/Class.js","/npm/butternut@0.4.6/src/program/types/ClassDeclaration.js","/npm/butternut@0.4.6/src/program/types/ClassExpression.js","/npm/butternut@0.4.6/src/program/types/ConditionalExpression.js","/npm/butternut@0.4.6/src/program/types/DoWhileStatement.js","/npm/butternut@0.4.6/src/program/types/EmptyStatement.js","/npm/butternut@0.4.6/src/program/types/ExpressionStatement.js","/npm/butternut@0.4.6/src/program/types/shared/LoopStatement.js","/npm/butternut@0.4.6/src/program/types/ForStatement.js","/npm/butternut@0.4.6/src/program/types/shared/ForInOfStatement.js","/npm/butternut@0.4.6/src/program/types/shared/FunctionNode.js","/npm/butternut@0.4.6/src/program/types/FunctionDeclaration.js","/npm/butternut@0.4.6/src/program/types/FunctionExpression.js","/npm/butternut@0.4.6/src/program/types/Identifier.js","/npm/butternut@0.4.6/src/program/types/IfStatement.js","/npm/butternut@0.4.6/src/program/types/ImportDeclaration.js","/npm/butternut@0.4.6/src/program/types/ImportDefaultSpecifier.js","/npm/butternut@0.4.6/src/program/types/ImportSpecifier.js","/npm/butternut@0.4.6/src/program/types/LabeledStatement.js","/npm/butternut@0.4.6/src/program/types/Literal.js","/npm/butternut@0.4.6/src/program/types/LogicalExpression.js","/npm/butternut@0.4.6/src/program/types/MemberExpression.js","/npm/butternut@0.4.6/src/program/types/shared/minifyPropertyKey.js","/npm/butternut@0.4.6/src/program/types/MethodDefinition.js","/npm/butternut@0.4.6/src/program/types/NewExpression.js","/npm/butternut@0.4.6/src/program/types/ObjectExpression.js","/npm/butternut@0.4.6/src/program/types/ObjectPattern.js","/npm/butternut@0.4.6/src/program/types/ParenthesizedExpression.js","/npm/butternut@0.4.6/src/program/types/ReturnStatement.js","/npm/butternut@0.4.6/src/program/types/SpreadElement.js","/npm/butternut@0.4.6/src/program/types/SwitchCase.js","/npm/butternut@0.4.6/src/program/types/SwitchStatement.js","/npm/butternut@0.4.6/src/program/types/TaggedTemplateExpression.js","/npm/butternut@0.4.6/src/program/types/TemplateLiteral.js","/npm/butternut@0.4.6/src/program/types/TryStatement.js","/npm/butternut@0.4.6/src/program/types/UnaryExpression.js","/npm/butternut@0.4.6/src/program/types/UpdateExpression.js","/npm/butternut@0.4.6/src/program/types/VariableDeclaration.js","/npm/butternut@0.4.6/src/program/types/VariableDeclarator.js","/npm/butternut@0.4.6/src/program/types/WhileStatement.js","/npm/butternut@0.4.6/src/program/types/YieldExpression.js","/npm/butternut@0.4.6/src/program/types/index.js","/npm/butternut@0.4.6/src/analysis/breaksExecution.js","/npm/butternut@0.4.6/src/program/BlockStatement.js","/npm/butternut@0.4.6/src/program/keys.js","/npm/butternut@0.4.6/src/program/wrap.js","/npm/butternut@0.4.6/src/program/check.js","/npm/butternut@0.4.6/src/program/Program.js","/npm/butternut@0.4.6/src/utils/Stats.js","/npm/butternut@0.4.6/src/index.js"],"names":[],"mappings":"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","file":"/npm/butternut@0.4.6/dist/butternut.cjs.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/butternut@0.4.6/dist/butternut.cjs.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import * as acorn from 'acorn';\n\nexport default function parse ( source ) {\n\treturn acorn.parse( source, {\n\t\tecmaVersion: 8,\n\t\tpreserveParens: true,\n\t\tsourceType: 'module',\n\t\tallowReserved: true,\n\t\tallowReturnOutsideFunction: true\n\t});\n}","export const UNKNOWN = {};","export default function locate ( source, index ) {\n\tvar lines = source.split( '\\n' );\n\tvar len = lines.length;\n\n\tvar lineStart = 0;\n\tvar i;\n\n\tfor ( i = 0; i < len; i += 1 ) {\n\t\tvar line = lines[i];\n\t\tvar lineEnd =  lineStart + line.length + 1; // +1 for newline\n\n\t\tif ( lineEnd > index ) {\n\t\t\treturn { line: i + 1, column: index - lineStart, char: i };\n\t\t}\n\n\t\tlineStart = lineEnd;\n\t}\n\n\tthrow new Error( 'Could not determine location of character' );\n}\n","function pad ( num, len ) {\n\tlet result = String( num );\n\treturn result + repeat( ' ', len - result.length );\n}\n\nfunction repeat ( str, times ) {\n\tlet result = '';\n\twhile ( times-- ) result += str;\n\treturn result;\n}\n\nexport default function getSnippet ( source, loc, length = 1 ) {\n\tconst first = Math.max( loc.line - 5, 0 );\n\tconst last = loc.line;\n\n\tconst numDigits = String( last ).length;\n\n\tconst lines = source.split( '\\n' ).slice( first, last );\n\n\tconst lastLine = lines[ lines.length - 1 ];\n\tconst offset = lastLine.slice( 0, loc.column ).replace( /\\t/g, '  ' ).length;\n\n\tlet snippet = lines\n\t\t.map( ( line, i ) => `${pad( i + first + 1, numDigits )} : ${line.replace( /\\t/g, '  ')}` )\n\t\t.join( '\\n' );\n\n\tsnippet += '\\n' + repeat( ' ', numDigits + 3 + offset ) + repeat( '^', length );\n\n\treturn snippet;\n}\n","import locate from './locate.js';\nimport getSnippet from './getSnippet.js';\n\nexport default class CompileError extends Error {\n\tconstructor ( node, message ) {\n\t\tsuper();\n\n\t\tconst source = node.program.magicString.original;\n\t\tconst loc = locate( source, node.start );\n\n\t\tthis.name = 'CompileError';\n\t\tthis.message = message + ` (${loc.line}:${loc.column})`;\n\n\t\tthis.stack = new Error().stack.replace( new RegExp( `.+new ${this.name}.+\\\\n`, 'm' ), '' );\n\n\t\tthis.loc = loc;\n\t\tthis.pos = loc.char;\n\t\tthis.snippet = getSnippet( source, loc, node.end - node.start );\n\t}\n}\n","import { UNKNOWN } from '../utils/sentinels.js';\nimport CompileError from '../utils/CompileError.js';\n\nexport default class Node {\n\tancestor ( level ) {\n\t\tlet node = this;\n\t\twhile ( level-- ) {\n\t\t\tnode = node.parent;\n\t\t\tif ( !node ) return null;\n\t\t}\n\n\t\treturn node;\n\t}\n\n\tappend ( code, content ) {\n\t\tcode.appendLeft( this.getRightHandSide().end, content );\n\t}\n\n\tattachScope ( program, scope ) {\n\t\tfor ( var key of this.keys ) {\n\t\t\tconst value = this[ key ];\n\n\t\t\tif ( value ) {\n\t\t\t\tif ( 'length' in value ) {\n\t\t\t\t\tlet i = value.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( value[i] ) value[i].attachScope( program, scope );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvalue.attachScope( program, scope );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tcanSequentialise () {\n\t\treturn false;\n\t}\n\n\tcontains ( node ) {\n\t\twhile ( node ) {\n\t\t\tif ( node === this ) return true;\n\t\t\tnode = node.parent;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\terror ( message ) {\n\t\tthrow new CompileError( this, message );\n\t}\n\n\tgetLeftHandSide () {\n\t\treturn this;\n\t}\n\n\tgetPrecedence () {\n\t\treturn 0;\n\t}\n\n\tgetRightHandSide () {\n\t\treturn this;\n\t}\n\n\tgetValue () {\n\t\treturn UNKNOWN;\n\t}\n\n\tinitialise ( program, scope ) {\n\t\tthis.skip = false;\n\n\t\tfor ( var key of this.keys ) {\n\t\t\tconst value = this[ key ];\n\n\t\t\tif ( value ) {\n\t\t\t\tif ( 'length' in value ) {\n\t\t\t\t\tlet i = value.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( value[i] ) value[i].initialise( program, scope );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvalue.initialise( program, scope );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tisEmpty () {\n\t\treturn this.skip;\n\t}\n\n\tfindVarDeclarations ( varsToHoist ) {\n\t\tfor ( var key of this.keys ) {\n\t\t\tconst value = this[ key ];\n\n\t\t\tif ( value ) {\n\t\t\t\tif ( 'length' in value ) {\n\t\t\t\t\tlet i = value.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( value[i] ) value[i].findVarDeclarations( varsToHoist );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvalue.findVarDeclarations( varsToHoist );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tmove ( code, position ) {\n\t\tcode.move( this.getLeftHandSide().start, this.getRightHandSide().end, position );\n\t}\n\n\tminify ( code, chars ) {\n\t\tfor ( var key of this.keys ) {\n\t\t\tconst value = this[ key ];\n\n\t\t\tif ( value ) {\n\t\t\t\tif ( 'length' in value ) {\n\t\t\t\t\tlet i = value.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( value[i] ) value[i].minify( code, chars );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvalue.minify( code, chars );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tparenthesize ( code ) {\n\t\tthis.prepend( code, '(' );\n\t\tthis.append( code, ')' );\n\t}\n\n\tprepend ( code, content ) {\n\t\tcode.prependRight( this.getLeftHandSide().start, content );\n\t}\n\n\tpreventsCollapsedReturns ( returnStatements ) {\n\t\tif ( this.type === 'ExpressionStatement' ) return false;\n\t\tif ( this.type === 'ReturnStatement' ) return returnStatements.push( this ), false;\n\t\tif ( this.type === 'IfStatement' ) return !this.preventsCollapsedReturns( returnStatements );\n\t\treturn true;\n\t}\n\n\tsource () {\n\t\treturn this.program.magicString.original.slice( this.start, this.end );\n\t}\n\n\ttoString () {\n\t\treturn this.program.magicString.slice( this.start, this.end );\n\t}\n}\n","import Node from '../../Node.js';\nimport { UNKNOWN } from '../../../utils/sentinels.js';\n\nexport default class ArrayExpression extends Node {\n\tgetValue () {\n\t\tlet values = new Array( this.elements.length );\n\n\t\tfor ( let i = 0; i < this.elements.length; i += 1 ) {\n\t\t\tconst element = this.elements[i];\n\n\t\t\tif ( element ) {\n\t\t\t\tconst value = element.getValue();\n\t\t\t\tif ( value === UNKNOWN ) return UNKNOWN;\n\n\t\t\t\tvalues[i] = value;\n\t\t\t}\n\t\t}\n\n\t\treturn values;\n\t}\n\n\tminify ( code, chars ) {\n\t\tlet c = this.start;\n\n\t\tif ( this.elements.length ) {\n\t\t\tlet insert = '[';\n\t\t\tthis.elements.forEach( ( element, i ) => {\n\t\t\t\tif ( !element ) {\n\t\t\t\t\tinsert += i === this.elements.length - 1 ? ',]' : ',';\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( element.start > c + 1 ) code.overwrite( c, element.start, insert );\n\t\t\t\tc = element.end;\n\n\t\t\t\tinsert = i === this.elements.length - 1 ? ']' : ',';\n\t\t\t});\n\n\t\t\tif ( this.end > insert.length ) code.overwrite( c, this.end, insert );\n\t\t}\n\n\t\telse {\n\t\t\tif ( this.end > c + 2 ) code.overwrite( c, this.end, '[]' );\n\t\t}\n\n\t\tsuper.minify( code, chars );\n\t}\n}\n","export const reserved = 'do if in for let new try var case else enum eval null this true void with await break catch class const false super throw while yield delete export import public return static switch typeof default extends finally package private continue debugger function arguments interface protected implements instanceof'.split( ' ' );\n\nexport const reservedLookup = Object.create( null );\nreserved.forEach( word => {\n\treservedLookup[ word ] = true;\n});","import { reserved } from '../utils/reserved.js';\nimport CompileError from '../utils/CompileError.js';\n\nconst letConst = /^(?:let|const)$/;\n\nexport default function Scope ( options ) {\n\toptions = options || {};\n\n\tthis.parent = options.parent;\n\tthis.canMangle = !!this.parent;\n\tthis.isBlockScope = !!options.block;\n\tthis.useStrict = this.parent && this.parent.useStrict;\n\n\t// vars declared in blocks are stored here, so that we\n\t// can hoist them if those blocks are removed but the\n\t// declarations are used. TODO an alternative approach\n\t// would be to replace instances of the hoisted var\n\t// with `void 0`\n\tthis.varDeclarations = new Set();\n\tthis.hoistedVars = new Set();\n\tthis.varDeclarationNodes = [];\n\n\tlet scope = this;\n\twhile ( scope.isBlockScope ) scope = scope.parent;\n\tthis.functionScope = scope;\n\n\tthis.identifiers = [];\n\tthis.declarations = Object.create( null );\n\tthis.references = Object.create( null );\n\tthis.blockScopedDeclarations = this.isBlockScope ? null : Object.create( null );\n\tthis.aliases = Object.create( null );\n\n\tthis.idCounter = [ 0 ];\n}\n\nScope.prototype = {\n\taddDeclaration ( identifier, kind ) {\n\t\tif ( kind === 'var' && this.isBlockScope ) {\n\t\t\tthis.varDeclarations.add( identifier.name );\n\t\t\tthis.parent.addDeclaration( identifier, kind );\n\t\t\treturn;\n\t\t}\n\n\t\tconst { name } = identifier;\n\n\t\tconst existingDeclaration = this.declarations[ name ];\n\t\tif ( existingDeclaration ) {\n\t\t\tif ( letConst.test( kind ) || letConst.test( existingDeclaration.kind ) ) {\n\t\t\t\t// TODO warn about double var declarations?\n\t\t\t\tthrow new CompileError( identifier, `${name} is already declared` );\n\t\t\t}\n\n\t\t\t// special case — function expression IDs that are shadowed by\n\t\t\t// declarations should just be removed (TODO unless the user wishes\n\t\t\t// to keep function names — https://github.com/Rich-Harris/butternut/issues/17)\n\t\t\tif ( existingDeclaration.kind === 'FunctionExpression' ) {\n\t\t\t\texistingDeclaration.node.parent.shadowed = true;\n\t\t\t}\n\n\t\t\telse {\n\t\t\t\tidentifier.isDuplicate = true;\n\n\t\t\t\tif ( existingDeclaration.activated ) {\n\t\t\t\t\tidentifier.activate();\n\t\t\t\t} else {\n\t\t\t\t\texistingDeclaration.duplicates.push( identifier );\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst declaration = {\n\t\t\tactivated: !this.parent, // TODO is this necessary?\n\t\t\tname,\n\t\t\tnode: identifier,\n\t\t\tkind,\n\t\t\tinstances: [],\n\t\t\tduplicates: []\n\t\t};\n\n\t\tthis.declarations[ name ] = declaration;\n\n\t\tif ( this.isBlockScope ) {\n\t\t\tif ( !this.functionScope.blockScopedDeclarations[ name ] ) this.functionScope.blockScopedDeclarations[ name ] = [];\n\t\t\tthis.functionScope.blockScopedDeclarations[ name ].push( declaration );\n\t\t}\n\n\t\tif ( kind === 'param' ) {\n\t\t\tdeclaration.instances.push( identifier );\n\t\t}\n\t},\n\n\taddReference ( identifier ) {\n\t\tconst declaration = this.declarations[ identifier.name ];\n\t\tif ( declaration ) {\n\t\t\tdeclaration.instances.push( identifier );\n\n\t\t\tif ( !declaration.activated ) {\n\t\t\t\tdeclaration.activated = true;\n\t\t\t\t// const parent = declaration.node.parent;\n\n\t\t\t\tdeclaration.node.activate();\n\t\t\t\tdeclaration.duplicates.forEach( dupe => {\n\t\t\t\t\tdupe.activate();\n\t\t\t\t});\n\t\t\t\t// if ( declaration.kind === 'param' ) {\n\t\t\t\t// \t// TODO is there anything to do here?\n\t\t\t\t// } else if ( parent.activate ) {\n\t\t\t\t// \tparent.activate();\n\t\t\t\t// }\n\t\t\t}\n\t\t} else {\n\t\t\tthis.references[ identifier.name ] = true;\n\t\t\tif ( this.parent ) this.parent.addReference( identifier );\n\t\t}\n\t},\n\n\tcontains ( name ) {\n\t\treturn this.declarations[ name ] ||\n\t\t       ( this.parent ? this.parent.contains( name ) : false );\n\t},\n\n\tdeopt () {\n\t\tif ( !this.deopted ) {\n\t\t\tthis.deopted = true;\n\t\t\tthis.canMangle = false;\n\n\t\t\tif ( this.parent ) this.parent.deopt();\n\n\t\t\tObject.keys( this.declarations ).forEach( name => {\n\t\t\t\tthis.declarations[name].node.activate();\n\t\t\t});\n\t\t}\n\t},\n\n\tfindDeclaration ( name ) {\n\t\treturn this.declarations[ name ] ||\n\t\t       ( this.parent && this.parent.findDeclaration( name ) );\n\t},\n\n\tmangle ( code, chars ) {\n\t\tif ( !this.canMangle ) return;\n\n\t\tlet used = Object.create( null );\n\t\treserved.forEach( word => {\n\t\t\tused[ word ] = true;\n\t\t});\n\n\t\tObject.keys( this.references ).forEach( reference => {\n\t\t\tconst declaration = this.parent && this.parent.findDeclaration( reference );\n\t\t\tused[ declaration && declaration.alias || reference ] = true;\n\t\t});\n\n\t\tlet i = -1;\n\t\tfunction getNextAlias () {\n\t\t\tlet alias;\n\n\t\t\tdo {\n\t\t\t\ti += 1;\n\t\t\t\talias = getAlias( chars, i );\n\t\t\t} while ( alias in used );\n\n\t\t\treturn alias;\n\t\t}\n\n\t\t// TODO sort declarations by number of instances?\n\n\t\tObject.keys( this.declarations ).forEach( name => {\n\t\t\tconst declaration = this.declarations[ name ];\n\t\t\tif ( declaration.instances.length === 0 ) return;\n\n\t\t\t// special case — function expression IDs may be removed outright\n\t\t\tif ( declaration.node.parent.type === 'FunctionExpression' && declaration.node === declaration.node.parent.id ) {\n\t\t\t\tif ( declaration.node.shadowed || declaration.instances.length === 1 ) return;\n\t\t\t}\n\n\t\t\tdeclaration.alias = getNextAlias();\n\n\t\t\tdeclaration.instances.forEach( instance => {\n\t\t\t\tconst replacement = instance.parent.type === 'Property' && instance.parent.shorthand ?\n\t\t\t\t\t`${instance.name}:${declaration.alias}` :\n\t\t\t\t\tdeclaration.alias;\n\n\t\t\t\tcode.overwrite( instance.start, instance.end, replacement, true );\n\t\t\t});\n\t\t});\n\t}\n};\n\n// adapted from https://github.com/mishoo/UglifyJS2/blob/master/lib/scope.js\nfunction getAlias ( chars, i ) {\n\tlet alias = '';\n\tlet base = 54;\n\n\ti++;\n\tdo {\n\t\ti--;\n\t\talias += chars[ i % base ];\n\t\ti = Math.floor( i / base );\n\t\tbase = 64;\n\t} while ( i > 0 );\n\n\treturn alias;\n}","export default function extractNames ( node ) {\n\tconst names = [];\n\textractors[ node.type ]( names, node );\n\treturn names;\n}\n\nconst extractors = {\n\tIdentifier ( names, node ) {\n\t\tnames.push( node );\n\t},\n\n\tObjectPattern ( names, node ) {\n\t\tfor ( const prop of node.properties ) {\n\t\t\textractors[ prop.value.type ]( names, prop.value );\n\t\t}\n\t},\n\n\tArrayPattern ( names, node ) {\n\t\tfor ( const element of node.elements )  {\n\t\t\tif ( element ) extractors[ element.type ]( names, element );\n\t\t}\n\t},\n\n\tRestElement ( names, node ) {\n\t\textractors[ node.argument.type ]( names, node.argument );\n\t},\n\n\tAssignmentPattern ( names, node ) {\n\t\textractors[ node.left.type ]( names, node.left );\n\t}\n};\n","import Node from '../Node.js';\nimport CompileError from '../../utils/CompileError.js';\n\nlet commutative = {};\n// we exclude + because it's not commutative when it's\n// operating on strings\nfor ( let operator of '*&^|' ) commutative[ operator ] = true;\n\nconst collapsibleOperators = '** * / % + - << >> >>> & ^ |'.split( ' ' );\n\nexport default class AssignmentExpression extends Node {\n\tgetLeftHandSide () {\n\t\treturn this.left.getLeftHandSide();\n\t}\n\n\tgetPrecedence () {\n\t\treturn 3;\n\t}\n\n\tinitialise ( program, scope ) {\n\t\tif ( this.left.type === 'Identifier' ) {\n\t\t\tconst declaration = scope.findDeclaration( this.left.name );\n\t\t\tif ( declaration && declaration.kind === 'const' ) {\n\t\t\t\tthrow new CompileError( this.left, `${this.left.name} is read-only` );\n\t\t\t}\n\t\t}\n\n\t\tsuper.initialise( program, scope );\n\t}\n\n\tminify ( code, chars ) {\n\t\tif ( this.right.start > this.left.end + this.operator.length ) {\n\t\t\tcode.overwrite( this.left.end, this.right.start, this.operator );\n\t\t}\n\n\t\t// special case – `a = a + 1` -> `a += 1`\n\t\tif ( this.operator === '=' && this.left.type === 'Identifier' && this.right.type === 'BinaryExpression' && ~collapsibleOperators.indexOf( this.right.operator ) ) {\n\t\t\tif ( this.right.left.type === 'Identifier' && ( this.right.left.name === this.left.name ) ) {\n\t\t\t\tcode.appendLeft( this.left.end, this.right.operator );\n\t\t\t\tcode.remove( this.right.start, this.right.right.start );\n\n\t\t\t\tthis.right.right.minify( code, chars );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// addition and multiplication\n\t\t\tif ( commutative[ this.right.operator ] && this.right.right.type === 'Identifier' && ( this.right.right.name === this.left.name ) ) {\n\t\t\t\tcode.appendLeft( this.left.end, this.right.operator );\n\t\t\t\tcode.remove( this.right.left.end, this.right.end );\n\n\t\t\t\tthis.right.left.minify( code, chars );\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tsuper.minify( code, chars );\n\t}\n}\n","import Node from '../Node.js';\nimport Scope from '../Scope.js';\nimport extractNames from '../extractNames.js';\n\nexport default class ArrowFunctionExpression extends Node {\n\tattachScope ( program, parent ) {\n\t\tthis.scope = new Scope({\n\t\t\tblock: false,\n\t\t\tparent\n\t\t});\n\n\t\tthis.params.forEach( param => {\n\t\t\tparam.attachScope( program, this.scope );\n\n\t\t\textractNames( param ).forEach( node => {\n\t\t\t\tnode.declaration = this;\n\t\t\t\tthis.scope.addDeclaration( node, 'param' );\n\t\t\t});\n\t\t});\n\n\t\tif ( this.body.type === 'BlockStatement' ) {\n\t\t\tthis.body.body.forEach( node => {\n\t\t\t\tnode.attachScope( program, this.scope );\n\t\t\t});\n\t\t} else {\n\t\t\tthis.body.attachScope( program, this.scope );\n\t\t}\n\n\t}\n\n\tinitialise ( program ) {\n\t\tsuper.initialise( program, this.scope );\n\t}\n\n\tfindVarDeclarations () {\n\t\t// noop\n\t}\n\n\tgetLeftHandSide () {\n\t\treturn this.params.length === 1 ? this.params[0] : this;\n\t}\n\n\tminify ( code, chars ) {\n\t\tthis.scope.mangle( code, chars );\n\n\t\tlet c = this.start;\n\t\tif ( this.async ) c += 5;\n\n\t\tif ( this.params.length === 0 ) {\n\t\t\tif ( this.body.start > c + 4 ) {\n\t\t\t\tcode.overwrite( c, this.body.start, '()=>' );\n\t\t\t}\n\t\t}\n\n\t\telse if ( this.params.length === 1 ) {\n\t\t\tthis.params[0].minify( code, chars );\n\n\t\t\tif ( this.params[0].type === 'Identifier' ) {\n\t\t\t\t// remove parens\n\t\t\t\tif ( this.async ) {\n\t\t\t\t\tcode.overwrite( c, this.params[0].start, ' ' );\n\t\t\t\t} else {\n\t\t\t\t\tcode.remove( c, this.params[0].start );\n\t\t\t\t}\n\n\t\t\t\tif ( this.body.start > this.params[0].end + 2 ) {\n\t\t\t\t\tcode.overwrite( this.params[0].end, this.body.start, '=>' );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( this.params[0].start > c + 1 ) {\n\t\t\t\t\tcode.remove( c + 1, this.params[0].start );\n\t\t\t\t}\n\n\t\t\t\tif ( this.body.start > this.params[0].end + 3 ) {\n\t\t\t\t\tcode.overwrite( this.params[0].end, this.body.start, ')=>' );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\telse {\n\t\t\tthis.params.forEach( ( param, i ) => {\n\t\t\t\tparam.minify( code, chars );\n\t\t\t\tif ( param.start > c + 1 ) code.overwrite( c, param.start, i ? ',' : '(' );\n\t\t\t\tc = param.end;\n\t\t\t});\n\n\t\t\tif ( this.body.start > c + 3 ) {\n\t\t\t\tcode.overwrite( c, this.body.start, ')=>' );\n\t\t\t}\n\t\t}\n\n\t\tthis.body.minify( code, chars );\n\t}\n}\n","export default function isNegativeZero ( num ) {\n\treturn num === 0 && ( 1 / num < 0 );\n}","import isNegativeZero from './isNegativeZero.js';\n\n// TODO if string, determine which quotes to use\n// TODO if number, determine whether to use e notation\n\nexport default function stringify ( value ) {\n\tif ( typeof value === 'function' ) return null;\n\n\tif ( value !== value ) return 'NaN';\n\tif ( value === Infinity ) return '1/0';\n\tif ( value === -Infinity ) return '-1/0';\n\tif ( value === true ) return '!0';\n\tif ( value === false ) return '!1';\n\tif ( value === undefined ) return 'void 0';\n\tif ( isNegativeZero( value ) ) return '-0';\n\n\tif ( typeof value === 'number' ) {\n\t\tconst str = String( value ).replace( /^(-)?0\\./, '$1.' );\n\t\tconst exponential = value.toExponential().replace( 'e+', 'e' );\n\n\t\treturn exponential.length < str.length ? exponential : str;\n\t}\n\n\treturn JSON.stringify( value )\n\t\t.replace( /\\u2028/g, '\\\\u2028' )\n\t\t.replace( /\\u2029/g, '\\\\u2029' );\n}","import isNegativeZero from './isNegativeZero.js';\n\nexport default function getValuePrecedence ( value ) {\n\tif ( value === true || value === false || value === undefined ) return 16; // unary operator — !0, !1, void 0\n\tif ( typeof value === 'number' ) {\n\t\tif ( value === Infinity || value === -Infinity ) return 14; // division — 1/0, -1/0\n\t\tif ( value < 0 || isNegativeZero( value ) ) return 16;\n\t}\n\n\treturn 21;\n}","import Node from '../Node.js';\nimport { UNKNOWN } from '../../utils/sentinels.js';\nimport stringify from '../../utils/stringify.js';\nimport getValuePrecedence from '../../utils/getValuePrecedence.js';\n\nconst calculators = {\n\t'**' : ( a, b ) => Math.pow( a, b ),\n\t'*'  : ( a, b ) => a * b,\n\t'/'  : ( a, b ) => a / b,\n\t'%'  : ( a, b ) => a % b,\n\t'+'  : ( a, b ) => a + b,\n\t'-'  : ( a, b ) => a - b,\n\t'<<' : ( a, b ) => a << b,\n\t'>>' : ( a, b ) => a >> b,\n\t'>>>': ( a, b ) => a >>> b,\n\t'<'  : ( a, b ) => a < b,\n\t'<=' : ( a, b ) => a <= b,\n\t'>'  : ( a, b ) => a > b,\n\t'>=' : ( a, b ) => a >= b,\n\t'==' : ( a, b ) => a == b,\n\t'!=' : ( a, b ) => a != b,\n\t'===': ( a, b ) => a === b,\n\t'!==': ( a, b ) => a !== b,\n\t'&'  : ( a, b ) => a & b,\n\t'^'  : ( a, b ) => a ^ b,\n\t'|'  : ( a, b ) => a | b,\n\tin   : ( a, b ) => a in b,\n\tinstanceof: ( a, b ) => a instanceof b\n};\n\nconst binaryExpressionPrecedence = {};\n[\n\t[  7, '|' ],\n\t[  8, '^' ],\n\t[  9, '&' ],\n\t[ 10, '!== === != ==' ],\n\t[ 11, 'instanceof in >= > <= <' ],\n\t[ 12, '>>> >> <<' ],\n\t[ 13, '- +' ],\n\t[ 14, '% / *' ],\n\t[ 15, '**' ]\n].forEach( ([ precedence, operators ]) => {\n\toperators.split( ' ' ).forEach( operator => binaryExpressionPrecedence[ operator ] = precedence );\n});\n\nexport default class BinaryExpression extends Node {\n\tgetLeftHandSide () {\n\t\treturn this.left.getLeftHandSide();\n\t}\n\n\tgetPrecedence () {\n\t\tconst value = this.getValue();\n\n\t\treturn value === UNKNOWN ?\n\t\t\tbinaryExpressionPrecedence[ this.operator ] :\n\t\t\tgetValuePrecedence( value );\n\t}\n\n\t// TODO `program.addWord( stringify( this.getValue() ) )`...\n\tgetValue () {\n\t\tconst left = this.left.getValue();\n\t\tconst right = this.right.getValue();\n\n\t\tif ( left === UNKNOWN || right === UNKNOWN ) return UNKNOWN;\n\n\t\treturn calculators[ this.operator ]( left, right );\n\t}\n\n\tminify ( code, chars ) {\n\t\tconst value = this.getValue();\n\n\t\tif ( value !== UNKNOWN ) {\n\t\t\tcode.overwrite( this.start, this.end, stringify( value ) );\n\t\t}\n\n\t\telse {\n\t\t\tlet operator = this.operator;\n\n\t\t\tif ( code.original[ this.right.getLeftHandSide().start ] === operator ) {\n\t\t\t\t// prevent e.g. `1 - --t` becoming 1---t\n\t\t\t\toperator = `${operator} `;\n\t\t\t} else if ( /\\w/.test( this.operator ) ) {\n\t\t\t\t// `foo in bar`, not `fooinbar`\n\t\t\t\toperator = ` ${operator} `;\n\t\t\t}\n\n\t\t\tcode.overwrite( this.left.end, this.right.start, operator );\n\n\t\t\tsuper.minify( code, chars );\n\t\t}\n\t}\n}\n","import Node from '../Node.js';\nimport { UNKNOWN } from '../../utils/sentinels.js';\nimport stringify from '../../utils/stringify.js';\nimport getValuePrecedence from '../../utils/getValuePrecedence.js';\n\nconst safeFunctions = [\n\t// TODO this list is possibly a bit arbitrary. Also *technically*\n\t// unsafe, though I'm inclined to wait for examples of it causing\n\t// breakage in the wild\n\tArray.prototype.concat,\n\tArray.prototype.indexOf,\n\tArray.prototype.join,\n\tArray.prototype.lastIndexOf,\n\tArray.prototype.reverse,\n\tArray.prototype.slice,\n\tArray.prototype.sort,\n\tArray.prototype.toString,\n\n\tString.fromCharCode,\n\tString.fromCodePoint,\n\n\tString.prototype.charAt,\n\tString.prototype.charCodeAt,\n\tString.prototype.codePointAt,\n\tString.prototype.concat, // WARNING! https://github.com/jquery/jquery/pull/473\n\tString.prototype.endsWith,\n\tString.prototype.includes,\n\tString.prototype.indexOf,\n\tString.prototype.lastIndexOf,\n\tString.prototype.slice,\n\tString.prototype.startsWith,\n\tString.prototype.substr,\n\tString.prototype.substring,\n\tString.prototype.toLowerCase,\n\tString.prototype.toString,\n\tString.prototype.toUpperCase,\n\tString.prototype.trim,\n\tString.prototype.trimLeft,\n\tString.prototype.trimRight,\n\tString.prototype.valueOf\n\n\t// TODO others...\n];\n\nexport default class CallExpression extends Node {\n\tgetLeftHandSide () {\n\t\treturn this.callee.getLeftHandSide();\n\t}\n\n\tgetPrecedence () {\n\t\tconst value = this.getValue();\n\t\tif ( value === UNKNOWN ) {\n\t\t\t// function expressions are a special (annoying) case\n\t\t\tlet node = this.callee;\n\t\t\twhile ( node.type === 'ParenthesizedExpression' ) node = node.expression;\n\t\t\tif ( /FunctionExpression/.test( node.getLeftHandSide().type ) ) {\n\t\t\t\tif ( this.parent.type !== 'ExpressionStatement' ) return 0;\n\t\t\t}\n\n\t\t\treturn 18;\n\t\t} else {\n\t\t\treturn getValuePrecedence( value );\n\t\t}\n\t}\n\n\tgetValue () {\n\t\tif ( this.callee.type !== 'MemberExpression' || this.callee.property.computed ) return UNKNOWN;\n\n\t\tconst contextValue = this.callee.object.getValue();\n\t\tif ( contextValue === UNKNOWN ) return UNKNOWN;\n\n\t\tconst calleeValue = contextValue[ this.callee.property.name ];\n\n\t\tif ( typeof calleeValue !== 'function' ) return UNKNOWN;\n\t\tif ( !~safeFunctions.indexOf( calleeValue ) ) return UNKNOWN;\n\n\t\tlet argumentValues = new Array( this.arguments.length );\n\t\tfor ( let i = 0; i < this.arguments.length; i += 1 ) {\n\t\t\tconst argument = this.arguments[i];\n\n\t\t\tif ( argument ) {\n\t\t\t\tconst value = argument.getValue();\n\t\t\t\tif ( value === UNKNOWN ) return UNKNOWN;\n\n\t\t\t\targumentValues[i] = value;\n\t\t\t}\n\t\t}\n\n\t\treturn calleeValue.apply( contextValue, argumentValues );\n\t}\n\n\tinitialise ( program, scope ) {\n\t\tif ( this.callee.type === 'Identifier' && this.callee.name === 'eval' && !scope.contains( 'eval' ) ) {\n\t\t\tif ( this.program.options.allowDangerousEval ) {\n\t\t\t\tscope.deopt();\n\t\t\t} else {\n\t\t\t\tthis.error( 'Use of direct eval prevents effective minification and can introduce security vulnerabilities. Use `allowDangerousEval: true` if you know what you\\'re doing' );\n\t\t\t}\n\t\t}\n\t\tsuper.initialise( program, scope );\n\t}\n\n\tminify ( code, chars ) {\n\t\tconst value = this.getValue();\n\n\t\tif ( value !== UNKNOWN ) {\n\t\t\tconst str = stringify( value );\n\n\t\t\tif ( str !== null ) {\n\t\t\t\tcode.overwrite( this.start, this.end, str );\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif ( this.arguments.length ) {\n\t\t\tlet lastNode = this.callee;\n\n\t\t\tfor ( let i = 0; i < this.arguments.length; i += 1 ) {\n\t\t\t\tconst argument = this.arguments[i];\n\n\t\t\t\tif ( argument.start > lastNode.end + 1 ) code.overwrite( lastNode.end, argument.start, i ? ',' : '(' );\n\t\t\t\tlastNode = argument;\n\t\t\t}\n\n\t\t\tif ( this.end > lastNode.end + 1 ) code.overwrite( lastNode.end, this.end, ')' );\n\t\t}\n\n\t\telse if ( this.end > this.callee.end + 2 ) {\n\t\t\tcode.overwrite( this.callee.end, this.end, '()' );\n\t\t}\n\n\t\tsuper.minify( code, chars );\n\t}\n}\n","import Node from '../Node.js';\nimport Scope from '../Scope.js';\nimport extractNames from '../extractNames.js';\n\nexport default class CatchClause extends Node {\n\tattachScope ( program, parent ) {\n\t\tthis.scope = new Scope({\n\t\t\tblock: true,\n\t\t\tparent\n\t\t});\n\n\t\textractNames( this.param ).forEach( node => {\n\t\t\tthis.scope.addDeclaration( node, 'param' );\n\t\t});\n\n\t\tfor ( let i = 0; i < this.body.body.length; i += 1 ) {\n\t\t\tthis.body.body[i].attachScope( program, this.scope );\n\t\t}\n\n\t\tif ( this.finalizer ) {\n\t\t\tthis.finalizer.attachScope( program, this.scope );\n\t\t}\n\t}\n\n\tinitialise ( program ) {\n\t\tprogram.addWord( 'catch' );\n\t\tsuper.initialise( program, this.scope );\n\t}\n\n\tminify ( code, chars ) {\n\t\tthis.scope.mangle( code, chars );\n\n\t\tif ( this.param.start > this.start + 6 ) {\n\t\t\tcode.overwrite( this.start + 5, this.param.start, '(' );\n\t\t}\n\n\t\tif ( this.body.start > this.param.end + 1 ) {\n\t\t\tcode.overwrite( this.param.end, this.body.start, ')' );\n\t\t}\n\n\t\tsuper.minify( code, chars );\n\t}\n}\n","import Node from '../Node.js';\n\nexport default class ClassBody extends Node {\n\tattachScope ( program, parent ) {\n\t\tfor ( let i = 0; i < this.body.length; i += 1 ) {\n\t\t\tthis.body[i].attachScope( program, parent );\n\t\t}\n\t}\n\n\tminify ( code, chars ) {\n\t\tlet c = this.start + 1;\n\n\t\tfor ( let i = 0; i < this.body.length; i += 1 ) {\n\t\t\tconst method = this.body[i];\n\t\t\tif ( method.start > c ) code.remove( c, method.start );\n\n\t\t\tmethod.minify( code, chars );\n\n\t\t\tc = method.end;\n\t\t}\n\n\t\tif ( this.end > c + 1 ) code.remove( c, this.end - 1 );\n\t}\n}\n","import Node from '../../Node.js';\nimport isNegativeZero from '../../../utils/isNegativeZero.js';\nimport { UNKNOWN } from '../../../utils/sentinels.js';\n\nfunction shouldParenthesizeSuperclass ( node ) {\n\twhile ( node.type === 'ParenthesizedExpression' ) node = node.expression;\n\n\tconst value = node.getValue();\n\tif ( value === UNKNOWN ) return node.getPrecedence() < 18;\n\n\treturn ( value === true || value === false || value === undefined || isNegativeZero( value ) );\n}\n\nexport default class Class extends Node {\n\tinitialise ( program, scope ) {\n\t\tprogram.addWord( 'class' );\n\t\tsuper.initialise( program, scope );\n\t}\n\n\tminify ( code, chars ) {\n\t\tlet c = this.start + 5;\n\n\t\tif ( this.id ) {\n\t\t\tif ( this.id.start > c + 1 ) code.remove( c + 1, this.id.start );\n\t\t\tc = this.id.end;\n\t\t}\n\n\t\tif ( this.superClass ) {\n\t\t\t// edge case\n\t\t\tif ( shouldParenthesizeSuperclass( this.superClass ) ) {\n\t\t\t\tcode.overwrite( c, this.superClass.start, ' extends(' );\n\t\t\t\tcode.prependRight( this.body.start, ')' );\n\t\t\t}\n\n\t\t\telse if ( this.superClass.start > c + 8 ) {\n\t\t\t\tcode.overwrite( c, this.superClass.start, ' extends ' );\n\t\t\t}\n\n\t\t\tc = this.superClass.end;\n\t\t}\n\n\t\tif ( this.body.start > c ) code.remove( c, this.body.start );\n\n\t\tsuper.minify( code, chars );\n\t}\n}\n","import Class from './shared/Class.js';\n\nexport default class ClassDeclaration extends Class {\n\tactivate () {\n\t\tif ( this.activated ) return;\n\t\tthis.activated = true;\n\n\t\tthis.skip = false;\n\t\tsuper.initialise( this.program, this.scope );\n\t}\n\n\tattachScope ( program, scope ) {\n\t\tthis.program = program;\n\t\tthis.scope = scope;\n\n\t\tthis.id.declaration = this;\n\n\t\tthis.name = this.id.name; // TODO what is this used for?\n\t\tscope.addDeclaration( this.id, 'class' );\n\n\t\tthis.id.attachScope( program, this.scope );\n\t\tif ( this.superClass ) this.superClass.attachScope( program, this.scope );\n\t\tthis.body.attachScope( program, scope );\n\t}\n\n\tinitialise ( program, scope ) {\n\t\tif ( scope.parent ) {\n\t\t\t// noop — we wait for this declaration to be activated\n\t\t} else {\n\t\t\tsuper.initialise( program, scope );\n\t\t}\n\t}\n}\n","import Class from './shared/Class.js';\nimport Scope from '../Scope.js';\n\nexport default class ClassExpression extends Class {\n\tattachScope ( program, parent ) {\n\t\tthis.scope = new Scope({\n\t\t\tblock: true,\n\t\t\tparent\n\t\t});\n\n\t\tif ( this.id ) this.id.attachScope( program, this.scope );\n\t\tif ( this.superClass ) this.superClass.attachScope( program, this.scope );\n\t\tthis.body.attachScope( program, this.scope );\n\t}\n\n\tinitialise ( program, scope ) {\n\t\tif ( this.id ) {\n\t\t\tthis.id.declaration = this;\n\n\t\t\t// function expression IDs belong to the child scope...\n\t\t\tthis.scope.addDeclaration( this.id, 'class' );\n\t\t\tthis.scope.addReference( this.id );\n\t\t}\n\n\t\tsuper.initialise( program, scope );\n\t}\n\n\tminify ( code, chars ) {\n\t\tthis.scope.mangle( code, chars );\n\t\tsuper.minify( code, chars );\n\t}\n}\n","import Node from '../Node.js';\nimport { UNKNOWN } from '../../utils/sentinels.js';\n\nexport default class ConditionalExpression extends Node {\n\tgetLeftHandSide () {\n\t\tconst testValue = this.test.getValue();\n\t\tconst node = testValue === UNKNOWN ? this.test : ( testValue ? this.consequent : this.alternate );\n\n\t\treturn node.getLeftHandSide();\n\t}\n\n\tgetPrecedence () {\n\t\tconst testValue = this.test.getValue();\n\t\treturn testValue === UNKNOWN ? 4 : ( testValue ? this.consequent : this.alternate ).getPrecedence();\n\t}\n\n\tgetRightHandSide () {\n\t\tconst testValue = this.test.getValue();\n\t\tconst node = testValue === UNKNOWN ? this.alternate : ( testValue ? this.alternate : this.consequent );\n\n\t\treturn node.getRightHandSide();\n\t}\n\n\tgetValue () {\n\t\tconst testValue = this.test.getValue();\n\t\tconst consequentValue = this.consequent.getValue();\n\t\tconst alternateValue = this.alternate.getValue();\n\n\t\tif ( testValue === UNKNOWN || consequentValue === UNKNOWN || alternateValue === UNKNOWN ) return UNKNOWN;\n\n\t\treturn testValue ? consequentValue : alternateValue;\n\t}\n\n\tinitialise ( program, scope ) {\n\t\tconst testValue = this.test.getValue();\n\n\t\tif ( testValue === UNKNOWN ) {\n\t\t\tsuper.initialise( program, scope );\n\t\t} else if ( testValue ) {\n\t\t\tthis.consequent.initialise( program, scope );\n\t\t} else {\n\t\t\tthis.alternate.initialise( program, scope );\n\t\t}\n\t}\n\n\tminify ( code, chars ) {\n\t\tconst testValue = this.test.getValue();\n\n\t\t// TODO rewrite `!a ? b() : c()` as `a ? c() : b()`\n\n\t\tif ( testValue === UNKNOWN ) {\n\t\t\t// remove whitespace\n\t\t\tif ( this.consequent.start > this.test.end + 1 ) {\n\t\t\t\tcode.overwrite( this.test.end, this.consequent.start, '?' );\n\t\t\t}\n\n\t\t\tif ( this.alternate.start > this.consequent.end + 1 ) {\n\t\t\t\tcode.overwrite( this.consequent.end, this.alternate.start, ':' );\n\t\t\t}\n\n\t\t\tsuper.minify( code, chars );\n\t\t} else if ( testValue ) {\n\t\t\t// remove test and alternate\n\t\t\tcode.remove( this.start, this.consequent.start );\n\t\t\tcode.remove( this.consequent.end, this.end );\n\n\t\t\tthis.consequent.minify( code, chars );\n\t\t} else {\n\t\t\t// remove test and consequent\n\t\t\tcode.remove( this.start, this.alternate.start );\n\n\t\t\tthis.alternate.minify( code, chars );\n\t\t}\n\t}\n}\n","import Node from '../Node.js';\n\nexport default class DoWhileStatement extends Node {\n\tinitialise ( program, scope ) {\n\t\tprogram.addWord( 'dowhile' );\n\t\tsuper.initialise( program, scope );\n\t}\n\n\tminify ( code, chars ) {\n\t\t// special case\n\t\tif ( this.body.isEmpty() ) {\n\t\t\tcode.overwrite( this.start + 2, this.test.start, ';while(' );\n\t\t}\n\n\t\telse {\n\t\t\tthis.body.minify( code, chars );\n\n\t\t\tif ( this.body.type === 'BlockStatement' ) {\n\t\t\t\tcode.remove( this.start + 2, this.body.start );\n\t\t\t\tcode.overwrite( this.body.end, this.test.start, 'while(' );\n\t\t\t} else {\n\t\t\t\tif ( this.body.start > this.start + 2 ) code.remove( this.start + 2, this.body.start );\n\t\t\t\tthis.body.prepend( code, '{' );\n\n\t\t\t\tlet c = this.body.end;\n\t\t\t\twhile ( code.original[ c - 1 ] === ';' ) c -= 1;\n\t\t\t\tcode.overwrite( c, this.test.start, '}while(' );\n\t\t\t}\n\t\t}\n\n\t\tif ( this.end > this.test.end + 1 ) {\n\t\t\tlet c = this.end;\n\t\t\twhile ( code.original[ c - 1 ] === ';' ) c -= 1;\n\t\t\tcode.overwrite( this.test.end, c, ')' );\n\t\t}\n\n\t\tthis.test.minify( code, chars );\n\t}\n}\n","import Node from '../Node.js';\n\nexport default class EmptyStatement extends Node {\n\tinitialise () {\n\t\t// noop. this prevents Node#initialise from\n\t\t// 'de-skipping' this node\n\t}\n}","import Node from '../Node.js';\nimport { UNKNOWN } from '../../utils/sentinels.js';\n\nexport default class ExpressionStatement extends Node {\n\tcanSequentialise () {\n\t\treturn true;\n\t}\n\n\tgetLeftHandSide () {\n\t\treturn this.expression.getLeftHandSide();\n\t}\n\n\tgetPrecedence () {\n\t\treturn this.expression.getPrecedence();\n\t}\n\n\tgetRightHandSide () {\n\t\treturn this.expression.getRightHandSide();\n\t}\n\n\tinitialise ( program, scope ) {\n\t\tif ( this.expression.type === 'Literal' || this.expression.getValue() !== UNKNOWN ) {\n\t\t\t// remove side-effect-free statements (TODO others, not just literals)...\n\t\t\treturn;\n\t\t}\n\n\t\tsuper.initialise( program, scope );\n\t}\n}\n","import Node from '../../Node.js';\nimport Scope from '../../Scope.js';\n\nexport default class LoopStatement extends Node {\n\tattachScope ( program, parent ) {\n\t\tif ( this.hasVariableDeclaration() ) {\n\t\t\tthis.scope = new Scope({\n\t\t\t\tblock: true,\n\t\t\t\tparent\n\t\t\t});\n\n\t\t\tsuper.attachScope( program, this.scope );\n\t\t} else {\n\t\t\tsuper.attachScope( program, parent );\n\t\t}\n\t}\n\n\tinitialise ( program, scope ) {\n\t\tprogram.addWord( 'for' );\n\t\tif ( this.type === 'ForInStatement' ) program.addWord( 'in' );\n\t\telse if ( this.type === 'ForOfStatement' ) program.addWord( 'of' );\n\n\t\tsuper.initialise( program, this.scope || scope );\n\t}\n\n\tminify ( code, chars ) {\n\t\tif ( this.scope ) this.scope.mangle( code, chars );\n\n\t\t// special case — empty body\n\t\tif ( this.body.isEmpty() ) {\n\t\t\tcode.appendLeft( this.body.start, ';' );\n\t\t\tcode.remove( this.body.start, this.body.end );\n\t\t} else {\n\t\t\tthis.body.minify( code, chars );\n\t\t}\n\t}\n}\n","import LoopStatement from './shared/LoopStatement.js';\n\nexport default class ForStatement extends LoopStatement {\n\tgetRightHandSide () {\n\t\treturn this.body.getRightHandSide();\n\t}\n\n\thasVariableDeclaration () {\n\t\treturn this.init && this.init.type === 'VariableDeclaration';\n\t}\n\n\tminify ( code, chars ) {\n\t\tlet c = this.start + 3;\n\n\t\tlet replacement = '(';\n\n\t\t[ this.init, this.test, this.update ].forEach( ( statement, i ) => {\n\t\t\tif ( statement && ( !statement.skip || statement === this.test  ) ) {\n\t\t\t\tif ( statement.start > c + replacement.length ) {\n\t\t\t\t\tcode.overwrite( c, statement.start, replacement );\n\t\t\t\t}\n\n\t\t\t\tstatement.minify( code, chars );\n\n\t\t\t\tc = statement.end;\n\t\t\t\treplacement = '';\n\t\t\t}\n\n\t\t\treplacement += i === 2 ? ')' : ';';\n\t\t});\n\n\t\tif ( this.body.start > c + replacement.length ) {\n\t\t\tcode.overwrite( c, this.body.start, replacement );\n\t\t}\n\n\t\tsuper.minify( code, chars );\n\t}\n}\n","import LoopStatement from './LoopStatement.js';\n\nexport default class ForInOfStatement extends LoopStatement {\n\tgetRightHandSide () {\n\t\treturn this.body.getRightHandSide();\n\t}\n\n\thasVariableDeclaration () {\n\t\treturn this.left.type === 'VariableDeclaration';\n\t}\n\n\tminify ( code, chars ) {\n\t\tif ( this.left.start > this.start + 4 ) {\n\t\t\tcode.overwrite( this.start + 3, this.left.start, '(' );\n\t\t}\n\n\t\tif ( this.right.start > this.left.end + 4 ) {\n\t\t\tcode.overwrite( this.left.end, this.right.start, ' in ' );\n\t\t}\n\n\t\tif ( this.body.start > this.right.end + 1 ) {\n\t\t\tcode.overwrite( this.right.end, this.body.start, ')' );\n\t\t}\n\n\t\tthis.left.minify( code, chars );\n\t\tthis.right.minify( code, chars );\n\t\tsuper.minify( code, chars );\n\t}\n}\n","import Node from '../../Node.js';\nimport Scope from '../../Scope.js';\nimport extractNames from '../../extractNames.js';\n\nfunction hasFunctionKeyword ( node, parent ) {\n\tif ( node === parent.value ) {\n\t\tif ( parent.type === 'MethodDefinition' ) return false;\n\n\t\tif ( parent.type === 'Property' ) {\n\t\t\tif ( parent.method ) return false;\n\t\t\tif ( parent.kind === 'set' || parent.kind === 'get' ) return false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction keepId ( node ) {\n\tif ( !node.id ) return false;\n\tif ( node.type === 'FunctionDeclaration' ) return true;\n\n\t// if function expression ID is shadowed, or is not referenced (other than\n\t// by the function expression itself), remove it\n\treturn !node.shadowed && node.scope.declarations[ node.id.name ].instances.length > 1;\n}\n\nexport default class FunctionNode extends Node {\n\tattachScope ( program, parent ) {\n\t\tthis.program = program;\n\t\tthis.scope = new Scope({\n\t\t\tblock: false,\n\t\t\tparent\n\t\t});\n\n\t\tif ( this.id ) {\n\t\t\tthis.id.declaration = this;\n\n\t\t\t// function expression IDs belong to the child scope...\n\t\t\tif ( this.type === 'FunctionExpression' ) {\n\t\t\t\tthis.scope.addDeclaration( this.id, this.type );\n\t\t\t\tthis.scope.addReference( this.id );\n\t\t\t} else {\n\t\t\t\tparent.addDeclaration( this.id, this.type );\n\t\t\t}\n\t\t}\n\n\t\tthis.params.forEach( param => {\n\t\t\tparam.attachScope( program, this.scope );\n\n\t\t\textractNames( param ).forEach( node => {\n\t\t\t\tnode.declaration = this;\n\t\t\t\tthis.scope.addDeclaration( node, 'param' );\n\t\t\t});\n\t\t});\n\n\t\tthis.body.attachScope( program, this.scope );\n\t}\n\n\tfindVarDeclarations () {\n\t\t// noop\n\t}\n\n\t// TODO `program.addWord('async')` if necessary\n\n\tminify ( code, chars ) {\n\t\tlet c = this.start;\n\n\t\tif ( hasFunctionKeyword( this, this.parent ) ) {\n\t\t\t// TODO this could probably be simpler\n\t\t\tconst shouldKeepId = keepId( this );\n\t\t\tif ( shouldKeepId ) {\n\t\t\t\tc = this.id.start;\n\n\t\t\t\tif ( this.async ) {\n\t\t\t\t\tif ( c > this.start + 15 ) code.overwrite( this.start + 6, c, this.generator ? 'function*' : 'function ' );\n\t\t\t\t} else {\n\t\t\t\t\tif ( c > this.start + 9 ) code.overwrite( this.start + 8, c, this.generator ? '*' : ' ' );\n\t\t\t\t}\n\n\t\t\t\tc = this.id.end;\n\t\t\t} else {\n\t\t\t\twhile ( code.original[c] !== '(' ) c += 1;\n\n\t\t\t\tif ( this.async ) {\n\t\t\t\t\tconst replacement = this.generator ? 'function*' : 'function';\n\t\t\t\t\tif ( c > this.start + 6 + replacement.length ) code.overwrite( this.start + 6, c, replacement );\n\t\t\t\t} else {\n\t\t\t\t\tconst replacement = this.generator ? '*' : '';\n\t\t\t\t\tif ( c > this.start + 8 + replacement.length ) code.overwrite( this.start + 8, c, replacement );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( this.params.length ) {\n\t\t\tfor ( let i = 0; i < this.params.length; i += 1 ) {\n\t\t\t\tconst param = this.params[i];\n\t\t\t\tparam.minify( code, chars );\n\n\t\t\t\tif ( param.start > c + 1 ) code.overwrite( c, param.start, i ? ',' : '(' );\n\t\t\t\tc = param.end;\n\t\t\t}\n\n\t\t\tif ( this.end > c + 1 ) code.overwrite( c, this.body.start, ')' );\n\t\t} else if ( this.body.start > c + 2 ) {\n\t\t\tcode.overwrite( c, this.body.start, `()` );\n\t\t}\n\n\t\tthis.body.minify( code, chars );\n\t}\n}\n","import FunctionNode from './shared/FunctionNode.js';\n\nexport default class FunctionDeclaration extends FunctionNode {\n\tactivate () {\n\t\tif ( this.activated ) return;\n\t\tthis.activated = true;\n\n\t\tthis.skip = false;\n\n\t\tthis.program.addWord( 'function' );\n\t\tif ( this.id ) this.id.initialise( this.program, this.scope.parent );\n\t\tthis.params.forEach( param => {\n\t\t\tparam.initialise( this.program, this.scope );\n\t\t});\n\t\tthis.body.initialise( this.program, this.scope );\n\t}\n\n\tinitialise ( program, scope ) {\n\t\tif ( scope.parent ) {\n\t\t\t// noop — we wait for this declaration to be activated\n\t\t} else {\n\t\t\tthis.activate( program );\n\t\t}\n\t}\n}\n","import FunctionNode from './shared/FunctionNode.js';\n\nexport default class FunctionExpression extends FunctionNode {\n\tgetPrecedence () {\n\t\treturn 0;\n\t}\n\n\tinitialise ( program ) {\n\t\tprogram.addWord( 'function' ); // TODO only if has function keyword\n\t\tsuper.initialise( program, this.scope );\n\t}\n}\n","import Node from '../Node.js';\nimport { UNKNOWN } from '../../utils/sentinels.js';\nimport stringify from '../../utils/stringify.js';\n\nexport default class Identifier extends Node {\n\tactivate () {\n\t\tif ( this.declaration && this.declaration.activate ) {\n\t\t\tthis.declaration.activate();\n\t\t}\n\n\t\t// TODO in what circumstances would an identifier be 'activated' if it\n\t\t// didn't have a declaration... parameters?\n\t}\n\n\tattachScope ( program, scope ) {\n\t\tthis.scope = scope;\n\t}\n\n\tgetPrecedence () {\n\t\treturn 21;\n\t}\n\n\tgetValue () {\n\t\tif ( this.name === 'undefined' ) {\n\t\t\tif ( !this.scope.contains( 'undefined' ) ) return undefined;\n\t\t}\n\n\t\tif ( this.name === 'Infinity' ) {\n\t\t\tif ( !this.scope.contains( 'Infinity' ) ) return Infinity;\n\t\t}\n\n\t\treturn UNKNOWN;\n\t}\n\n\tinitialise ( program, scope ) {\n\t\t// special case\n\t\tif ( ( this.parent.type === 'FunctionExpression' || this.parent.type === 'ClassExpression' ) && this === this.parent.id ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// TODO add global/top-level identifiers to frequency count\n\n\t\tif ( this.isReference() ) {\n\t\t\tscope.addReference( this );\n\t\t}\n\t}\n\n\tisReference () {\n\t\tconst parent = this.parent;\n\n\t\tif ( parent.type === 'MemberExpression' || parent.type === 'MethodDefinition' ) {\n\t\t\treturn parent.computed || this === parent.object;\n\t\t}\n\n\t\t// disregard the `bar` in `{ bar: foo }`, but keep it in `{ [bar]: foo }`\n\t\tif ( parent.type === 'Property' ) return parent.computed || this === parent.value;\n\n\t\t// disregard the `bar` in `class Foo { bar () {...} }`\n\t\tif ( parent.type === 'MethodDefinition' ) return false;\n\n\t\t// disregard the `bar` in `export { foo as bar }`\n\t\tif ( parent.type === 'ExportSpecifier' && this !== parent.local ) return false;\n\n\t\treturn true;\n\t}\n\n\tminify ( code ) {\n\t\tconst value = this.getValue();\n\t\tif ( value !== UNKNOWN && this.isReference() ) {\n\t\t\tcode.overwrite( this.start, this.end, stringify( value ) );\n\t\t}\n\n\t\t// TODO should aliasing happen here, rather than in Scope?\n\t\t// if ( this.alias ) {\n\t\t// \tconst replacement = this.parent.type === 'Property' && this.parent.shorthand ?\n\t\t// \t\t`${this.name}:${this.alias}` :\n\t\t// \t\tthis.alias;\n\n\t\t// \tcode.overwrite( this.start, this.end, replacement, true );\n\t\t// }\n\t}\n}\n","import Node from '../Node.js';\nimport { UNKNOWN } from '../../utils/sentinels.js';\n\nconst invalidChars = /[a-zA-Z$_0-9/]/;\n\n// TODO this whole thing is kinda messy... refactor it\n\nfunction endsWithCurlyBraceOrSemicolon ( node ) {\n\treturn (\n\t\tnode.type === 'BlockStatement' ||\n\t\tnode.type === 'SwitchStatement' ||\n\t\tnode.type === 'TryStatement' ||\n\t\tnode.type === 'EmptyStatement'\n\t);\n}\n\nexport default class IfStatement extends Node {\n\tcanSequentialise () {\n\t\tconst testValue = this.test.getValue();\n\n\t\tif ( testValue === UNKNOWN ) {\n\t\t\treturn this.consequent.canSequentialise() && ( !this.alternate || this.alternate.canSequentialise() );\n\t\t}\n\n\t\tif ( testValue ) {\n\t\t\treturn this.consequent.canSequentialise();\n\t\t}\n\n\t\treturn this.alternate ? this.alternate.canSequentialise() : false;\n\t}\n\n\tgetLeftHandSide () {\n\t\tconst testValue = this.test.getValue();\n\n\t\tif ( testValue === UNKNOWN ) {\n\t\t\tif ( this.canSequentialise() ) return ( this.inverted ? this.test.argument : this.test ).getLeftHandSide();\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( testValue ) return this.consequent.getLeftHandSide();\n\t\treturn this.alternate.getLeftHandSide();\n\t}\n\n\tgetRightHandSide () {\n\t\tconst testValue = this.test.getValue();\n\n\t\tif ( testValue === UNKNOWN ) {\n\t\t\tif ( this.canSequentialise() ) return ( this.alternate ? ( this.inverted ? this.consequent : this.alternate ) : this.consequent ).getRightHandSide();\n\t\t\treturn ( this.alternate || this.consequent ).getRightHandSide();\n\t\t}\n\n\t\tif ( testValue || !this.alternate ) return this.consequent.getRightHandSide();\n\t\treturn this.alternate.getRightHandSide();\n\t}\n\n\tinitialise ( program, scope ) {\n\t\t// TODO add 'if/else' to character frequency, but only if not rewriting as sequence\n\n\t\tthis.skip = false; // TODO skip if known to be safe\n\n\t\tconst testValue = this.test.getValue();\n\n\t\tif ( testValue === UNKNOWN ) {\n\t\t\t// initialise everything\n\t\t\tthis.test.initialise( program, scope );\n\t\t\tthis.consequent.initialise( program, scope );\n\t\t\tif ( this.alternate ) this.alternate.initialise( program, scope );\n\t\t}\n\n\t\telse if ( testValue ) { // if ( true ) {...}\n\t\t\tthis.consequent.initialise( program, scope );\n\n\t\t\tif ( this.alternate && this.alternate.type === 'BlockStatement' ) {\n\t\t\t\tthis.alternate.scope.varDeclarations.forEach( name => {\n\t\t\t\t\tscope.functionScope.hoistedVars.add( name );\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\telse { // if ( false ) {...}\n\t\t\tif ( this.alternate ) {\n\t\t\t\tthis.alternate.initialise( program, scope );\n\t\t\t} else {\n\t\t\t\tthis.skip = true;\n\t\t\t}\n\n\t\t\tif ( this.consequent.type === 'BlockStatement' ) {\n\t\t\t\tthis.consequent.scope.varDeclarations.forEach( name => {\n\t\t\t\t\tscope.functionScope.hoistedVars.add( name );\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tthis.inverted = this.test.type === 'UnaryExpression' && this.test.operator === '!';\n\t}\n\n\tminify ( code, chars ) {\n\t\tconst testValue = this.test.getValue();\n\n\t\tif ( testValue !== UNKNOWN ) {\n\t\t\tif ( testValue ) { // if ( true ) {...}\n\t\t\t\tif ( this.alternate ) {\n\t\t\t\t\t// TODO handle var declarations in alternate\n\t\t\t\t\tcode.remove( this.consequent.end, this.end );\n\t\t\t\t}\n\n\t\t\t\tcode.remove( this.start, this.consequent.start );\n\t\t\t\tthis.consequent.minify( code, chars );\n\t\t\t} else { // if ( false ) {...}\n\t\t\t\t// we know there's an alternate, otherwise we wouldn't be here\n\t\t\t\tthis.alternate.minify( code, chars );\n\t\t\t\tcode.remove( this.start, this.alternate.start );\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis.test.minify( code, chars );\n\n\t\t// if we're rewriting as &&, test must be higher precedence than 6\n\t\t// to avoid being wrapped in parens. If ternary, 4\n\t\tconst targetPrecedence = this.alternate ? 4 : this.inverted ? 5 : 6;\n\t\tconst test = this.inverted ? this.test.argument : this.test;\n\n\t\tconst shouldParenthesiseTest = (\n\t\t\ttest.getPrecedence() < targetPrecedence ||\n\t\t\ttest.getLeftHandSide().type === 'ObjectExpression' ||\n\t\t\ttest.getRightHandSide().type === 'ObjectExpression'\n\t\t);\n\n\t\t// TODO what if nodes in the consequent are skipped...\n\t\tconst shouldParenthesiseConsequent = this.consequent.type === 'BlockStatement' ?\n\t\t\t( this.consequent.body.length === 1 ? this.consequent.body[0].getPrecedence() < targetPrecedence : true ) :\n\t\t\tthis.consequent.getPrecedence() < targetPrecedence;\n\n\t\t// special case – empty consequent\n\t\tif ( this.consequent.isEmpty() ) {\n\t\t\tconst canRemoveTest = this.test.type === 'Identifier' || this.test.getValue() !== UNKNOWN; // TODO can this ever happen?\n\n\t\t\tif ( this.alternate && !this.alternate.isEmpty() ) {\n\t\t\t\tthis.alternate.minify( code, chars );\n\n\t\t\t\tif ( this.alternate.type === 'BlockStatement' && this.alternate.body.length === 0 ) {\n\t\t\t\t\tif ( canRemoveTest ) {\n\t\t\t\t\t\tcode.remove( this.start, this.end );\n\t\t\t\t\t\tthis.removed = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcode.remove( this.start, this.test.start );\n\t\t\t\t\t\tcode.remove( this.test.end, this.end );\n\t\t\t\t\t}\n\t\t\t\t} else if ( this.alternate.canSequentialise() ) {\n\t\t\t\t\tlet alternatePrecedence;\n\t\t\t\t\tif ( this.alternate.type === 'IfStatement' ) {\n\t\t\t\t\t\talternatePrecedence = this.alternate.alternate ?\n\t\t\t\t\t\t\t4 : // will rewrite as ternary\n\t\t\t\t\t\t\t5;\n\t\t\t\t\t} else if ( this.alternate.type === 'BlockStatement' ) {\n\t\t\t\t\t\talternatePrecedence = this.alternate.body.length === 1 ?\n\t\t\t\t\t\t\tthis.alternate.body[0].getPrecedence() :\n\t\t\t\t\t\t\t0; // sequence\n\t\t\t\t\t} else {\n\t\t\t\t\t\talternatePrecedence = 0; // err on side of caution\n\t\t\t\t\t}\n\n\t\t\t\t\tconst shouldParenthesiseAlternate = alternatePrecedence < ( this.inverted ? 6 : 5 );\n\t\t\t\t\tif ( shouldParenthesiseAlternate ) this.alternate.parenthesize( code );\n\n\t\t\t\t\tcode.remove( this.start, this.inverted ? this.test.argument.start : this.test.start );\n\t\t\t\t\tcode.overwrite( this.test.end, this.alternate.start, this.inverted ? '&&' : '||' );\n\t\t\t\t} else {\n\t\t\t\t\tlet before = '(';\n\t\t\t\t\tlet after = ')';\n\n\t\t\t\t\tlet start = this.test.start;\n\n\t\t\t\t\tif ( this.inverted ) {\n\t\t\t\t\t\tstart = this.test.argument.start;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbefore += '!';\n\n\t\t\t\t\t\tif ( this.test.getPrecedence() < 16 ) { // 16 is the precedence of unary expressions\n\t\t\t\t\t\t\tbefore += '(';\n\t\t\t\t\t\t\tafter += ')';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcode.overwrite( this.start + 2, start, before );\n\t\t\t\t\tcode.overwrite( this.test.end, this.alternate.start, after );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// TODO is `removed` still used?\n\t\t\t\tif ( canRemoveTest ) {\n\t\t\t\t\tcode.remove( this.start, this.end );\n\t\t\t\t\tthis.removed = true;\n\t\t\t\t} else {\n\t\t\t\t\tcode.remove( this.start, this.test.start );\n\t\t\t\t\tcode.remove( this.test.end, this.end );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// special case - empty alternate\n\t\tif ( this.alternate && this.alternate.isEmpty() ) {\n\t\t\t// don't minify alternate\n\t\t\tthis.consequent.minify( code, chars );\n\t\t\tcode.remove( this.consequent.end, this.end );\n\n\t\t\tif ( this.consequent.canSequentialise() ) {\n\t\t\t\tif ( shouldParenthesiseTest ) this.test.parenthesize( code );\n\t\t\t\tif ( shouldParenthesiseConsequent ) this.consequent.parenthesize( code );\n\n\t\t\t\tcode.remove( this.start, ( this.inverted ? this.test.argument.start : this.test.start ) );\n\t\t\t\tcode.remove( this.consequent.getRightHandSide().end, this.end );\n\t\t\t\tcode.overwrite( this.test.end, this.consequent.start, this.inverted ? '||' : '&&' );\n\t\t\t}\n\n\t\t\telse {\n\t\t\t\tif ( this.test.start > this.start + 3 ) code.overwrite( this.start, this.test.start, 'if(' );\n\n\t\t\t\tif ( this.consequent.start > this.test.end + 1 ) code.overwrite( this.test.end, this.consequent.start, ')' );\n\t\t\t\tif ( this.end > this.consequent.end + 1 ) code.remove( this.consequent.end, this.end - 1 );\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis.consequent.minify( code, chars );\n\t\tif ( this.alternate ) this.alternate.minify( code, chars );\n\n\t\tif ( this.canSequentialise() ) {\n\t\t\tif ( this.inverted ) code.remove( this.test.start, this.test.start + 1 );\n\n\t\t\tif ( this.alternate ) {\n\t\t\t\tthis.rewriteAsTernaryExpression( code, shouldParenthesiseTest, shouldParenthesiseConsequent );\n\t\t\t} else {\n\t\t\t\tthis.rewriteAsLogicalExpression( code, shouldParenthesiseTest, shouldParenthesiseConsequent );\n\t\t\t}\n\t\t}\n\n\t\telse {\n\t\t\tif ( this.test.start > this.start + 3 ) code.overwrite( this.start + 2, this.test.start, '(' );\n\t\t\tif ( this.consequent.start > this.test.end + 1 ) code.overwrite( this.test.end, this.consequent.start, ')' );\n\n\t\t\tif ( this.alternate ) {\n\t\t\t\tconst lastNodeOfConsequent = this.consequent.getRightHandSide();\n\t\t\t\tconst firstNodeOfAlternate = this.alternate.getLeftHandSide();\n\n\t\t\t\tlet gap = ( endsWithCurlyBraceOrSemicolon( lastNodeOfConsequent ) ? '' : ';' ) + 'else';\n\t\t\t\tif ( invalidChars.test( code.original[ firstNodeOfAlternate.start ] ) ) gap += ' ';\n\n\t\t\t\tlet c = this.consequent.end;\n\t\t\t\twhile ( code.original[ c - 1 ] === ';' ) c -= 1;\n\n\t\t\t\tcode.overwrite( c, this.alternate.start, gap );\n\t\t\t}\n\t\t}\n\t}\n\n\tpreventsCollapsedReturns ( returnStatements ) {\n\t\t// TODO make this a method of nodes\n\t\tif ( this.consequent.type === 'BlockStatement' ) {\n\t\t\tfor ( let statement of this.consequent.body ) {\n\t\t\t\tif ( statement.skip ) continue;\n\t\t\t\tif ( statement.preventsCollapsedReturns( returnStatements ) ) return true;\n\t\t\t}\n\t\t} else {\n\t\t\tif ( this.consequent.preventsCollapsedReturns( returnStatements ) ) return true;\n\t\t}\n\n\t\tif ( this.alternate ) {\n\t\t\tif ( this.alternate.type === 'ExpressionStatement' ) return false;\n\t\t\tif ( this.alternate.type === 'ReturnStatement' ) return returnStatements.push( this.alternate ), false;\n\t\t\tif ( this.alternate.type === 'IfStatement' ) return this.alternate.preventsCollapsedReturns( returnStatements );\n\n\t\t\tif ( this.alternate.type === 'BlockStatement' ) {\n\t\t\t\tfor ( let statement of this.alternate.body ) {\n\t\t\t\t\tif ( statement.skip ) continue;\n\t\t\t\t\tif ( statement.preventsCollapsedReturns( returnStatements ) ) return true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\telse {\n\t\t\t\tif ( this.alternate.preventsCollapsedReturns( returnStatements ) ) return true;\n\t\t\t}\n\t\t}\n\t}\n\n\trewriteAsLogicalExpression ( code, shouldParenthesiseTest, shouldParenthesiseConsequent ) {\n\t\tcode.remove( this.start, this.test.start );\n\n\t\tif ( shouldParenthesiseTest ) this.test.parenthesize( code );\n\t\tif ( shouldParenthesiseConsequent ) this.consequent.parenthesize( code );\n\n\t\tcode.overwrite( this.test.end, this.consequent.start, this.inverted ? '||' : '&&' );\n\t}\n\n\trewriteAsTernaryExpression ( code, shouldParenthesiseTest, shouldParenthesiseConsequent ) {\n\t\tthis.rewriteAsSequence = true;\n\n\t\tlet shouldParenthesiseAlternate = false;\n\t\t// TODO simplify this\n\t\tif ( this.alternate.type === 'IfStatement' ) {\n\t\t\tshouldParenthesiseAlternate = false;\n\t\t} else if ( this.alternate.type === 'BlockStatement' ) {\n\t\t\tshouldParenthesiseAlternate = this.alternate.body.length > 1 || this.alternate.body[0].getPrecedence() < 4;\n\t\t} else {\n\t\t\tshouldParenthesiseAlternate = this.alternate.getPrecedence() < 4;\n\t\t}\n\n\t\t// if ( this.alternate.type === 'BlockStatement' ) {\n\t\t// \tif ( this.alternate.body.length > 1 ) {\n\t\t// \t\tshouldParenthesiseAlternate = true;\n\t\t// \t} else if ( this.alternate.body[0].type !== 'IfStatement' ) {\n\t\t// \t\tshouldParenthesiseAlternate = this.alternate.body[0].getPrecedence() < 4;\n\t\t// \t}\n\t\t// }\n\n\t\t// const shouldParenthesiseAlternate = this.alternate.type === 'BlockStatement' ?\n\t\t// \t( this.alternate.body.length === 1 ? getPrecedence( this.alternate.body[0] ) < 4 : true ) :\n\t\t// \tfalse; // TODO <-- is this right? Ternaries are r-to-l, so... maybe?\n\n\t\tif ( shouldParenthesiseTest ) this.test.parenthesize( code );\n\t\tif ( shouldParenthesiseConsequent ) this.consequent.parenthesize( code );\n\t\tif ( shouldParenthesiseAlternate ) this.alternate.parenthesize( code );\n\n\t\tcode.remove( this.start, this.test.start );\n\t\tcode.overwrite( this.test.end, this.consequent.start, '?' );\n\n\t\tlet consequentEnd = this.consequent.end;\n\t\twhile ( code.original[ consequentEnd - 1 ] === ';' ) consequentEnd -= 1;\n\t\tcode.remove( consequentEnd, this.alternate.start );\n\n\t\tlet alternateEnd = this.alternate.end;\n\t\twhile ( code.original[ alternateEnd - 1 ] === ';' ) alternateEnd -= 1;\n\n\t\tif ( this.inverted ) {\n\t\t\tcode.move( this.alternate.start, alternateEnd, this.consequent.start );\n\t\t\tcode.move( this.consequent.start, consequentEnd, alternateEnd );\n\n\t\t\tcode.prependRight( this.consequent.getLeftHandSide().start, ':' );\n\t\t} else {\n\t\t\tcode.appendLeft( this.alternate.getLeftHandSide().start, ':' );\n\t\t}\n\t}\n}\n","import Node from '../Node.js';\n\nexport default class ImportDeclaration extends Node {\n\tinitialise ( program, scope ) {\n\t\tprogram.addWord( 'import' );\n\t\tif ( this.specifiers.length ) program.addWord( 'from' );\n\t\tprogram.addWord( this.source.value );\n\n\t\tsuper.initialise( program, scope );\n\t}\n}","import Node from '../Node.js';\n\nexport default class ImportDefaultSpecifier extends Node {\n\tinitialise ( program, scope ) {\n\t\tthis.local.declaration = this;\n\n\t\tscope.addDeclaration( this.local, 'import' );\n\t\tsuper.initialise( program, scope );\n\t}\n}\n","import Node from '../Node.js';\n\nexport default class ImportSpecifier extends Node {\n\tinitialise ( program, scope ) {\n\t\tthis.local.declaration = this;\n\n\t\tscope.addDeclaration( this.local, 'import' );\n\t\tsuper.initialise( program, scope );\n\t}\n}\n","import Node from '../Node.js';\n\nexport default class LabeledStatement extends Node {\n\tgetRightHandSide () {\n\t\treturn this.body.getRightHandSide();\n\t}\n\n\tinitialise ( program, scope ) {\n\t\tprogram.addWord( this.label.name );\n\t\tsuper.initialise( program, scope );\n\t}\n\n\tminify ( code, chars ) {\n\t\t// TODO can we mangle labels?\n\n\t\tif ( this.body.start > this.label.end + 1 ) {\n\t\t\tcode.overwrite( this.label.end, this.body.start, ':' );\n\t\t}\n\n\t\t// special case — empty body\n\t\tif ( this.body.isEmpty() ) {\n\t\t\tcode.appendLeft( this.body.start, ';' );\n\t\t\tcode.remove( this.body.start, this.body.end );\n\t\t} else {\n\t\t\tthis.body.minify( code, chars );\n\t\t}\n\t}\n}\n","import Node from '../Node.js';\nimport stringify from '../../utils/stringify.js';\n\nexport default class Literal extends Node {\n\tattachScope ( program, scope ) {\n\t\tif ( this.value === 'use strict' ) {\n\t\t\tconst block = this.parent.parent;\n\t\t\tif ( block.type === 'Program' || /Function/.test( block.parent.type ) ) {\n\t\t\t\tconst body = block.body;\n\t\t\t\tif ( body.indexOf( this.parent ) === 0 ) {\n\t\t\t\t\t// TODO use this! add pragma to blocks when minifying them\n\t\t\t\t\tscope.useStrict = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tgetPrecedence () {\n\t\treturn 21;\n\t}\n\n\tgetValue () {\n\t\treturn this.value;\n\t}\n\n\tinitialise ( program ) {\n\t\tprogram.addWord( stringify( this.value ) );\n\t}\n\n\tminify ( code ) {\n\t\tif ( this.value === true || this.value === false ) {\n\t\t\tcode.overwrite( this.start, this.end, this.value ? '!0' : '!1', {\n\t\t\t\tcontentOnly: true\n\t\t\t});\n\t\t}\n\n\t\telse if ( typeof this.value === 'number' ) {\n\t\t\tcode.overwrite( this.start, this.end, stringify( this.value ), {\n\t\t\t\tcontentOnly: true\n\t\t\t});\n\t\t}\n\t}\n}\n","import Node from '../Node.js';\nimport { UNKNOWN } from '../../utils/sentinels.js';\n\nexport default class LogicalExpression extends Node {\n\tgetLeftHandSide () {\n\t\tconst leftValue = this.left.getValue();\n\n\t\tif ( leftValue === UNKNOWN ) return this.left.getLeftHandSide();\n\n\t\treturn ( this.operator === '&&' ?\n\t\t\t( leftValue ? this.right : this.left ) :\n\t\t\t( leftValue ? this.left : this.right )\n\t\t).getLeftHandSide();\n\t}\n\n\tgetPrecedence () {\n\t\tconst leftValue = this.left.getValue();\n\t\tconst rightValue = this.right.getValue();\n\n\t\tif ( leftValue === UNKNOWN || rightValue === UNKNOWN ) return this.operator === '&&' ? 6 : 5;\n\n\t\treturn 20; // will be replaced by a literal\n\t}\n\n\tgetRightHandSide () {\n\t\tconst leftValue = this.left.getValue();\n\n\t\tif ( leftValue === UNKNOWN ) return this.right.getRightHandSide();\n\n\t\treturn ( this.operator === '&&' ?\n\t\t\t( leftValue ? this.right : this.left ) :\n\t\t\t( leftValue ? this.left : this.right )\n\t\t).getRightHandSide();\n\t}\n\n\tgetValue () {\n\t\tconst leftValue = this.left.getValue();\n\t\tconst rightValue = this.right.getValue();\n\n\t\tif ( leftValue === UNKNOWN || rightValue === UNKNOWN ) return UNKNOWN;\n\n\t\tif ( this.operator === '&&' ) {\n\t\t\tif ( leftValue ) return rightValue;\n\t\t} else {\n\t\t\tif ( leftValue ) return leftValue;\n\t\t\treturn rightValue;\n\t\t}\n\t}\n\n\tminify ( code, chars ) {\n\t\tconst leftValue = this.left.getValue();\n\n\t\tif ( leftValue === UNKNOWN ) {\n\t\t\tif ( this.right.start > this.left.end + this.operator.length ) {\n\t\t\t\tcode.overwrite( this.left.end, this.right.start, this.operator );\n\t\t\t}\n\n\t\t\tsuper.minify( code, chars );\n\t\t}\n\n\t\telse if ( leftValue ) {\n\t\t\tif ( this.operator === '&&' ) {\n\t\t\t\tcode.remove( this.start, this.right.start );\n\t\t\t\tthis.right.minify( code, chars );\n\t\t\t} else {\n\t\t\t\tcode.remove( this.left.end, this.end );\n\t\t\t\tthis.left.minify( code, chars );\n\t\t\t}\n\t\t}\n\n\t\telse {\n\t\t\tif ( this.operator === '&&' ) {\n\t\t\t\tcode.remove( this.left.end, this.end );\n\t\t\t\tthis.left.minify( code, chars );\n\t\t\t} else {\n\t\t\t\tcode.remove( this.start, this.right.start );\n\t\t\t\tthis.right.minify( code, chars );\n\t\t\t}\n\t\t}\n\t}\n}\n","import Node from '../Node.js';\nimport { reservedLookup } from '../../utils/reserved.js';\nimport { UNKNOWN } from '../../utils/sentinels.js';\nimport stringify from '../../utils/stringify.js';\nimport getValuePrecedence from '../../utils/getValuePrecedence.js';\n\nfunction isValidIdentifier ( str ) {\n\t// TODO there's probably a bit more to it than this\n\treturn !reservedLookup[ str ] && /^[a-zA-Z_$][a-zA-Z_$0-9]*$/.test( str );\n}\n\nfunction canFold ( node, parent ) {\n\twhile ( parent.type === 'ParenthesizedExpression' ) {\n\t\tnode = parent;\n\t\tparent = node.parent;\n\t}\n\n\tif ( parent.type === 'UpdateExpression' ) return false;\n\tif ( parent.type === 'AssignmentExpression' || /For(In|Of)Statement/.test( parent.type ) ) return node !== parent.left;\n\n\treturn true;\n}\n\nexport default class MemberExpression extends Node {\n\tgetLeftHandSide () {\n\t\treturn this.object.getLeftHandSide();\n\t}\n\n\tgetValue () {\n\t\tconst objectValue = this.object.getValue();\n\t\tif ( !objectValue || objectValue === UNKNOWN ) return UNKNOWN;\n\n\t\tconst propertyValue = this.computed ? this.property.getValue() : this.property.name;\n\t\tif ( propertyValue === UNKNOWN ) return UNKNOWN;\n\n\t\tconst value = objectValue[ propertyValue ];\n\t\tif ( value === UNKNOWN || typeof value === 'function' ) return UNKNOWN;\n\n\t\treturn value;\n\t}\n\n\tgetPrecedence () {\n\t\tconst value = this.getValue();\n\n\t\treturn value === UNKNOWN ? 19 : getValuePrecedence( value );\n\t}\n\n\tgetRightHandSide () {\n\t\treturn this;\n\t}\n\n\tinitialise ( program, scope ) {\n\t\tif ( !this.computed ) program.addWord( this.property.name );\n\t\tsuper.initialise( program, scope );\n\t}\n\n\tminify ( code, chars ) {\n\t\tconst value = this.getValue();\n\n\t\tif ( value && value !== UNKNOWN && canFold( this, this.parent ) ) {\n\t\t\tconst str = stringify( value );\n\n\t\t\tif ( str !== null ) {\n\t\t\t\tcode.overwrite( this.start, this.end, str );\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// special case — numbers\n\t\tconst objectValue = this.object.getValue();\n\t\tif ( typeof objectValue === 'number' && objectValue === parseInt( objectValue, 10 ) ) {\n\t\t\tthis.object.append( code, '.' );\n\t\t}\n\n\t\tif ( this.computed ) {\n\t\t\tconst value = this.property.getValue();\n\n\t\t\tif ( String( Number( value ) ) === String( value ) ) {\n\t\t\t\tcode.overwrite( this.object.end, this.end, `[${value}]` );\n\t\t\t}\n\n\t\t\telse if ( typeof value === 'string' && isValidIdentifier( value ) ) {\n\t\t\t\tcode.overwrite( this.object.end, this.end, `.${value}` );\n\t\t\t}\n\n\t\t\telse {\n\t\t\t\tif ( this.property.start > this.object.end + 1 ) {\n\t\t\t\t\tcode.overwrite( this.object.end, this.property.start, '[' );\n\t\t\t\t}\n\n\t\t\t\tif ( this.end > this.property.end + 1 ) {\n\t\t\t\t\tcode.overwrite( this.property.end, this.end, ']' );\n\t\t\t\t}\n\n\t\t\t\tthis.property.minify( code, chars );\n\t\t\t}\n\t\t}\n\n\t\telse {\n\t\t\tif ( this.property.start > this.object.end + 1 ) {\n\t\t\t\tcode.overwrite( this.object.end, this.property.start, '.' );\n\t\t\t}\n\t\t}\n\n\t\tthis.object.minify( code, chars );\n\t}\n}\n","function isAccessor ( property ) {\n\treturn property.kind === 'get' || property.kind === 'set';\n}\n\nexport default function minifyPropertyKey ( code, chars, property, isObject ) {\n\tif ( property.shorthand ) return;\n\n\tconst separator = ( isObject && !property.method && !isAccessor( property ) ) ? ':' : '';\n\n\tif ( property.value.async || property.value.generator || property.computed || property.static || isAccessor( property ) ) {\n\t\tlet prefix = '';\n\t\tif ( property.static ) prefix += 'static'; // only applies to class methods, obviously\n\n\t\tif ( isAccessor( property ) ) {\n\t\t\tprefix += ( property.static ) ? ` ${property.kind}` : property.kind;\n\t\t} else if ( property.value.async ) {\n\t\t\tprefix += ( property.static ? ' async' : 'async' );\n\t\t} else if ( property.value.generator ) {\n\t\t\tprefix += '*';\n\t\t}\n\n\t\tif ( property.computed ) {\n\t\t\tprefix += '[';\n\t\t} else if ( prefix && !property.value.generator ) {\n\t\t\tprefix += ' ';\n\t\t}\n\n\t\tif ( property.key.start - property.start > prefix.length ) code.overwrite( property.start, property.key.start, prefix );\n\n\t\tconst suffix = ( property.computed ? ']' : '' ) + separator;\n\t\tif ( property.value.start - property.key.end > suffix.length ) code.overwrite( property.key.end, property.value.start, suffix );\n\t}\n\n\telse if ( separator ) {\n\t\tif ( property.value.start - property.key.end > 1 ) code.overwrite( property.key.end, property.value.start, separator );\n\t}\n\n\telse {\n\t\tcode.remove( property.key.end, property.value.start );\n\t}\n\n\tproperty.key.minify( code, chars );\n}","import Node from '../Node.js';\nimport minifyPropertyKey from './shared/minifyPropertyKey.js';\n\nexport default class MethodDefinition extends Node {\n\tinitialise ( program, scope ) {\n\t\tif ( !this.computed ) program.addWord( this.key.name );\n\t\tsuper.initialise( program, scope );\n\t}\n\n\tminify ( code, chars ) {\n\t\tminifyPropertyKey( code, chars, this, false );\n\t\tthis.value.minify( code, chars );\n\t}\n}\n","import Node from '../Node.js';\n\nexport default class NewExpression extends Node {\n\tgetPrecedence () {\n\t\treturn this.arguments.length > 0 ? 19 : 18;\n\t}\n\n\tinitialise ( program, scope ) {\n\t\tprogram.addWord( 'new' );\n\t\tsuper.initialise( program, scope );\n\t}\n\n\tminify ( code, chars ) {\n\t\tif ( this.arguments.length ) {\n\t\t\tlet lastNode = this.callee;\n\n\t\t\tfor ( let i = 0; i < this.arguments.length; i += 1 ) {\n\t\t\t\tconst argument = this.arguments[i];\n\n\t\t\t\tif ( argument.start > lastNode.end + 1 ) code.overwrite( lastNode.end, argument.start, i ? ',' : '(' );\n\t\t\t\tlastNode = argument;\n\t\t\t}\n\n\t\t\tif ( this.end > lastNode.end + 1 ) code.overwrite( lastNode.end, this.end, ')' );\n\t\t}\n\n\t\telse if ( this.end > this.callee.end ) {\n\t\t\tcode.remove( this.callee.end, this.end );\n\t\t}\n\n\t\tsuper.minify( code, chars );\n\t}\n}\n","import Node from '../Node.js';\nimport minifyPropertyKey from './shared/minifyPropertyKey.js';\nimport { UNKNOWN } from '../../utils/sentinels.js';\n\nexport default class ObjectExpression extends Node {\n\tgetValue () {\n\t\treturn UNKNOWN;\n\t}\n\n\tminify ( code, chars ) {\n\t\tlet c = this.start;\n\n\t\tif ( this.properties.length ) {\n\t\t\tfor ( let i = 0; i < this.properties.length; i += 1 ) {\n\t\t\t\tconst p = this.properties[i];\n\n\t\t\t\tif ( p.start > c + 1 ) code.overwrite( c, p.start, i ? ',' : '{' );\n\n\t\t\t\tminifyPropertyKey( code, chars, p, true );\n\t\t\t\tp.value.minify( code, chars );\n\n\t\t\t\tc = p.end;\n\t\t\t}\n\n\t\t\tif ( this.end > c + 1 ) code.remove( c, this.end - 1 );\n\t\t} else if ( this.end > this.start + 2 ) {\n\t\t\tcode.overwrite( this.start, this.end, '{}' );\n\t\t}\n\t}\n}\n","import Node from '../Node.js';\n\nexport default class ObjectPattern extends Node {\n\tminify ( code, chars ) {\n\t\tlet c = this.start + 1;\n\t\tfor ( let i = 0; i < this.properties.length; i += 1 ) {\n\t\t\t// TODO remove unused properties\n\t\t\tconst property = this.properties[i];\n\t\t\tproperty.minify( code, chars );\n\n\t\t\tif ( property.start > c ) code.overwrite( c, property.start, i ? ',' : '' );\n\t\t\tc = property.end;\n\t\t}\n\n\t\tcode.remove( c, this.end - 1 );\n\t}\n}\n","import Node from '../Node.js';\n\nfunction shouldRemoveParens ( expression, parent ) {\n\tif ( /^Object/.test( expression.getLeftHandSide().type ) || /^Object/.test( expression.getRightHandSide().type ) ) {\n\t\treturn false;\n\t}\n\n\tif ( expression.type === 'CallExpression' ) {\n\t\treturn expression.callee.type === 'FunctionExpression' && parent.type === 'ExpressionStatement';\n\t}\n\n\tif ( expression.type === 'FunctionExpression' ) {\n\t\treturn (\n\t\t\t( parent.type === 'CallExpression' && parent.parent.type === 'ExpressionStatement' ) ||\n\t\t\t( parent.type === 'ExpressionStatement' && parent.parent.type === 'CallExpression' )\n\t\t);\n\t}\n\n\t// special case — `(-x)**y`\n\tif ( expression.type === 'UnaryExpression' && parent.type === 'BinaryExpression' && parent.operator === '**' ) {\n\t\tif ( parent.left.contains( expression ) ) return false;\n\t}\n\n\tconst expressionPrecedence = expression.getPrecedence();\n\tconst parentPrecedence = parent.getPrecedence();\n\n\tif ( parentPrecedence > expressionPrecedence ) return false;\n\tif ( expressionPrecedence > parentPrecedence ) return true;\n\n\tif ( expression.type === 'UnaryExpression' ) return true;\n\tif ( expression.type === 'AssignmentExpression' ) return true;\n\tif ( expression.type === 'LogicalExpression' || expression.type === 'BinaryExpression' ) {\n\t\treturn ( parent.operator === '**' ? parent.right : parent.left ).contains( expression );\n\t}\n}\n\nexport default class ParenthesizedExpression extends Node {\n\tgetLeftHandSide () {\n\t\tlet node = this;\n\n\t\twhile ( node.type === 'ParenthesizedExpression' ) {\n\t\t\tnode = node.expression;\n\t\t}\n\n\t\tif ( shouldRemoveParens( node, this.parent ) ) return node.getLeftHandSide();\n\t\treturn node.parent;\n\t}\n\n\tgetRightHandSide () {\n\t\tlet node = this;\n\n\t\twhile ( node.type === 'ParenthesizedExpression' ) {\n\t\t\tnode = node.expression;\n\t\t}\n\n\t\tif ( shouldRemoveParens( node, this.parent ) ) return node.getRightHandSide();\n\t\treturn node.parent;\n\t}\n\n\tgetPrecedence () {\n\t\treturn 20;\n\t}\n\n\tgetValue () {\n\t\treturn this.expression.getValue();\n\t}\n\n\tminify ( code, chars ) {\n\t\tlet start = this.start;\n\t\tlet end = this.end;\n\t\tlet parent = this.parent;\n\n\t\tlet expression = this.expression;\n\t\twhile ( expression.type === 'ParenthesizedExpression' ) expression = expression.expression;\n\n\t\tif ( shouldRemoveParens( expression, parent ) ) {\n\t\t\tcode.remove( start, expression.start );\n\t\t\tcode.remove( expression.end, end );\n\t\t} else {\n\t\t\tif ( expression.start > this.start + 1 ) code.remove( this.start + 1, expression.start );\n\t\t\tif ( this.end > expression.end + 1 ) code.remove( expression.end, this.end - 1 );\n\t\t}\n\n\t\t// special case (?) – IIFE\n\t\tif (\n\t\t\t(\n\t\t\t\tthis.parent.type === 'CallExpression' &&\n\t\t\t\tthis.parent.parent.type === 'ExpressionStatement' &&\n\t\t\t\texpression.type === 'FunctionExpression'\n\t\t\t) ||\n\t\t\t(\n\t\t\t\tthis.parent.type === 'ExpressionStatement' &&\n\t\t\t\texpression.type === 'CallExpression' &&\n\t\t\t\texpression.callee.type === 'FunctionExpression'\n\t\t\t)\n\t\t) {\n\t\t\texpression.prepend( code, '!' ); // could be any unary operator – uglify uses !\n\t\t}\n\n\t\texpression.minify( code, chars );\n\t}\n}\n","import Node from '../Node.js';\nimport { UNKNOWN } from '../../utils/sentinels.js';\nimport stringify from '../../utils/stringify.js';\n\nconst invalidChars = /[a-zA-Z$_0-9/]/;\n\nexport default class ReturnStatement extends Node {\n\tinitialise ( program, scope ) {\n\t\tprogram.addWord( 'return' );\n\t\tsuper.initialise( program, scope );\n\t}\n\n\tminify ( code, chars ) {\n\t\tif ( !this.argument ) return;\n\n\t\tconst value = this.argument.getValue();\n\n\t\tconst needsTrailingWhitespace = value === UNKNOWN ?\n\t\t\tinvalidChars.test( code.original[ this.argument.getLeftHandSide().start ] ) :\n\t\t\tinvalidChars.test( stringify( value )[0] );\n\n\t\tif ( needsTrailingWhitespace && this.argument.start === this.start + 6 ) {\n\t\t\t// ensure that parenthesized expression isn't too close\n\t\t\tcode.appendLeft( this.start + 6, ' ' );\n\t\t}\n\n\t\tlet c = this.start + ( needsTrailingWhitespace ? 7 : 6 );\n\t\tif ( this.argument.start > c ) {\n\t\t\tcode.remove( c, this.argument.start );\n\t\t}\n\n\t\tthis.argument.minify( code, chars );\n\t}\n}\n","import Node from '../Node.js';\n\nexport default class SpreadElement extends Node {\n\tgetPrecedence () {\n\t\treturn 1;\n\t}\n}\n","import Node from '../Node.js';\n\nexport default class SwitchCase extends Node {\n\tgetRightHandSide () {\n\t\tif ( this.consequent.length > 0 ) {\n\t\t\treturn this.consequent[ this.consequent.length - 1 ].getRightHandSide();\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tinitialise ( program, scope ) {\n\t\tprogram.addWord( this.test ? 'case' : 'default' );\n\t\tsuper.initialise( program, scope );\n\t}\n\n\tminify ( code, chars ) {\n\t\tlet c;\n\n\t\tif ( this.test ) {\n\t\t\tthis.test.minify( code, chars );\n\n\t\t\tif ( this.test.start > this.start + 5 ) {\n\t\t\t\tcode.remove( this.start + 5, this.test.start );\n\t\t\t}\n\n\t\t\tc = this.test.end;\n\t\t} else {\n\t\t\t// default\n\t\t\tc = this.start + 7;\n\t\t}\n\n\t\tthis.consequent.forEach( ( statement, i ) => {\n\t\t\tstatement.minify( code, chars );\n\n\t\t\tconst separator = i ? ';' : ':'; // TODO can consequents be written as sequences?\n\n\t\t\tif ( statement.start === c ) {\n\t\t\t\tcode.appendLeft( c, separator );\n\t\t\t} else {\n\t\t\t\tif ( code.original.slice( c, statement.start ) !== separator ) {\n\t\t\t\t\tcode.overwrite( c, statement.start, separator );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tc = statement.end;\n\t\t\twhile ( code.original[ c - 1 ] === ';' ) c -= 1;\n\t\t});\n\t}\n}\n","import Node from '../Node.js';\nimport { UNKNOWN } from '../../utils/sentinels.js';\n\nexport default class SwitchStatement extends Node {\n\tinitialise ( program, scope ) {\n\t\tsuper.initialise( program, scope );\n\n\t\tif ( this.cases.length === 0 ) {\n\t\t\tconst value = this.discriminant.getValue();\n\t\t\tthis.skip = value !== UNKNOWN || this.discriminant.type === 'Identifier';\n\t\t}\n\n\t\tif ( !this.skip ) {\n\t\t\tprogram.addWord( 'switch' );\n\t\t}\n\t}\n\n\tminify ( code, chars ) {\n\t\t// special (and unlikely!) case — no cases, but a non-removable discriminant\n\t\tif ( this.cases.length === 0 ) {\n\t\t\tthis.discriminant.minify( code, chars );\n\t\t\tcode.remove( this.start, this.discriminant.start );\n\t\t\tcode.remove( this.discriminant.end, this.end );\n\t\t}\n\n\t\telse {\n\t\t\tif ( this.discriminant.start > this.start + 7 ) {\n\t\t\t\tcode.overwrite( this.start + 6, this.discriminant.start, '(' );\n\t\t\t}\n\n\t\t\tlet c = this.discriminant.end;\n\n\t\t\tthis.cases.forEach( ( switchCase, i ) => {\n\t\t\t\tcode.remove( c, switchCase.start );\n\t\t\t\tswitchCase.prepend( code, i > 0 ? ';' : '){' );\n\n\t\t\t\tc = switchCase.end;\n\t\t\t\twhile ( code.original[ c - 1 ] === ';' ) c -= 1;\n\t\t\t});\n\n\t\t\tif ( this.end > c + 1 ) code.overwrite( c, this.end, '}' );\n\n\t\t\tsuper.minify( code, chars );\n\t\t}\n\t}\n}\n","import Node from '../Node.js';\n\nexport default class TaggedTemplateExpression extends Node {\n\tminify ( code, chars ) {\n\t\tif ( this.quasi.start > this.tag.end ) code.remove( this.tag.end, this.quasi.start );\n\t\tthis.quasi.minify( code, chars );\n\t}\n}\n","import Node from '../Node.js';\nimport { UNKNOWN } from '../../utils/sentinels.js';\nimport stringify from '../../utils/stringify.js';\n\nexport default class TemplateLiteral extends Node {\n\tgetValue () {\n\t\tlet values = new Array( this.expressions.length );\n\t\tlet i;\n\n\t\tfor ( i = 0; i < this.expressions.length; i += 1 ) {\n\t\t\tconst expression = this.expressions[i];\n\t\t\tconst value = expression.getValue();\n\n\t\t\tif ( value === UNKNOWN ) return UNKNOWN;\n\n\t\t\tvalues[i] = value;\n\t\t}\n\n\t\tlet result = '';\n\n\t\tfor ( i = 0; i < this.expressions.length; i += 1 ) {\n\t\t\tconst value = values[i];\n\n\t\t\tresult += this.quasis[i].value.raw;\n\t\t\tresult += value;\n\t\t}\n\n\t\tresult += this.quasis[i].value.raw;\n\n\t\treturn result;\n\t}\n\n\tminify ( code, chars ) {\n\t\tif ( this.parent.type !== 'TaggedTemplateExpression' ) {\n\t\t\tconst value = this.getValue();\n\n\t\t\tif ( value !== UNKNOWN ) {\n\t\t\t\tcode.overwrite( this.start, this.end, stringify( value ) );\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tlet c = this.start;\n\t\tlet i;\n\t\tfor ( i = 0; i < this.expressions.length; i += 1 ) {\n\t\t\tconst quasi = this.quasis[i];\n\t\t\tconst nextQuasi = this.quasis[i+1];\n\t\t\tconst expression = this.expressions[i];\n\n\t\t\tconst value = expression.getValue();\n\t\t\tif ( typeof value === 'object' ) { // includes both UNKNOWN and known non-primitives\n\t\t\t\texpression.minify( code, chars );\n\n\t\t\t\tif ( expression.start > quasi.end + 2 ) {\n\t\t\t\t\tcode.remove( quasi.end + 2, expression.start );\n\t\t\t\t}\n\n\t\t\t\tc = ( nextQuasi ? nextQuasi.start : this.end ) - 1;\n\t\t\t\tif ( expression.end < c ) code.remove( expression.end, c );\n\t\t\t} else {\n\t\t\t\tcode.overwrite( quasi.end, expression.end, String( value ) );\n\t\t\t\tc = ( nextQuasi ? nextQuasi.start : this.end - 1 );\n\t\t\t\tif ( expression.end < c ) code.remove( expression.end, c );\n\t\t\t}\n\t\t}\n\n\t\tconst lastQuasi = this.quasis[i];\n\n\t\tif ( lastQuasi.start > c + 1 ) {\n\t\t\tcode.remove( c, lastQuasi.start - 1 );\n\t\t}\n\t}\n}\n","import Node from '../Node.js';\n\nexport default class TryStatement extends Node {\n\tinitialise ( program, scope ) {\n\t\tprogram.addWord( 'try' );\n\t\tif ( this.finalizer ) program.addWord( 'finally' );\n\n\t\tsuper.initialise( program, scope );\n\t}\n\n\tminify ( code, chars ) {\n\t\tif ( this.block.start > this.start + 3 ) code.remove( this.start + 3, this.block.start );\n\n\t\tif ( this.handler ) {\n\t\t\tif ( this.handler.start > this.block.end ) {\n\t\t\t\tcode.remove( this.block.end, this.handler.start );\n\t\t\t}\n\n\t\t\tif ( this.finalizer && this.finalizer.start > this.handler.end + 7 ) {\n\t\t\t\tcode.overwrite( this.handler.end, this.finalizer.start, 'finally' );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( this.finalizer.start > this.block.end + 7 ) {\n\t\t\t\tcode.overwrite( this.block.end, this.finalizer.start, 'finally' );\n\t\t\t}\n\t\t}\n\n\t\tsuper.minify( code, chars );\n\t}\n}\n","import Node from '../Node.js';\nimport { UNKNOWN } from '../../utils/sentinels.js';\nimport stringify from '../../utils/stringify.js';\nimport getValuePrecedence from '../../utils/getValuePrecedence.js';\n\nconst calculators = {\n\t'!': x => !x,\n\t'~': x => ~x,\n\t'+': x => +x,\n\t'-': x => -x,\n\t'typeof': x  => typeof x,\n\t'void'  : x  => void x,\n\t'delete': () => UNKNOWN\n};\n\nexport default class UnaryExpression extends Node {\n\tgetPrecedence () {\n\t\tconst value = this.getValue();\n\t\treturn value === UNKNOWN ? 16 : getValuePrecedence( value );\n\t}\n\n\tgetValue () {\n\t\tconst arg = this.argument.getValue();\n\n\t\tif ( arg === UNKNOWN ) return UNKNOWN;\n\t\treturn calculators[ this.operator ]( arg );\n\t}\n\n\tminify ( code, chars ) {\n\t\tconst value = this.getValue();\n\t\tif ( value !== UNKNOWN ) {\n\t\t\tcode.overwrite( this.start, this.end, stringify( value ) );\n\t\t}\n\n\t\telse {\n\t\t\tconst len = this.operator.length;\n\t\t\tconst start = this.start + len;\n\n\t\t\tconst insertWhitespace = len > 1 && this.argument.getLeftHandSide().type !== 'ParenthesizedExpression';\n\t\t\tif ( insertWhitespace ) code.appendLeft( start, ' ' );\n\n\t\t\tcode.remove( start, this.argument.start );\n\n\t\t\tsuper.minify( code, chars );\n\t\t}\n\t}\n}\n","import Node from '../Node.js';\nimport CompileError from '../../utils/CompileError.js';\n\nexport default class UpdateExpression extends Node {\n\tgetPrecedence () {\n\t\treturn this.prefix ? 16 : 17;\n\t}\n\n\tinitialise ( program, scope ) {\n\t\tif ( this.argument.type === 'Identifier' ) {\n\t\t\tconst declaration = scope.findDeclaration( this.argument.name );\n\t\t\tif ( declaration && declaration.kind === 'const' ) {\n\t\t\t\tthrow new CompileError( this, `${this.argument.name} is read-only` );\n\t\t\t}\n\t\t}\n\n\t\tsuper.initialise( program, scope );\n\t}\n}\n","import Node from '../Node.js';\nimport extractNames from '../extractNames.js';\n\nfunction compatibleDeclarations ( a, b ) {\n\tif ( a === b ) return true;\n\tif ( a === 'var' || b === 'var' ) return false;\n\treturn true;\n}\n\nexport default class VariableDeclaration extends Node {\n\tattachScope ( program, scope ) {\n\t\tthis.declarations.forEach( declarator => {\n\t\t\tdeclarator.attachScope( program, scope );\n\t\t});\n\n\t\tscope.functionScope.varDeclarationNodes.push( this );\n\t}\n\n\tinitialise ( program, scope ) {\n\t\t// TODO `program.addWord(kind)`, but only if this declaration is included...\n\n\t\tlet _scope = scope;\n\t\tif ( this.kind === 'var' ) while ( _scope.isBlockScope ) _scope = _scope.parent;\n\n\t\tif ( !_scope.parent ) {\n\t\t\tthis.skip = false;\n\t\t}\n\n\t\tthis.declarations.forEach( declarator => {\n\t\t\tif ( !_scope.parent ) {\n\t\t\t\t// only initialise top-level variables. TODO unless we're in e.g. module mode\n\t\t\t\tdeclarator.initialise( program, scope );\n\t\t\t} else {\n\t\t\t\tif ( declarator.init ) declarator.init.initialise( program, scope );\n\t\t\t}\n\t\t});\n\t}\n\n\tminify ( code, chars ) {\n\t\tif ( this.collapsed ) return;\n\n\t\t// collapse consecutive declarations into one\n\t\tconst declarations = this.declarations;\n\n\t\tif ( this.parent.type === 'BlockStatement' || this.parent.type === 'Program' ) {\n\t\t\tlet index = this.parent.body.indexOf( this ) + 1;\n\t\t\tdo {\n\t\t\t\tconst next = this.parent.body[ index ];\n\t\t\t\tif ( next && next.type === 'VariableDeclaration' && compatibleDeclarations( next.kind, this.kind ) ) {\n\t\t\t\t\tdeclarations.push( ...next.declarations );\n\t\t\t\t\tnext.collapsed = true;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tindex += 1;\n\t\t\t} while ( index < this.parent.body.length );\n\t\t}\n\n\t\tlet allDupes = declarations.every( declarator => {\n\t\t\tif ( declarator.skip ) return true;\n\n\t\t\tconst names = extractNames( declarator.id );\n\t\t\treturn names.length > 0 && names.every( identifier => {\n\t\t\t\treturn identifier.isDuplicate;\n\t\t\t});\n\t\t});\n\n\t\tconst kind = this.kind === 'const' ? 'let' : this.kind; // TODO preserve const at top level?\n\t\tlet c = this.start;\n\t\tlet first = true;\n\t\tlet needsKeyword = !allDupes;\n\n\t\tfor ( let i = 0; i < declarations.length; i += 1 ) {\n\t\t\tconst declarator = declarations[i];\n\n\t\t\tif ( declarator.skip ) {\n\t\t\t\tif ( !declarator.init || declarator.init.skip ) continue;\n\n\t\t\t\tdeclarator.init.minify( code, chars );\n\n\t\t\t\t// we have a situation like `var unused = x()` — need to preserve `x()`\n\t\t\t\tcode.overwrite( c, declarator.init.start, first ? '' : ';' );\n\t\t\t\tneedsKeyword = true;\n\t\t\t} else {\n\t\t\t\tdeclarator.minify( code, chars );\n\n\t\t\t\tlet separator = needsKeyword ?\n\t\t\t\t\t( first ? kind : `;${kind}` ) + ( declarator.id.type === 'Identifier' ? ' ' : '' ) :\n\t\t\t\t\tfirst ? '' : ',';\n\n\t\t\t\tcode.overwrite( c, declarator.start, separator );\n\t\t\t\tneedsKeyword = false;\n\t\t\t}\n\n\t\t\tc = declarator.end;\n\t\t\tfirst = false;\n\t\t}\n\n\t\tif ( this.end > c + 1 ) code.remove( c, this.end - 1 );\n\n\t\t// we may have been asked to declare some additional vars, if they were\n\t\t// declared inside blocks that have been removed\n\t\tif ( this.rideAlongs ) code.appendLeft( c, `,` + this.rideAlongs.join( ',' ) );\n\t}\n}\n","import Node from '../Node.js';\nimport extractNames from '../extractNames.js';\n\nfunction mightHaveSideEffects ( node ) {\n\t// TODO this can get way more sophisticated\n\tif ( node.type === 'Identifier' || node.type === 'Literal' || /FunctionExpression/.test( node.type ) ) return false;\n\treturn true;\n}\n\nexport default class VariableDeclarator extends Node {\n\tactivate () {\n\t\tif ( this.activated ) return;\n\t\tthis.activated = true;\n\n\t\tthis.skip = this.parent.skip = false;\n\t\tthis.id.initialise( this.program, this.scope );\n\t\tif ( this.init ) this.init.initialise( this.program, this.scope );\n\t}\n\n\tattachScope ( program, scope ) {\n\t\tthis.program = program;\n\t\tthis.scope = scope;\n\n\t\tconst kind = this.parent.kind;\n\n\t\tthis.id.attachScope( program, scope );\n\n\t\tif ( this.init ) {\n\t\t\tthis.init.attachScope( program, scope );\n\n\t\t\tif ( mightHaveSideEffects( this.init ) ) {\n\t\t\t\tthis.parent.skip = false;\n\t\t\t}\n\t\t}\n\n\t\textractNames( this.id ).forEach( node => {\n\t\t\tnode.declaration = this;\n\t\t\tscope.addDeclaration( node, kind );\n\t\t});\n\t}\n\n\tminify ( code, chars ) {\n\t\tif ( this.init ) {\n\t\t\tif ( this.init.start > this.id.end + 1 ) code.overwrite( this.id.end, this.init.start, '=' );\n\t\t}\n\n\t\tsuper.minify( code, chars );\n\t}\n}\n","import Node from '../Node.js';\n\nexport default class WhileStatement extends Node {\n\tgetRightHandSide () {\n\t\treturn this.body.getRightHandSide();\n\t}\n\n\tinitialise ( program, scope ) {\n\t\tprogram.addWord( 'while' );\n\t\tsuper.initialise( program, scope );\n\t}\n\n\tminify ( code, chars ) {\n\t\tif ( this.test.start > this.start + 6 ) {\n\t\t\tcode.overwrite( this.start + 5, this.test.start, '(' );\n\t\t}\n\n\t\tif ( this.body.start > this.test.end + 1 ) {\n\t\t\tcode.overwrite( this.test.end, this.body.start, ')' );\n\t\t}\n\n\t\t// special case — empty body\n\t\tif ( this.body.isEmpty() ) {\n\t\t\tcode.appendLeft( this.body.start, ';' );\n\t\t\tcode.remove( this.body.start, this.body.end );\n\t\t}\n\n\t\tsuper.minify( code, chars );\n\t}\n}\n","import Node from '../Node.js';\n\nexport default class YieldExpression extends Node {\n\tgetPrecedence () {\n\t\treturn 2;\n\t}\n\n\tinitialise ( program, scope ) {\n\t\tprogram.addWord( 'yield' );\n\t\tsuper.initialise( program, scope );\n\t}\n}\n","import Array from './shared/Array.js';\nimport ArrowFunctionExpression from './ArrowFunctionExpression.js';\nimport AssignmentExpression from './AssignmentExpression.js';\nimport BinaryExpression from './BinaryExpression.js';\nimport CallExpression from './CallExpression.js';\nimport CatchClause from './CatchClause.js';\nimport ClassBody from './ClassBody.js';\nimport ClassDeclaration from './ClassDeclaration.js';\nimport ClassExpression from './ClassExpression.js';\nimport ConditionalExpression from './ConditionalExpression.js';\nimport DoWhileStatement from './DoWhileStatement.js';\nimport EmptyStatement from './EmptyStatement.js';\nimport ExpressionStatement from './ExpressionStatement.js';\nimport ForStatement from './ForStatement.js';\nimport ForInOfStatement from './shared/ForInOfStatement.js';\nimport FunctionDeclaration from './FunctionDeclaration.js';\nimport FunctionExpression from './FunctionExpression.js';\nimport Identifier from './Identifier.js';\nimport IfStatement from './IfStatement.js';\nimport ImportDeclaration from './ImportDeclaration.js';\nimport ImportDefaultSpecifier from './ImportDefaultSpecifier.js';\nimport ImportSpecifier from './ImportSpecifier.js';\nimport LabeledStatement from './LabeledStatement.js';\nimport Literal from './Literal.js';\nimport LogicalExpression from './LogicalExpression.js';\nimport MemberExpression from './MemberExpression.js';\nimport MethodDefinition from './MethodDefinition.js';\nimport NewExpression from './NewExpression.js';\nimport ObjectExpression from './ObjectExpression.js';\nimport ObjectPattern from './ObjectPattern.js';\nimport ParenthesizedExpression from './ParenthesizedExpression.js';\nimport ReturnStatement from './ReturnStatement.js';\nimport SpreadElement from './SpreadElement.js';\nimport SwitchCase from './SwitchCase.js';\nimport SwitchStatement from './SwitchStatement.js';\nimport TaggedTemplateExpression from './TaggedTemplateExpression.js';\nimport TemplateLiteral from './TemplateLiteral.js';\nimport TryStatement from './TryStatement.js';\nimport UnaryExpression from './UnaryExpression.js';\nimport UpdateExpression from './UpdateExpression.js';\nimport VariableDeclaration from './VariableDeclaration.js';\nimport VariableDeclarator from './VariableDeclarator.js';\nimport WhileStatement from './WhileStatement.js';\nimport YieldExpression from './YieldExpression.js';\n\nexport default {\n\tArrayExpression: Array,\n\tArrayPattern: Array,\n\tArrowFunctionExpression,\n\tAssignmentExpression,\n\tBinaryExpression,\n\tCallExpression,\n\tCatchClause,\n\tClassBody,\n\tClassDeclaration,\n\tClassExpression,\n\tConditionalExpression,\n\tDoWhileStatement,\n\tEmptyStatement,\n\tExpressionStatement,\n\tForStatement,\n\tForInStatement: ForInOfStatement,\n\tForOfStatement: ForInOfStatement,\n\tFunctionDeclaration,\n\tFunctionExpression,\n\tIdentifier,\n\tIfStatement,\n\tImportDeclaration,\n\tImportDefaultSpecifier,\n\tImportSpecifier,\n\tLabeledStatement,\n\tLiteral,\n\tLogicalExpression,\n\tMemberExpression,\n\tMethodDefinition,\n\tNewExpression,\n\tObjectExpression,\n\tObjectPattern,\n\tParenthesizedExpression,\n\tReturnStatement,\n\tSpreadElement,\n\tSwitchCase,\n\tSwitchStatement,\n\tTaggedTemplateExpression,\n\tTemplateLiteral,\n\tTryStatement,\n\tUnaryExpression,\n\tUpdateExpression,\n\tVariableDeclaration,\n\tVariableDeclarator,\n\tWhileStatement,\n\tYieldExpression\n};\n","import { UNKNOWN } from '../utils/sentinels.js';\n\n// TODO make this a method of nodes\nexport default function breaksExecution ( node ) {\n\tif ( node.type === 'ReturnStatement' || node.type === 'BreakStatement' || node.type === 'ContinueStatement' ) {\n\t\treturn node;\n\t}\n\n\tif ( node.type === 'BlockStatement' ) {\n\t\tlet i = node.body.length;\n\t\twhile ( i-- ) {\n\t\t\tconst maybeReturnNode = breaksExecution( node.body[i] );\n\t\t\tif ( maybeReturnNode ) return maybeReturnNode;\n\t\t}\n\t}\n\n\tif ( node.type === 'IfStatement' ) {\n\t\tconst testValue = node.test.getValue();\n\n\t\tif ( testValue === UNKNOWN ) return null;\n\n\t\tif ( testValue ) { // if ( true ) {...}\n\t\t\treturn breaksExecution( node.consequent );\n\t\t}\n\n\t\t// if ( false ) {...}\n\t\tif ( !node.alternate ) return null;\n\n\t\treturn breaksExecution( node.alternate );\n\t}\n}\n","import Node from './Node.js';\nimport Scope from './Scope.js';\nimport extractNames from './extractNames.js';\nimport breaksExecution from '../analysis/breaksExecution.js';\n\nconst shouldPreserveAfterReturn = {\n\tFunctionDeclaration: true,\n\tVariableDeclaration: true,\n\tClassDeclaration: true\n};\n\nconst allowsBlockLessStatement = {\n\tBlockStatement: true,\n\tForStatement: true,\n\tForInStatement: true,\n\tForOfStatement: true,\n\tIfStatement: true,\n\tWhileStatement: true\n};\n\nfunction endsWithCurlyBrace ( statement ) { // TODO can we just use getRightHandSide?\n\tif ( statement.type === 'IfStatement' ) {\n\t\tif ( statement.rewriteAsSequence ) return false;\n\n\t\tif ( statement.alternate ) {\n\t\t\tif ( statement.alternate.type === 'IfStatement' ) {\n\t\t\t\treturn endsWithCurlyBrace( statement.alternate );\n\t\t\t}\n\n\t\t\tif ( statement.alternate.type !== 'BlockStatement' ) return false;\n\t\t\tif ( statement.alternate.canRemoveCurlies() ) return false;\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn statement.consequent.type === 'BlockStatement' && !statement.consequent.canRemoveCurlies();\n\t}\n\n\tif ( /^(?:For(?:In|Of)?|While)Statement/.test( statement.type ) ) {\n\t\treturn statement.body.type === 'BlockStatement' && !statement.body.canRemoveCurlies();\n\t}\n\n\tif ( statement.type === 'SwitchStatement' ) return true;\n\n\treturn /(?:Class|Function)Declaration/.test( statement.type );\n}\n\nfunction isVarDeclaration ( node ) {\n\treturn node.kind === 'var';\n}\n\nexport default class BlockStatement extends Node {\n\tattachScope ( program, parent ) {\n\t\tthis.parentIsFunction = /Function/.test( this.parent.type );\n\n\t\tif ( this.parentIsFunction ) {\n\t\t\tthis.scope = parent;\n\t\t} else {\n\t\t\tthis.scope = new Scope({\n\t\t\t\tblock: true,\n\t\t\t\tparent\n\t\t\t});\n\t\t}\n\n\t\tfor ( let i = 0; i < this.body.length; i += 1 ) {\n\t\t\tthis.body[i].attachScope( program, this.scope );\n\t\t}\n\t}\n\n\tcanRemoveCurlies () {\n\t\treturn allowsBlockLessStatement[ this.parent.type ] && ( this.canSequentialise() || ( this.body.length > 0 && this.body.every( isVarDeclaration ) ) );\n\t}\n\n\t// TODO memoize\n\tcanSequentialise () {\n\t\tfor ( let i = 0; i < this.body.length; i += 1 ) {\n\t\t\tconst node = this.body[i];\n\t\t\tif ( !node.skip && !node.canSequentialise() ) return false; // TODO what if it's a block with a late-activated declaration...\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t// TODO what is this about?\n\tfindVarDeclarations ( varsToHoist ) {\n\t\tthis.body.forEach( node => {\n\t\t\tif ( node.type === 'VariableDeclaration' && node.kind === 'var' ) {\n\t\t\t\tnode.declarations.forEach( declarator => {\n\t\t\t\t\textractNames( declarator.id ).forEach( identifier => {\n\t\t\t\t\t\tvarsToHoist[ identifier.name ] = true;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tnode.findVarDeclarations( varsToHoist );\n\t\t\t}\n\t\t});\n\t}\n\n\tgetLeftHandSide () {\n\t\tif ( this.body.length > 0 && ( this.canSequentialise() || this.body.every( isVarDeclaration ) ) ) {\n\t\t\treturn this.body[0].getLeftHandSide();\n\t\t}\n\t\treturn this;\n\t}\n\n\tgetRightHandSide () {\n\t\tif ( this.body.length > 0 && ( this.canSequentialise() || this.body.every( isVarDeclaration ) ) ) {\n\t\t\treturn this.body[this.body.length - 1].getRightHandSide();\n\t\t}\n\t\treturn this;\n\t}\n\n\tinitialise ( program, scope ) {\n\t\tlet executionIsBroken = false;\n\t\tlet maybeReturnNode;\n\t\tlet hasDeclarationsAfterBreak = false;\n\n\t\tlet canCollapseReturns = this.parentIsFunction;\n\t\tlet returnStatements = [];\n\n\t\tfor ( let i = 0; i < this.body.length; i += 1 ) {\n\t\t\tconst node = this.body[i];\n\n\t\t\tif ( executionIsBroken ) {\n\t\t\t\tif ( shouldPreserveAfterReturn[ node.type ] ) {\n\t\t\t\t\thasDeclarationsAfterBreak = true;\n\t\t\t\t\tnode.initialise( program, this.scope || scope );\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tmaybeReturnNode = breaksExecution( node );\n\t\t\tif ( maybeReturnNode ) executionIsBroken = true;\n\n\t\t\tnode.initialise( program, this.scope || scope );\n\n\t\t\tif ( canCollapseReturns ) {\n\t\t\t\tif ( node.preventsCollapsedReturns( returnStatements ) ) {\n\t\t\t\t\tcanCollapseReturns = false;\n\t\t\t\t} else {\n\t\t\t\t\t// console.log( `${node.type} preventsCollapsedReturns`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.collapseReturnStatements = canCollapseReturns && returnStatements.length;\n\t\tthis.returnStatements = returnStatements;\n\n\t\t// if `return` is the last line of a function, remove it\n\t\tif ( maybeReturnNode && this.parentIsFunction && !hasDeclarationsAfterBreak ) {\n\t\t\t// TODO also capture `return undefined` and `return void 0` etc?\n\t\t\tif ( !maybeReturnNode.argument ) {\n\t\t\t\tmaybeReturnNode.skip = true;\n\t\t\t}\n\t\t}\n\t}\n\n\t// TODO remove block.isEmpty() in favour of block.skip — this is a hangover from\n\t// when variables could get activated after we'd finished initialising a block\n\tisEmpty () {\n\t\tfor ( let i = 0; i < this.body.length; i += 1 ) {\n\t\t\tconst node = this.body[i];\n\t\t\tif ( !node.skip ) return false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tminify ( code, chars ) {\n\t\tif ( this.scope ) {\n\t\t\tthis.scope.mangle( code, chars );\n\t\t}\n\n\t\tlet insertedVarDeclaration = '';\n\n\t\tif ( this.parentIsFunction || this.parent.type === 'Root' ) {\n\t\t\t// if there are any vars inside removed blocks, they need\n\t\t\t// to be declared here\n\t\t\tconst hoisted = [];\n\t\t\tthis.scope.hoistedVars.forEach( name => {\n\t\t\t\tconst hoistedVar = this.scope.declarations[name];\n\t\t\t\tif ( hoistedVar.activated ) {\n\t\t\t\t\thoisted.push( hoistedVar.alias || hoistedVar.name );\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif ( hoisted.length ) {\n\t\t\t\t// see if there's an existing var declaration we can glom these onto\n\t\t\t\tconst varDeclaration = this.scope.varDeclarationNodes.find( node => {\n\t\t\t\t\twhile ( node !== this ) {\n\t\t\t\t\t\tif ( node.skip ) return false;\n\t\t\t\t\t\tnode = node.parent;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\n\t\t\t\tif ( varDeclaration ) {\n\t\t\t\t\tvarDeclaration.rideAlongs = hoisted;\n\t\t\t\t} else {\n\t\t\t\t\tinsertedVarDeclaration = `var ${hoisted.join(',')};`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst sequentialise = !this.parentIsFunction && this.canSequentialise();\n\t\tconst removeCurlies = this.canRemoveCurlies();\n\t\tconst separator = sequentialise ? ',' : ';';\n\n\t\t// remove leading whitespace\n\t\tlet lastEnd = ( this.parent.type === 'Root' || removeCurlies ) ? this.start : this.start + 1;\n\t\tconst end = ( this.parent.type === 'Root' || removeCurlies ) ? this.end : this.end - 1;\n\n\t\tconst statements = this.body.filter( statement => !statement.skip );\n\t\tlet lastStatement;\n\n\t\tif ( statements.length ) {\n\t\t\tlet nextSeparator = ( ( this.scope && this.scope.useStrict && ( !this.scope.parent || !this.scope.parent.useStrict ) ) ?\n\t\t\t\t'\"use strict\";' :\n\t\t\t\t'' ) + insertedVarDeclaration;\n\n\t\t\tfor ( let i = 0; i < statements.length; i += 1 ) {\n\t\t\t\tconst statement = statements[i];\n\n\t\t\t\tstatement.minify( code, chars );\n\n\t\t\t\tif ( !statement.collapsed ) {\n\t\t\t\t\tif ( statement.start > lastEnd ) code.remove( lastEnd, statement.start );\n\n\t\t\t\t\tif ( nextSeparator ) {\n\t\t\t\t\t\tcode.appendLeft( lastStatement ? lastStatement.getRightHandSide().end : lastEnd, nextSeparator );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( statement.removed ) {\n\t\t\t\t\t\tnextSeparator = '';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnextSeparator = endsWithCurlyBrace( statement ) ? '' : separator;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlastEnd = statement.end;\n\n\t\t\t\t// remove superfluous semis (TODO is this necessary?)\n\t\t\t\twhile ( code.original[ lastEnd - 1 ] === ';' ) lastEnd -= 1;\n\n\t\t\t\tif ( statement.removed ) {\n\t\t\t\t\tnextSeparator = '';\n\t\t\t\t} else {\n\t\t\t\t\tnextSeparator = endsWithCurlyBrace( statement ) ? '' : separator;\n\t\t\t\t}\n\n\t\t\t\tlastStatement = statement;\n\t\t\t}\n\n\t\t\tif ( end > lastEnd ) code.remove( lastEnd, end );\n\t\t} else {\n\t\t\t// empty block\n\t\t\tif ( removeCurlies || this.parent.type === 'Root' ) {\n\t\t\t\tcode.remove( this.start, this.end );\n\t\t\t} else if ( this.end > this.start + 2 ) {\n\t\t\t\tcode.remove( this.start + 1, this.end - 1 );\n\t\t\t}\n\t\t}\n\t}\n\n\t// TODO make this work!\n\t// minifyWithCollapsedReturnStatements ( code, statements ) {\n\t// \tif ( this.returnStatements.length === 1 ) {\n\t// \t\tconst returnStatement = this.returnStatements[0];\n\n\t// \t\tif ( returnStatement.parent === this ) {\n\t// \t\t\t// case 1 – a single top-level return with no argument\n\t// \t\t\tif ( !returnStatement.argument ) {\n\t// \t\t\t\t// does this already get skipped above?\n\t// \t\t\t\tthrow new Error( 'TODO single return statement without arg' );\n\t// \t\t\t}\n\n\t// \t\t\t// case 2 – a single top-level return with an argument\n\t// \t\t\telse {\n\t// \t\t\t\tthrow new Error( 'TODO single return statement with arg' );\n\t// \t\t\t}\n\t// \t\t}\n\n\t// \t\telse {\n\t// \t\t\t// case 3 – a single conditional return with no argument\n\t// \t\t\tif ( !returnStatement.argument ) {\n\t// \t\t\t\treturnStatement.skip = true;\n\t// \t\t\t}\n\n\t// \t\t\t// case 4 – a single conditional return with an argument\n\t// \t\t\telse {\n\t// \t\t\t\tthrow new Error( 'TODO single return statement with arg' );\n\t// \t\t\t}\n\t// \t\t}\n\t// \t}\n\n\t// \telse {\n\t// \t\tthrow new Error( 'TODO multiple return statements' );\n\t// \t}\n\n\t// \tstatements.forEach( statement => {\n\t// \t\tstatement.minify( code, chars );\n\t// \t});\n\t// }\n}\n","export default {\n\tProgram: [ 'body' ],\n\tLiteral: []\n};\n","import types from './types/index.js';\nimport BlockStatement from './BlockStatement.js';\nimport Node from './Node.js';\nimport keys from './keys.js';\n\nexport default function wrap ( raw, parent ) {\n\tif ( !raw ) return;\n\n\tif ( 'length' in raw ) {\n\t\tlet i = raw.length;\n\t\twhile ( i-- ) wrap( raw[i], parent );\n\t\treturn;\n\t}\n\n\t// with e.g. shorthand properties, key and value are\n\t// the same node. We don't want to wrap an object twice\n\tif ( raw.__wrapped ) return;\n\traw.__wrapped = true;\n\n\tif ( !keys[ raw.type ] ) {\n\t\tkeys[ raw.type ] = Object.keys( raw ).filter( key => typeof raw[ key ] === 'object' );\n\t}\n\n\traw.skip = true;\n\traw.parent = parent;\n\traw.program = parent.program || parent;\n\traw.depth = parent.depth + 1;\n\traw.keys = keys[ raw.type ];\n\traw.indentation = undefined;\n\n\tfor ( const key of keys[ raw.type ] ) {\n\t\twrap( raw[ key ], raw );\n\t}\n\n\traw.program.magicString.addSourcemapLocation( raw.start );\n\traw.program.magicString.addSourcemapLocation( raw.end );\n\n\tconst type = ( raw.type === 'BlockStatement' ? BlockStatement : types[ raw.type ] ) || Node;\n\traw.__proto__ = type.prototype;\n}\n","import parse from '../utils/parse.js';\nimport { decode } from 'sourcemap-codec';\nimport keys from './keys.js';\nimport Program from './Program.js';\n\nexport default function check ( magicString, ast ) {\n\tconst code = magicString.toString();\n\n\ttry {\n\t\tparse( code );\n\t} catch ( err ) {\n\t\tconst map = magicString.generateMap();\n\t\tconst { line, column } = err.loc;\n\t\tconst snippet = code.slice( Math.max( 0, err.pos - 35 ), Math.min( code.length, err.pos + 35 ) );\n\n\t\tconst mappings = decode( map.mappings );\n\t\tconst segments = mappings[ line - 1 ];\n\n\t\tlet message = err.message;\n\t\tlet repro;\n\n\t\tfor ( let i = 0; i < segments.length; i += 1 ) {\n\t\t\tconst segment = segments[i];\n\t\t\tif ( segment[0] >= column ) {\n\t\t\t\tconst sourceCodeLine = segment[2];\n\t\t\t\tconst sourceCodeColumn = segment[3];\n\n\t\t\t\tmessage = `Butternut generated invalid JS: code in source file near (${sourceCodeLine + 1}:${sourceCodeColumn}) became\\n...${snippet}...`;\n\t\t\t\trepro = createRepro( magicString.original, ast, sourceCodeLine, sourceCodeColumn );\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tconst err2 = new Error( message );\n\t\terr2.check = true;\n\t\terr2.repro = repro;\n\t\terr2.output = code;\n\n\t\tthrow err2;\n\t}\n}\n\nfunction createRepro ( source, ast, line, column ) {\n\tconst lines = source.split( '\\n' );\n\n\tlet c = 0;\n\tfor ( let i = 0; i < line; i += 1 ) c += lines[i].length + 1;\n\tc += column;\n\n\tlet node = zoomIn( ast, c );\n\n\tdo {\n\t\tnode = zoomOut( node );\n\n\t\tconst slice = source.slice( node.start, node.end );\n\t\tconst ast = parse( slice );\n\n\t\tconst { code } = new Program( slice, ast, null ).export({});\n\n\t\ttry {\n\t\t\tparse( code );\n\t\t} catch ( err ) {\n\t\t\treturn {\n\t\t\t\tinput: deindent( slice, source, node.start ),\n\t\t\t\toutput: code,\n\t\t\t\tpos: c,\n\t\t\t\tloc: {\n\t\t\t\t\tline,\n\t\t\t\t\tcolumn\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t} while ( node );\n}\n\nfunction zoomIn ( node, c ) {\n\tif ( !node ) return null;\n\n\tif ( c < node.start ) return null;\n\tif ( c > node.end ) return null;\n\n\tconst k = keys[ node.type ];\n\tfor ( let i = 0; i < k.length; i += 1 ) {\n\t\tconst key = k[i];\n\n\t\tif ( Array.isArray( node[key] ) ) {\n\t\t\tconst body = node[key];\n\n\t\t\tfor ( let j = 0; j < body.length; j += 1 ) {\n\t\t\t\tif ( body[j] ) {\n\t\t\t\t\tif ( body[j].start > c ) return zoomIn( body[j], body[j].start );\n\n\t\t\t\t\tconst child = zoomIn( body[j], c );\n\t\t\t\t\tif ( child ) return child;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst child = zoomIn( node[key], c );\n\t\t\tif ( child ) return child;\n\t\t}\n\t}\n\n\treturn node;\n}\n\nfunction zoomOut ( node ) {\n\twhile ( !/Statement|Declaration/.test( node.parent.type ) ) {\n\t\tif ( !node.parent ) return null;\n\t\tnode = node.parent;\n\t}\n\n\treturn node.parent;\n}\n\nfunction deindent ( slice, source, start ) {\n\tlet c = start;\n\twhile ( /[ \\t]/.test( source[c-1] ) ) c -= 1;\n\n\tconst indent = source.slice( c, start );\n\n\tif ( indent ) {\n\t\tconst pattern = new RegExp( `^${indent}`, 'gm' );\n\t\treturn slice.replace( pattern, '' );\n\t}\n\n\treturn slice;\n}","import MagicString from 'magic-string';\nimport wrap from './wrap.js';\nimport BlockStatement from './BlockStatement.js';\nimport Scope from './Scope.js';\nimport check from './check.js';\n\nconst chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$0123456789'.split('');\nconst digit = /\\d/;\n\nconst naturalOrder = {};\nchars.forEach( ( char, i ) => {\n\tnaturalOrder[char] = i;\n});\n\nexport default function Program ( source, ast, options, stats ) {\n\tthis.options = options;\n\tthis.stats = stats;\n\tthis.type = 'Root';\n\n\tthis.source = source;\n\tif ( DEBUG ) stats.time( 'create magicString' );\n\tthis.magicString = new MagicString( source );\n\tif ( DEBUG ) stats.timeEnd( 'create magicString' );\n\n\tthis.ast = ast;\n\tthis.depth = 0;\n\n\tif ( DEBUG ) stats.time( 'create body' );\n\twrap( this.body = ast, this );\n\tthis.body.__proto__ = BlockStatement.prototype;\n\tif ( DEBUG ) stats.timeEnd( 'create body' );\n\n\tthis.templateElements = [];\n\tif ( DEBUG ) stats.time( 'init body' );\n\tthis.body.scope = new Scope({\n\t\tblock: false,\n\t\tparent: null\n\t});\n\n\tthis.body.body.forEach( node => {\n\t\tnode.attachScope( this, this.body.scope );\n\t});\n\n\tthis.charFrequency = {};\n\tchars.forEach( char => {\n\t\tthis.charFrequency[char] = 0;\n\t});\n\n\tthis.body.initialise( this, this.body.scope );\n\tif ( DEBUG ) stats.timeEnd( 'init body' );\n\n\tchars.sort( ( a, b ) => {\n\t\tif ( digit.test( a ) && !digit.test( b ) ) return 1;\n\t\tif ( digit.test( b ) && !digit.test( a ) ) return -1;\n\t\treturn ( this.charFrequency[b] - this.charFrequency[a] ) || ( naturalOrder[a] - naturalOrder[b] );\n\t});\n\n\tif ( DEBUG ) stats.time( 'minify' );\n\tthis.body.minify( this.magicString, chars );\n\tif ( DEBUG ) stats.timeEnd( 'minify' );\n}\n\nProgram.prototype = {\n\taddWord ( word ) {\n\t\tfor ( let i = 0; i < word.length; i += 1 ) {\n\t\t\tthis.charFrequency[word[i]] += 1;\n\t\t}\n\t},\n\n\texport ( options ) {\n\t\tconst stats = this.stats;\n\n\t\tif ( DEBUG ) stats.time( 'generate code' );\n\t\tconst code = this.magicString.toString();\n\t\tif ( DEBUG ) stats.timeEnd( 'generate code' );\n\n\t\tif ( options.check ) {\n\t\t\tcheck( this.magicString, this.ast );\n\t\t}\n\n\t\tif ( DEBUG ) stats.time( 'generate map' );\n\t\tconst map = options.sourceMap !== false ? this.magicString.generateMap({\n\t\t\tfile: options.file,\n\t\t\tsource: options.source,\n\t\t\tincludeContent: options.includeContent !== false\n\t\t}) : null;\n\t\tif ( DEBUG ) stats.timeEnd( 'generate map' );\n\n\t\tif ( DEBUG && this.magicString.stats ) {\n\t\t\tObject.keys( this.magicString.stats ).forEach( stat => {\n\t\t\t\tstats[ stat ] = this.magicString.stats[ stat ];\n\t\t\t});\n\t\t}\n\n\t\treturn { code, map, stats };\n\t}\n};\n","export default class Stats {\n\tconstructor () {\n\t\tObject.defineProperties( this, {\n\t\t\tstartTimes: { value: {} }\n\t\t});\n\t}\n\n\ttime ( label ) {\n\t\tthis.startTimes[ label ] = process.hrtime();\n\t}\n\n\ttimeEnd ( label ) {\n\t\tconst elapsed = process.hrtime( this.startTimes[ label ] );\n\n\t\tif ( !this[ label ] ) this[ label ] = 0;\n\t\tthis[ label ] += elapsed[0] * 1e3 + elapsed[1] * 1e-6;\n\t}\n}\n","import parse from './utils/parse.js';\nimport Program from './program/Program.js';\nimport Stats from './utils/Stats.js';\nimport getSnippet from './utils/getSnippet.js';\n\nexport function squash ( source, options = {} ) {\n\tlet ast;\n\n\tconst stats = DEBUG ? new Stats() : null;\n\n\ttry {\n\t\tif ( DEBUG ) stats.time( 'parse' );\n\t\tast = parse( source );\n\t\tif ( DEBUG ) stats.timeEnd( 'parse' );\n\t} catch ( err ) {\n\t\terr.snippet = getSnippet( source, err.loc );\n\t\tthrow err;\n\t}\n\n\treturn new Program( source, ast, options, stats ).export( options );\n}\n\nexport { version as VERSION } from '../package.json';\n"]}