docs: function collect(node, options, context) {
      var variables = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3];
      var _iteratorNormalCompletion = true;
      var _didIteratorError = false;
      var _iteratorError = undefined;
  
      try {
          for (var _iterator = node.rules[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
              var rule = _step.value;
  
              if (rule.isRuleset) collect(rule, options, context, variables);else if (rule.importedFilename) collect(rule.root, options, context, variables);else if (rule.variable === true) {
                  var _name = rule.name.substring(1);
                  var value = rule.value.eval(context);
  
                  // save under all aliases
                  var _iteratorNormalCompletion2 = true;
                  var _didIteratorError2 = false;
                  var _iteratorError2 = undefined;
  
                  try {
                      for (var _iterator2 = options.rename[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
                          var fn = _step2.value;
  
                          variables[fn(_name)] = toJS(value, options, context);
                      }
                  } catch (err) {
                      _didIteratorError2 = true;
                      _iteratorError2 = err;
                  } finally {
                      try {
                          if (!_iteratorNormalCompletion2 && _iterator2['return']) {
                              _iterator2['return']();
                          }
                      } finally {
                          if (_didIteratorError2) {
                              throw _iteratorError2;
                          }
                      }
                  }
              }
          }
      } catch (err) {
          _didIteratorError = true;
          _iteratorError = err;
      } finally {
          try {
              if (!_iteratorNormalCompletion && _iterator['return']) {
                  _iterator['return']();
              }
          } finally {
              if (_didIteratorError) {
                  throw _iteratorError;
              }
          }
      }
  
      return variables;
  }