1 // =================================
 2 // Copyright (c) 2021 Seppo Laakko
 3 // Distributed under the MIT license
 4 // =================================
 5 
 6 #ifndef CMAJOR_BINDER_EXPRESSION_BINDER_INCLUDED
 7 #define CMAJOR_BINDER_EXPRESSION_BINDER_INCLUDED
 8 #include <sngcm/ast/Node.hpp>
 9 #include <cmajor/symbols/Scope.hpp>
10 
11 namespace cmajor { namespace binder {
12 
13 using sngcm::ast::Node;
14 using cmajor::symbols::ContainerScope;
15 
16 class BoundCompileUnit;
17 class BoundFunction;
18 class BoundExpression;
19 class StatementBinder;
20 
21 std::unique_ptr<BoundExpression> BindExpression(Node* nodeBoundCompileUnit& boundCompileUnitBoundFunction* boundFunctionContainerScope* containerScopeStatementBinder* statementBinder);
22 std::unique_ptr<BoundExpression> BindExpression(Node* nodeBoundCompileUnit& boundCompileUnitBoundFunction* boundFunctionContainerScope* containerScopeStatementBinder* statementBinder
23     bool lvalue);
24 std::unique_ptr<BoundExpression> BindExpression(Node* nodeBoundCompileUnit& boundCompileUnitBoundFunction* boundFunctionContainerScope* containerScopeStatementBinder* statementBinder
25     bool lvaluebool acceptFunctionGroupOrMemberExpression);
26 std::unique_ptr<BoundExpression> BindExpression(Node* nodeBoundCompileUnit& boundCompileUnitBoundFunction* boundFunctionContainerScope* containerScopeStatementBinder* statementBinder
27     bool lvaluebool acceptFunctionGroupOrMemberExpressionbool acceptIncomplete);
28 std::unique_ptr<BoundExpression> BindExpression(Node* nodeBoundCompileUnit& boundCompileUnitBoundFunction* boundFunctionContainerScope* containerScopeStatementBinder* statementBinder
29     bool lvaluebool acceptFunctionGroupOrMemberExpressionbool acceptIncompletebool moveTemporaryDestructorCalls);
30 
31 } } // namespace cmajor::binder
32 
33 #endif // CMAJOR_BINDER_EXPRESSION_BINDER_INCLUDED