docs: function parseMustaches(s, name, node, prepareBindingFn) {
      if (!s || !s.length)
        return;
  
      var tokens;
      var length = s.length;
      var startIndex = 0, lastIndex = 0, endIndex = 0;
      var onlyOneTime = true;
      while (lastIndex < length) {
        var startIndex = s.indexOf('{{', lastIndex);
        var oneTimeStart = s.indexOf('[[', lastIndex);
        var oneTime = false;
        var terminator = '}}';
  
        if (oneTimeStart >= 0 &&
            (startIndex < 0 || oneTimeStart < startIndex)) {
          startIndex = oneTimeStart;
          oneTime = true;
          terminator = ']]';
        }
  
        endIndex = startIndex < 0 ? -1 : s.indexOf(terminator, startIndex + 2);
  
        if (endIndex < 0) {
          if (!tokens)
            return;
  
          tokens.push(s.slice(lastIndex)); // TEXT
          break;
        }
  
        tokens = tokens || [];
        tokens.push(s.slice(lastIndex, startIndex)); // TEXT
        var pathString = s.slice(startIndex + 2, endIndex).trim();
        tokens.push(oneTime); // ONE_TIME?
        onlyOneTime = onlyOneTime && oneTime;
        var delegateFn = prepareBindingFn &&
                         prepareBindingFn(pathString, name, node);
        // Don't try to parse the expression if there's a prepareBinding function
        if (delegateFn == null) {
          tokens.push(Path.get(pathString)); // PATH
        } else {
          tokens.push(null);
        }
        tokens.push(delegateFn); // DELEGATE_FN
        lastIndex = endIndex + 2;
      }
  
      if (lastIndex === length)
        tokens.push(''); // TEXT
  
      tokens.hasOnePath = tokens.length === 5;
      tokens.isSimplePath = tokens.hasOnePath &&
                            tokens[0] == '' &&
                            tokens[4] == '';
      tokens.onlyOneTime = onlyOneTime;
  
      tokens.combinator = function(values) {
        var newValue = tokens[0];
  
        for (var i = 1; i < tokens.length; i += 4) {
          var value = tokens.hasOnePath ? values : values[(i - 1) / 4];
          if (value !== undefined)
            newValue += value;
          newValue += tokens[i + 3];
        }
  
        return newValue;
      }
  
      return tokens;
    }