func:  WebGLContext::CompileShader(WebGLShader *shader) if ( IsContextLost ( ) )  if ( ! ValidateObject ( "compileShader" , shader ) )  if ( ! mShaderValidation )  if ( ! shader -> NeedsTranslation ( ) )  ShBuiltInResources resources ; memset ( & resources , 0 , sizeof ( ShBuiltInResources ) ); ShInitBuiltInResources ( & resources ); resources . MaxVertexAttribs = mGLMaxVertexAttribs; resources . MaxVertexUniformVectors = mGLMaxVertexUniformVectors; resources . MaxVaryingVectors = mGLMaxVaryingVectors; resources . MaxVertexTextureImageUnits = mGLMaxVertexTextureImageUnits; resources . MaxCombinedTextureImageUnits = mGLMaxTextureUnits; resources . MaxTextureImageUnits = mGLMaxTextureImageUnits; resources . MaxFragmentUniformVectors = mGLMaxFragmentUniformVectors; resources . MaxDrawBuffers = mGLMaxDrawBuffers; resources . EXT_frag_depth = 1; resources . OES_standard_derivatives = 1; resources . EXT_draw_buffers = 1; resources . EXT_shader_texture_lod = 1; resources . FragmentPrecisionHigh = mDisableFragHighP ? 0 : 1; resources . HashFunction = WebGLProgram :: IdentifierHashFunction; resources . MaxExpressionComplexity = 1000; compiler = ShConstructCompiler ( shader -> ShaderType ( ) , SH_WEBGL_SPEC , targetShaderSourceLanguage , & resources ); if ( resources . MaxExpressionComplexity > 0 )  if ( ! ShCompile ( compiler , & angleShaderCode , 1 , compileOptions ) )  ShGetInfo ( compiler , SH_INFO_LOG_LENGTH , & lenWithNull ); ShGetInfoLog ( compiler , info . BeginWriting ( ) ); ShDestruct ( compiler ); ShGetInfo ( compiler , SH_ACTIVE_ATTRIBUTES , & num_attributes ); ShGetInfo ( compiler , SH_ACTIVE_UNIFORMS , & num_uniforms ); ShGetInfo ( compiler , SH_ACTIVE_ATTRIBUTE_MAX_LENGTH , & attrib_max_length ); ShGetInfo ( compiler , SH_ACTIVE_UNIFORM_MAX_LENGTH , & uniform_max_length ); ShGetInfo ( compiler , SH_MAPPED_NAME_MAX_LENGTH , & mapped_max_length ); ShGetVariableInfo ( compiler , SH_ACTIVE_UNIFORMS , ( int ) i , & length , & size , & type , & precision , & staticUse , uniform_name , mapped_name ); ShGetVariableInfo ( compiler , SH_ACTIVE_ATTRIBUTES , ( int ) i , & length , & size , & type , & precision , & staticUse , attribute_name , mapped_name ); ShGetInfo ( compiler , SH_OBJECT_CODE_LENGTH , & lenWithNull ); ShGetObjectCode ( compiler , translatedSrc . BeginWriting ( ) ); ShDestruct ( compiler ); 