rggen-core 0.19.0 → 0.23.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/exe/rggen +2 -2
  3. data/lib/rggen/core.rb +7 -4
  4. data/lib/rggen/core/base/component.rb +16 -7
  5. data/lib/rggen/core/base/component_factory.rb +12 -9
  6. data/lib/rggen/core/base/component_layer_extension.rb +194 -0
  7. data/lib/rggen/core/base/feature_layer_extension.rb +158 -0
  8. data/lib/rggen/core/builder/builder.rb +38 -52
  9. data/lib/rggen/core/builder/component_entry.rb +3 -2
  10. data/lib/rggen/core/builder/component_registry.rb +22 -17
  11. data/lib/rggen/core/builder/feature_registry.rb +6 -9
  12. data/lib/rggen/core/builder/input_component_registry.rb +43 -10
  13. data/lib/rggen/core/builder/layer.rb +132 -0
  14. data/lib/rggen/core/builder/loader_registry.rb +48 -0
  15. data/lib/rggen/core/builder/plugin_manager.rb +140 -0
  16. data/lib/rggen/core/configuration.rb +3 -2
  17. data/lib/rggen/core/configuration/component.rb +5 -0
  18. data/lib/rggen/core/configuration/component_factory.rb +1 -1
  19. data/lib/rggen/core/configuration/hash_loader.rb +4 -2
  20. data/lib/rggen/core/configuration/input_data.rb +15 -0
  21. data/lib/rggen/core/dsl.rb +3 -1
  22. data/lib/rggen/core/exceptions.rb +9 -4
  23. data/lib/rggen/core/generator.rb +3 -3
  24. data/lib/rggen/core/input_base/component_factory.rb +37 -6
  25. data/lib/rggen/core/input_base/feature.rb +3 -3
  26. data/lib/rggen/core/input_base/input_data.rb +13 -10
  27. data/lib/rggen/core/input_base/input_value_extractor.rb +34 -0
  28. data/lib/rggen/core/input_base/loader.rb +64 -21
  29. data/lib/rggen/core/input_base/yaml_loader.rb +5 -4
  30. data/lib/rggen/core/options.rb +18 -14
  31. data/lib/rggen/core/output_base/code_generator.rb +10 -23
  32. data/lib/rggen/core/output_base/component.rb +42 -39
  33. data/lib/rggen/core/output_base/component_factory.rb +4 -0
  34. data/lib/rggen/core/output_base/feature.rb +6 -7
  35. data/lib/rggen/core/printers.rb +11 -7
  36. data/lib/rggen/core/register_map.rb +6 -5
  37. data/lib/rggen/core/register_map/component.rb +4 -3
  38. data/lib/rggen/core/register_map/component_factory.rb +18 -1
  39. data/lib/rggen/core/register_map/feature.rb +2 -2
  40. data/lib/rggen/core/register_map/hash_loader.rb +61 -27
  41. data/lib/rggen/core/register_map/input_data.rb +30 -16
  42. data/lib/rggen/core/register_map/loader.rb +1 -1
  43. data/lib/rggen/core/register_map/ruby_loader.rb +1 -1
  44. data/lib/rggen/core/utility/attribute_setter.rb +4 -0
  45. data/lib/rggen/core/utility/code_utility.rb +8 -2
  46. data/lib/rggen/core/utility/error_utility.rb +33 -6
  47. data/lib/rggen/core/version.rb +2 -2
  48. metadata +10 -7
  49. data/lib/rggen/core/base/hierarchical_accessors.rb +0 -91
  50. data/lib/rggen/core/base/hierarchical_feature_accessors.rb +0 -83
  51. data/lib/rggen/core/builder/category.rb +0 -116
  52. data/lib/rggen/core/builder/plugins.rb +0 -77
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 07b141658bda7d5c43afba30ecbff539ab05beb383844f5a5b8fc9d9b605ebb5
4
- data.tar.gz: faac4148e8c6c2e1bfa2632e1e1a589139db03280e3d25af8d39a1172708950e
3
+ metadata.gz: d508be683e4b6306f85c0fa2c793e98ba33dc2710dab29c07ae0fb720c0b1e20
4
+ data.tar.gz: a19ac7cea3493c7128672f343dee9833199d9e2c3769fdf0cd4679c3cc464c6d
5
5
  SHA512:
