lib/origen/chip_mode.rb in origen-0.25.1 vs lib/origen/chip_mode.rb in origen-0.26.0

- old
+ new

@@ -15,12 +15,13 @@ attr_accessor :owner attr_accessor :typical_voltage alias_method :typ_voltage, :typical_voltage def initialize(name, options = {}) - @name = name options.each { |k, v| instance_variable_set("@#{k}", v) } + (block.arity < 1 ? (instance_eval(&block)) : block.call(self)) if block_given? + @name = name validate_args end def name @name || @id @@ -63,15 +64,26 @@ end # Implements methods like: # # if $dut.mode.rambist? - def method_missing(method_name, *arguments) + def method_missing(method_name, *arguments, &block) + ivar = "@#{method_name.to_s.gsub('=', '')}" + ivar_sym = ":#{ivar}" if method_name[-1] == '?' id == method_name[0..-2].to_sym + elsif method_name[-1] == '=' + define_singleton_method(method_name) do |val| + instance_variable_set(ivar, val) + end + elsif instance_variables.include? ivar_sym + instance_variable_get(ivar) else - super + define_singleton_method(method_name) do + instance_variable_get(ivar) + end end + send(method_name, *arguments, &block) end def to_s id.to_s end