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