blob: 3ae9546412e78d54a701253ba18d3499a2806bdb [file] [log] [blame]
swissChili923bd532021-12-08 22:48:58 -08001#pragma once
2
3#include <QString>
4#include <QList>
5
swissChili5d3e5562022-02-24 16:49:19 -08006#include <type_traits>
7
swissChili923bd532021-12-08 22:48:58 -08008#include "Token.h"
9#include "AstNode.h"
swissChili323883d2022-02-20 16:35:23 -080010#include "Parser.h"
swissChili923bd532021-12-08 22:48:58 -080011
12template <typename T>
13QString pprint(T val);
14
swissChili918557c2022-02-20 20:16:34 -080015//template <>
16//QString pprint<Token>(Token val);
swissChili923bd532021-12-08 22:48:58 -080017
swissChili918557c2022-02-20 20:16:34 -080018//template <>
19//QString pprint<AstNode>(AstNode val);
swissChili923bd532021-12-08 22:48:58 -080020
swissChili5d3e5562022-02-24 16:49:19 -080021template <typename T, typename std::enable_if_t<std::is_base_of<TokenBase<T>, T>::value>::value = true>
22QString pprint(QList<T> val)
23{
24 QString out;
25 int lastType = -1;
26
27 qInfo() << "pprint specialized";
28
29 for (const T &v : val)
30 {
31 if ((lastType != v.type() || v.type() != T::SYMBOL) && lastType != -1)
32 out += " ";
33
34 out += QString(v);
35 }
36
37 return out;
38}
39
swissChili923bd532021-12-08 22:48:58 -080040template <typename T>
41QString pprint(QList<T> val)
42{
43 QStringList out;
44
45 for (const T &v : val)
46 out.append(static_cast<QString>(v));
47
48 return out.join(" ");
49}
50
51template <typename T>
52QString pprint(T val)
53{
54 return static_cast<QString>(val);
55}
swissChili323883d2022-02-20 16:35:23 -080056
57QString pprint(ParseResult val, const Parser &parser);
58
59void sout(QString string);
swissChili918557c2022-02-20 20:16:34 -080060void eout(QString string);