summaryrefslogtreecommitdiffstats
path: root/gfx/angle/checkout/src/compiler/translator/FunctionLookup.h
blob: 7b0b2dafa5a8fe4c409d2ca3a0b9c800ef6cdbfd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//
// Copyright (c) 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_