mirror of
https://codeberg.org/ProgramSnail/lang_2023.git
synced 2025-12-05 22:48:42 +00:00
binary operator expression repalced with function call expression
This commit is contained in:
parent
5192ffe5f3
commit
94805c8662
15 changed files with 165 additions and 269 deletions
|
|
@ -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_;
|
||||
|
|
|
|||
|
|
@ -80,7 +80,6 @@ private:
|
|||
|
||||
// Operators
|
||||
|
||||
void Visit(BinaryOperatorExpression* node) override;
|
||||
void Visit(ReferenceExpression* node) override;
|
||||
void Visit(AccessExpression* node) override;
|
||||
|
||||
|
|
|
|||
|
|
@ -63,7 +63,6 @@ private:
|
|||
|
||||
// Operators
|
||||
|
||||
// // void Visit(BinaryOperatorExpression* node) override;
|
||||
// // void Visit(ReferenceExpression* node) override;
|
||||
// // void Visit(AccessExpression* node) override;
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -69,7 +69,6 @@ private:
|
|||
|
||||
// Operators
|
||||
|
||||
// // void Visit(BinaryOperatorExpression* node) override;
|
||||
// // void Visit(ReferenceExpression* node) override;
|
||||
// // void Visit(AccessExpression* node) override;
|
||||
|
||||
|
|
|
|||
|
|
@ -61,7 +61,6 @@ private:
|
|||
|
||||
// Operators
|
||||
|
||||
void Visit(BinaryOperatorExpression* node) override;
|
||||
void Visit(ReferenceExpression* node) override;
|
||||
void Visit(AccessExpression* node) override;
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -63,7 +63,6 @@ private:
|
|||
|
||||
// Operators
|
||||
|
||||
void Visit(BinaryOperatorExpression* node) override;
|
||||
void Visit(ReferenceExpression* node) override;
|
||||
void Visit(AccessExpression* node) override;
|
||||
|
||||
|
|
|
|||
|
|
@ -75,7 +75,6 @@ protected:
|
|||
|
||||
// Operators
|
||||
|
||||
virtual void Visit(BinaryOperatorExpression* node);
|
||||
virtual void Visit(ReferenceExpression* node);
|
||||
virtual void Visit(AccessExpression* node);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue