HDLRuby 2.3.1 → 2.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/HDLRuby/hdrcc.rb +2 -5
- data/lib/HDLRuby/hruby_check.rb +25 -1
- data/lib/HDLRuby/std/fixpoint.rb +42 -40
- data/lib/HDLRuby/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 73fbfcef7b930ac266b56380159ffd3af64f84ce712f937f764559d8abe78ded
|
4
|
+
data.tar.gz: 2c7ad1ac7fac5639f70278f28dce24cdfa4328797b2b031f698421a849ee5141
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4112497c5716f1dd13ae9f45a4806773ae7f521b586415c2b0be4a735357765a45c2f524d33bff509f0dfc103ed47fc3aceee19e7eea98ec8d0c720d88af3153
|
7
|
+
data.tar.gz: 1852065b8f05fb474f6f392df45cf08269196f2f481a55d84d1a5d20ad66713a5138eb739e0146ce1761fe3f22eccb01bcea06d19e94a19b3693a01dbba4e165
|
data/lib/HDLRuby/hdrcc.rb
CHANGED
@@ -113,12 +113,9 @@ module HDLRuby
|
|
113
113
|
return
|
114
114
|
end
|
115
115
|
# Get its required files.
|
116
|
-
requires = @checks[-1].get_all_requires
|
116
|
+
requires = @checks[-1].get_all_requires +
|
117
|
+
@checks[-1].get_all_require_relatives
|
117
118
|
requires.each do |file|
|
118
|
-
# if file != "HDLRuby" &&
|
119
|
-
# !@std_files.find { |std| std.include?(file) } then
|
120
|
-
# read_all(file)
|
121
|
-
# end
|
122
119
|
read_all(file)
|
123
120
|
end
|
124
121
|
@requires += requires
|
data/lib/HDLRuby/hruby_check.rb
CHANGED
@@ -45,11 +45,20 @@ module HDLRuby
|
|
45
45
|
(code[1][1] == "require")
|
46
46
|
end
|
47
47
|
|
48
|
+
# Tells if +code+ is require_relative description.
|
49
|
+
def is_require_relative?(code)
|
50
|
+
# return code[0] && (code[0][0] == :command) &&
|
51
|
+
# (code[0][1][1] == "require_relative")
|
52
|
+
return code && (code[0] == :command) &&
|
53
|
+
(code[1][1] == "require_relative")
|
54
|
+
end
|
55
|
+
|
48
56
|
# Gets the required file from +code+.
|
49
57
|
def get_require(code)
|
50
58
|
# return (code[0][2][1][0][1][1][1])
|
51
59
|
return (code[2][1][0][1][1][1])
|
52
60
|
end
|
61
|
+
alias_method :get_require_relative, :get_require
|
53
62
|
|
54
63
|
# Gets all the required files of +code+.
|
55
64
|
def get_all_requires(code = @code)
|
@@ -66,6 +75,21 @@ module HDLRuby
|
|
66
75
|
end
|
67
76
|
end
|
68
77
|
|
78
|
+
# Gets all the require_relative files of +code+.
|
79
|
+
def get_all_require_relatives(code = @code)
|
80
|
+
if code.is_a?(Array) then
|
81
|
+
require_relatives = (code.select { |sub| is_require_relative?(sub) }).map! do |sub|
|
82
|
+
get_require_relative(sub)
|
83
|
+
end
|
84
|
+
code.each do |sub|
|
85
|
+
require_relatives += get_all_require_relatives(sub)
|
86
|
+
end
|
87
|
+
return require_relatives
|
88
|
+
else
|
89
|
+
return []
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
69
93
|
# Tells if +code+ is a system description.
|
70
94
|
def is_system?(code)
|
71
95
|
return code.is_a?(Array) && (code[0] == :command) &&
|
@@ -77,7 +101,7 @@ module HDLRuby
|
|
77
101
|
return code[2][1][0][1][1][1]
|
78
102
|
end
|
79
103
|
|
80
|
-
# Gets all the
|
104
|
+
# Gets all the systems of +code+.
|
81
105
|
def get_all_systems(code = @code)
|
82
106
|
return [] unless code.is_a?(Array)
|
83
107
|
return code.reduce([]) {|ar,sub| ar + get_all_systems(sub) } +
|
data/lib/HDLRuby/std/fixpoint.rb
CHANGED
@@ -15,51 +15,53 @@ module HDLRuby::High::Std
|
|
15
15
|
def self.included(base)
|
16
16
|
# Performs the previous included
|
17
17
|
res = self.send(:_included_fixpoint,base)
|
18
|
-
# Now modify the Type class
|
19
|
-
::HDLRuby::High::Type.
|
20
|
-
|
21
|
-
|
18
|
+
# Now modify the Type class if not already modified.
|
19
|
+
unless ::HDLRuby::High::Type.instance_methods.include?(:"_[]_fixpoint") then
|
20
|
+
::HDLRuby::High::Type.class_eval do
|
21
|
+
# Saves the former type generation method.
|
22
|
+
alias_method :"_[]_fixpoint", :[]
|
22
23
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
else
|
29
|
-
# Handle the arguments and compute the fix point sizes.
|
30
|
-
arg0,arg1 = *args
|
31
|
-
if arg0.respond_to?(:to_i) then
|
32
|
-
isize = arg0
|
24
|
+
# Redefine the type generation method for supporting fixed point
|
25
|
+
# type generation.
|
26
|
+
def [](*args)
|
27
|
+
if args.size == 1 then
|
28
|
+
return self.send(:"_[]_fixpoint",*args)
|
33
29
|
else
|
34
|
-
|
30
|
+
# Handle the arguments and compute the fix point sizes.
|
31
|
+
arg0,arg1 = *args
|
32
|
+
if arg0.respond_to?(:to_i) then
|
33
|
+
isize = arg0
|
34
|
+
else
|
35
|
+
isize = (arg0.first-arg0.last).abs+1
|
36
|
+
end
|
37
|
+
if arg1.respond_to?(:to_i) then
|
38
|
+
fsize = arg1
|
39
|
+
else
|
40
|
+
fsize = (arg1.first-arg1.last).abs+1
|
41
|
+
end
|
42
|
+
# Build the type.
|
43
|
+
case(self.name)
|
44
|
+
when :bit
|
45
|
+
typ = bit[isize+fsize].typedef(::HDLRuby.uniq_name)
|
46
|
+
when :unsigned
|
47
|
+
typ = unsigned[isize+fsize].typedef(::HDLRuby.uniq_name)
|
48
|
+
when :signed
|
49
|
+
typ = signed[isize+fsize].typedef(::HDLRuby.uniq_name)
|
50
|
+
else
|
51
|
+
raise "Invalid type for generating a fixed point type: #{self.name}"
|
52
|
+
end
|
53
|
+
# Redefine the multiplication and division for fixed point.
|
54
|
+
typ.define_operator(:*) do |left,right|
|
55
|
+
(left.as([isize+fsize*2])*right) >> fsize
|
56
|
+
end
|
57
|
+
typ.define_operator(:/) do |left,right|
|
58
|
+
(left.as([isize+fsize*2]) << fsize) / right
|
59
|
+
end
|
60
|
+
typ
|
35
61
|
end
|
36
|
-
if arg1.respond_to?(:to_i) then
|
37
|
-
fsize = arg1
|
38
|
-
else
|
39
|
-
fsize = (arg1.first-arg1.last).abs+1
|
40
|
-
end
|
41
|
-
# Build the type.
|
42
|
-
case(self.name)
|
43
|
-
when :bit
|
44
|
-
typ = bit[isize+fsize].typedef(::HDLRuby.uniq_name)
|
45
|
-
when :unsigned
|
46
|
-
typ = unsigned[isize+fsize].typedef(::HDLRuby.uniq_name)
|
47
|
-
when :signed
|
48
|
-
typ = signed[isize+fsize].typedef(::HDLRuby.uniq_name)
|
49
|
-
else
|
50
|
-
raise "Invalid type for generating a fixed point type: #{self.name}"
|
51
|
-
end
|
52
|
-
# Redefine the multiplication and division for fixed point.
|
53
|
-
typ.define_operator(:*) do |left,right|
|
54
|
-
(left.as([isize+fsize*2])*right) >> fsize
|
55
|
-
end
|
56
|
-
typ.define_operator(:/) do |left,right|
|
57
|
-
(left.as([isize+fsize*2]) << fsize) / right
|
58
|
-
end
|
59
|
-
typ
|
60
62
|
end
|
63
|
+
return res
|
61
64
|
end
|
62
|
-
return res
|
63
65
|
end
|
64
66
|
end
|
65
67
|
|
data/lib/HDLRuby/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: HDLRuby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.3.
|
4
|
+
version: 2.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lovic Gauthier
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|