Quellcode durchsuchen

TSL: Fix get member from array element (#32514)

sunag vor 1 Monat
Ursprung
Commit
9bb24def05
2 geänderte Dateien mit 33 neuen und 1 gelöschten Zeilen
  1. 20 1
      src/nodes/core/ArrayNode.js
  2. 13 0
      src/nodes/utils/ArrayElementNode.js

+ 20 - 1
src/nodes/core/ArrayNode.js

@@ -81,7 +81,7 @@ class ArrayNode extends TempNode {
 
 		if ( this.nodeType === null ) {
 
-			this.nodeType = this.values[ 0 ].getNodeType( builder );
+			return this.values[ 0 ].getNodeType( builder );
 
 		}
 
@@ -101,6 +101,25 @@ class ArrayNode extends TempNode {
 
 	}
 
+	/**
+	 * Returns the type of a member variable.
+	 *
+	 * @param {NodeBuilder} builder - The current node builder.
+	 * @param {string} name - The name of the member variable.
+	 * @return {string} The type of the member variable.
+	 */
+	getMemberType( builder, name ) {
+
+		if ( this.nodeType === null ) {
+
+			return this.values[ 0 ].getMemberType( builder, name );
+
+		}
+
+		return super.getMemberType( builder, name );
+
+	}
+
 	/**
 	 * This method builds the output node and returns the resulting array as a shader string.
 	 *

+ 13 - 0
src/nodes/utils/ArrayElementNode.js

@@ -61,6 +61,19 @@ class ArrayElementNode extends Node { // @TODO: If extending from TempNode it br
 
 	}
 
+	/**
+	 * This method is overwritten since the member type is inferred from the array-like node.
+	 *
+	 * @param {NodeBuilder} builder - The current node builder.
+	 * @param {string} name - The member name.
+	 * @return {string} The member type.
+	 */
+	getMemberType( builder, name ) {
+
+		return this.node.getMemberType( builder, name );
+
+	}
+
 	generate( builder ) {
 
 		const indexType = this.indexNode.getNodeType( builder );

粤ICP备19079148号