Add an option to prevent function names from being mangled

See #552. This is mostly useful for having the actual function names in traces.
This commit is contained in:
Richard van Velzen
2015-01-04 20:53:19 +01:00
parent ad18689d92
commit e37b67d013

View File

@@ -57,9 +57,14 @@ function SymbolDef(scope, index, orig) {
SymbolDef.prototype = { SymbolDef.prototype = {
unmangleable: function(options) { unmangleable: function(options) {
return (this.global && !(options && options.toplevel)) if (!options) options = {};
return (this.global && !options.toplevel)
|| this.undeclared || this.undeclared
|| (!(options && options.eval) && (this.scope.uses_eval || this.scope.uses_with)); || (!options.eval && (this.scope.uses_eval || this.scope.uses_with))
|| (options.keep_fnames
&& (this.orig[0] instanceof AST_SymbolLambda
|| this.orig[0] instanceof AST_SymbolDefun));
}, },
mangle: function(options) { mangle: function(options) {
if (!this.mangled_name && !this.unmangleable(options)) { if (!this.mangled_name && !this.unmangleable(options)) {
@@ -322,11 +327,12 @@ AST_Symbol.DEFMETHOD("global", function(){
AST_Toplevel.DEFMETHOD("_default_mangler_options", function(options){ AST_Toplevel.DEFMETHOD("_default_mangler_options", function(options){
return defaults(options, { return defaults(options, {
except : [], except : [],
eval : false, eval : false,
sort : false, sort : false,
toplevel : false, toplevel : false,
screw_ie8 : false screw_ie8 : false,
keep_fnames : false
}); });
}); });