summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-parser.h
blob: 4f888f87ca62dafc6054672fc566a6983212dadd (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
#ifndef SLANG_PARSER_H
#define SLANG_PARSER_H

#include "../compiler-core/slang-lexer.h"

#include "slang-compiler.h"
#include "slang-syntax.h"

namespace Slang
{
    // Parse a source file into an existing translation unit
    void parseSourceFile(
        ASTBuilder*                     astBuilder,
        TranslationUnitRequest*         translationUnit,
        TokenSpan const&                tokens,
        DiagnosticSink*                 sink,
        Scope*                          outerScope);

    Expr* parseTermFromSourceFile(
        ASTBuilder*                     astBuilder,
        TokenSpan const&                tokens,
        DiagnosticSink*                 sink,
        Scope*                          outerScope,
        NamePool*                       namePool,
        SourceLanguage                  sourceLanguage);

    ModuleDecl* populateBaseLanguageModule(
        ASTBuilder*     astBuilder,
        Scope*          scope);

        /// Information used to set up SyntaxDecl. Such decls
        /// when correctly setup define a callback. For some of the callbacks it's necessary
        /// for the `parseUserData` to be set the the associated classInfo
    struct SyntaxParseInfo
    {
        const char* keywordName;                ///< The keyword associated with this parse
        SyntaxParseCallback callback;           ///< The callback to apply to the parse
        const ReflectClassInfo* classInfo;      ///< 
    };

        /// Get all of the predefined SyntaxParseInfos
    ConstArrayView<SyntaxParseInfo> getSyntaxParseInfos();

        /// Assumes the userInfo is the ReflectClassInfo
    NodeBase* parseSimpleSyntax(Parser* parser, void* userData);

}

#endif