anchor.diff:                existing.addComponent(info, location);
               } else {
                 final struct =
  -              new _StructUniform(context, this, fullName, fullName);
  +                  new _StructUniform(context, this, fullName, fullName);
   
                 struct.addComponent(info, location);
                 structs[fullName] = struct;
  
positive.code:             }
            }
          } else {
            final type = info.type;
  
            if (info.size == 1) {
              // We're dealing with a singular basic uniform
  
              if (type == WebGL.BOOL) {
                uniforms
                    .add(new _BoolUniform(context, this, location, info, name));
              } else if (type == WebGL.INT) {
                uniforms
                    .add(new _Int32Uniform(context, this, location, info, name));
              } else if (type == WebGL.FLOAT) {
                uniforms
                    .add(new _FloatUniform(context, this, location, info, name));
              } else if (type == WebGL.FLOAT_VEC2) {
                uniforms.add(
                    new _Vector2Uniform(context, this, location, info, name));
              } else if (type == WebGL.FLOAT_VEC3) {
                uniforms.add(
                    new _Vector3Uniform(context, this, location, info, name));
              } else if (type == WebGL.FLOAT_VEC4) {
                uniforms.add(
                    new _Vector4Uniform(context, this, location, info, name));
              } else if (type == WebGL.FLOAT_MAT2) {
                uniforms.add(
                    new _Matrix2Uniform(context, this, location, info, name));
              } else if (type == WebGL.FLOAT_MAT3) {
                uniforms.add(
                    new _Matrix3Uniform(context, this, location, info, name));
              } else if (type == WebGL.FLOAT_MAT4) {
                uniforms.add(
                    new _Matrix4Uniform(context, this, location, info, name));
              } else if (type == WebGL.SAMPLER_2D) {
                uniforms.add(
                    new _Sampler2DUniform(context, this, location, info, name));
              } else {
                throw new ArgumentError('Unsupported uniform type in program for '
                    'uniform "${info.name}". Currently supported types are: '
                    '`bool`, `int`, `float`, `vec2`, `vec3`, `vec4`, `mat2`, '
                    '`mat3`, `mat4`, `sampled2D`, `int[]`, `float[]`, `vec2[]`, '
                    '`vec3[]`, `vec4[]`, `mat2[]`, `mat3[]`, `mat4[]`, '
                    '`sampled2D[]`.');
              }
            } else {
              // We're dealing with a basic array uniform
  
              if (type == WebGL.INT) {
                uniforms.add(
                    new _Int32ArrayUniform(context, this, location, info, name));
              } else if (type == WebGL.FLOAT) {
                uniforms.add(new _Float32ArrayUniform(
                    context, this, location, info, name));
              } else if (type == WebGL.FLOAT_VEC2) {
                uniforms.add(new _Vector2ArrayUniform(
                    context, this, location, info, name));
              } else if (type == WebGL.FLOAT_VEC3) {
                uniforms.add(new _Vector3ArrayUniform(
                    context, this, location, info, name));
              } else if (type == WebGL.FLOAT_VEC4) {
                uniforms.add(new _Vector4ArrayUniform(
                    context, this, location, info, name));
              } else if (type == WebGL.FLOAT_MAT2) {
                uniforms.add(new _Matrix2ArrayUniform(
                    context, this, location, info, name));
              } else if (type == WebGL.FLOAT_MAT3) {
                uniforms.add(new _Matrix3ArrayUniform(
                    context, this, location, info, name));
              } else if (type == WebGL.FLOAT_MAT4) {
                uniforms.add(new _Matrix4ArrayUniform(
                    context, this, location, info, name));
              } else if (type == WebGL.SAMPLER_2D) {
                uniforms.add(new _Sampler2DArrayUniform(
                    context, this, location, info, name));
              } else {
                throw new ArgumentError('Unsupported uniform type in program for '
                    'uniform "${info.name}". Currently supported types are: '
                    '`bool`, `int`, `float`, `vec2`, `vec3`, `vec4`, `mat2`, '
                    '`mat3`, `mat4`, `sampled2D`, `int[]`, `float[]`, `vec2[]`, '
                    '`vec3[]`, `vec4[]`, `mat2[]`, `mat3[]`, `mat4[]`, '
                    '`sampled2D[]`.');
              }
            }
          }
  
negative.code:               existingArray.elements.add(struct);
              } else {
                final structArray =
                    new _StructArrayUniform(fullName + '.' + arrayName);
  
                structArray.elements.add(struct);
                _structArrayComponentsByName[arrayName] = structArray;
  