code: function () {
                      var elements = [], e, c, args, delim, arg, index = i, s = input.charAt(i), important = false;
  
                      if (s !== '.' && s !== '#') { return }
  
                      save(); // stop us absorbing part of an invalid selector
  
                      while (e = $(/^[#.](?:[\w-]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/)) {
                          elements.push(new(tree.Element)(c, e, i));
                          c = $('>');
                      }
                      if ($('(')) {
                          args = this.mixin.args.call(this, true).args;
                          expect(')');
                      }
  
                      args = args || [];
  
                      if ($(this.important)) {
                          important = true;
                      }
  
                      if (elements.length > 0 && ($(';') || peek('}'))) {
                          return new(tree.mixin.Call)(elements, args, index, env.currentFileInfo, important);
                      }
  
                      restore();
                  }
docs: A Mixin call, with an optional argument list  #mixins > .square(#fff); .rounded(4px, black); .button;  The `while` loop is there because mixins can be namespaced, but we only support the child and descendant selector for now.