Skip to content

Commit e06c4f5

Browse files
Rename routines ending in _extensions to _ext_reqs or _ext_vers to make it clearer the return type since I found bugs in the code related to this.
1 parent 47fff49 commit e06c4f5

File tree

11 files changed

+77
-73
lines changed

11 files changed

+77
-73
lines changed

backends/cfg_html_doc/adoc_gen.rake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ require "ruby-prof"
4242
# RubyProf::FlatPrinter.new(result).print(STDOUT)
4343
end
4444
when "ext"
45-
cfg_arch.transitive_implemented_extensions.each do |ext_version|
45+
cfg_arch.transitive_implemented_ext_vers.each do |ext_version|
4646
ext = cfg_arch.extension(ext_version.name)
4747
path = dir_path / "#{ext.name}.adoc"
4848
puts " Generating #{path}"
@@ -90,7 +90,7 @@ require "ruby-prof"
9090
end
9191
when "ext"
9292
puts "Generting full extension list"
93-
cfg_arch.transitive_implemented_extensions.each do |ext_version|
93+
cfg_arch.transitive_implemented_ext_vers.each do |ext_version|
9494
lines << " * `#{ext_version.name}` #{ext_version.ext.long_name}"
9595
end
9696
when "inst"

backends/cfg_html_doc/templates/config.adoc.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
|===
66
| Name | Version
7-
<%- cfg_arch.transitive_implemented_extensions.sort{ |a,b| a.name <=> b.name }.each do |e| -%>
7+
<%- cfg_arch.transitive_implemented_ext_vers.sort{ |a,b| a.name <=> b.name }.each do |e| -%>
88
| `<%= e.name %>` | <%= e.version_spec %>
99
<%- end -%>
1010
|===

backends/cfg_html_doc/templates/ext.adoc.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Implemented Version:: <%= ext_version.version_str %>
77
== Versions
88

99
<%- ext.versions.each do |v| -%>
10-
<%- implemented = cfg_arch.transitive_implemented_extensions.include?(v) -%>
10+
<%- implemented = cfg_arch.transitive_implemented_ext_vers.include?(v) -%>
1111
<%= v.version_str %>::
1212
Ratification date:::
1313
<%= v.ratification_date %>

backends/cfg_html_doc/templates/toc.adoc.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
* xref:ROOT:config.adoc[Configuration]
22

33
.Extensions
4-
<%- cfg_arch.transitive_implemented_extensions.sort { |a, b| a.name <=> b.name }.each do |ext| -%>
4+
<%- cfg_arch.transitive_implemented_ext_vers.sort { |a, b| a.name <=> b.name }.each do |ext| -%>
55
* %%LINK%ext;<%= ext.name %>;<%= ext.name %>%%
66
<%- end -%>
77

