src/script/ast.h

Sat, 22 Aug 2015 13:04:58 +0300

author
Teemu Piippo <crimsondusk64@gmail.com>
date
Sat, 22 Aug 2015 13:04:58 +0300
branch
scripting
changeset 942
afbd122f3eff
parent 925
2f316b57b508
permissions
-rw-r--r--

Commit work on scripting

925
2f316b57b508 - added/corrected license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 924
diff changeset
1 /*
2f316b57b508 - added/corrected license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 924
diff changeset
2 * LDForge: LDraw parts authoring CAD
2f316b57b508 - added/corrected license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 924
diff changeset
3 * Copyright (C) 2015 Teemu Piippo
2f316b57b508 - added/corrected license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 924
diff changeset
4 *
2f316b57b508 - added/corrected license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 924
diff changeset
5 * This program is free software: you can redistribute it and/or modify
2f316b57b508 - added/corrected license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 924
diff changeset
6 * it under the terms of the GNU General Public License as published by
2f316b57b508 - added/corrected license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 924
diff changeset
7 * the Free Software Foundation, either version 3 of the License, or
2f316b57b508 - added/corrected license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 924
diff changeset
8 * (at your option) any later version.
2f316b57b508 - added/corrected license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 924
diff changeset
9 *
2f316b57b508 - added/corrected license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 924
diff changeset
10 * This program is distributed in the hope that it will be useful,
2f316b57b508 - added/corrected license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 924
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
2f316b57b508 - added/corrected license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 924
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2f316b57b508 - added/corrected license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 924
diff changeset
13 * GNU General Public License for more details.
2f316b57b508 - added/corrected license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 924
diff changeset
14 *
2f316b57b508 - added/corrected license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 924
diff changeset
15 * You should have received a copy of the GNU General Public License
2f316b57b508 - added/corrected license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 924
diff changeset
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
2f316b57b508 - added/corrected license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 924
diff changeset
17 */
2f316b57b508 - added/corrected license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 924
diff changeset
18
921
e2e9f594de66 - commit work done on scripting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
19 #pragma once
e2e9f594de66 - commit work done on scripting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
20 #include <QVector>
e2e9f594de66 - commit work done on scripting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
21 #include <QSharedPointer>
924
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
22 #include "../main.h"
921
e2e9f594de66 - commit work done on scripting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
23
e2e9f594de66 - commit work done on scripting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
24 namespace Script
e2e9f594de66 - commit work done on scripting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
25 {
924
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
26 namespace Ast
921
e2e9f594de66 - commit work done on scripting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
27 {
924
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
28 using NodePointer = QSharedPointer<class BaseNode>;
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
29 using RootPointer = QSharedPointer<class RootNode>;
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
30 using MacroPointer = QSharedPointer<class MacroNode>;
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
31
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
32 enum NodeType
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
33 {
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
34 ROOT,
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
35 MACRO,
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
36 };
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
37
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
38 class BaseNode
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
39 {
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
40 public:
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
41 BaseNode (NodePointer parent, NodeType type);
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
42 virtual ~BaseNode() = 0;
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
43
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
44 NodeType type() const { return m_type; }
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
45 NodePointer parent() const { return m_parent; }
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
46 QVector<NodePointer> children() const { return m_children; }
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
47 void addChild (NodePointer child) { m_children.append (child); }
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
48 void dump();
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
49 virtual QString describe() const = 0;
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
50
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
51 private:
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
52 QVector<NodePointer> m_children;
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
53 NodePointer m_parent;
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
54 NodeType m_type;
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
55 };
921
e2e9f594de66 - commit work done on scripting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
56
924
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
57 class RootNode : public BaseNode
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
58 {
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
59 public:
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
60 RootNode() : BaseNode (NodePointer(), ROOT) {}
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
61 QString describe() const override;
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
62 };
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
63
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
64 class MacroNode : public BaseNode
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
65 {
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
66 public:
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
67 MacroNode (NodePointer parent, QString macroName) :
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
68 BaseNode (parent, MACRO),
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
69 m_macroName (macroName) {}
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
70
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
71 QString macroName() const { return m_macroName; }
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
72 QString describe() const override;
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
73
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
74 private:
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
75 QString m_macroName;
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
76 };
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
77
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
78 template<typename T, typename... Args>
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
79 QSharedPointer<T> spawn (NodePointer parent, Args&&... args)
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
80 {
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
81 static_assert (std::is_base_of<BaseNode, T>::value,
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
82 "Script::Ast::spawn can only be used for AST types.");
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
83 QSharedPointer<T> ast (new T (parent, args...));
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
84 parent->addChild (ast);
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
85 return ast;
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
86 }
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
87
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
88 inline RootPointer spawnRoot()
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
89 {
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
90 return RootPointer (new RootNode());
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
91 }
d1ac217c9165 - ast: added root and macro nodes and processing of them
Teemu Piippo <crimsondusk64@gmail.com>
parents: 923
diff changeset
92 }
921
e2e9f594de66 - commit work done on scripting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
93 }

mercurial