    /*

    Siesta 5.3.0
    Copyright(c) 2009-2019 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
    });