Class: Symbol
- Inherits:
-
Object
- Object
- Symbol
- Defined in:
- lib/HDLRuby/hruby_high.rb,
lib/HDLRuby/hruby_low2sym.rb
Overview
Extends the Symbol class with of equivalent HDLRuby object.
Constant Summary collapse
- High =
HDLRuby::High
Instance Method Summary collapse
-
#to_hdr ⇒ Object
Convert to the equivalent HDLRuby object if any, returns nil if not.
-
#to_value ⇒ Object
(also: #to_expr)
Converts to a new value.
-
#to_value? ⇒ Boolean
Tell if the expression can be converted to a value.
Instance Method Details
#to_hdr ⇒ Object
Convert to the equivalent HDLRuby object if any, returns nil if not.
49 50 51 |
# File 'lib/HDLRuby/hruby_low2sym.rb', line 49 def to_hdr return Low2Symbol::Symbol2LowTable[self] end |
#to_value ⇒ Object Also known as: to_expr
Converts to a new value.
Returns nil if no value can be obtained from it.
3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 |
# File 'lib/HDLRuby/hruby_high.rb', line 3860 def to_value str = self.to_s return nil if str[0] != "_" # Bit string are prefixed by "_" # Remove the "_" not needed any longer. str = str[1..-1] # Get and check the type type = str[0] if type == "0" or type == "1" or type == "z" or type == "Z" then # Default binary type = "b" else # Not a default type str = str[1..-1] end return nil if str.empty? return nil unless ["b","u","s"].include?(type) # Get the width if any. if str[0].match(/[0-9]/) then width = str.scan(/[0-9]*/)[0] else width = nil end # puts "width=#{width}" old_str = str # Save the string it this state since its first chars # can be erroneously considered as giving the width str = str[width.size..-1] if width # Get the base and the value base = str[0] # puts "base=#{base}\n" unless ["b", "o", "d", "h"].include?(base) then # No base found, default is bit base = "b" # And the width was actually a part of the value. value = old_str width = nil else # Get the value. value = str[1..-1] end # puts "value=#{value}" # Compute the bit width and the value case base when "b" then # base 2, compute the width width = width ? width.to_i : value.size # Check the value return nil unless value.match(/^[0-1zxZX]+$/) when "o" then # base 8, compute the width width = width ? width.to_i : value.size * 3 # Check the value if value.match(/^[0-7xXzZ]+$/) then # 4-state value, conpute the correspondig bit string. value = value.each_char.map do |c| c = c.upcase if c == "X" or c.upcase == "Z" then c * 3 else c.to_i(8).to_s(2).rjust(3,"0") end end.join else # Invalid value return nil end when "d" then # base 10, compute the width width = width ? width.to_i : value.to_i.to_s(2).size + 1 # Check the value return nil unless value.match(/^[0-9]+$/) # Compute it (base 10 values cannot be 4-state!) value = value.to_i.to_s(2) when "h" then # base 16, compute the width width = width ? width.to_i : value.size * 4 # Check the value if value.match(/^[0-9a-fA-FxXzZ]+$/) then # 4-state value, conpute the correspondig bit string. value = value.each_char.map do |c| c = c.upcase if c == "X" or c.upcase == "Z" then c * 4 else c.to_i(16).to_s(2).rjust(4,"0") end end.join else # Invalid value return nil end else # Unknown base return nil end # Compute the type. case type when "b" then type = bit[width] when "u" then type = unsigned[width] when "s" then type = signed[width] else # Unknown type return nil end # puts "type.width=#{type.width}, value=#{value}" # Create and return the value. return Value.new(type,value) end |
#to_value? ⇒ Boolean
Tell if the expression can be converted to a value.
3853 3854 3855 |
# File 'lib/HDLRuby/hruby_high.rb', line 3853 def to_value? return true end |