1
2
3
4
5
6 #ifndef SNGCPP_PARSER_PARSING_CONTEXT_INCLUDED
7 #define SNGCPP_PARSER_PARSING_CONTEXT_INCLUDED
8 #include <sngcpp/parser/ParserApi.hpp>
9 #include <sngcpp/ast/SourceFile.hpp>
10 #include <stack>
11
12 namespace sngcpp { namespace cppparser {
13
14 using namespace sngcpp::ast;
15
16 class ParsingContext
17 {
18 public:
19 ParsingContext();
20 bool ParsingTemplateId() const { return parsingTemplateId; }
21 void BeginParsingTemplateId();
22 void EndParsingTemplateId();
23 bool InFunctionBody() const { return inFunctionBody; }
24 void BeginFunctionBody();
25 void EndFunctionBody();
26 bool ParsingLvalue() const { return parsingLvalue; }
27 void BeginParsingLvalue();
28 void EndParsingLvalue();
29 bool ParsingArguments() const { return parsingArguments; }
30 void BeginParsingArguments();
31 void EndParsingArguments();
32 bool ParsingTemplateIdOrLvalue() const { return parsingTemplateId || parsingLvalue; }
33 bool ParsingTemplateIdOrLvalueAndNotArguments() const { return (parsingTemplateId || parsingLvalue) && !parsingArguments; }
34 bool ParsingLvalueAndNotArguments() const { return parsingLvalue && !parsingArguments; }
35 void SetSourceFileNode(SourceFileNode* sourceFileNode_) { sourceFileNode = sourceFileNode_; }
36 SourceFileNode* GetSourceFileNode() { return sourceFileNode; }
37 private:
38 bool parsingTemplateId;
39 std::stack<bool> parsingTemplateIdStack;
40 bool inFunctionBody;
41 std::stack<bool> inFunctionBodyStack;
42 bool parsingLvalue;
43 std::stack<bool> parsingLvalueStack;
44 bool parsingArguments;
45 std::stack<bool> parsingArgumentsStack;
46 SourceFileNode* sourceFileNode;
47 };
48
49 } }
50
51 #endif // SNGCPP_PARSER_PARSING_CONTEXT_INCLUDED