6
- metadata.gz: 4838ab9d430ae360da7d223db91171e4460221ecec07e8ed475053eec91ed3a6af1ac10f62350731fb9593e34d7c332f135e68d4d459290cc440b9c7b882065e
7
- data.tar.gz: 696f4186513d88b855434a295182dea303b54c52b6a04c251bb8a8dd2910bbeb42147abd9dfe292e28e42c91e4aba4971901490895b3685d375a18c988dd9d70
6
+ metadata.gz: f173621ce29ca6664d0201b4af80d9851151ab71dbd01f3027793d48402533ee9b8941d7149e5df0039370b4701975c9e926af2b36c94d8253bb6921ef3710b9
7
+ data.tar.gz: 0a7bdf33b0708f3e493b79f932fb4daf1400ea68fef957d040ef6ff5b6e1881b783b06d78d7d43a857034bc98addb3c10bb0238b01e0d7d93921c49a7ec3901b
data/exe/rggen CHANGED
@@ -8,6 +8,6 @@ begin
8
8
  cli = RgGen::Core::CLI.new
9
9
  cli.run(ARGV)
10
10
  rescue ScriptError, StandardError => e
11
- abort RgGen::Core::Utility::ErrorUtility
12
- .compose_error_message(e, cli.options[:print_backtrace])
11
+ options = [cli.options[:print_verbose_info], cli.options[:print_backtrace]]
12
+ abort RgGen::Core::Utility::ErrorUtility.compose_error_message(e, *options)
13
13
  end
@@ -31,13 +31,14 @@ require_relative 'core/base/internal_struct'
31
31
  require_relative 'core/base/shared_context'
32
32
  require_relative 'core/base/component'
33
33
  require_relative 'core/base/component_factory'
34
+ require_relative 'core/base/component_layer_extension'
34
35
  require_relative 'core/base/feature'
35
36
  require_relative 'core/base/feature_factory'
36
- require_relative 'core/base/hierarchical_accessors'
37
- require_relative 'core/base/hierarchical_feature_accessors'
37
+ require_relative 'core/base/feature_layer_extension'
38
38
 
39
39
  require_relative 'core/input_base/input_value'
40
40
  require_relative 'core/input_base/input_data'
41
+ require_relative 'core/input_base/input_value_extractor'
41
42
  require_relative 'core/input_base/loader'
42
43
  require_relative 'core/input_base/json_loader'
43
44
  require_relative 'core/input_base/yaml_loader'
@@ -49,6 +50,7 @@ require_relative 'core/input_base/property'
49
50
  require_relative 'core/input_base/feature'
50
51
  require_relative 'core/input_base/feature_factory'
51
52
 
53
+ require_relative 'core/configuration/input_data'
52
54
  require_relative 'core/configuration/error'
53
55
  require_relative 'core/configuration/component'
54
56
  require_relative 'core/configuration/component_factory'
@@ -86,13 +88,14 @@ require_relative 'core/output_base/feature_factory'
86
88
 
87
89
  require_relative 'core/builder/component_entry'
88
90
  require_relative 'core/builder/component_registry'
91
+ require_relative 'core/builder/loader_registry'
89
92
  require_relative 'core/builder/input_component_registry'
90
93
  require_relative 'core/builder/output_component_registry'
91
94
  require_relative 'core/builder/simple_feature_entry'
92
95
  require_relative 'core/builder/list_feature_entry'
93
96
  require_relative 'core/builder/feature_registry'
