Sha256: 5ae4109fdd1240821a3cde9678dfe0ce6955b2d35c9c9fb6232ff413ac9aa3f2

Contents?: true

Size: 1.55 KB

Versions: 6

Compression:

Stored size: 1.55 KB

Contents

# frozen_string_literal: true

module SyntaxTree
  module YARV
    # This object represents a single basic block, wherein all contained
    # instructions do not branch except for the last one.
    class BasicBlock
      # This is the unique identifier for this basic block.
      attr_reader :id

      # This is the index into the list of instructions where this block starts.
      attr_reader :block_start

      # This is the set of instructions that this block contains.
      attr_reader :insns

      # This is an array of basic blocks that lead into this block.
      attr_reader :incoming_blocks

      # This is an array of basic blocks that this block leads into.
      attr_reader :outgoing_blocks

      def initialize(block_start, insns)
        @id = "block_#{block_start}"

        @block_start = block_start
        @insns = insns

        @incoming_blocks = []
        @outgoing_blocks = []
      end

      # Yield each instruction in this basic block along with its index from the
      # original instruction sequence.
      def each_with_length
        return enum_for(:each_with_length) unless block_given?

        length = block_start
        insns.each do |insn|
          yield insn, length
          length += insn.length
        end
      end

      # This method is used to verify that the basic block is well formed. It
      # checks that the only instruction in this basic block that branches is
      # the last instruction.
      def verify
        insns[0...-1].each { |insn| raise unless insn.branch_targets.empty? }
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
syntax_tree-6.2.0 lib/syntax_tree/yarv/basic_block.rb
syntax_tree-6.1.1 lib/syntax_tree/yarv/basic_block.rb
syntax_tree-6.1.0 lib/syntax_tree/yarv/basic_block.rb
syntax_tree-6.0.2 lib/syntax_tree/yarv/basic_block.rb
syntax_tree-6.0.1 lib/syntax_tree/yarv/basic_block.rb
syntax_tree-6.0.0 lib/syntax_tree/yarv/basic_block.rb