summaryrefslogtreecommitdiff
path: root/source/slang/slang-lookup.h
blob: 0f034d1003139ec8797be5f04b15dc37951a9860 (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
61
62
63
64
65
66
#ifndef SLANG_LOOKUP_H_INCLUDED
#define SLANG_LOOKUP_H_INCLUDED

#include "slang-syntax.h"

namespace Slang {

struct SemanticsVisitor;

// Take an existing lookup result and refine it to only include
// results that pass the given `LookupMask`.
LookupResult refineLookup(LookupResult const& inResult, LookupMask mask);

// Ensure that the dictionary for name-based member lookup has been
// built for the given container declaration.
void buildMemberDictionary(ContainerDecl* decl);

// Look up a name in the given scope, proceeding up through
// parent scopes as needed.
LookupResult lookUp(
    ASTBuilder*         astBuilder, 
    SemanticsVisitor*   semantics,
    Name*               name,
    Scope*              scope,
    LookupMask          mask = LookupMask::Default);

// Perform member lookup in the context of a type
LookupResult lookUpMember(
    ASTBuilder*         astBuilder,
    SemanticsVisitor*   semantics,
    Name*               name,
    Type*               type,
    LookupMask          mask = LookupMask::Default,
    LookupOptions       options = LookupOptions::None);

    /// Perform "direct" lookup in a container declaration
LookupResult lookUpDirectAndTransparentMembers(
    ASTBuilder*             astBuilder,
    SemanticsVisitor*       semantics,
    Name*                   name,
    DeclRef<ContainerDecl>  containerDeclRef,
    LookupMask              mask = LookupMask::Default);

// TODO: this belongs somewhere else

QualType getTypeForDeclRef(
    ASTBuilder*             astBuilder,
    SemanticsVisitor*       sema,
    DiagnosticSink*         sink,
    DeclRef<Decl>           declRef,
    Type**           outTypeResult,
    SourceLoc               loc);

QualType getTypeForDeclRef(
    ASTBuilder*     astBuilder, 
    DeclRef<Decl>   declRef,
    SourceLoc       loc);

    /// Add a found item to a lookup result
void AddToLookupResult(
    LookupResult&		result,
    LookupResultItem	item);

}

#endif