whole_func_string: function (isLess) {
                  var index = parserInput.i, elements, extendList, c, e, allExtends, when, condition;
                  isLess = isLess !== false;
                  while ((isLess && (extendList = this.extend())) || (isLess && (when = parserInput.$str('when'))) || (e = this.element())) {
                      if (when) {
                          condition = expect(this.conditions, 'expected condition');
                      } else if (condition) {
                          error('CSS guard can only be used at the end of selector');
                      } else if (extendList) {
                          if (allExtends) {
                              allExtends = allExtends.concat(extendList);
                          } else {
                              allExtends = extendList;
                          }
                      } else {
                          if (allExtends) { error('Extend can only be used at the end of selector'); }
                          c = parserInput.currentChar();
                          if (elements) {
                              elements.push(e);
                          } else {
                              elements = [ e ];
                          }
                          e = null;
                      }
                      if (c === '{' || c === '}' || c === ';' || c === ',' || c === ')') {
                          break;
                      }
                  }
  
                  if (elements) { return new(tree.Selector)(elements, allExtends, condition, index, fileInfo); }
                  if (allExtends) { error('Extend must be used to extend a selector, it cannot be used on its own'); }
              }
func_code_string: function (isLess) {
                  var index = parserInput.i, elements, extendList, c, e, allExtends, when, condition;
                  isLess = isLess !== false;
                  while ((isLess && (extendList = this.extend())) || (isLess && (when = parserInput.$str('when'))) || (e = this.element())) {
                      if (when) {
                          condition = expect(this.conditions, 'expected condition');
                      } else if (condition) {
                          error('CSS guard can only be used at the end of selector');
                      } else if (extendList) {
                          if (allExtends) {
                              allExtends = allExtends.concat(extendList);
                          } else {
                              allExtends = extendList;
                          }
                      } else {
                          if (allExtends) { error('Extend can only be used at the end of selector'); }
                          c = parserInput.currentChar();
                          if (elements) {
                              elements.push(e);
                          } else {
                              elements = [ e ];
                          }
                          e = null;
                      }
                      if (c === '{' || c === '}' || c === ';' || c === ',' || c === ')') {
                          break;
                      }
                  }
  
                  if (elements) { return new(tree.Selector)(elements, allExtends, condition, index, fileInfo); }
                  if (allExtends) { error('Extend must be used to extend a selector, it cannot be used on its own'); }
              }
func_documentation_string: A CSS Selector with less extensions e.g. the ability to extend and guard  .class > div + h1 li a:hover  Selectors are made out of one or more Elements, see above.