xref: /aosp_15_r20/external/angle/src/compiler/translator/FunctionLookup.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1 //
2 // Copyright 2018 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 // FunctionLookup.h: Used for storing function calls that have not yet been resolved during parsing.
7 //
8 
9 #ifndef COMPILER_TRANSLATOR_FUNCTIONLOOKUP_H_
10 #define COMPILER_TRANSLATOR_FUNCTIONLOOKUP_H_
11 
12 #include "compiler/translator/ImmutableString.h"
13 #include "compiler/translator/IntermNode.h"
14 
15 namespace sh
16 {
17 
18 // A function look-up.
19 class TFunctionLookup : angle::NonCopyable
20 {
21   public:
22     POOL_ALLOCATOR_NEW_DELETE
23 
24     static TFunctionLookup *CreateConstructor(const TType *type);
25     static TFunctionLookup *CreateFunctionCall(const ImmutableString &name, const TSymbol *symbol);
26 
27     const ImmutableString &name() const;
28     ImmutableString getMangledName() const;
29     static ImmutableString GetMangledName(const char *functionName,
30                                           const TIntermSequence &arguments);
31 
32     bool isConstructor() const;
33     const TType &constructorType() const;
34 
35     void setThisNode(TIntermTyped *thisNode);
36     TIntermTyped *thisNode() const;
37 
38     void addArgument(TIntermTyped *argument);
39     TIntermSequence &arguments();
40 
41     // Symbol looked up in the lexical phase using only the name of the function.
42     // This does not necessarily correspond to the correct overloaded function.
43     const TSymbol *symbol() const;
44 
45   private:
46     TFunctionLookup(const ImmutableString &name,
47                     const TType *constructorType,
48                     const TSymbol *symbol);
49 
50     const ImmutableString mName;
51     const TType *const mConstructorType;
52     TIntermTyped *mThisNode;
53     TIntermSequence mArguments;
54     const TSymbol *mSymbol;
55 };
56 
57 }  // namespace sh
58 
59 #endif  // COMPILER_TRANSLATOR_FUNCTIONLOOKUP_H_
60