private void evaluateRefs()
        throws TokenCompileError {
        Map<String, Integer> labelValues = getLabelValues();

        boolean needDoOver = false;
        int newWordPosition = 0;
        for(PositionedResolvable pr : resolvablesList) {
            int oldWordPosition = pr.getPosition();
            pr.setPosition(newWordPosition);
            if(oldWordPosition != newWordPosition)
                needDoOver = true;
            // Don't break now for the do-over immediately because we
            // still want to update the positions so that the labels
            // are more correct.

            Resolvable r = pr.getResolvable();
            if(r != null) {
                r.evaluateLabels(labelValues, newWordPosition);
                newWordPosition += r.wordCount();
            }
        }
        
        // Did some instructions get moved during this last loop? If
        // so, we need to repeat this until the final positions are
        // the same as their values were when we first ran
        // updateLabelValues().
        if(needDoOver) {
            wordPosition = newWordPosition;
            evaluateRefs();
        }
    }