blob: 62fd23f6b87f9e056a4fe0bc11eb3057db918c4d [file] [log] [blame]
swissChili682e7bc2021-12-07 09:04:54 -08001#pragma once
2
swissChili07d325f2021-12-08 20:02:05 -08003#include <QMap>
4
5#include "Token.h"
6#include "AstNode.h"
7#include "Function.h"
8#include "VarContext.h"
9
10class RuntimeResult
11{
12public:
13 RuntimeResult(QList<Token> result);
14 RuntimeResult(QString message);
15
16 bool success() const;
17 QString message() const;
18 QList<Token> result() const;
19
20 operator QString() const;
21
22private:
23 bool _success = true;
24 QString _errorMessage;
25 QList<Token> _result;
26};
27
swissChili682e7bc2021-12-07 09:04:54 -080028class Evaluator {
29public:
swissChili07d325f2021-12-08 20:02:05 -080030 Evaluator() = default;
31
32 void addFunction(Function func);
33 void clearFunction(QString name);
34 RuntimeResult evaluate(AstNode node, VarContext ctx);
35 RuntimeResult callFunction(QString name, QList<Token> args);
36
37private:
38 QMap<QString, Function> _functions;
swissChili682e7bc2021-12-07 09:04:54 -080039};