CondNode.js 957 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import TempNode from '../core/TempNode.js';
  2. import ContextNode from '../core/ContextNode.js';
  3. class CondNode extends TempNode {
  4. constructor( node, ifNode, elseNode ) {
  5. super();
  6. this.node = node;
  7. this.ifNode = ifNode;
  8. this.elseNode = elseNode;
  9. }
  10. getNodeType( builder ) {
  11. const ifType = this.ifNode.getNodeType( builder );
  12. const elseType = this.elseNode.getNodeType( builder );
  13. if ( builder.getTypeLength( elseType ) > builder.getTypeLength( ifType ) ) {
  14. return elseType;
  15. }
  16. return ifType;
  17. }
  18. generate( builder ) {
  19. const type = this.getNodeType( builder );
  20. const context = { cache: false };
  21. const nodeSnippet = this.node.build( builder, 'bool' ),
  22. ifSnippet = new ContextNode( this.ifNode, context ).build( builder, type ),
  23. elseSnippet = new ContextNode( this.elseNode, context ).build( builder, type );
  24. return `( ${ nodeSnippet } ? ${ ifSnippet } : ${ elseSnippet } )`;
  25. }
  26. }
  27. export default CondNode;