Implements parsing of function calling

This commit is contained in:
2019-06-01 14:56:28 +02:00
parent 1231a77761
commit 8b70eed516
5 changed files with 59 additions and 10 deletions

View File

@@ -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;
}
};