anchor.diff:      messages.warning(uri, charOffset, message);
     }
   }
  +
  +class Stack {
  +  List array = new List(8);
  +  int arrayLength = 0;
  +
  +  bool get isNotEmpty => arrayLength > 0;
  +
  +  int get length => arrayLength;
  +
  +  Object get last {
  +    final value = array[arrayLength - 1];
  +    return value is NullValue ? null : value;
  +  }
  +
  +  void push(Object value) {
  +    array[arrayLength++] = value;
  +    if (array.length == arrayLength) {
  +      _grow();
  +    }
  +  }
  +
  +  Object pop() {
  +    assert(arrayLength > 0);
  +    final Object value = array[--arrayLength];
  +    array[arrayLength] = null;
  +    return value is NullValue ? null : value;
  +  }
  +
  +  List<Object> popList(int count) {
  +    assert(arrayLength >= count);
  +
  +    final table = array;
  +    final length = arrayLength;
  +
  +    final tailList = new List<Object>.filled(count, null, growable: true);
  +    final startIndex = length - count;
  +    for (int i = 0; i < count; i++) {
  +      final value = table[startIndex + i];
  +      tailList[i] = value is NullValue ? null : value;
  +    }
  +    arrayLength -= count;
  +
  +    return tailList;
  +  }
  +
  +  List<Object> get values {
  +    final List<Object> list = new List<Object>(arrayLength);
  +    list.setRange(0, arrayLength, array);
  +    return list;
  +  }
  +
  +  void _grow() {
  +    final List<Object> newTable = new List<Object>(array.length * 2);
  +    newTable.setRange(0, array.length, array, 0);
  +    array = newTable;
  +  }
  +}
  
positive.code: 
    void push(Object node) {
      if (node == null) internalError("null not allowed.");
      stack.addLast(node);
    }
  
    Object peek() {
      Object node = stack.last;
      return node is NullValue ? null : node;
    }
  
    Object pop() {
      Object node = stack.removeLast();
      return node is NullValue ? null : node;
    }
  
    Object popIfNotNull(Object value) {
      return value == null ? null : pop();
  
negative.code: 
    List popList(int n) {
      if (n == 0) return null;
      return stack.popList(n);
    }
  
    void debugEvent(String name) {
  