anchor.diff:      return _vertices.length ~/ 3;
     }
   
  +  Float32List GetAttribute(String canonical) {
  +    return _attributes[canonical];
  +  }
  +
     void AddAttribute(String canonical, Float32List data, int width) {
       assert(data.length ~/ width == _vertices.length ~/ 3);
       _addBuffer(canonical, data);
  
positive.code:     return _attributes.keys;
    }
  
    /*
    @override
    String toString() {
      final int f = _faces.length;
      final int f3 = _faces3.length;
      final int f4 = _faces4.length;
      final int v = _vertices.length;
      return "MESH[${name}] F:${f} F3:${f3} F4:${f4} V:${v}";
    }
    */
  }
  
  void _GeometryBuilderAttributesToMeshData(GeometryBuilder gb, MeshData md) {
  
negative.code:       md.AddAttribute(canonical, FlattenVector3List(lst), 3);
      } else if (lst[0].runtimeType == VM.Vector4) {
        md.AddAttribute(canonical, FlattenVector4List(lst), 4);
      } else if (lst[0].runtimeType == double) {
        md.AddAttribute(canonical, new Float32List.fromList(lst), 1);
      } else {
        assert(false,
            "unknown type for ${canonical} ${lst} [${lst[0].runtimeType}]");
      }
    }
  }
  