Skip to content

⬅️ Back to Table of Contents

📄 ArrayElementNode.js

📊 Analysis Summary

Metric Count
🔧 Functions 2
🧱 Classes 1
📦 Imports 1

📚 Table of Contents

🛠️ File Location:

📂 src/nodes/utils/ArrayElementNode.js

📦 Imports

Name Source
Node ../core/Node.js

Functions

ArrayElementNode.getNodeType(builder: NodeBuilder): string

JSDoc:

/**
     * This method is overwritten since the node type is inferred from the array-like node.
     *
     * @param {NodeBuilder} builder - The current node builder.
     * @return {string} The node type.
     */

Parameters:

  • builder NodeBuilder

Returns: string

Calls:

  • this.node.getElementType
Code
getNodeType( builder ) {

        return this.node.getElementType( builder );

    }

ArrayElementNode.generate(builder: any): string

Parameters:

  • builder any

Returns: string

Calls:

  • this.indexNode.getNodeType
  • this.node.build
  • this.indexNode.build
  • builder.isVector
  • builder.isInteger
Code
generate( builder ) {

        const indexType = this.indexNode.getNodeType( builder );

        const nodeSnippet = this.node.build( builder );
        const indexSnippet = this.indexNode.build( builder, ! builder.isVector( indexType ) && builder.isInteger( indexType ) ? indexType : 'uint' );

        return `${ nodeSnippet }[ ${ indexSnippet } ]`;

    }

Classes

ArrayElementNode

Class Code
class ArrayElementNode extends Node { // @TODO: If extending from TempNode it breaks webgpu_compute

    static get type() {

        return 'ArrayElementNode';

    }

    /**
     * Constructs an array element node.
     *
     * @param {Node} node - The array-like node.
     * @param {Node} indexNode - The index node that defines the element access.
     */
    constructor( node, indexNode ) {

        super();

        /**
         * The array-like node.
         *
         * @type {Node}
         */
        this.node = node;

        /**
         * The index node that defines the element access.
         *
         * @type {Node}
         */
        this.indexNode = indexNode;

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

    }

    /**
     * This method is overwritten since the node type is inferred from the array-like node.
     *
     * @param {NodeBuilder} builder - The current node builder.
     * @return {string} The node type.
     */
    getNodeType( builder ) {

        return this.node.getElementType( builder );

    }

    generate( builder ) {

        const indexType = this.indexNode.getNodeType( builder );

        const nodeSnippet = this.node.build( builder );
        const indexSnippet = this.indexNode.build( builder, ! builder.isVector( indexType ) && builder.isInteger( indexType ) ? indexType : 'uint' );

        return `${ nodeSnippet }[ ${ indexSnippet } ]`;

    }

}

Methods

getNodeType(builder: NodeBuilder): string
Code
getNodeType( builder ) {

        return this.node.getElementType( builder );

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

        const indexType = this.indexNode.getNodeType( builder );

        const nodeSnippet = this.node.build( builder );
        const indexSnippet = this.indexNode.build( builder, ! builder.isVector( indexType ) && builder.isInteger( indexType ) ? indexType : 'uint' );

        return `${ nodeSnippet }[ ${ indexSnippet } ]`;

    }