function _contextGetCreateAndOrderNodes(renderNode, prev) {

        // The first time this function is called, the current
        // prev/next position is obtained.
        var node;
        var state = this._contextState;
        if (!state.start) {
            node = this._first;
            while (node) {
                if (node.renderNode === renderNode) {
                    break;
                }
                node = node._next;
            }
            if (!node) {
                node = this.createNode(renderNode);
                node._next = this._first;
                if (this._first) {
                    this._first._prev = node;
                }
                this._first = node;
            }
            state.start = node;
            state.startPrev = prev;
            state.prev = node;
            state.next = node;
            return node;
        }

        // Check whether node already exist at the correct position
        // in the linked-list. If so, return that node immediately
        // and advance the prev/next pointer for the next/prev
        // lookup operation.
        if (prev) {
            if (state.prev._prev && (state.prev._prev.renderNode === renderNode)) {
                state.prev = state.prev._prev;
                return state.prev;
            }
        }
        else {
            if (state.next._next && (state.next._next.renderNode === renderNode)) {
                state.next = state.next._next;
                return state.next;
            }
        }

        // Lookup the node anywhere in the list..
        node = this._first;
        while (node) {
            if (node.renderNode === renderNode) {
                break;
            }
            node = node._next;
        }

        // Create new node if neccessary
        if (!node) {
            node = this.createNode(renderNode);
        }

        // Node existed, remove from linked-list
        else {
            if (node._next) {
                node._next._prev = node._prev;
            }
            if (node._prev) {
                node._prev._next = node._next;
            }
            else {
                this._first = node._next;
            }
            node._next = undefined;
            node._prev = undefined;
        }

        // Insert node into the linked list
        if (prev) {
            if (state.prev._prev) {
                node._prev = state.prev._prev;
                state.prev._prev._next = node;
            }
            else {
                this._first = node;
            }
            state.prev._prev = node;
            node._next = state.prev;
            state.prev = node;
        }
        else {
            if (state.next._next) {
                node._next = state.next._next;
                state.next._next._prev = node;
            }
            state.next._next = node;
            node._prev = state.next;
            state.next = node;
        }

        return node;
    }
function _contextGetCreateAndOrderNodes(renderNode, prev) {

        
        
        var node;
        var state = this._contextState;
        if (!state.start) {
            node = this._first;
            while (node) {
                if (node.renderNode === renderNode) {
                    break;
                }
                node = node._next;
            }
            if (!node) {
                node = this.createNode(renderNode);
                node._next = this._first;
                if (this._first) {
                    this._first._prev = node;
                }
                this._first = node;
            }
            state.start = node;
            state.startPrev = prev;
            state.prev = node;
            state.next = node;
            return node;
        }

        
        
        
        
        if (prev) {
            if (state.prev._prev && (state.prev._prev.renderNode === renderNode)) {
                state.prev = state.prev._prev;
                return state.prev;
            }
        }
        else {
            if (state.next._next && (state.next._next.renderNode === renderNode)) {
                state.next = state.next._next;
                return state.next;
            }
        }

        
        node = this._first;
        while (node) {
            if (node.renderNode === renderNode) {
                break;
            }
            node = node._next;
        }

        
        if (!node) {
            node = this.createNode(renderNode);
        }

        
        else {
            if (node._next) {
                node._next._prev = node._prev;
            }
            if (node._prev) {
                node._prev._next = node._next;
            }
            else {
                this._first = node._next;
            }
            node._next = undefined;
            node._prev = undefined;
        }

        
        if (prev) {
            if (state.prev._prev) {
                node._prev = state.prev._prev;
                state.prev._prev._next = node;
            }
            else {
                this._first = node;
            }
            state.prev._prev = node;
            node._next = state.prev;
            state.prev = node;
        }
        else {
            if (state.next._next) {
                node._next = state.next._next;
                state.next._next._prev = node;
            }
            state.next._next = node;
            node._prev = state.next;
            state.next = node;
        }

        return node;
    }
function _contextGetCreateAndOrderNodes ( renderNode , prev ) { // The first time this function is called, the current // prev/next position is obtained. var node ; var state = this . _contextState ; if ( ! state . start ) { node = this . _first ; while ( node ) { if ( node . renderNode === renderNode ) { break ; } node = node . _next ; } if ( ! node ) { node = this . createNode ( renderNode ) ; node . _next = this . _first ; if ( this . _first ) { this . _first . _prev = node ; } this . _first = node ; } state . start = node ; state . startPrev = prev ; state . prev = node ; state . next = node ; return node ; } // Check whether node already exist at the correct position // in the linked-list. If so, return that node immediately // and advance the prev/next pointer for the next/prev // lookup operation. if ( prev ) { if ( state . prev . _prev && ( state . prev . _prev . renderNode === renderNode ) ) { state . prev = state . prev . _prev ; return state . prev ; } } else { if ( state . next . _next && ( state . next . _next . renderNode === renderNode ) ) { state . next = state . next . _next ; return state . next ; } } // Lookup the node anywhere in the list.. node = this . _first ; while ( node ) { if ( node . renderNode === renderNode ) { break ; } node = node . _next ; } // Create new node if neccessary if ( ! node ) { node = this . createNode ( renderNode ) ; } // Node existed, remove from linked-list else { if ( node . _next ) { node . _next . _prev = node . _prev ; } if ( node . _prev ) { node . _prev . _next = node . _next ; } else { this . _first = node . _next ; } node . _next = undefined ; node . _prev = undefined ; } // Insert node into the linked list if ( prev ) { if ( state . prev . _prev ) { node . _prev = state . prev . _prev ; state . prev . _prev . _next = node ; } else { this . _first = node ; } state . prev . _prev = node ; node . _next = state . prev ; state . prev = node ; } else { if ( state . next . _next ) { node . _next = state . next . _next ; state . next . _next . _prev = node ; } state . next . _next = node ; node . _prev = state . next ; state . next = node ; } return node ; }
Checks the integrity of the linked-list.
 /*function _checkIntegrity() {
var node = this._first;
var count = 0;
var prevNode;
while (node) {
if (!node._prev && (node !== this._first)) {
throw 'No prev but not first';
}
if (node._prev !== prevNode) {
throw 'Bork';
}
prevNode = node;
node = node._next;
count++;
}
}

function _checkContextStateIntegrity() {
var node = this._contextState.start;
while (node) {
if (node === this._contextState.next) {
break;
}
if (!node._invalidated) {
throw 'WTF';
}
node = node._next;
}
node = this._contextState.start;
while (node) {
if (node === this._contextState.prev) {
break;
}
if (!node._invalidated) {
throw 'WTF';
}
node = node._prev;
}
} 
Creates or gets a layout node.
Checks the integrity of the linked - list . / * function _checkIntegrity () { var node = this . _first ; var count = 0 ; var prevNode ; while ( node ) { if ( !node . _prev && ( node ! == this . _first )) { throw No prev but not first ; } if ( node . _prev ! == prevNode ) { throw Bork ; } prevNode = node ; node = node . _next ; count ++ ; } }