| // | |
| // 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<ImmutableString> 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_ |