/## 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 recieved 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 ;/ ;/