rggen-default-register-map 0.27.0 → 0.28.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2e1b5c8952df6d5cf956a991019f222ff1fa5789316a37b2f82b0c204fe7a30a
4
- data.tar.gz: a2740678c7e416b435f294652fafa074b7a4090656f9c52ba8487a9866a6362c
3
+ metadata.gz: 9fac466f73de34a7e0a0575920f09cf424d4712b8a17a6b787d580d7252dac6f
4
+ data.tar.gz: 0fd170d8deb150dfd7d6fe8cd15f357b9e5781f32649bd709c53d7a1b1d76d45
5
5
  SHA512:
6
- metadata.gz: 4b562f3dda473595d8b96ab350da36654e5c75a78cd56afb25dfc4b0a45666dbf77185aa85261938cda985d72b7878b346c7b5331c8e837155a2310ebba83c0d
7
- data.tar.gz: '09288fa36647791243feb903e3752350b66197111ac960223be51e7766af0be2848fbcd086a2035e600dce2af8ea399940e528d9ed743bd8b739a05dd2b19601'
6
+ metadata.gz: c3872a9705e22a74c0c0e2ed45a09ffdf3e8e2e96ed6ca84c179636de0227f09560b2f266fde6450f2121524ba10fa830efa311560bf94469b05c33431f28e74
7
+ data.tar.gz: 9afaa664572a6c282027e15f382bb81f3d7b0413506c9c0d02d31b71bfae37b051532b388948666e87da97d6f3a18b013d4bcf2846845d2bea584dc26a59c958
@@ -85,7 +85,7 @@ RgGen.define_simple_feature(:bit_field, :bit_assignment) do
85
85
  end
86
86
 
87
87
  def preprocess(value)
88
- if value.is_a?(Hash)
88
+ if hash?(value)
89
89
  value
90
90
  elsif match_pattern(value)
91
91
  split_match_data(match_data)
@@ -154,7 +154,7 @@ RgGen.define_simple_feature(:bit_field, :bit_assignment) do
154
154
  end
155
155
 
156
156
  def calc_bit_position(index, base)
157
- if index.is_a?(Integer)
157
+ if integer?(index)
158
158
  base + step * index
159
159
  else
160
160
  "#{base}+#{step}*#{index}"
@@ -5,17 +5,17 @@ RgGen.define_simple_feature(:bit_field, :initial_value) do
5
5
  property :initial_value
6
6
  property :initial_values
7
7
  property :initial_value?, forward_to: :initial_value_set?
8
- property :fixed_initial_value?, forward_to: :fixed?
9
- property :initial_value_array?, forward_to: :array?
8
+ property :fixed_initial_value?, forward_to: :fixed_format?
9
+ property :initial_value_array?, forward_to: :array_format?
10
10
 
