1 // =================================
 2 // Copyright (c) 2020 Seppo Laakko
 3 // Distributed under the MIT license
 4 // =================================
 5 
 6 #ifndef SNGCM_PARSER_PARSING_CONTEXT_HPP
 7 #define SNGCM_PARSER_PARSING_CONTEXT_HPP
 8 #include <sngcm/cmparser/ParserApi.hpp>
 9 #include <stack>
10 
11 struct ParsingContext 
12 {
13     ParsingContext();
14     void PushParsingExpressionStatement(bool enable);
15     void PopParsingExpressionStatement();
16     void PushParsingLvalue(bool enable);
17     void PopParsingLvalue();
18     void BeginParsingArguments();
19     void EndParsingArguments();
20     void PushParsingIsOrAs(bool enable);
21     void PopParsingIsOrAs();
22     void BeginParsingTypeExpr();
23     void EndParsingTypeExpr();
24     void BeginParsingConcept();
25     void EndParsingConcept();
26     void BeginParsingTemplateId();
27     void EndParsingTemplateId();
28     bool parsingExpressionStatement;
29     bool parsingLvalue;
30     bool parsingArguments;
31     bool parsingIsOrAs;
32     bool parsingTypeExpr;
33     bool parsingConcept;
34     bool parsingTemplateId;
35 private:
36     std::stack<bool> parsingExpressionStatementStack;
37     std::stack<bool> parsingLvalueStack;
38     std::stack<bool> parsingArgumentsStack;
39     std::stack<bool> parsingIsOrAsStack;
40     std::stack<bool> parsingTypeExprStack;
41     std::stack<bool> parsingConceptStack;
42     std::stack<bool> parsingTemplateIdStack;
43 };
44 
45 #endif // SNGCM_PARSER_PARSING_CONTEXT_HPP