code: function(first) {
          var reader  = this._reader,
              uri     = first,
              inner   = "",
              c       = reader.peek();
  
          //skip whitespace before
          while (c && isWhitespace(c)) {
              reader.read();
              c = reader.peek();
          }
  
          //it's a string
          if (c === "'" || c === "\"") {
              inner = this.readString();
              if (inner !== null) {
                  inner = PropertyValuePart.parseString(inner);
              }
          } else {
              inner = this.readUnquotedURL();
          }
  
          c = reader.peek();
  
          //skip whitespace after
          while (c && isWhitespace(c)) {
              reader.read();
              c = reader.peek();
          }
  
          //if there was no inner value or the next character isn't closing paren, it's not a URI
          if (inner === null || c !== ")") {
              uri = null;
          } else {
              // Ensure argument to URL is always double-quoted
              // (This simplifies later processing in PropertyValuePart.)
              uri += PropertyValuePart.serializeString(inner) + reader.read();
          }
  
          return uri;
      }
docs: returns null w/o resetting reader if URI is invalid.