| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 | 
							- var noop = function() {};
 
- function ensureFunction(value) {
 
-     return typeof value === 'function' ? value : noop;
 
- }
 
- module.exports = function(node, options, context) {
 
-     function walk(node) {
 
-         enter.call(context, node);
 
-         switch (node.type) {
 
-             case 'Group':
 
-                 node.terms.forEach(walk);
 
-                 break;
 
-             case 'Multiplier':
 
-                 walk(node.term);
 
-                 break;
 
-             case 'Type':
 
-             case 'Property':
 
-             case 'Keyword':
 
-             case 'AtKeyword':
 
-             case 'Function':
 
-             case 'String':
 
-             case 'Token':
 
-             case 'Comma':
 
-                 break;
 
-             default:
 
-                 throw new Error('Unknown type: ' + node.type);
 
-         }
 
-         leave.call(context, node);
 
-     }
 
-     var enter = noop;
 
-     var leave = noop;
 
-     if (typeof options === 'function') {
 
-         enter = options;
 
-     } else if (options) {
 
-         enter = ensureFunction(options.enter);
 
-         leave = ensureFunction(options.leave);
 
-     }
 
-     if (enter === noop && leave === noop) {
 
-         throw new Error('Neither `enter` nor `leave` walker handler is set or both aren\'t a function');
 
-     }
 
-     walk(node, context);
 
- };
 
 
  |