lib/arch_obj_models/csr.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -543,10 +543,10 @@ def wavedrom_desc(design, effective_xlen, exclude_unimplemented: false, optional
543543
def exists_in_design?(design)
544544
if design.fully_configured?
545545
(@data["base"].nil? || (design.possible_xlens.include? @data["base"])) &&
546-
design.transitive_implemented_extensions.any? { |e| defined_by?(e) }
546+
design.transitive_implemented_ext_vers.any? { |e| defined_by?(e) }
547547
else
548548
(@data["base"].nil? || (design.possible_xlens.include? @data["base"])) &&
549-
design.prohibited_extensions.none? { |ext_req| ext_req.satisfying_versions.any? { |e| defined_by?(e) } }
549+
design.prohibited_ext_reqs.none? { |ext_req| ext_req.satisfying_versions.any? { |e| defined_by?(e) } }
550550
end
551551
end
552552

@@ -556,7 +556,7 @@ def optional_in_design?(design)
556556
raise "optional_in_design? should only be used by a partially-specified arch def" unless design.partially_configured?
557557

558558
exists_in_design?(design) &&
559-
design.mandatory_extensions.all? do |ext_req|
559+
design.mandatory_ext_reqs.all? do |ext_req|
560560
ext_req.satisfying_versions.none? do |ext_ver|
561561
defined_by?(ext_ver)
562562
end

lib/arch_obj_models/csr_field.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,13 @@ def exists_in_design?(design)
3535
if design.fully_configured?
3636
parent.exists_in_design?(design) &&
3737
(@data["base"].nil? || design.possible_xlens.include?(@data["base"])) &&
38-
(@data["definedBy"].nil? || design.transitive_implemented_extensions.any? { |ext_ver| defined_by?(ext_ver) })
38+
(@data["definedBy"].nil? || design.transitive_implemented_ext_vers.any? { |ext_ver| defined_by?(ext_ver) })
3939
else
4040
raise "unexpected type" unless design.partially_configured?
4141

4242
parent.exists_in_design?(design) &&
4343
(@data["base"].nil? || design.possible_xlens.include?(@data["base"])) &&
44-
(@data["definedBy"].nil? || design.prohibited_extensions.none? { |ext_req| ext_req.satisfying_versions.any? { |ext_ver| defined_by?(ext_ver) } })
44+
(@data["definedBy"].nil? || design.prohibited_ext_reqs.none? { |ext_req| ext_req.satisfying_versions.any? { |ext_ver| defined_by?(ext_ver) } })
4545
end
4646
end
4747

@@ -54,7 +54,7 @@ def optional_in_design?(design)
5454
if data["definedBy"].nil?
5555
parent.optional_in_design?(design)
5656
else
57-
design.mandatory_extensions.all? do |ext_req|
57+
design.mandatory_ext_reqs.all? do |ext_req|
5858
ext_req.satisfying_versions.none? do |ext_ver|
5959
defined_by?(ext_ver)
6060
end

lib/arch_obj_models/extension.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,7 @@ def <=>(other)
500500
end
501501
end
502502

503-
# @return [Array<Csr>] the list of CSRs implemented by this extension version (may be empty)
503+
# @return [Array<Csr>] List of CSRs implemented by this extension version (may be empty)
504504
def implemented_csrs
505505
return @implemented_csrs unless @implemented_csrs.nil?
506506

@@ -509,7 +509,7 @@ def implemented_csrs
509509
end
510510
end
511511

512-
# @return [Array<Instructions>] the list of insts implemented by this extension version (may be empty)
512+
# @return [Array<Instruction>] List of insts implemented by this extension version (may be empty)
513513
def implemented_instructions
514514
return @implemented_instructions unless @implemented_instructions.nil?
515515

lib/arch_obj_models/instruction.rb

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -739,18 +739,23 @@ def excluded_by?(*args)
739739
end
740740

741741
# @param design [Design] The design
742-
# @return [Boolean] whether or not the instruction is implemented given the supplies config options
742+
# @return [Boolean] whether or not the instruction is implemented given the supplied design
743+
#
744+
# TODO: Does this function actually work for a partially configured design?
745+
# It is calling DatabaseObject.defined_by? with ExtensionRequirement objects
746+
# returned from Design.prohibited_ext_reqs() and Design.mandatory_ext_reqs()
747+
# but only accepts an ExtensionVersion object.
743748
def exists_in_design?(design)
744749
if design.fully_configured?
745-
(@data["base"].nil? || (design.possible_xlens.include? @data["base"])) &&
746-
design.implemented_extensions.any? { |e| defined_by?(e) } &&
747-
design.implemented_extensions.none? { |e| excluded_by?(e) }
750+
(@data["base"].nil? || (design.possible_xlens.include?(@data["base"]))) &&
751+
design.implemented_ext_vers.any? { |ext_ver| defined_by?(ext_ver) } &&
752+
design.implemented_ext_vers.none? { |ext_ver| excluded_by?(ext_ver) }
748753
else
749754
raise "unexpected design type" unless design.partially_configured?
750755

751-
(@data["base"].nil? || (design.possible_xlens.include? @data["base"])) &&
752-
design.prohibited_extensions.none? { |e| defined_by?(e) } &&
753-
design.mandatory_extensions.none? { |e| excluded_by?(e) }
756+
(@data["base"].nil? || (design.possible_xlens.include?(@data["base"]))) &&
757+
design.prohibited_ext_reqs.none? { |ext_req| defined_by?(ext_req) } &&
758+
design.mandatory_ext_reqs.none? { |ext_req| excluded_by?(ext_req) }
754759
end
755760
end
756761
end

lib/cfg_arch.rb

Lines changed: 32 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,8 @@ def params_with_value
137137
return @params_with_value if @config.unconfigured?
138138

139139
if @config.fully_configured?
140-
transitive_implemented_extensions.each do |ext_version|
141-
ext = extension(ext_version.name)
142-
ext.params.each do |ext_param|
140+
transitive_implemented_ext_vers.each do |ext_version|
141+
ext_version.extension.params.each do |ext_param|
143142
next unless @config.param_values.key?(ext_param.name)
144143

145144
@params_with_value << ExtensionParameterWithValue.new(
@@ -149,7 +148,7 @@ def params_with_value
149148
end
150149
end
151150
elsif @config.partially_configured?
152-
mandatory_extensions.each do |ext_req|
151+
mandatory_ext_reqs.each do |ext_req|
153152
ext_req.extension.params.each do |ext_param|
154153
# Params listed in the config always only have one value.
155154
next unless @config.param_values.key?(ext_param.name)
@@ -183,19 +182,19 @@ def params_without_value
183182
end
184183

185184
# @return [Array<ExtensionVersion>] List of all implemented extension versions.
186-
def implemented_extensions
187-
return @implemented_extensions unless @implemented_extensions.nil?
185+
def implemented_ext_vers
186+
return @implemented_ext_vers unless @implemented_ext_vers.nil?
188187

189-
@implemented_extensions = @config.implemented_extensions.map do |e|
188+
@implemented_ext_vers = @config.implemented_ext_vers.map do |e|
190189
ExtensionVersion.new(e["name"], e["version"], arch, fail_if_version_does_not_exist: true)
191190
end
192191
end
193192

194193
# @return [Array<ExtensionRequirement>] List of all mandatory extension requirements
195-
def mandatory_extensions
196-
return @mandatory_extensions unless @mandatory_extensions.nil?
194+
def mandatory_ext_reqs
195+
return @mandatory_ext_reqs unless @mandatory_ext_reqs.nil?
197196

198-
@mandatory_extensions = @config.mandatory_extensions.map do |e|
197+
@mandatory_ext_reqs = @config.mandatory_ext_reqs.map do |e|
199198
ext = extension(e["name"])
200199
raise "Cannot find extension #{e['name']} in the architecture definition" if ext.nil?
201200

@@ -206,47 +205,47 @@ def mandatory_extensions
206205
# @return [Array<ExtensionRequirement>] List of all extensions that are prohibited.
207206
# This includes extensions explicitly prohibited by the config file
208207
# and extensions that conflict with a mandatory extension.
209-
def prohibited_extensions
210-
return @prohibited_extensions unless @prohibited_extensions.nil?
208+
def prohibited_ext_reqs
209+
return @prohibited_ext_reqs unless @prohibited_ext_reqs.nil?
211210

212211
if @config.partially_configured?
213-
@prohibited_extensions =
214-
@config.prohibited_extensions.map do |e|
212+
@prohibited_ext_reqs =
213+
@config.prohibited_ext_reqs.map do |e|
215214
ext = extension(e["name"])
216215
raise "Cannot find extension #{e['name']} in the architecture definition" if ext.nil?
217216

218217
ExtensionRequirement.new(e["name"], *e["version"], arch, presence: "mandatory")
219218
end
220219

221220
# now add any extensions that are prohibited by a mandatory extension
222-
mandatory_extensions.each do |ext_req|
221+
mandatory_ext_reqs.each do |ext_req|
223222
ext_req.extension.conflicts.each do |conflict|
224-
if @prohibited_extensions.none? { |prohibited_ext| prohibited_ext.name == conflict.name }
225-
@prohibited_extensions << conflict
223+
if @prohibited_ext_reqs.none? { |prohibited_ext_req| prohibited_ext_req.name == conflict.name }
224+
@prohibited_ext_reqs << conflict
226225
else
227226
# pick whichever requirement is more expansive
228-
p = @prohibited_extensions.find { |prohibited_ext| prohibited_ext.name == confict.name }
227+
p = @prohibited_ext_reqs.find { |prohibited_ext_req| prohibited_ext_req.name == confict.name }
229228
if p.version_requirement.subsumes?(conflict.version_requirement)
230-
@prohibited_extensions.delete(p)
231-
@prohibited_extensions << conflict
229+
@prohibited_ext_reqs.delete(p)
230+
@prohibited_ext_reqs << conflict
232231
end
233232
end
234233
end
235234
end
236235

237-
@prohibited_extensions
236+
@prohibited_ext_reqs
238237
elsif @config.fully_configured?
239-
prohibited_ext_versions = []
238+
prohibited_ext_vers = []
240239
extensions.each do |ext|
241240
ext.versions.each do |ext_ver|
242-
prohibited_ext_versions << ext_ver unless transitive_implemented_extensions.include?(ext_ver)
241+
prohibited_ext_vers << ext_ver unless transitive_implemented_ext_vers.include?(ext_ver)
243242
end
244243
end
245-
@prohibited_extensions = []
246-
prohibited_ext_versions.group_by(&:name).each_value do |ext_ver_list|
244+
@prohibited_ext_reqs = []
245+
prohibited_ext_vers.group_by(&:name).each_value do |ext_ver_list|
247246
if ext_ver_list.sort == ext_ver_list[0].ext.versions.sort
248247
# excludes every version
249-
@prohibited_extensions <<
248+
@prohibited_ext_reqs <<
250249
ExtensionRequirement.new(
251250
ext_ver_list[0].ext.name, ">= #{ext_ver_list.min.version_spec.canonical}",
252251
arch, presence: "prohibited"
@@ -257,7 +256,7 @@ def prohibited_extensions
257256
raise "Expected only a single element" unless allowed_version_list.size == 1
258257

259258
allowed_version = allowed_version_list[0]
260-
@prohibited_extensions <<
259+
@prohibited_ext_reqs <<
261260
ExtensionRequirement.new(
262261
ext_ver_list[0].ext.name, "!= #{allowed_version.version_spec.canonical}", arch,
263262
presence: "prohibited"
@@ -268,9 +267,9 @@ def prohibited_extensions
268267
end
269268
end
270269
else
271-
@prohibited_extensions = []
270+
@prohibited_ext_reqs = []
272271
end
273-
@prohibited_extensions
272+
@prohibited_ext_reqs
274273
end
275274

276275
# @overload ext?(ext_name)
@@ -288,7 +287,7 @@ def ext?(ext_name, *ext_version_requirements)
288287

289288
result =
290289
if @config.fully_configured?
291-
transitive_implemented_extensions.any? do |e|
290+
transitive_implemented_ext_vers.any? do |e|
292291
if ext_version_requirements.empty?
293292
e.name == ext_name.to_s
294293
else
@@ -297,7 +296,7 @@ def ext?(ext_name, *ext_version_requirements)
297296
end
298297
end
299298
elsif @config.partially_configured?
300-
mandatory_extensions.any? do |e|
299+
mandatory_ext_reqs.any? do |e|
301300
if ext_version_requirements.empty?
302301
e.name == ext_name.to_s
303302
else
@@ -320,8 +319,8 @@ def ext?(ext_name, *ext_version_requirements)
320319
#####################################
321320

322321
# @return [Array<ExtensionVersion>] List of all extensions known to be implemented in this config, including transitive implications
323-
def transitive_implemented_extensions
324-
raise "implemented_extensions is only valid for a fully configured definition" unless @config.fully_configured?
322+
def transitive_implemented_ext_vers
323+
raise "transitive_implemented_ext_vers is only valid for a fully configured definition" unless @config.fully_configured?
325324
super
326325
end
327326

lib/design.rb

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -117,19 +117,19 @@ def params_without_value
117117
end
118118

119119
# @return [Array<ExtensionVersion>] List of all implemented extension versions.
120-
def implemented_extensions
120+
def implemented_ext_vers
121121
raise "Abstract Method: Must be provided in child class"
122122
end
123123

124124
# @return [Array<ExtensionRequirement>] List of all mandatory extension requirements
125-
def mandatory_extensions
125+
def mandatory_ext_reqs
126126
raise "Abstract Method: Must be provided in child class"
127127
end
128128

129129
# @return [Array<ExtensionRequirement>] List of all extensions that are prohibited.
130130
# This includes extensions explicitly prohibited by the design
131131
# and extensions that conflict with a mandatory extension.
132-
def prohibited_extensions
132+
def prohibited_ext_reqs
133133
raise "Abstract Method: Must be provided in child class"
134134
end
135135

@@ -261,15 +261,15 @@ def type_check(show_progress: true, io: $stdout)
261261
end
262262

263263
# @return [Array<ExtensionVersion>] List of all extensions known to be implemented in this design, including transitive implications
264-
def transitive_implemented_extensions
265-
return @transitive_implemented_extensions unless @transitive_implemented_extensions.nil?
264+
def transitive_implemented_ext_vers
265+
return @transitive_implemented_ext_vers unless @transitive_implemented_ext_vers.nil?
266266

267-
list = implemented_extensions
267+
list = implemented_ext_vers
268268
list.each do |e|
269269
implications = e.transitive_implications
270270
list.concat(implications) unless implications.empty?
271271
end
272-
@transitive_implemented_extensions = list.uniq.sort
272+
@transitive_implemented_ext_vers = list.uniq.sort
273273
end
274274

275275
# @overload prohibited_ext?(ext)
@@ -283,9 +283,9 @@ def transitive_implemented_extensions
283283
# @return [Boolean]
284284
def prohibited_ext?(ext)
285285
if ext.is_a?(ExtensionVersion)
286-
prohibited_extensions.any? { |ext_req| ext_req.satisfied_by?(ext) }
286+
prohibited_ext_reqs.any? { |ext_req| ext_req.satisfied_by?(ext) }
287287
elsif ext.is_a?(String) || ext.is_a?(Symbol)
288-
prohibited_extensions.any? { |ext_req| ext_req.name == ext.to_s }
288+
prohibited_ext_reqs.any? { |ext_req| ext_req.name == ext.to_s }
289289
else
290290
raise ArgumentError, "Argument to prohibited_ext? should be an ExtensionVersion or a String"
291291
end
@@ -296,7 +296,7 @@ def implemented_exception_codes
296296
return @implemented_exception_codes unless @implemented_exception_codes.nil?
297297

298298
@implemented_exception_codes =
299-
implemented_extensions.reduce([]) do |list, ext_version|
299+
implemented_ext_vers.reduce([]) do |list, ext_version|
300300
ecodes = extension(ext_version.name)["exception_codes"]
301301
next list if ecodes.nil?
302302

@@ -319,7 +319,7 @@ def implemented_interrupt_codes
319319
return @implemented_interrupt_codes unless @implemented_interrupt_codes.nil?
320320

321321
@implemented_interupt_codes =
322-
implemented_extensions.reduce([]) do |list, ext_version|
322+
implemented_ext_vers.reduce([]) do |list, ext_version|
323323
icodes = extension(ext_version.name)["interrupt_codes"]
324324
next list if icodes.nil?
325325

@@ -347,13 +347,13 @@ def functions
347347
# @return [Array<Csr>] List of all implemented CSRs
348348
def transitive_implemented_csrs
349349
@transitive_implemented_csrs ||=
350-
transitive_implemented_extensions.map(&:implemented_csrs).flatten.uniq.sort
350+
transitive_implemented_ext_vers.map(&:implemented_csrs).flatten.uniq.sort
351351
end
352352

353353
# @return [Array<Instruction>] List of all implemented instructions
354354
def transitive_implemented_instructions
355355
@transitive_implemented_instructions ||=
356-
transitive_implemented_extensions.map(&:implemented_instructions).flatten.uniq.sort
356+
transitive_implemented_ext_vers.map(&:implemented_instructions).flatten.uniq.sort
357357
end
358358

359359
# @return [Array<FuncDefAst>] List of all reachable IDL functions for the design

0 commit comments

Comments
 (0)