binary operator expression repalced with function call expression

This commit is contained in:
ProgramSnail 2023-05-17 15:49:15 +03:00
parent 5192ffe5f3
commit 94805c8662
15 changed files with 165 additions and 269 deletions

View file

@ -78,7 +78,6 @@ private:
// Operators
void Visit(BinaryOperatorExpression* node) override;
void Visit(ReferenceExpression* node) override;
void Visit(AccessExpression* node) override;
@ -139,6 +138,11 @@ private:
void Visit(BoolLiteral* node) override;
void Visit(Literal& node) override; // variant
//
void VisitBinaryOperatorExpression(FunctionCallExpression* node);
private:
const parser::ParseTree& parse_tree_;
parser::ParseTree::Node current_node_;

View file

@ -80,7 +80,6 @@ private:
// Operators
void Visit(BinaryOperatorExpression* node) override;
void Visit(ReferenceExpression* node) override;
void Visit(AccessExpression* node) override;

View file

@ -63,7 +63,6 @@ private:
// Operators
// // void Visit(BinaryOperatorExpression* node) override;
// // void Visit(ReferenceExpression* node) override;
// // void Visit(AccessExpression* node) override;

View file

@ -129,12 +129,10 @@ using SubExpressionToken = std::variant<
std::unique_ptr<Literal>>;
//
struct FunctionCallExpression;
struct BinaryOperatorExpression;
struct ArrayExpression;
struct ReferenceExpression;
using SubExpression = std::variant<
using SubExpression = std::variant< // BiaryOperatorExpression is FunctionCallExpression
std::unique_ptr<FunctionCallExpression>,
std::unique_ptr<BinaryOperatorExpression>,
std::unique_ptr<SubExpressionToken>,
std::unique_ptr<ReferenceExpression>>;
//
@ -171,7 +169,6 @@ struct ScopedStatement;
// Operators
struct BinaryOperatorExpression;
struct ReferenceExpression;
// Other expressions
@ -482,17 +479,17 @@ struct ScopedStatement {
// Operators -----------------
struct BinaryOperatorExpression {
BaseNode base;
OperatorIdentifier operator_name;
SubExpression left_expression;
SubExpression right_expression;
size_t precedence = utils::MaxOperatorPrecedence;
utils::IdType function_id_;
bool is_method_ = false;
};
// struct BinaryOperatorExpression {
// BaseNode base;
//
// OperatorIdentifier operator_name;
// SubExpression left_expression;
// SubExpression right_expression;
// size_t precedence = utils::MaxOperatorPrecedence;
//
// utils::IdType function_id_;
// bool is_method_ = false;
// };
struct ReferenceExpression {
BaseNode base;
@ -517,11 +514,15 @@ struct FunctionCallExpression {
std::unique_ptr<TypeExpression>>> prefix;
NameOrOperatorIdentifier name;
std::vector<std::unique_ptr<TypeExpression>> parameters;
std::vector<SubExpressionToken> arguments;
std::vector<SubExpression> arguments;
std::optional<size_t> precedence; // for operators
bool is_binary_operator_expression = false; // for operators
// only one from two is present
std::optional<utils::IdType> function_id_;
std::optional<utils::IdType> typeclass_graph_id_;
bool is_method_of_first_argument_ = false;
};
struct TupleExpression {

View file

@ -69,7 +69,6 @@ private:
// Operators
// // void Visit(BinaryOperatorExpression* node) override;
// // void Visit(ReferenceExpression* node) override;
// // void Visit(AccessExpression* node) override;

View file

@ -61,7 +61,6 @@ private:
// Operators
void Visit(BinaryOperatorExpression* node) override;
void Visit(ReferenceExpression* node) override;
void Visit(AccessExpression* node) override;

View file

@ -71,7 +71,6 @@ private:
// Operators
void Visit(BinaryOperatorExpression* node) override;
void Visit(ReferenceExpression* node) override;
void Visit(AccessExpression* node) override;
@ -142,14 +141,16 @@ private:
std::optional<FunctionDeclaration*>
FindSubExpressionMethodAndUpdate(FunctionCallExpression* node,
SubExpressionToken* expression_node);
FindExpressionMethodAndUpdate(FunctionCallExpression* node,
utils::IdType expression_type);
std::optional<FunctionDeclaration*>
FindTypeFunctionAndUpdate(FunctionCallExpression* node,
TypeExpression* type_node,
std::unordered_map<std::string, utils::IdType>& context);
std::optional<FunctionDeclaration*> FindFunctionAndUpdate(FunctionCallExpression* node);
std::optional<FunctionDeclaration*>
FindAbstractTypeTypeclassFunctionAndUpdate(
FunctionCallExpression* node,

View file

@ -63,7 +63,6 @@ private:
// Operators
void Visit(BinaryOperatorExpression* node) override;
void Visit(ReferenceExpression* node) override;
void Visit(AccessExpression* node) override;

View file

@ -75,7 +75,6 @@ protected:
// Operators
virtual void Visit(BinaryOperatorExpression* node);
virtual void Visit(ReferenceExpression* node);
virtual void Visit(AccessExpression* node);