// // Copyright 2018 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // FunctionLookup.h: Used for storing function calls that have not yet been resolved during parsing. // #ifndef COMPILER_TRANSLATOR_FUNCTIONLOOKUP_H_ #define COMPILER_TRANSLATOR_FUNCTIONLOOKUP_H_ #include "compiler/translator/ImmutableString.h" #include "compiler/translator/IntermNode.h" namespace sh { // A function look-up. class TFunctionLookup : angle::NonCopyable { public: POOL_ALLOCATOR_NEW_DELETE static TFunctionLookup *CreateConstructor(const TType *type); static TFunctionLookup *CreateFunctionCall(const ImmutableString &name, const TSymbol *symbol); const ImmutableString &name() const; ImmutableString getMangledName() const; static ImmutableString GetMangledName(const char *functionName, const TIntermSequence &arguments); std::vector getMangledNamesForImplicitConversions() const; bool isConstructor() const; const TType &constructorType() const; void setThisNode(TIntermTyped *thisNode); TIntermTyped *thisNode() const; void addArgument(TIntermTyped *argument); TIntermSequence &arguments(); // Symbol looked up in the lexical phase using only the name of the function. // This does not necessarily correspond to the correct overloaded function. const TSymbol *symbol() const; private: TFunctionLookup(const ImmutableString &name, const TType *constructorType, const TSymbol *symbol); const ImmutableString mName; const TType *const mConstructorType; TIntermTyped *mThisNode; TIntermSequence mArguments; const TSymbol *mSymbol; }; } // namespace sh #endif // COMPILER_TRANSLATOR_FUNCTIONLOOKUP_H_