Sha256: cbb2ff85fec4d2423c43cd0ff30a576bf53b0f30e7458c4f5d7ff1f0ea1d9819

Contents?: true

Size: 1.55 KB

Versions: 14

Compression:

Stored size: 1.55 KB

Contents

# frozen_string_literal: true

require_relative 'send'
require_relative 'keywords'

module DeepCover
  class Node
    module WithBlock
      def flow_completion_count
        parent.flow_completion_count
      end

      def execution_count
        last = children_nodes.last
        return last.flow_completion_count if last
        super
      end
    end

    class SendWithBlock < SendBase
      include WithBlock
    end

    class SuperWithBlock < Node
      include WithBlock
      has_extra_children arguments: Node
    end

    class Block < Node
      check_completion
      has_tracker :body
      has_child call: {send: SendWithBlock, zsuper: SuperWithBlock, super: SuperWithBlock, csend: Csend}
      has_child args: Args
      has_child body: Node,
                can_be_empty: -> { base_node.loc.end.begin },
                rewrite: '%{body_tracker};%{local}=nil;%{node}',
                flow_entry_count: :body_tracker_hits,
                is_statement: true
      executed_loc_keys # none

      def execution_count
        call.execution_count
      end

      def children_nodes_in_flow_order
        [call] # Similarly to a def, the body (and Args) are actually not part of the flow of this node...
      end

      alias_method :rewrite_for_completion, :rewrite
      def rewrite
        if call.is_a?(Csend)
          rewrite_for_completion.gsub('%{node}', Csend::REWRITE_SUFFIX_IN_BLOCK)
        else
          rewrite_for_completion
        end
      end
    end

    # &foo
    class BlockPass < Node
      has_child block: Node
      # TODO
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
deep-cover-core-1.1.0 lib/deep_cover/node/block.rb
deep-cover-core-1.0.0 lib/deep_cover/node/block.rb
deep-cover-core-0.8.1 lib/deep_cover/node/block.rb
deep-cover-core-0.8.0 lib/deep_cover/node/block.rb
deep-cover-core-0.7.10 lib/deep_cover/node/block.rb
deep-cover-core-0.7.9 lib/deep_cover/node/block.rb
deep-cover-core-0.7.8 lib/deep_cover/node/block.rb
deep-cover-core-0.7.7 lib/deep_cover/node/block.rb
deep-cover-core-0.7.6 lib/deep_cover/node/block.rb
deep-cover-core-0.7.5 lib/deep_cover/node/block.rb
deep-cover-core-0.7.4 lib/deep_cover/node/block.rb
deep-cover-core-0.7.3 lib/deep_cover/node/block.rb
deep-cover-core-0.7.2 lib/deep_cover/node/block.rb
deep-cover-core-0.7.1 lib/deep_cover/node/block.rb