Class: HDLRuby::High::RefObject
- Inherits:
-
Low::Ref
- Object
- Base::Expression
- Low::Expression
- Low::Ref
- HDLRuby::High::RefObject
- Includes:
- HRef
- Defined in:
- lib/HDLRuby/hruby_high.rb
Overview
Describes a high-level object reference: no low-level equivalent!
Constant Summary
Constants included from Low::Low2Symbol
Low::Low2Symbol::Low2SymbolPrefix, Low::Low2Symbol::Low2SymbolTable, Low::Low2Symbol::Symbol2LowTable
Instance Attribute Summary collapse
-
#base ⇒ Object
readonly
The base of the reference.
-
#object ⇒ Object
readonly
The refered object.
Attributes inherited from Low::Expression
Attributes included from Low::Hparent
Instance Method Summary collapse
-
#constant? ⇒ Boolean
Tell if the expression is constant.
-
#eql?(obj) ⇒ Boolean
Comparison for hash: structural comparison.
-
#initialize(base, object) ⇒ RefObject
constructor
Creates a new reference from a +base+ reference and named +object+.
-
#method_missing(m, *args, &ruby_block) ⇒ Object
Missing methods are looked for into the refered object.
-
#to_low ⇒ Object
Converts the name reference to a HDLRuby::Low::RefName.
-
#to_ref ⇒ Object
Converts to a new reference.
Methods included from HRef
Methods inherited from Low::Ref
#each_node, #each_node_deep, #explicit_types, #hash, #map_nodes!, #path_each, #resolve, #to_c, #to_hdr, #to_vhdl
Methods inherited from Low::Expression
#boolean?, #break_types!, #clone, #each_node, #each_node_deep, #each_ref_deep, #explicit_types, #extract_selects_to!, #hash, #immutable?, #leftvalue?, #map_nodes!, #replace_expressions!, #replace_names!, #rightvalue?, #set_type!, #statement, #to_c, #to_c_expr, #to_hdr, #to_high, #to_vhdl, #use_name?
Methods included from Low::Low2Symbol
Methods included from Low::Hparent
Constructor Details
#initialize(base, object) ⇒ RefObject
Creates a new reference from a +base+ reference and named +object+.
3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 |
# File 'lib/HDLRuby/hruby_high.rb', line 3037 def initialize(base,object) # puts "New RefObjet with base=#{base}, object=#{object.name}" if object.respond_to?(:type) then # Typed object, so typed reference. super(object.type) else # Untyped object, so untyped reference. super(void) end # Check and set the base (it must be convertible to a reference). unless base.respond_to?(:to_ref) raise AnyError, "Invalid base for a RefObject: #{base}" end @base = base # Set the object @object = object end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(m, *args, &ruby_block) ⇒ Object
Missing methods are looked for into the refered object.
3085 3086 3087 |
# File 'lib/HDLRuby/hruby_high.rb', line 3085 def method_missing(m, *args, &ruby_block) @object.send(m,*args,&ruby_block) end |
Instance Attribute Details
#base ⇒ Object (readonly)
The base of the reference
3031 3032 3033 |
# File 'lib/HDLRuby/hruby_high.rb', line 3031 def base @base end |
#object ⇒ Object (readonly)
The refered object.
3034 3035 3036 |
# File 'lib/HDLRuby/hruby_high.rb', line 3034 def object @object end |
Instance Method Details
#constant? ⇒ Boolean
Tell if the expression is constant.
3056 3057 3058 |
# File 'lib/HDLRuby/hruby_high.rb', line 3056 def constant? return self.base.constant? end |
#eql?(obj) ⇒ Boolean
Comparison for hash: structural comparison.
3066 3067 3068 3069 3070 3071 |
# File 'lib/HDLRuby/hruby_high.rb', line 3066 def eql?(obj) return false unless obj.is_a?(RefObject) return false unless @base.eql?(obj.base) return false unless @object.eql?(obj.object) return true end |
#to_low ⇒ Object
Converts the name reference to a HDLRuby::Low::RefName.
3074 3075 3076 3077 3078 3079 3080 3081 3082 |
# File 'lib/HDLRuby/hruby_high.rb', line 3074 def to_low # puts "to_low with base=#{@base} @object=#{@object.name}" refNameL = HDLRuby::Low::RefName.new(self.type.to_low, @base.to_ref.to_low,@object.name) # # For debugging: set the source high object # refNameL.properties[:low2high] = self.hdr_id # self.properties[:high2low] = refNameL return refNameL end |