anchor.diff:      shader = _CreateShader(false, body, prolog);
     }
   
  -  // InitializeShader updates the shader field from header and body.
  -  // If you have set shader manually do not call this.
  +  /// _CreateShader updates the shader field from header and body.
  +  /// If you have set shader manually do not call this.
     String _CreateShader(
         bool addWrapperForMain, List<String> body, List<String> prolog) {
       assert(shader == null);
  
positive.code:   final String purpose;
    final int arraySize;
  
    ShaderVarDesc(this.type, this.purpose, {this.arraySize: 0});
  
    int GetSize() {
      switch (type) {
  
negative.code: const String uLightCount = "uLightCount";
  const String uLightTypes = "uLightTypes";
  
  const Map<String, ShaderVarDesc> _VarsDb = const {
    // controls
    cBlendEquation: const ShaderVarDesc("", ""),
    cDepthWrite: const ShaderVarDesc("", ""),
    cDepthTest: const ShaderVarDesc("", ""),
    cStencilFunc: const ShaderVarDesc("", ""),
  
    // transform vars
    tPosition: const ShaderVarDesc(VarTypeVec3, ""),
    tSpeed: const ShaderVarDesc(VarTypeVec3, ""),
    tForce: const ShaderVarDesc(VarTypeVec3, ""),
  
    // attribute vars
    // This should also contain an alpha channel
    aColor: const ShaderVarDesc(VarTypeVec3, "per vertex color"),
    aColorAlpha: const ShaderVarDesc(VarTypeVec4, "per vertex color"),
    aPosition: const ShaderVarDesc(VarTypeVec3, "vertex coordinates"),
    aTexUV: const ShaderVarDesc(VarTypeVec2, "texture uvs"),
    aNormal: const ShaderVarDesc(VarTypeVec3, "vertex normals"),
    aBinormal: const ShaderVarDesc(VarTypeVec3, "vertex binormals"),
    aCenter: const ShaderVarDesc(VarTypeVec4, "for wireframe"),
    aPointSize: const ShaderVarDesc(VarTypeFloat, ""),
    aBoneIndex: const ShaderVarDesc(VarTypeVec4, ""),
    aBoneWeight: const ShaderVarDesc(VarTypeVec4, ""),
    aTangent: const ShaderVarDesc(VarTypeVec3, "vertex tangents"),
    aBitangent: const ShaderVarDesc(VarTypeVec3, "vertex btangents"),
    iaRotation: const ShaderVarDesc(VarTypeVec4, ""),
    iaTranslation: const ShaderVarDesc(VarTypeVec3, ""),
    iaScale: const ShaderVarDesc(VarTypeVec3, ""),
  
    // Varying
    vColor: const ShaderVarDesc(VarTypeVec3, "per vertex color"),
    vTexUV: const ShaderVarDesc(VarTypeVec2, ""),
    vLightWeighting: const ShaderVarDesc(VarTypeVec3, ""),
    vNormal: const ShaderVarDesc(VarTypeVec3, ""),
    vPosition: const ShaderVarDesc(VarTypeVec3, "vertex coordinates"),
    vPositionFromLight: const ShaderVarDesc(VarTypeVec4, "delta from light"),
    vCenter: const ShaderVarDesc(VarTypeVec4, "for wireframe"),
    vDepth: const ShaderVarDesc(VarTypeFloat, "depth for shadowmaps"),
  
    // uniform vars
    uTransformationMatrix: const ShaderVarDesc(VarTypeMat4, ""),
    //uModelViewMatrix: const ShaderVarDesc(VarTypeMat4, ""),
    uModelMatrix: const ShaderVarDesc(VarTypeMat4, ""),
    //uViewMatrix: const ShaderVarDesc(VarTypeMat4, ""),
    uNormalMatrix: const ShaderVarDesc(VarTypeMat3, ""),
    uConvolutionMatrix: const ShaderVarDesc(VarTypeMat3, ""),
  
    //uPerspectiveMatrix: const ShaderVarDesc(VarTypeMat4, ""),
    uPerspectiveViewMatrix: const ShaderVarDesc(VarTypeMat4, ""),
    uLightPerspectiveViewMatrix: const ShaderVarDesc(VarTypeMat4, ""),
  
    uShadowMap: const ShaderVarDesc(VarTypeSampler2DShadow, ""),
  
    uTexture: const ShaderVarDesc(VarTypeSampler2D, ""),
    uTexture2: const ShaderVarDesc(VarTypeSampler2D, ""),
    uTexture3: const ShaderVarDesc(VarTypeSampler2D, ""),
    uTexture4: const ShaderVarDesc(VarTypeSampler2D, ""),
    uSpecularMap: const ShaderVarDesc(VarTypeSampler2D, ""),
    uNormalMap: const ShaderVarDesc(VarTypeSampler2D, ""),
    uBumpMap: const ShaderVarDesc(VarTypeSampler2D, ""),
    uDepthMap: const ShaderVarDesc(VarTypeSampler2D, ""),
    uCubeTexture: const ShaderVarDesc(VarTypeSamplerCube, ""),
    uAnimationTable: const ShaderVarDesc(VarTypeSampler2D, ""),
  
    uTime: const ShaderVarDesc(VarTypeFloat, "time since program start in sec"),
    uCameraNear: const ShaderVarDesc(VarTypeFloat, ""),
    uCameraFar: const ShaderVarDesc(VarTypeFloat, ""),
    uFogNear: const ShaderVarDesc(VarTypeFloat, ""),
    uFogFar: const ShaderVarDesc(VarTypeFloat, ""),
    uPointSize: const ShaderVarDesc(VarTypeFloat, ""),
    uScale: const ShaderVarDesc(VarTypeFloat, ""),
    uAngle: const ShaderVarDesc(VarTypeFloat, ""),
    uCanvasSize: const ShaderVarDesc(VarTypeVec2, ""),
    uCenter2: const ShaderVarDesc(VarTypeVec2, ""),
    uCutOff: const ShaderVarDesc(VarTypeFloat, ""),
    uShininess: const ShaderVarDesc(VarTypeFloat, ""),
    uShadowBias: const ShaderVarDesc(VarTypeFloat, ""),
    uOpacity: const ShaderVarDesc(VarTypeFloat, ""),
    uColor: const ShaderVarDesc(VarTypeVec3, ""),
    uColorAmbient: const ShaderVarDesc(VarTypeVec3, ""),
    uColorEmissive: const ShaderVarDesc(VarTypeVec3, ""),
    uColorSpecular: const ShaderVarDesc(VarTypeVec3, ""),
    uColorDiffuse: const ShaderVarDesc(VarTypeVec3, ""),
    uColorAlpha: const ShaderVarDesc(VarTypeVec4, ""),
    uColorAlpha2: const ShaderVarDesc(VarTypeVec4, ""),
    uEyePosition: const ShaderVarDesc(VarTypeVec3, ""),
    uMaterial: const ShaderVarDesc(VarTypeMat4, ""),
    uRange: const ShaderVarDesc(VarTypeVec2, ""),
    uDirection: const ShaderVarDesc(VarTypeVec2, ""),
  
  
    uBoneMatrices: const ShaderVarDesc(VarTypeMat4, "", arraySize: kMaxBones),
  
    uLightDescs: const ShaderVarDesc(VarTypeMat4, "", arraySize: kMaxLights),
    uLightCount: const ShaderVarDesc(VarTypeFloat, ""),
    uLightTypes: const ShaderVarDesc(VarTypeFloat, "", arraySize: kMaxLights),
  
    uBumpScale: const ShaderVarDesc(VarTypeFloat, "for bump maps"),
    uNormalScale: const ShaderVarDesc(VarTypeFloat, "for normal maps"),
  };
  
  void IntroduceNewShaderVar(String canonical, ShaderVarDesc desc) {
  