class RgGen::SystemVerilog::Common::Feature

Constants

EntityContext

Private Class Methods

define_entity(entity_type, method, declaration_type, default_layer) click to toggle source
# File lib/rggen/systemverilog/common/feature.rb, line 16
def define_entity(entity_type, method, declaration_type, default_layer)
  context =
    EntityContext.new(entity_type, method, declaration_type, default_layer)
  define_method(entity_type) do |name, *args, &block|
    if args.size >= 3
      message = 'wrong number of arguments ' \
                "(given #{args.size + 1}, expected 1..3)"
      raise ArgumentError.new(message)
    end
    define_entity(context, name, args, &block)
  end
end

Public Instance Methods

package_imports(domain) click to toggle source
# File lib/rggen/systemverilog/common/feature.rb, line 30
def package_imports(domain)
  @package_imports[domain]
end

Private Instance Methods

add_declaration(context, entity, layer) click to toggle source
# File lib/rggen/systemverilog/common/feature.rb, line 69
def add_declaration(context, entity, layer)
  (layer || instance_exec(&context.default_layer))
    .declarations[context.declaration_type] << entity.declaration
end
add_entity(context, entity, name, layer) click to toggle source
# File lib/rggen/systemverilog/common/feature.rb, line 64
def add_entity(context, entity, name, layer)
  add_declaration(context, entity, layer)
  add_identifier(entity, name)
end
add_identifier(entity, name) click to toggle source
# File lib/rggen/systemverilog/common/feature.rb, line 74
def add_identifier(entity, name)
  instance_variable_set("@#{name}", entity.identifier)
  singleton_exec { attr_reader name }
  export(name)
end
create_entity(context, name, attributes, &block) click to toggle source
# File lib/rggen/systemverilog/common/feature.rb, line 59
def create_entity(context, name, attributes, &block)
  merged_attributes = { name: name }.merge(Hash(attributes))
  __send__(context.method_name, context.entity_type, merged_attributes, &block)
end
define_entity(context, name, args, &block) click to toggle source
# File lib/rggen/systemverilog/common/feature.rb, line 41
def define_entity(context, name, args, &block)
  layer, attributes = parse_entity_arguments(args)
  entity = create_entity(context, name, attributes, &block)
  add_entity(context, entity, name, layer)
end
import_package(domain, package) click to toggle source
# File lib/rggen/systemverilog/common/feature.rb, line 80
def import_package(domain, package)
  @package_imports[domain].include?(package) ||
    (@package_imports[domain] << package)
end
import_packages(domain, packages) click to toggle source
# File lib/rggen/systemverilog/common/feature.rb, line 85
def import_packages(domain, packages)
  Array(packages).each { |package| import_package(domain, package) }
end
parse_entity_arguments(args) click to toggle source
# File lib/rggen/systemverilog/common/feature.rb, line 47
def parse_entity_arguments(args)
  if args.empty?
    [nil, nil]
  elsif args.size == 1 && args.first.is_a?(Hash)
    [nil, args.first]
  elsif args.size == 1
    [args.first, nil]
  else
    args[0..1]
  end
end
post_initialize() click to toggle source
Calls superclass method
# File lib/rggen/systemverilog/common/feature.rb, line 36
def post_initialize
  super
  @package_imports = Hash.new { |h, k| h[k] = [] }
end