Skip to content

⬅️ Back to Table of Contents

📄 OutputStructNode.js

📊 Analysis Summary

Metric Count
🔧 Functions 2
🧱 Classes 1
📦 Imports 2
📊 Variables & Constants 5

📚 Table of Contents

🛠️ File Location:

📂 src/nodes/core/OutputStructNode.js

📦 Imports

Name Source
Node ./Node.js
nodeProxy ../tsl/TSLBase.js

Variables & Constants

Name Type Kind Value Exported
members Node[] let/var this.members
membersLayout any[] let/var []
name string let/var 'm' + i
members Node[] let/var this.members
structPrefix string let/var propertyName !== '' ? propertyName + '.' : ''

Functions

OutputStructNode.getNodeType(builder: any): any

Parameters:

  • builder any

Returns: any

Calls:

  • builder.getNodeProperties
  • members[ i ].getNodeType
  • membersLayout.push
  • builder.getOutputStructTypeFromNode
Code
getNodeType( builder ) {

        const properties = builder.getNodeProperties( this );

        if ( properties.membersLayout === undefined ) {

            const members = this.members;
            const membersLayout = [];

            for ( let i = 0; i < members.length; i ++ ) {

                const name = 'm' + i;
                const type = members[ i ].getNodeType( builder );

                membersLayout.push( { name, type, index: i } );

            }

            properties.membersLayout = membersLayout;
            properties.structType = builder.getOutputStructTypeFromNode( this, properties.membersLayout );

        }

        return properties.structType.name;

    }

OutputStructNode.generate(builder: any): any

Parameters:

  • builder any

Returns: any

Calls:

  • builder.getOutputStructName
  • members[ i ].build
  • builder.addLineFlowCode
Code
generate( builder ) {

        const propertyName = builder.getOutputStructName();
        const members = this.members;

        const structPrefix = propertyName !== '' ? propertyName + '.' : '';

        for ( let i = 0; i < members.length; i ++ ) {

            const snippet = members[ i ].build( builder );

            builder.addLineFlowCode( `${ structPrefix }m${ i } = ${ snippet }`, this );

        }

        return propertyName;

    }

Classes

OutputStructNode

Class Code
class OutputStructNode extends Node {

    static get type() {

        return 'OutputStructNode';

    }

    /**
     * Constructs a new output struct node. The constructor can be invoked with an
     * arbitrary number of nodes representing the members.
     *
     * @param {...Node} members - A parameter list of nodes.
     */
    constructor( ...members ) {

        super();

        /**
         * An array of nodes which defines the output.
         *
         * @type {Array<Node>}
         */
        this.members = members;

        /**
         * This flag can be used for type testing.
         *
         * @type {boolean}
         * @readonly
         * @default true
         */
        this.isOutputStructNode = true;

    }

    getNodeType( builder ) {

        const properties = builder.getNodeProperties( this );

        if ( properties.membersLayout === undefined ) {

            const members = this.members;
            const membersLayout = [];

            for ( let i = 0; i < members.length; i ++ ) {

                const name = 'm' + i;
                const type = members[ i ].getNodeType( builder );

                membersLayout.push( { name, type, index: i } );

            }

            properties.membersLayout = membersLayout;
            properties.structType = builder.getOutputStructTypeFromNode( this, properties.membersLayout );

        }

        return properties.structType.name;

    }

    generate( builder ) {

        const propertyName = builder.getOutputStructName();
        const members = this.members;

        const structPrefix = propertyName !== '' ? propertyName + '.' : '';

        for ( let i = 0; i < members.length; i ++ ) {

            const snippet = members[ i ].build( builder );

            builder.addLineFlowCode( `${ structPrefix }m${ i } = ${ snippet }`, this );

        }

        return propertyName;

    }

}

Methods

getNodeType(builder: any): any
Code
getNodeType( builder ) {

        const properties = builder.getNodeProperties( this );

        if ( properties.membersLayout === undefined ) {

            const members = this.members;
            const membersLayout = [];

            for ( let i = 0; i < members.length; i ++ ) {

                const name = 'm' + i;
                const type = members[ i ].getNodeType( builder );

                membersLayout.push( { name, type, index: i } );

            }

            properties.membersLayout = membersLayout;
            properties.structType = builder.getOutputStructTypeFromNode( this, properties.membersLayout );

        }

        return properties.structType.name;

    }
generate(builder: any): any
Code
generate( builder ) {

        const propertyName = builder.getOutputStructName();
        const members = this.members;

        const structPrefix = propertyName !== '' ? propertyName + '.' : '';

        for ( let i = 0; i < members.length; i ++ ) {

            const snippet = members[ i ].build( builder );

            builder.addLineFlowCode( `${ structPrefix }m${ i } = ${ snippet }`, this );

        }

        return propertyName;

    }