| | |
| | | "use strict"; |
| | | |
| | | var builtins = function() { |
| | | var names = []; |
| | | var names = new Dictionary(); |
| | | // NaN will be included due to Number.NaN |
| | | [ |
| | | "null", |
| | |
| | | Object.getOwnPropertyNames(ctor.prototype).map(add); |
| | | } |
| | | }); |
| | | return makePredicate(names); |
| | | return names; |
| | | |
| | | function add(name) { |
| | | names.push(name); |
| | | names.set(name, true); |
| | | } |
| | | }(); |
| | | |
| | |
| | | reserved: null, |
| | | }, true); |
| | | |
| | | var reserved = Object.create(options.builtins ? null : builtins); |
| | | var reserved = options.builtins ? new Dictionary() : builtins.clone(); |
| | | if (Array.isArray(options.reserved)) options.reserved.forEach(function(name) { |
| | | reserved[name] = true; |
| | | reserved.set(name, true); |
| | | }); |
| | | |
| | | var cname = -1; |
| | |
| | | if (options.cache) { |
| | | cache = options.cache.props; |
| | | cache.each(function(name) { |
| | | reserved[name] = true; |
| | | reserved.set(name, true); |
| | | }); |
| | | } else { |
| | | cache = new Dictionary(); |
| | |
| | | var debug_suffix; |
| | | if (debug) debug_suffix = options.debug === true ? "" : options.debug; |
| | | |
| | | var names_to_mangle = Object.create(null); |
| | | var unmangleable = Object.create(reserved); |
| | | var names_to_mangle = new Dictionary(); |
| | | var unmangleable = reserved.clone(); |
| | | |
| | | // step 1: find candidates to mangle |
| | | ast.walk(new TreeWalker(function(node) { |
| | |
| | | // only function declarations after this line |
| | | |
| | | function can_mangle(name) { |
| | | if (unmangleable[name]) return false; |
| | | if (unmangleable.has(name)) return false; |
| | | if (/^-?[0-9]+(\.[0-9]+)?(e[+-][0-9]+)?$/.test(name)) return false; |
| | | return true; |
| | | } |
| | | |
| | | function should_mangle(name) { |
| | | if (reserved[name]) return false; |
| | | if (reserved.has(name)) return false; |
| | | if (regex && !regex.test(name)) return false; |
| | | return cache.has(name) || names_to_mangle[name]; |
| | | return cache.has(name) || names_to_mangle.has(name); |
| | | } |
| | | |
| | | function add(name) { |
| | | if (can_mangle(name)) names_to_mangle[name] = true; |
| | | if (!should_mangle(name)) unmangleable[name] = true; |
| | | if (can_mangle(name)) names_to_mangle.set(name, true); |
| | | if (!should_mangle(name)) unmangleable.set(name, true); |
| | | } |
| | | |
| | | function mangle(name) { |