94
- require_relative 'core/builder/category'
95
- require_relative 'core/builder/plugins'
97
+ require_relative 'core/builder/layer'
98
+ require_relative 'core/builder/plugin_manager'
96
99
  require_relative 'core/builder/builder'
97
100
  require_relative 'core/builder'
98
101
 
@@ -4,28 +4,37 @@ module RgGen
4
4
  module Core
5
5
  module Base
6
6
  class Component
7
- def initialize(base_name, *args)
7
+ def initialize(parent, base_name, layer, *args)
8
+ @parent = parent
8
9
  @base_name = base_name
9
- @parent = args.first
10
+ @layer = layer
10
11
  @children = []
11
12
  @need_children = true
12
- @level = (parent && parent.level + 1) || 0
13
13
  @features = {}
14
+ @depth = (parent&.depth || 0) + 1
14
15
  @component_index = parent&.children&.size || 0
15
16
  post_initialize(*args)
16
17
  block_given? && yield(self)
17
18
  end
18
19
 
19
20
  attr_reader :parent
21
+ attr_reader :layer
20
22
  attr_reader :children
21
- attr_reader :level
23
+ attr_reader :depth
22
24
  attr_reader :component_index
23
25
 
24
- def component_name
25
- [hierarchy, @base_name].compact.join('@')
26
+ def ancestors
27
+ [].tap do |components|
28
+ component = self
29
+ while component
30
+ components.unshift(component)
31
+ component = component.parent
32
+ end
33
+ end
26
34
  end
27
35
 
28
- def hierarchy
36
+ def component_name
37
+ [@layer, @base_name].compact.join('@')
29
38
  end
30
39
 
31
40
  alias_method :to_s, :component_name
@@ -4,15 +4,19 @@ module RgGen
4
4
  module Core
5
5
  module Base
6
6
  class ComponentFactory
7
- def initialize(component_name)
7
+ def initialize(component_name, layer)
8
8
  @component_name = component_name
9
+ @layer = layer
9
10
  @root_factory = false
10
11
  block_given? && yield(self)
11
12
  end
12
13
 
14
+ attr_reader :component_name
15
+ attr_reader :layer
16
+
13
17
  attr_setter :target_component
18
+ attr_setter :component_factories
14
19
  attr_setter :feature_factories
15
- attr_setter :child_factory
16
20
 
17
21
  def root_factory
18
22
  @root_factory = true
@@ -40,7 +44,7 @@ module RgGen
40
44
  def create_component(parent, sources, &block)
41
45
  actual_sources = Array(select_actual_sources(*sources))
42
46
  @target_component
43
- .new(@component_name, parent, *actual_sources, &block)
47
+ .new(parent, component_name, layer, *actual_sources, &block)
44
48
  end
45
49
 
46
50
  def select_actual_sources(*sources)
@@ -54,8 +58,7 @@ module RgGen
54
58
  end
55
59
 
56
60
  def do_create_features(component, sources)
57
- return unless create_features?
58
- create_features(component, *sources)
61
+ create_features? && create_features(component, *sources)
59
62
  end
60
63
 
61
64
  def create_features?
@@ -63,12 +66,11 @@ module RgGen
63
66
  end
64
67
 
65
68
  def do_create_children(component, sources)
66
- return unless create_children?(component)
67
- create_children(component, *sources)
69
+ create_children?(component) && create_children(component, *sources)
68
70
  end
69
71
 
70
72
  def create_children?(component)
71
- @child_factory && component.need_children?
73
+ @component_factories && component.need_children?
72
74
  end
73
75
 
74
76
  def preprocess(args)
@@ -86,7 +88,8 @@ module RgGen
86
88
  end
87
89
 
88
90
  def create_child(component, *args)
89
- @child_factory.create(component, *args)
91
+ factory = find_child_factory(*args)
92
+ factory.create(component, *args)
90
93
  end
91
94
  end
92
95
  end
