Skip to content

Commit 8f3291e

Browse files
Derek HowerAFOliveira
authored andcommitted
Avoid fork in param extra_validation
1 parent c24796e commit 8f3291e

File tree

1 file changed

+28
-22
lines changed

1 file changed

+28
-22
lines changed

backends/arch_gen/lib/arch_gen.rb

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -129,33 +129,39 @@ def ext?(name)
129129

130130
# checks any "extra_validation" given by parameter definitions
131131
def params_extra_validation
132-
fork do
133-
# add parameters as a constant
134-
params.each do |key, value|
135-
self.class.const_set(key, value)
136-
end
137132

138-
@implemented_extensions.each do |ext|
139-
ext_name = ext["name"]
140-
gen_ext_path = @gen_dir / "arch" / "ext" / "#{ext_name}.yaml"
141-
ext_yaml = YAML.safe_load gen_ext_path.read
142-
unless ext_yaml[ext_name]["params"].nil?
143-
ext_yaml[ext_name]["params"].each do |param_name, param_data|
144-
next unless param_data.key?("extra_validation")
145-
begin
146-
eval param_data["extra_validation"]
147-
rescue StandardError => e
148-
warn "While checking extension parameter #{ext_name}::#{param_name}.extra_validation"
149-
warn param_data["extra_validation"]
150-
warn e
151-
exit 1
152-
end
133+
agen = self
134+
135+
eval_context = Class.new do
136+
end
137+
138+
eval_context.class.define_method(:ext?) { |name| agen.send(:ext?, name) }
139+
eval_context.class.define_method(:assert) { |cond| agen.send(:assert, cond) }
140+
141+
# add parameters as a constant
142+
params.each do |key, value|
143+
eval_context.const_set(key, value)
144+
end
145+
146+
147+
@implemented_extensions.each do |ext|
148+
ext_name = ext["name"]
149+
gen_ext_path = @gen_dir / "arch" / "ext" / "#{ext_name}.yaml"
150+
ext_yaml = YAML.safe_load gen_ext_path.read
151+
unless ext_yaml[ext_name]["params"].nil?
152+
ext_yaml[ext_name]["params"].each do |param_name, param_data|
153+
next unless param_data.key?("extra_validation")
154+
begin
155+
eval_context.class_eval param_data["extra_validation"]
156+
rescue StandardError => e
157+
warn "While checking extension parameter #{ext_name}::#{param_name}.extra_validation"
158+
warn param_data["extra_validation"]
159+
warn e
160+
exit 1
153161
end
154162
end
155163
end
156164
end
157-
Process.wait
158-
exit 1 unless $CHILD_STATUS.success?
159165
end
160166
private :params_extra_validation
161167

0 commit comments

Comments
 (0)