1904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo// 2904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo// Copyright (c) 2002-2014 The ANGLE Project Authors. All rights reserved. 3904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo// Use of this source code is governed by a BSD-style license that can be 4904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo// found in the LICENSE file. 5904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo// 6904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo 7904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo#if defined(_MSC_VER) 8904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo#pragma warning(disable: 4718) 9904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo#endif 10904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo 11904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo#include "compiler/translator/Types.h" 12904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo 13487456a36db90e0ee3a05f012c6485c5b637e02eGeoff Lang#include <algorithm> 14904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo#include <climits> 15904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo 161c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madillconst char* getBasicString(TBasicType t) 171c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill{ 181c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill switch (t) 191c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill { 201c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtVoid: return "void"; break; 211c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtFloat: return "float"; break; 221c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtInt: return "int"; break; 231c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtUInt: return "uint"; break; 241c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtBool: return "bool"; break; 251c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtSampler2D: return "sampler2D"; break; 261c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtSampler3D: return "sampler3D"; break; 271c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtSamplerCube: return "samplerCube"; break; 281c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtSamplerExternalOES: return "samplerExternalOES"; break; 291c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtSampler2DRect: return "sampler2DRect"; break; 301c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtSampler2DArray: return "sampler2DArray"; break; 311c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtISampler2D: return "isampler2D"; break; 321c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtISampler3D: return "isampler3D"; break; 331c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtISamplerCube: return "isamplerCube"; break; 341c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtISampler2DArray: return "isampler2DArray"; break; 351c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtUSampler2D: return "usampler2D"; break; 361c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtUSampler3D: return "usampler3D"; break; 371c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtUSamplerCube: return "usamplerCube"; break; 381c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtUSampler2DArray: return "usampler2DArray"; break; 391c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtSampler2DShadow: return "sampler2DShadow"; break; 401c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtSamplerCubeShadow: return "samplerCubeShadow"; break; 411c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtSampler2DArrayShadow: return "sampler2DArrayShadow"; break; 421c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtStruct: return "structure"; break; 431c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill case EbtInterfaceBlock: return "interface block"; break; 441c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill default: UNREACHABLE(); return "unknown type"; 451c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill } 461c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill} 471c28e1f069264b8702db779ace2b9a1c727f00fdJamie Madill 48904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao MoTType::TType(const TPublicType &p) 49904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo : type(p.type), precision(p.precision), qualifier(p.qualifier), layoutQualifier(p.layoutQualifier), 50904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo primarySize(p.primarySize), secondarySize(p.secondarySize), array(p.array), arraySize(p.arraySize), 51904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo interfaceBlock(0), structure(0) 52904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo{ 53904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo if (p.userDef) 54904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo structure = p.userDef->getStruct(); 55904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo} 56904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo 57c8f7232e419a3c593bcff57eb5231b52c96288beZhenyao Mobool TStructure::equals(const TStructure &other) const 58c8f7232e419a3c593bcff57eb5231b52c96288beZhenyao Mo{ 5901f85ac8529f2458f7b2b13cde9056656dacc62eJamie Madill return (uniqueId() == other.uniqueId()); 60904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo} 61904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo 62904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo// 63904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo// Recursively generate mangled names. 64904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo// 65904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao MoTString TType::buildMangledName() const 66904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo{ 67904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo TString mangledName; 68904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo if (isMatrix()) 69904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo mangledName += 'm'; 70904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo else if (isVector()) 71904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo mangledName += 'v'; 72904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo 73904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo switch (type) 74904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo { 759eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtFloat: 769eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += 'f'; 779eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 789eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtInt: 799eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += 'i'; 809eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 819eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtUInt: 829eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += 'u'; 839eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 849eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtBool: 859eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += 'b'; 869eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 879eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtSampler2D: 889eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += "s2"; 899eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 909eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtSampler3D: 919eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += "s3"; 929eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 939eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtSamplerCube: 949eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += "sC"; 959eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 969eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtSampler2DArray: 979eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += "s2a"; 989eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 999eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtSamplerExternalOES: 1009eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += "sext"; 1019eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 1029eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtSampler2DRect: 1039eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += "s2r"; 1049eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 1059eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtISampler2D: 1069eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += "is2"; 1079eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 1089eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtISampler3D: 1099eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += "is3"; 1109eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 1119eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtISamplerCube: 1129eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += "isC"; 1139eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 1149eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtISampler2DArray: 1159eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += "is2a"; 1169eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 1179eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtUSampler2D: 1189eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += "us2"; 1199eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 1209eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtUSampler3D: 1219eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += "us3"; 1229eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 1239eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtUSamplerCube: 1249eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += "usC"; 1259eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 1269eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtUSampler2DArray: 1279eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += "us2a"; 1289eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 1299eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtSampler2DShadow: 1309eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += "s2s"; 1319eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 1329eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtSamplerCubeShadow: 1339eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += "sCs"; 1349eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 1359eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtSampler2DArrayShadow: 1369eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += "s2as"; 1379eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 1389eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtStruct: 1399eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += structure->mangledName(); 1409eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 1419eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo case EbtInterfaceBlock: 1429eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo mangledName += interfaceBlock->mangledName(); 1439eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo break; 1449eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo default: 1459eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo UNREACHABLE(); 146904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo } 147904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo 148904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo if (isMatrix()) 149904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo { 150904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo mangledName += static_cast<char>('0' + getCols()); 151904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo mangledName += static_cast<char>('x'); 152904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo mangledName += static_cast<char>('0' + getRows()); 153904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo } 154904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo else 155904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo { 156904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo mangledName += static_cast<char>('0' + getNominalSize()); 157904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo } 158904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo 159904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo if (isArray()) 160904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo { 161904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo char buf[20]; 162904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo snprintf(buf, sizeof(buf), "%d", arraySize); 163904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo mangledName += '['; 164904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo mangledName += buf; 165904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo mangledName += ']'; 166904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo } 167904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo return mangledName; 168904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo} 169904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo 170904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mosize_t TType::getObjectSize() const 171904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo{ 172904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo size_t totalSize; 173904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo 174904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo if (getBasicType() == EbtStruct) 175904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo totalSize = structure->objectSize(); 176904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo else 177904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo totalSize = primarySize * secondarySize; 178904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo 179904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo if (isArray()) 180904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo { 181904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo size_t arraySize = getArraySize(); 182904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo if (arraySize > INT_MAX / totalSize) 183904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo totalSize = INT_MAX; 184904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo else 185904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo totalSize *= arraySize; 186904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo } 187904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo 188904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo return totalSize; 189904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo} 190904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo 191904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mobool TStructure::containsArrays() const 192904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo{ 1939eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo for (size_t i = 0; i < mFields->size(); ++i) 1949eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo { 1959eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo const TType *fieldType = (*mFields)[i]->type(); 196904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo if (fieldType->isArray() || fieldType->isStructureContainingArrays()) 197904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo return true; 198904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo } 199904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo return false; 200904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo} 201904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo 202904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao MoTString TFieldListCollection::buildMangledName() const 203904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo{ 204904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo TString mangledName(mangledNamePrefix()); 205904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo mangledName += *mName; 206904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo for (size_t i = 0; i < mFields->size(); ++i) 207904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo { 208904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo mangledName += '-'; 209904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo mangledName += (*mFields)[i]->type()->getMangledName(); 210904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo } 211904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo return mangledName; 212904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo} 213904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo 214904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mosize_t TFieldListCollection::calculateObjectSize() const 215904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo{ 216904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo size_t size = 0; 2179eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo for (size_t i = 0; i < mFields->size(); ++i) 2189eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo { 219904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo size_t fieldSize = (*mFields)[i]->type()->getObjectSize(); 220904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo if (fieldSize > INT_MAX - size) 221904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo size = INT_MAX; 222904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo else 223904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo size += fieldSize; 224904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo } 225904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo return size; 226904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo} 227904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo 228904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Moint TStructure::calculateDeepestNesting() const 229904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo{ 230904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo int maxNesting = 0; 2319eedea031cc0d900e34349f9a0ae166e303f7a96Zhenyao Mo for (size_t i = 0; i < mFields->size(); ++i) 232904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo maxNesting = std::max(maxNesting, (*mFields)[i]->type()->getDeepestStructNesting()); 233904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo return 1 + maxNesting; 234904a91641a02eea7d48021fbeb763cccac0ba690Zhenyao Mo} 235