function parseProperties(node) {
    consume(); // '('

    while(true) {
      clear();
      /**
       * Properties always have to start with '.' or ':'
       * o(.x, :y) matches an object with at least an owned property
       * 'x' and a owned or inherited property 'y'. 
       */
      if(peek() === '.') {
        parseProperty(node,false);  // own property
      } else if(peek() === ':') {
        parseProperty(node,true);   // prototype property
      } else {
        unexpectedTokenException('. or :');
      }
      clear();

      if(peek() !== ',') {
        break;
      }
      consume(); // ','
    }
  }
function parseProperties(node) {
    consume(); 

    while(true) {
      clear();
      
      if(peek() === '.') {
        parseProperty(node,false);  
      } else if(peek() === ':') {
        parseProperty(node,true);   
      } else {
        unexpectedTokenException('. or :');
      }
      clear();

      if(peek() !== ',') {
        break;
      }
      consume(); 
    }
  }
function parseProperties ( node ) { consume ( ) ; // '(' while ( true ) { clear ( ) ; /**
       * Properties always have to start with '.' or ':'
       * o(.x, :y) matches an object with at least an owned property
       * 'x' and a owned or inherited property 'y'. 
       */ if ( peek ( ) === '.' ) { parseProperty ( node , false ) ; // own property } else if ( peek ( ) === ':' ) { parseProperty ( node , true ) ; // prototype property } else { unexpectedTokenException ( '. or :' ) ; } clear ( ) ; if ( peek ( ) !== ',' ) { break ; } consume ( ) ; // ',' } }
Parse the property list of an object pattern.
Parse the property list of an object pattern .