def demand
      if variables.empty?
        index = @index.simplify
        if @m.dimension > 0
          @m.shape.last.times do |i|
            m = @m.element INT.new( i )
            source = @source.element INT.new( i )
            Mask.new( @dest, source, m, index ).demand
          end  
        else
          @m.if do
            Store.new( @dest.element( index ), @source ).demand
            index.assign index + 1
          end
        end
        if @index.is_a? Pointer_
          @index.store index
        else
          @index.assign index
        end
        @dest
      else
        super
      end
    end
def demand
      if variables.empty?
        index = @index.simplify
        if @m.dimension > 0
          @m.shape.last.times do |i|
            m = @m.element INT.new( i )
            source = @source.element INT.new( i )
            Mask.new( @dest, source, m, index ).demand
          end  
        else
          @m.if do
            Store.new( @dest.element( index ), @source ).demand
            index.assign index + 1
          end
        end
        if @index.is_a? Pointer_
          @index.store index
        else
          @index.assign index
        end
        @dest
      else
        super
      end
    end
Perform masking operation

 @return [Node] Result of computation

 @private