/*

Siesta 5.1.0
Copyright(c) 2009-2018 Bryntum AB
https://bryntum.com/contact
https://bryntum.com/products/siesta/license

*/
Role('Siesta.Recorder.Role.CanSwallowException', {

    does : [
        JooseX.Observable
    ],

    has : {
        swallowExceptions   : false
    },


    methods : {
        
        safeBind : function (func, scope) {
            var me      = this
            scope       = scope || me
            
            // extra protection from the exceptions from the recorder itself
            if (me.swallowExceptions) {
                
                return function () {
                    try {
                        return func.apply(scope, arguments)
                    } catch(e) {
                        me.fireEvent('exception', e);
                    }
                }
            } else {
                return func.bind(scope)
            }
        }
    }
    // eof methods
});