You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
1.3 KiB
97 lines
1.3 KiB
import Node from './Node.js';
|
|
import OperatorNode from '../math/OperatorNode.js';
|
|
|
|
class VarNode extends Node {
|
|
|
|
constructor( node, name = null ) {
|
|
|
|
super();
|
|
|
|
this.node = node;
|
|
this.name = name;
|
|
|
|
}
|
|
|
|
op( op, ...params ) {
|
|
|
|
this.node = new OperatorNode( op, this.node, ...params );
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
assign( ...params ) {
|
|
|
|
return this.op( '=', ...params );
|
|
|
|
}
|
|
|
|
add( ...params ) {
|
|
|
|
return this.op( '+', ...params );
|
|
|
|
}
|
|
|
|
sub( ...params ) {
|
|
|
|
return this.op( '-', ...params );
|
|
|
|
}
|
|
|
|
mul( ...params ) {
|
|
|
|
return this.op( '*', ...params );
|
|
|
|
}
|
|
|
|
div( ...params ) {
|
|
|
|
return this.op( '/', ...params );
|
|
|
|
}
|
|
|
|
getHash( builder ) {
|
|
|
|
return this.name || super.getHash( builder );
|
|
|
|
}
|
|
|
|
getNodeType( builder ) {
|
|
|
|
return this.node.getNodeType( builder );
|
|
|
|
}
|
|
|
|
generate( builder ) {
|
|
|
|
const node = this.node;
|
|
const name = this.name;
|
|
|
|
if ( name === null && node.isTempNode === true ) {
|
|
|
|
return node.build( builder );
|
|
|
|
}
|
|
|
|
const type = builder.getVectorType( this.getNodeType( builder ) );
|
|
|
|
const snippet = node.build( builder, type );
|
|
const nodeVar = builder.getVarFromNode( this, type );
|
|
|
|
if ( name !== null ) {
|
|
|
|
nodeVar.name = name;
|
|
|
|
}
|
|
|
|
const propertyName = builder.getPropertyName( nodeVar );
|
|
|
|
builder.addFlowCode( `${propertyName} = ${snippet}` );
|
|
|
|
return propertyName;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
export default VarNode;
|
|
|