Store unmangled function names in the AST
This makes the code simpler across the board. There are a few cases
where mangled names still need to be generated in AST traversers, but
they are outweighed by much leaner output code for all function nodes.
BUG=angleproject:1490
TEST=angle_unittests, angle_end2end_tests
Change-Id: Id3638e0fca6019bbbe6fc5e1b7763870591da2d8
Reviewed-on: https://chromium-review.googlesource.com/461077
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/compiler/translator/ValidateLimitations.cpp b/src/compiler/translator/ValidateLimitations.cpp
index 0369eaa..e647e4c 100644
--- a/src/compiler/translator/ValidateLimitations.cpp
+++ b/src/compiler/translator/ValidateLimitations.cpp
@@ -402,8 +402,11 @@
bool valid = true;
TSymbolTable &symbolTable = GetGlobalParseContext()->symbolTable;
- TSymbol *symbol = symbolTable.find(node->getFunctionSymbolInfo()->getName(),
- GetGlobalParseContext()->getShaderVersion());
+ // TODO(oetuaho@nvidia.com): It would be neater to leverage TIntermLValueTrackingTraverser to
+ // keep track of out parameters, rather than doing a symbol table lookup here.
+ TString mangledName = TFunction::GetMangledNameFromCall(
+ node->getFunctionSymbolInfo()->getName(), *node->getSequence());
+ TSymbol *symbol = symbolTable.find(mangledName, GetGlobalParseContext()->getShaderVersion());
ASSERT(symbol && symbol->isFunction());
TFunction *function = static_cast<TFunction *>(symbol);
for (ParamIndex::const_iterator i = pIndex.begin(); i != pIndex.end(); ++i)