| 
1197 | 1197 |     var ARROW_FN_ARGS = /^(?:async\s+)?\(?\s*([^)=]+)\s*\)?(?:\s*=>)/;  | 
1198 | 1198 |     var FN_ARG_SPLIT = /,/;  | 
1199 | 1199 |     var FN_ARG = /(=.+)?(\s*)$/;  | 
1200 |  | -    var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;  | 
 | 1200 | + | 
 | 1201 | +    function stripComments(string) {  | 
 | 1202 | +        let stripped = '';  | 
 | 1203 | +        let index = 0;  | 
 | 1204 | +        let endBlockComment = string.indexOf('*/');  | 
 | 1205 | +        while (index < string.length) {  | 
 | 1206 | +            if (string[index] === '/' && string[index+1] === '/') {  | 
 | 1207 | +                // inline comment  | 
 | 1208 | +                let endIndex = string.indexOf('\n', index);  | 
 | 1209 | +                index = (endIndex === -1) ? string.length : endIndex;  | 
 | 1210 | +            } else if ((endBlockComment !== -1) && (string[index] === '/') && (string[index+1] === '*')) {  | 
 | 1211 | +                // block comment  | 
 | 1212 | +                let endIndex = string.indexOf('*/', index);  | 
 | 1213 | +                if (endIndex !== -1) {  | 
 | 1214 | +                    index = endIndex + 2;  | 
 | 1215 | +                    endBlockComment = string.indexOf('*/', index);  | 
 | 1216 | +                } else {  | 
 | 1217 | +                    stripped += string[index];  | 
 | 1218 | +                    index++;  | 
 | 1219 | +                }  | 
 | 1220 | +            } else {  | 
 | 1221 | +                stripped += string[index];  | 
 | 1222 | +                index++;  | 
 | 1223 | +            }  | 
 | 1224 | +        }  | 
 | 1225 | +        return stripped;  | 
 | 1226 | +    }  | 
1201 | 1227 | 
 
  | 
1202 | 1228 |     function parseParams(func) {  | 
1203 |  | -        const src = func.toString().replace(STRIP_COMMENTS, '');  | 
 | 1229 | +        const src = stripComments(func.toString());  | 
1204 | 1230 |         let match = src.match(FN_ARGS);  | 
1205 | 1231 |         if (!match) {  | 
1206 | 1232 |             match = src.match(ARROW_FN_ARGS);  | 
 | 
1957 | 1983 |      * app.get('/cats', function(request, response) {  | 
1958 | 1984 |      *     var User = request.models.User;  | 
1959 | 1985 |      *     async.seq(  | 
1960 |  | -     *         _.bind(User.get, User),  // 'User.get' has signature (id, callback(err, data))  | 
 | 1986 | +     *         User.get.bind(User),  // 'User.get' has signature (id, callback(err, data))  | 
1961 | 1987 |      *         function(user, fn) {  | 
1962 | 1988 |      *             user.getCats(fn);      // 'getCats' has signature (callback(err, data))  | 
1963 | 1989 |      *         }  | 
 | 
3591 | 3617 |         return memoized;  | 
3592 | 3618 |     }  | 
3593 | 3619 | 
 
  | 
 | 3620 | +    /* istanbul ignore file */  | 
 | 3621 | + | 
3594 | 3622 |     /**  | 
3595 | 3623 |      * Calls `callback` on a later loop around the event loop. In Node.js this just  | 
3596 | 3624 |      * calls `process.nextTick`.  In the browser it will use `setImmediate` if  | 
 | 
0 commit comments