Implements parsing of function calling
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
|
||||
#ifndef PORYGONLANG_PARSEDEXPRESSION_HPP
|
||||
#define PORYGONLANG_PARSEDEXPRESSION_HPP
|
||||
|
||||
#include <utility>
|
||||
#include <memory>
|
||||
|
||||
#include "../Token.hpp"
|
||||
#include "../UnaryOperatorKind.hpp"
|
||||
#include "../BinaryOperatorKind.hpp"
|
||||
@@ -19,6 +21,7 @@ enum class ParsedExpressionKind{
|
||||
Unary,
|
||||
Binary,
|
||||
Parenthesized,
|
||||
FunctionCall,
|
||||
};
|
||||
|
||||
class ParsedExpression {
|
||||
@@ -216,8 +219,32 @@ public:
|
||||
};
|
||||
|
||||
class FunctionCallExpression : public ParsedExpression{
|
||||
|
||||
std::unique_ptr<ParsedExpression> _function;
|
||||
vector<std::unique_ptr<ParsedExpression>> _parameters;
|
||||
public:
|
||||
FunctionCallExpression(ParsedExpression* function, vector<ParsedExpression*> parameters,
|
||||
unsigned int start, unsigned int length) : ParsedExpression(start, length){
|
||||
_function = std::unique_ptr<ParsedExpression>(function);
|
||||
_parameters.reserve(parameters.size());
|
||||
for (int i = 0; i < parameters.size(); i++){
|
||||
_parameters[i] = std::unique_ptr<ParsedExpression>(parameters[i]);
|
||||
}
|
||||
}
|
||||
|
||||
ParsedExpressionKind GetKind() final{
|
||||
return ParsedExpressionKind::FunctionCall;
|
||||
}
|
||||
|
||||
ParsedExpression* GetFunction(){
|
||||
return _function.get();
|
||||
}
|
||||
vector<ParsedExpression*> GetParameters(){
|
||||
auto par = vector<ParsedExpression*>(_parameters.size(), nullptr);
|
||||
for (int i = 0; i < _parameters.size(); i++){
|
||||
par[i] = _parameters[i].get();
|
||||
}
|
||||
return par;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user