11
11
  input_pattern [{ parameterized: /default:(#{integer})/,
12
12
  array: /#{integer}(?:[,\n]#{integer})+/ }]
13
13
 
14
14
  build do |value|
15
15
  @input_format =
16
- if value.is_a?(Hash) || match_index == :parameterized
16
+ if hash?(value) || match_index == :parameterized
17
17
  :parameterized
18
- elsif value.is_a?(Array) || match_index == :array
18
+ elsif array?(value) || match_index == :array
19
19
  :array
20
20
  else
21
21
  :single
@@ -34,7 +34,7 @@ RgGen.define_simple_feature(:bit_field, :initial_value) do
34
34
  end
35
35
 
36
36
  verify(:component) do
37
- error_condition { settings[:require] && !initial_value? }
37
+ error_condition { need_initial_value? && !initial_value? }
38
38
  message { 'no initial value is given' }
39
39
  end
40
40
 
@@ -112,11 +112,11 @@ RgGen.define_simple_feature(:bit_field, :initial_value) do
112
112
  end
113
113
  end
114
114
 
115
- def array?
115
+ def array_format?
116
116
  initial_value_format == :array
117
117
  end
118
118
 
119
- def fixed?
119
+ def fixed_format?
120
120
  [:array, :single].include?(@input_format)
121
121
  end
122
122
 
@@ -169,6 +169,13 @@ RgGen.define_simple_feature(:bit_field, :initial_value) do
169
169
  (bit_field.settings && bit_field.settings[:initial_value]) || {}
170
170
  end
171
171
 
172
+ def need_initial_value?
173
+ case settings[:require]
174
+ when Proc then instance_exec(&settings[:require])
175
+ else settings[:require]
176
+ end
177
+ end
178
+
172
179
  def min_initial_value
173
180
  bit_field.width == 1 ? 0 : -(2**(bit_field.width - 1))
174
181
  end
@@ -0,0 +1,160 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_list_item_feature(:bit_field, :type, :custom) do
4
+ register_map do
5
+ property :sw_read, body: -> { option_value(:sw_read) }
6
+ property :sw_write, body: -> { option_value(:sw_write) }
7
+ property :sw_write_once?, body: -> { option_value(:sw_write_once) }
8
+ property :hw_write?, body: -> { option_value(:hw_write) }
9
+ property :hw_set?, body: -> { option_value(:hw_set) }
10
+ property :hw_clear?, body: -> { option_value(:hw_clear) }
11
+ property :sw_update?, forward_to: :update_by_sw?
12
+ property :hw_update?, forward_to: :update_by_hw?
13
+ property :read_trigger?, body: -> { option_value(:read_trigger) }
14
+ property :write_trigger?, body: -> { option_value(:write_trigger) }
15
+
16
+ readable? { bit_field.sw_read != :none }
17
+ writable? { bit_field.sw_write != :none }
18
+ volatile? { !bit_field.sw_update? && bit_field.readable? || bit_field.hw_update? }
19
+ initial_value require: -> { bit_field.sw_update? || bit_field.hw_update? }
20
+
21
+ input_pattern [
22
+ true => truthy_pattern, false => falsey_pattern,
23
+ sw_common: /(none|default|set|clear)/i,
24
+ sw_write: /(set_[01]|clear_[01]|toggle_[01])/i
25
+ ], match_automatically: false
26
+
27
+ build do |_, options|
28
+ @options = parse_options(options)
29
+ end
30
+
31
+ verify(:component) do
32
+ error_condition { sw_write_once? && !writable? }
33
+ message { 'cannot enable sw_write_once option for unwritable bit field' }
34
+ end
35
+
36
+ verify(:component) do
37
+ error_condition { hw_write? && reserved? }
38
+ message { 'cannot enable hw_write option for reserved bit field' }
39
+ end
40
+
41
+ verify(:component) do
42
+ error_condition { hw_set? && reserved? }
43
+ message { 'cannot enable hw_set option for reserved bit field' }
44
+ end
45
+
46
+ verify(:component) do
47
+ error_condition { hw_clear? && reserved? }
48
+ message { 'cannot enable hw_clear option for reserved bit field' }
49
+ end
50
+
51
+ verify(:component) do
52
+ error_condition { read_trigger? && !readable? }
53
+ message { 'cannot enable read_trigger option for unreadable bit field' }
54
+ end
55
+
56
+ verify(:component) do
57
+ error_condition { write_trigger? && !writable? }
58
+ message { 'cannot enable write_trigger option for unwritable bit field' }
59
+ end
60
+
61
+ printable(:type) do
62
+ options =
63
+ [:sw_read, :sw_write, :sw_write_once, :hw_write, :hw_set, :hw_clear]
64
+ .map { |o| "#{o}: #{option_value(o)}" }
65
+ [type, *options]
66
+ end
67
+
68
+ private
69
+
70
+ def option_value(name)
71
+ default_value =
72
+ if boolean_option?(name)
73
+ false
74
+ else
75
+ :default
76
+ end
77
+ @options.fetch(name, default_value)
78
+ end
79
+
80
+ def update_by_sw?
81
+ [:set, :clear].include?(sw_read) || sw_write != :none
82
+ end
83
+
84
+ def update_by_hw?
85
+ hw_write? || hw_set? || hw_clear?
86
+ end
87
+
88
+ def parse_options(options)
89
+ merge_options(options)
90
+ .each_with_object({}) do |(key, value), option_hash|
91
+ option_name = convert_to_option_name(key)
92
+ option_hash[option_name] = parse_option(option_name, key, value)
93
+ end
94
+ end
95
+
96
+ def merge_options(options)
97
+ options.each_with_object({}) do |option, merged_options|
98
+ option_hash = hash?(option) && option || [option].to_h
99
+ merged_options.update(option_hash)
100
+ end
101
+ rescue ArgumentError, TypeError
102
+ error "invalid options are given: #{options.inspect}"
103
+ end
104
+
105
+ def convert_to_option_name(key)
106
+ return key unless string?(key) || symbol?(key)
107
+ key.to_sym.downcase
108
+ end
109
+
110
+ def parse_option(option_name, key, value)
111
+ case option_name
112
+ when :sw_read
113
+ parse_value_option(:sw_read, [:sw_common], value)
114
+ when :sw_write
115
+ parse_value_option(:sw_write, [:sw_common, :sw_write], value)
116
+ when method(:boolean_option?)
117
+ parse_boolean_option(option_name, value)
118
+ else
119
+ error "unknown option is given: #{key.inspect}"
120
+ end
121
+ end
122
+
123
+ def parse_value_option(option_name, allowed_patterns, value)
124
+ match_data, match_index = match_pattern(value)
125
+
126
+ if match_data && allowed_patterns.include?(match_index)
127
+ match_data.captures.first.downcase.to_sym
128
+ else
129
+ error "invalid value for #{option_name} option: #{value.inspect}"
130
+ end
131
+ end
132
+
133
+ def boolean_option?(option_name)
134
+ [
135
+ :sw_write_once, :hw_write, :hw_set, :hw_clear,
136
+ :read_trigger, :write_trigger
137
+ ].include?(option_name)
138
+ end
139
+
140
+ def parse_boolean_option(option_name, value)
141
+ boolean_value = convert_to_boolean_value(value)
142
+
143
+ if [true, false].include?(boolean_value)
144
+ boolean_value
145
+ else
146
+ error "invalid value for #{option_name} option: #{value.inspect}"
147
+ end
148
+ end
149
+
150
+ def convert_to_boolean_value(value)
151
+ _, boolean_value =
152
+ case value
153
+ when true then [nil, true]
154
+ when false then [nil, false]
155
+ else match_pattern(value)
156
+ end
157
+ boolean_value
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_list_item_feature(:bit_field, :type, :rol) do
4
+ register_map do
5
+ read_only
6
+ initial_value require: true
7
+ reference use: true, width: 1
8
+ end
9
+ end
@@ -5,43 +5,35 @@ RgGen.define_list_feature(:bit_field, :type) do
5
5
  base_feature do
6
6
  define_helpers do
7
7
  def read_write
8
- @readable = true
9
- @writable = true
8
+ accessibility[:read] = -> { true }
9
+ accessibility[:write] = -> { true }
10
10
  end
11
11
 
12
12
  def read_only
13
- @readable = true
14
- @writable = false
13
+ accessibility[:read] = -> { true }
14
+ accessibility[:write] = -> { false }
15
15
  end
16
16
 
17
17
  def write_only
18
- @readable = false
19
- @writable = true
18
+ accessibility[:read] = -> { false }
19
+ accessibility[:write] = -> { true }
20
20
  end
21
21
 
22
22
  def reserved
23
- @readable = false
24
- @writable = false
23
+ accessibility[:read] = -> { false }
24
+ accessibility[:write] = -> { false }
25
25
  end
26
26
 
27
- def readable?
28
- @readable.nil? || @readable
27
+ def readable?(&block)
28
+ accessibility[:read] = block
29
29
  end
30
30
 
31
- def writable?
32
- @writable.nil? || @writable
31
+ def writable?(&block)
32
+ accessibility[:write] = block
33
33
  end
34
34
 
35
- def read_only?
36
- readable? && !writable?
37
- end
38
-
39
- def write_only?
40
- writable? && !readable?
41
- end
42
-
43
- def reserved?
44
- !(readable? || writable?)
35
+ def accessibility
36
+ @accessibility ||= {}
45
37
  end
46
38
 
47
39
  def volatile
@@ -73,26 +65,33 @@ RgGen.define_list_feature(:bit_field, :type) do
73
65
 
74
66
  property :type
75
67
  property :settings, forward_to_helper: true
76
- property :readable?, forward_to_helper: true
77
- property :writable?, forward_to_helper: true
78
- property :read_only?, forward_to_helper: true
79
- property :write_only?, forward_to_helper: true
80
- property :reserved?, forward_to_helper: true
81
- property :volatile?, initial: -> { volatility }
82
-
83
- build { |value| @type = value }
68
+ property :readable?, body: -> { accessibility(:read) }
69
+ property :writable?, body: -> { accessibility(:write) }
70
+ property :read_only?, body: -> { readable? && !writable? }
71
+ property :write_only?, body: -> { !readable? && writable? }
72
+ property :reserved?, body: -> { !readable? && !writable? }
73
+ property :volatile?, body: -> { volatility }
84
74
 
85
75
  build do |value|
86
76
  @type = value
87
- helper.reserved? && bit_field.document_only
77
+ end
78
+
79
+ post_build do
80
+ reserved? && bit_field.document_only
88
81
  end
89
82
 
90
83
  printable :type
91
84
 
92
85
  private
93
86
 
87
+ def accessibility(access)
88
+ body = helper.accessibility[access]
89
+ body.nil? || instance_exec(&body)
90
+ end
91
+
94
92
  def volatility
95
- helper.volatility.nil? || instance_exec(&helper.volatility)
93
+ body = helper.volatility
94
+ body.nil? || instance_exec(&body)
96
95
  end
97
96
  end
98
97
 
@@ -109,13 +108,15 @@ RgGen.define_list_feature(:bit_field, :type) do
109
108
  end
110
109
 
111
110
  factory do
111
+ allow_options
112
+
112
113
  convert_value do |value|
113
114
  types = target_features.keys
114
115
  types.find(&value.to_sym.method(:casecmp?)) || value
115
116
  end
116
117
 
117
118
  def target_feature_key(cell)
118
- cell.value
119
+ cell
119
120
  end
120
121
  end
121
122
  end
@@ -7,7 +7,7 @@ module RgGen
7
7
 
8
8
  build do |value|
9
9
  @comment =
10
- (value.is_a?(Array) && value.join("\n") || value.to_s).chomp
10
+ (array?(value) && value.join("\n") || value.to_s).chomp
11
11
  end
12
12
 
13
13
  printable :comment do
@@ -4,17 +4,17 @@ RgGen.define_simple_feature(:global, :enable_wide_register) do
4
4
  configuration do
5
5
  property :enable_wide_register?, default: false
6
6
 
7
- input_pattern [/true|on|yes/i, /false|off|no/i],
7
+ input_pattern [true => truthy_pattern, false => falsey_pattern],
8
8
  match_automatically: false
9
9
 
10
10
  ignore_empty_value false
11
11
 
12
12
  build do |value|
13
13
  @enable_wide_register =
14
- if [true, false].include?(value)
15
- value
14
+ if [true, false].any? { |boolean| value == boolean }
15
+ value.value
16
16
  elsif match_pattern(value)
17
- [true, false][match_index]
17
+ match_index
18
18
  else
19
19
  error "cannot convert #{value.inspect} into boolean"
20
20
  end
@@ -21,7 +21,7 @@ RgGen.define_simple_feature(:register, :offset_address) do
21
21
  verify(:feature) do
22
22
  error_condition { (offset_address % byte_width).nonzero? }
23
23
  message do
24
- "offset address is not aligned with bus width(#{bus_width}): "\
24
+ "offset address is not aligned with bus width(#{bus_width}): " \
25
25
  "0x#{offset_address.to_s(16)}"
26
26
  end
27
27
  end
@@ -39,7 +39,7 @@ RgGen.define_simple_feature(:register, :size) do
39
39
 
40
40
  def parse_values(values)
41
41
  Array(
42
- values.is_a?(String) && parse_string_values(values) || values
42
+ string?(values) && parse_string_values(values) || values
43
43
  ).map(&method(:convert_value))
44
44
  end
45
45
 
@@ -43,13 +43,11 @@ RgGen.define_list_item_feature(:register, :type, :indirect) do
43
43
  support_shared_address
44
44
  support_array_register
45
45
 
46
- input_pattern [
47
- /(#{variable_name}(?:\.#{variable_name})*)/,
48
- /(#{variable_name}(?:\.#{variable_name})*):(#{integer})/
49
- ], match_automatically: false
46
+ input_pattern /(#{variable_name}(?:\.#{variable_name})*)/,
47
+ match_automatically: false
50
48
 
51
- build do
52
- @index_entries = parse_index_entries
49
+ build do |_type, options|
50
+ @index_entries = parse_index_entries(options)
53
51
  end
54
52
 
55
53
  verify(:component) do
@@ -173,35 +171,36 @@ RgGen.define_list_item_feature(:register, :type, :indirect) do
173
171
 
174
172
  private
175
173
 
176
- def parse_index_entries
177
- (!options.empty? && options.map(&method(:create_index_entry))) ||
178
- (error 'no indirect indices are given')
174
+ def parse_index_entries(options)
175
+ error 'no indirect indices are given' if options.empty?
176
+ options.map { |option| create_index_entry(option) }
179
177
  end
180
178
 
181
- def create_index_entry(value)
182
- input_values = split_value(value)
183
- case input_values.size
184
- when 2
185
- index_entry.new(input_values[0], convert_index_value(input_values[1]))
186
- when 1
187
- index_entry.new(input_values[0])
188
- else
189
- error "too many arguments for indirect index are given: #{value.inspect}"
190
- end
179
+ def create_index_entry(option)
180
+ entry = array?(option) && option || [option]
181
+
182
+ field_name, index_value =
183
+ case entry.size
184
+ when 2 then [check_field_name(entry[0]), convert_index_value(entry[1])]
185
+ when 1 then [check_field_name(entry[0])]
186
+ when 0 then error 'no indirect index is given'
187
+ else error "too many arguments for indirect index are given: #{entry.inspect}"
188
+ end
189
+
190
+ index_entry.new(field_name, index_value)
191
191
  end
192
192
 
193
- def split_value(value)
194
- input_value = Array(value)
195
- field_name = input_value.first
196
- if sting_or_symbol?(field_name) && match_pattern(field_name)
197
- [*match_data.captures, *input_value[1..]]
198
- else
199
- error "illegal input value for indirect index: #{value.inspect}"
200
- end
193
+ def check_field_name(field_name)
194
+ return field_name if match_field_name?(field_name)
195
+ error "illegal input value for indirect index: #{field_name.inspect}"
196
+ end
197
+
198
+ def match_field_name?(field_name)
199
+ (string?(field_name) || symbol?(field_name)) && match_pattern(field_name)
201
200
  end
202
201
 
203
202
  def sting_or_symbol?(value)
204
- [String, Symbol].any?(&value.method(:is_a?))
203
+ string?(value) || symbol?(value)
205
204
  end
206
205
 
207
206
  def convert_index_value(value)
@@ -43,9 +43,8 @@ RgGen.define_list_feature(:register, :type) do
43
43
  property :reserved?, initial: -> { !(writable? || readable?) }
44
44
  property :settings, forward_to_helper: true
45
45
 
46
- build do |value|
47
- @type = value[:type]
48
- @options = value[:options]
46
+ build do |type, _option|
47
+ @type = type
49
48
  helper.need_bit_fields? || register.need_no_children
50
49
  end
51
50
 
@@ -64,8 +63,6 @@ RgGen.define_list_feature(:register, :type) do
64
63
 
65
64
  private
66
65
 
67
- attr_reader :options
68
-
69
66
  def writability
70
67
  block = helper.writability || -> { register.bit_fields.any?(&:writable?) }
71
68
  instance_exec(&block)
@@ -87,38 +84,21 @@ RgGen.define_list_feature(:register, :type) do
87
84
  end
88
85
 
89
86
  factory do
87
+ allow_options
88
+
90
89
  convert_value do |value|
91
- type, options = split_input_value(value)
92
- { type: find_type(type), options: Array(options) }
90
+ find_type(value)
93
91
  end
94
92
 
95
- def target_feature_key(cell)
96
- (!cell.empty_value? && cell.value[:type]) || nil
93
+ def target_feature_key(value)
94
+ (!value.empty_value? && value) || nil
97
95
  end
98
96
 
99
97
  private
100
98
 
101
- def split_input_value(value)
102
- if value.is_a?(String)
103
- split_string_value(value)
104
- else
105
- input_value = Array(value)
106
- [input_value[0], input_value[1..]]
107
- end
108
- end
109
-
110
- def split_string_value(value)
111
- type, options = split_string(value, ':', 2)
112
- [type, split_string(options, /[,\n]/, 0)]
113
- end
114
-
115
- def split_string(value, separator, limit)
116
- value&.split(separator, limit)&.map(&:strip)
117
- end
118
-
119
- def find_type(type)
99
+ def find_type(value)
120
100
  types = target_features.keys
121
- types.find(&type.to_sym.method(:casecmp?)) || type
101
+ types.find(&value.to_sym.method(:casecmp?)) || value
122
102
  end
123
103
  end
124
104
  end
@@ -15,7 +15,7 @@ RgGen.define_simple_feature(:register_file, :size) do
15
15
 
16
16
  build do |values|
17
17
  @size =
18
- (values.is_a?(String) && parse_string_value(values) || Array(values))
18
+ (string?(values) && parse_string_value(values) || Array(values))
19
19
  .map(&method(:convert_value))
20
20
  end
21
21
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RgGen
4
4
  module DefaultRegisterMap
5
- VERSION = '0.27.0'
5
+ VERSION = '0.28.0'
6
6
  end
7
7
  end
@@ -27,10 +27,12 @@ RgGen.setup_plugin :'rggen-default-register-map' do |plugin|
27
27
  'default_register_map/bit_field/name',
28
28
  'default_register_map/bit_field/bit_assignment',
29
29
  'default_register_map/bit_field/type',
30
+ 'default_register_map/bit_field/type/custom',
30
31
  'default_register_map/bit_field/type/rc',
31
32
  'default_register_map/bit_field/type/reserved',
32
33
  'default_register_map/bit_field/type/ro_rotrg',
33
34
  'default_register_map/bit_field/type/rof',
35
+ 'default_register_map/bit_field/type/rol',
34
36
  'default_register_map/bit_field/type/row0trg_row1trg',
35
37
  'default_register_map/bit_field/type/rowo_rowotrg',
36
38
  'default_register_map/bit_field/type/rs',
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rggen-default-register-map
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.27.0
4
+ version: 0.28.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taichi Ishitani
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-05 00:00:00.000000000 Z
11
+ date: 2022-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -41,10 +41,12 @@ files:
41
41
  - lib/rggen/default_register_map/bit_field/name.rb
42
42
  - lib/rggen/default_register_map/bit_field/reference.rb
43
43
  - lib/rggen/default_register_map/bit_field/type.rb
44
+ - lib/rggen/default_register_map/bit_field/type/custom.rb
44
45
  - lib/rggen/default_register_map/bit_field/type/rc.rb
45
46
  - lib/rggen/default_register_map/bit_field/type/reserved.rb
46
47
  - lib/rggen/default_register_map/bit_field/type/ro_rotrg.rb
47
48
  - lib/rggen/default_register_map/bit_field/type/rof.rb
49
+ - lib/rggen/default_register_map/bit_field/type/rol.rb
48
50
  - lib/rggen/default_register_map/bit_field/type/row0trg_row1trg.rb
49
51
  - lib/rggen/default_register_map/bit_field/type/rowo_rowotrg.rb
50
52
  - lib/rggen/default_register_map/bit_field/type/rs.rb
@@ -104,8 +106,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
106
  - !ruby/object:Gem::Version
105
107
  version: '0'
106
108
  requirements: []
107
- rubygems_version: 3.3.3
109
+ rubygems_version: 3.3.7
108
110
  signing_key:
109
111
  specification_version: 4
110
- summary: rggen-default-register-map-0.27.0
112
+ summary: rggen-default-register-map-0.28.0
111
113
  test_files: []