nl_tokens: Resolve dependencies and arrange objects accoridng to priority and priority .
pl_tokens: function ( ) { // Reset index this . index = [ ] ; // Apply extends to the objects for ( var i = 0 , l = this . _objTree . length ; i < l ; ++ i ) { if ( this . objects [ this . _objTree [ i ] [ 0 ] ] === undefined ) { throw "Extending unknown object " + this . _objTree [ i ] [ 0 ] ; } // Apply this . objects [ this . _objTree [ i ] [ 1 ] ] . applyExtend ( this . objects [ this . _objTree [ i ] [ 0 ] ] ) ; } // Resolve dependencies var deps = toposort ( this . _objTree ) . reverse ( ) , used = { } ; for ( var i = 0 , l = deps . length ; i < l ; ++ i ) { used [ deps [ i ] ] = 1 ; this . objects [ deps [ i ] ] . id = this . index . length ; this . index . <mask> ( this . objects [ deps [ i ] ] ) ; } // Then include objects not part of dependency tree for ( var i = 0 , l = this . _objList . length ; i < l ; ++ i ) { // Skip objects already used in the dependency resolution if ( ! used [ this . _objList [ i ] ] ) { this . index . push ( this . objects [ this . _objList [ i ] ] ) ; } } // Then pre-cache property IDs for all the propeties // and check if any of the objects has embeds for ( var i = 0 , l = this . index . length ; i < l ; ++ i ) { var pp = this . index [ i ] . properties ; for ( var j = 0 , jl = pp . length ; j < jl ; ++ j ) { this . propertyVar ( pp [ j ] ) ; } if ( this . index [ i ] . embed . length > 0 ) { this . hasEmbed = true ; } } // Separate to frequent and infrequent objects for ( var i = 0 , l = this . index . length ; i < l ; ++ i ) { var obj = this . index [ i ] , isFreq = obj . frequent ; // Make sure we only register 5-bit objects if ( isFreq ) { if ( this . _objFreq . length >= MAX_FREQ_ITEMS ) { isFreq = false ; } } // Put on frequent or infrequent table if ( isFreq ) { obj . id = this . _objFreq . length ; this . _objFreq . push ( obj ) ; } else { obj . id = this . _objInfeq . length + MAX_FREQ_ITEMS ; this . _objInfeq . push ( obj ) ; } } }