summaryrefslogtreecommitdiff
path: root/tnslc/ast/node.tnsl
diff options
context:
space:
mode:
authorKyle Gunger <kgunger12@gmail.com>2022-04-11 18:50:08 -0400
committerKyle Gunger <kgunger12@gmail.com>2022-04-11 18:50:08 -0400
commitd0213b4202ac12d7e92f7125e87c31d9ecb637dd (patch)
tree50164dfa2295c6806f3866c24a897789856337a7 /tnslc/ast/node.tnsl
parent41cb9e107b20153449526cedec101e33f21d8630 (diff)
Remove src folders
Diffstat (limited to 'tnslc/ast/node.tnsl')
-rw-r--r--tnslc/ast/node.tnsl85
1 files changed, 85 insertions, 0 deletions
diff --git a/tnslc/ast/node.tnsl b/tnslc/ast/node.tnsl
new file mode 100644
index 0000000..5eeac91
--- /dev/null
+++ b/tnslc/ast/node.tnsl
@@ -0,0 +1,85 @@
+/##
+ Copyright 2021 Kyle Gunger
+
+ This file is licensed under the CDDL 1.0 (the License)
+ and may only be used in accordance with the License.
+ You should have received a copy of the License with this
+ software/source code. If you did not, a copy can be found
+ at the following URL:
+
+ https://opensource.org/licenses/CDDL-1.0
+
+ THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO
+ WARRANTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE
+ EXPRESS OR IMPLIED
+#/
+
+# AST node (non-block)
+;struct Node {
+ tnslc.parse.Token
+ # associated token to the node
+ data,
+
+ ~{}Node
+ # sub-nodes
+ sub
+}
+
+# AST node (block)
+;struct BlockNode extends Node {
+ super,
+
+ ~{}Node
+ # block inputs and outputs
+ blockIn,
+ blockOut,
+
+ ~{}tnslc.parse.Token
+ # block qualifiers
+ blockQs
+}
+
+# Node methods
+/; method Node
+
+ /; operator delete
+ ;delete this.data, this.sub
+ ;/
+
+ /; push_sub (Node node) [uint]
+ ;uint len = this.sub.length
+ ;alloc this.sub, len + 1
+ ;this.sub{len} = node
+ ;return len + 1
+ ;/
+;/
+
+# Extended block node methods
+/; method BlockNode
+
+ /; operator delete
+ ;super()
+ ;delete this.blockQs, this.blockIn, this.blockOut
+ ;/
+
+ /; push_blockQ (tnslc.parse.Token token) [uint]
+ ;uint len = this.blockQs.length
+ ;alloc this.blockQs, len + 1
+ ;this.blockQs{len} = token
+ ;return len + 1
+ ;/
+
+ /; push_blockIn (Node node) [uint]
+ ;uint len = this.blockIn.length
+ ;alloc this.blockIn, len + 1
+ ;this.blockIn{len} = node
+ ;return len + 1
+ ;/
+
+ /; push_blockOut (Node node) [uint]
+ ;uint len = this.blockOut.length
+ ;alloc this.blockOut, len + 1
+ ;this.blockOut{len} = node
+ ;return len + 1
+ ;/
+;/ \ No newline at end of file