@@ -0,0 +1,194 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RgGen
4
+ module Core
5
+ module Base
6
+ module ComponentLayerExtension
7
+ private
8
+
9
+ module Common
10
+ def root?
11
+ layer == :root
12
+ end
13
+
14
+ def register_block?
15
+ layer == :register_block
16
+ end
17
+
18
+ def register_file?
19
+ layer == :register_file
20
+ end
21
+
22
+ def register?
23
+ layer == :register
24
+ end
25
+
26
+ def bit_field?
27
+ layer == :bit_field
28
+ end
29
+ end
30
+
31
+ module Root
32
+ include Common
33
+
34
+ def register_blocks
35
+ children
36
+ end
37
+
38
+ def register_files
39
+ register_blocks.flat_map(&:register_files)
40
+ end
41
+
42
+ def registers
43
+ register_blocks.flat_map(&:registers)
44
+ end
45
+
46
+ def bit_fields
47
+ register_blocks.flat_map(&:bit_fields)
48
+ end
49
+ end
50
+
51
+ module RegisterBlock
52
+ include Common
53
+
54
+ def root
55
+ parent
56
+ end
57
+
58
+ def files_and_registers
59
+ children
60
+ end
61
+
62
+ def register_files(include_lower_layer = true)
63
+ files_and_registers
64
+ .select(&:register_file?)
65
+ .flat_map { |rf| [rf, *(include_lower_layer ? rf : nil)&.register_files] }
66
+ end
67
+
68
+ def registers(include_lower_layer = true)
69
+ files_and_registers.flat_map do |file_or_register|
70
+ if file_or_register.register?
71
+ file_or_register
72
+ else
73
+ [*(include_lower_layer ? file_or_register : nil)&.registers]
74
+ end
75
+ end
76
+ end
77
+
78
+ def bit_fields
79
+ registers.flat_map(&:bit_fields)
80
+ end
81
+ end
82
+
83
+ module RegisterFile
84
+ include Common
85
+
86
+ def root
87
+ register_block.root
88
+ end
89
+
90
+ def block_or_file
91
+ parent
92
+ end
93
+
94
+ def register_block
95
+ parent.register_block? && parent || parent.register_block
96
+ end
97
+
98
+ def register_file
99
+ parent.register_file? && parent || nil
100
+ end
101
+
102
+ def files_and_registers
103
+ children
104
+ end
105
+
106
+ def register_files(include_lower_layer = true)
107
+ files_and_registers
108
+ .select(&:register_file?)
109
+ .flat_map { |rf| [rf, *(include_lower_layer ? rf : nil)&.register_files] }
110
+ end
111
+
112
+ def registers(include_lower_layer = true)
113
+ files_and_registers.flat_map do |file_or_register|
114
+ if file_or_register.register?
115
+ file_or_register
116
+ else
117
+ [*(include_lower_layer ? file_or_register : nil)&.registers]
118
+ end
119
+ end
120
+ end
121
+
122
+ def bit_fields
123
+ registers.flat_map(&:bit_fields)
124
+ end
125
+ end
126
+
127
+ module Register
128
+ include Common
129
+
130
+ def root
131
+ parent.root
132
+ end
133
+
134
+ def register_block
135
+ parent.register_block? && parent || parent.register_block
136
+ end
137
+
138
+ def register_file
139
+ parent.register_file? && parent || nil
140
+ end
141
+
142
+ def register_files
143
+ ancestors.select(&:register_file?)
144
+ end
145
+
146
+ def block_or_file
147
+ parent
148
+ end
149
+
150
+ def bit_fields
151
+ children
152
+ end
153
+ end
154
+
155
+ module BitField
156
+ include Common
157
+
158
+ def root
159
+ parent.root
160
+ end
161
+
162
+ def register_block
163
+ parent.register_block
164
+ end
165
+
166
+ def register_file
167
+ parent.register_file
168
+ end
169
+
170
+ def register_files
171
+ parent.register_files
172
+ end
173
+
174
+ def register
175
+ parent
176
+ end
177
+ end
178
+
179
+ ACCESSOR_EXTENSIONS = {
180
+ root: Root,
181
+ register_block: RegisterBlock,
182
+ register_file: RegisterFile,
183
+ register: Register,
184
+ bit_field: BitField
185
+ }.freeze
186
+
187
+ def define_layer_methods
188
+ ACCESSOR_EXTENSIONS.key?(layer) &&
189
+ (extend ACCESSOR_EXTENSIONS[layer])
190
+ end
191
+ end
192
+ end
193
+ end
194
+ end
@@ -0,0 +1,158 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RgGen
4
+ module Core
5
+ module Base
6
+ module FeatureLayerExtension
7
+ private
8
+
9
+ module Common
10
+ def root?
11
+ @component.root?
12
+ end
13
+
14
+ def register_block?
15
+ @component.register_block?
16
+ end
17
+
18
+ def register_file?
19
+ @component.register_file?
20
+ end
21
+
22
+ def register?
23
+ @component.register?
24
+ end
25
+
26
+ def bit_field?
27
+ @component.bit_field?
28
+ end
29
+ end
30
+
31
+ module Root
32
+ include Common
33
+
34
+ def root
35
+ @component
36
+ end
37
+ end
38
+
39
+ module RegisterBlock
40
+ include Common
41
+
42
+ def root
43
+ register_block.root
44
+ end
45
+
46
+ def register_block
47
+ @component
48
+ end
49
+
50
+ def register_blocks
51
+ root.register_blocks
52
+ end
53
+ end
54
+
55
+ module RegisterFile
56
+ include Common
57
+
58
+ def root
59
+ register_file.root
60
+ end
61
+
62
+ def register_block
63
+ register_file.register_block
64
+ end
65
+
66
+ def block_or_file
67
+ register_file.block_or_file
68
+ end
69
+
70
+ def register_file(layer = nil)
71
+ layer == :upper ? @component.register_file : @component
72
+ end
73
+
74
+ def files_and_registers
75
+ block_or_file.files_and_registers
76
+ end
77
+ end
78
+
79
+ module Register
80
+ include Common
81
+
82
+ def root
83
+ register.root
84
+ end
85
+
86
+ def register_block
87
+ register.register_block
88
+ end
89
+
90
+ def register_file
91
+ register.register_file
92
+ end
93
+
94
+ def register_files
95
+ register.register_files
96
+ end
97
+
98
+ def block_or_file
99
+ register.block_or_file
100
+ end
101
+
102
+ def register
103
+ @component
104
+ end
105
+
106
+ def files_and_registers
107
+ block_or_file.files_and_registers
108
+ end
109
+ end
110
+
111
+ module BitField
112
+ include Common
113
+
114
+ def root
115
+ bit_field.root
116
+ end
117
+
118
+ def register_block
119
+ bit_field.register_block
120
+ end
121
+
122
+ def register_file
123
+ bit_field.register_file
124
+ end
125
+
126
+ def register_files
127
+ bit_field.register_files
128
+ end
129
+
130
+ def register
131
+ bit_field.register
132
+ end
133
+
134
+ def bit_field
135
+ @component
136
+ end
137
+
138
+ def bit_fields
139
+ register.bit_fields
140
+ end
141
+ end
142
+
143
+ ACCESSOR_EXTENSIONS = {
144
+ root: Root,
145
+ register_block: RegisterBlock,
146
+ register_file: RegisterFile,
147
+ register: Register,
148
+ bit_field: BitField
149
+ }.freeze
150
+
151
+ def define_layer_methods
152
+ ACCESSOR_EXTENSIONS.key?(component.layer) &&
153
+ (extend ACCESSOR_EXTENSIONS[component.layer])
154
+ end
155
+ end
156
+ end
157
+ end
158
+ end