rggen-core 0.16.0 → 0.21.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +2 -2
  4. data/exe/rggen +0 -0
  5. data/lib/rggen/core.rb +6 -4
  6. data/lib/rggen/core/base/component.rb +18 -7
  7. data/lib/rggen/core/base/component_factory.rb +12 -9
  8. data/lib/rggen/core/base/component_layer_extension.rb +194 -0
  9. data/lib/rggen/core/base/feature_layer_extension.rb +158 -0
  10. data/lib/rggen/core/builder/builder.rb +33 -35
  11. data/lib/rggen/core/builder/component_entry.rb +3 -2
  12. data/lib/rggen/core/builder/component_registry.rb +22 -17
  13. data/lib/rggen/core/builder/input_component_registry.rb +43 -10
  14. data/lib/rggen/core/builder/{category.rb → layer.rb} +27 -26
  15. data/lib/rggen/core/builder/loader_registry.rb +48 -0
  16. data/lib/rggen/core/builder/plugins.rb +5 -3
  17. data/lib/rggen/core/configuration.rb +3 -2
  18. data/lib/rggen/core/configuration/component.rb +5 -0
  19. data/lib/rggen/core/configuration/component_factory.rb +1 -1
  20. data/lib/rggen/core/configuration/hash_loader.rb +4 -2
  21. data/lib/rggen/core/configuration/input_data.rb +15 -0
  22. data/lib/rggen/core/input_base/component_factory.rb +37 -6
  23. data/lib/rggen/core/input_base/feature.rb +9 -5
  24. data/lib/rggen/core/input_base/input_data.rb +13 -10
  25. data/lib/rggen/core/input_base/input_matcher.rb +15 -16
  26. data/lib/rggen/core/input_base/input_value_extractor.rb +34 -0
  27. data/lib/rggen/core/input_base/loader.rb +64 -21
  28. data/lib/rggen/core/input_base/verifier.rb +6 -7
  29. data/lib/rggen/core/input_base/yaml_loader.rb +22 -17
  30. data/lib/rggen/core/output_base/code_generator.rb +10 -23
  31. data/lib/rggen/core/output_base/component.rb +42 -39
  32. data/lib/rggen/core/output_base/component_factory.rb +4 -0
  33. data/lib/rggen/core/output_base/feature.rb +6 -7
  34. data/lib/rggen/core/printers.rb +2 -2
  35. data/lib/rggen/core/register_map.rb +6 -5
  36. data/lib/rggen/core/register_map/component.rb +4 -3
  37. data/lib/rggen/core/register_map/component_factory.rb +18 -1
  38. data/lib/rggen/core/register_map/feature.rb +2 -2
  39. data/lib/rggen/core/register_map/hash_loader.rb +61 -27
  40. data/lib/rggen/core/register_map/input_data.rb +30 -16
  41. data/lib/rggen/core/register_map/loader.rb +1 -1
  42. data/lib/rggen/core/register_map/ruby_loader.rb +1 -1
  43. data/lib/rggen/core/utility/code_utility.rb +8 -2
  44. data/lib/rggen/core/version.rb +1 -1
  45. metadata +11 -9
  46. data/lib/rggen/core/base/hierarchical_accessors.rb +0 -91
  47. data/lib/rggen/core/base/hierarchical_feature_accessors.rb +0 -83
  48. data/lib/rggen/core/core_extensions/casecmp.rb +0 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0510741051f873be7dc827047f0de66a99c8597f012c4115b856b5c33080a55d
4
- data.tar.gz: 6acbc096d450278f19c03e4fad095d1a181fa8ae3dbe11e1fcd7e8bde0f11e16
3
+ metadata.gz: 135125b25bc30e8eb74fa97644c356afd817cda2a84a810a401efbcde7d2a647
4
+ data.tar.gz: c4cb605aaa49801ff0f70458148f1349a220de2c41b6f7ed614e98466e425668
5
5
  SHA512:
6
- metadata.gz: caf9bacb6b71be870d48a03afc67ff9f35516289e331b4cc8231ee1ed94f9bb3444001b496f9a508de5c2e9700bbaa99cb9e9ab05e9628f6a73902d3d7d9d46b
7
- data.tar.gz: e1863ab6134225fc653bb9dcf88dde4ae5e307f0d73ce88c1ab87669c26452a57f3852ee29c8821c42f79d83ca279047011eb5fef6d58c516699260ae4d837d2
6
+ metadata.gz: 122340fafae09f08a604c54b3f21e8428a0d03af5ef81b37f4211f881a99186c2f0a45e50cad9367406a75f784041eabc0ef87ebf692946a2dfbec5221135e8f
7
+ data.tar.gz: fb87835adc54ec4416f5811126ff65355ada76e05cc46d89eedbe87e2899fd16665d26caf66e41a9919a074824f51ef97fd6dee9abc2aa959b42d83b9c4dd35c
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2017-2019 Taichi Ishitani
3
+ Copyright (c) 2017-2020 Taichi Ishitani
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/rggen-core.svg)](https://badge.fury.io/rb/rggen-core)
2
- [![Build Status](https://travis-ci.com/rggen/rggen-core.svg?branch=master)](https://travis-ci.com/rggen/rggen-core)
2
+ [![CI](https://github.com/rggen/rggen-core/workflows/CI/badge.svg)](https://github.com/rggen/rggen-core/actions?query=workflow%3ACI)
3
3
  [![Maintainability](https://api.codeclimate.com/v1/badges/53c8e6654c2b5ecb9142/maintainability)](https://codeclimate.com/github/rggen/rggen-core/maintainability)
4
4
  [![codecov](https://codecov.io/gh/rggen/rggen-core/branch/master/graph/badge.svg)](https://codecov.io/gh/rggen/rggen-core)
5
5
  [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=rggen_rggen-core&metric=alert_status)](https://sonarcloud.io/dashboard?id=rggen_rggen-core)
@@ -43,7 +43,7 @@ Feedbacks, bug reports, questions and etc. are wellcome! You can post them by us
43
43
 
44
44
  ## Copyright & License
45
45
 
46
- Copyright © 2017-2019 Taichi Ishitani. RgGen::Core is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
46
+ Copyright © 2017-2020 Taichi Ishitani. RgGen::Core is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
47
47
 
48
48
  ## Code of Conduct
49
49
 
data/exe/rggen CHANGED
File without changes
@@ -13,7 +13,6 @@ require 'yaml'
13
13
  require_relative 'core/version'
14
14
 
15
15
  require_relative 'core/facets'
16
- require_relative 'core/core_extensions/casecmp'
17
16
  require_relative 'core/core_extensions/object'
18
17
 
19
18
  require_relative 'core/utility/attribute_setter'
@@ -32,13 +31,14 @@ require_relative 'core/base/internal_struct'
32
31
  require_relative 'core/base/shared_context'
33
32
  require_relative 'core/base/component'
34
33
  require_relative 'core/base/component_factory'
34
+ require_relative 'core/base/component_layer_extension'
35
35
  require_relative 'core/base/feature'
36
36
  require_relative 'core/base/feature_factory'
37
- require_relative 'core/base/hierarchical_accessors'
38
- require_relative 'core/base/hierarchical_feature_accessors'
37
+ require_relative 'core/base/feature_layer_extension'
39
38
 
40
39
  require_relative 'core/input_base/input_value'
41
40
  require_relative 'core/input_base/input_data'
41
+ require_relative 'core/input_base/input_value_extractor'
42
42
  require_relative 'core/input_base/loader'
43
43
  require_relative 'core/input_base/json_loader'
44
44
  require_relative 'core/input_base/yaml_loader'
@@ -50,6 +50,7 @@ require_relative 'core/input_base/property'
50
50
  require_relative 'core/input_base/feature'
51
51
  require_relative 'core/input_base/feature_factory'
52
52
 
53
+ require_relative 'core/configuration/input_data'
53
54
  require_relative 'core/configuration/error'
54
55
  require_relative 'core/configuration/component'
55
56
  require_relative 'core/configuration/component_factory'
@@ -87,12 +88,13 @@ require_relative 'core/output_base/feature_factory'
87
88
 
88
89
  require_relative 'core/builder/component_entry'
89
90
  require_relative 'core/builder/component_registry'
91
+ require_relative 'core/builder/loader_registry'
90
92
  require_relative 'core/builder/input_component_registry'
91
93
  require_relative 'core/builder/output_component_registry'
92
94
  require_relative 'core/builder/simple_feature_entry'
93
95
  require_relative 'core/builder/list_feature_entry'
94
96
  require_relative 'core/builder/feature_registry'
95
- require_relative 'core/builder/category'
97
+ require_relative 'core/builder/layer'
96
98
  require_relative 'core/builder/plugins'
97
99
  require_relative 'core/builder/builder'
98
100
  require_relative 'core/builder'
@@ -4,26 +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
15
+ @component_index = parent&.children&.size || 0
14
16
  post_initialize(*args)
15
17
  block_given? && yield(self)
16
18
  end
17
19
 
18
20
  attr_reader :parent
21
+ attr_reader :layer
19
22
  attr_reader :children
20
- attr_reader :level
23
+ attr_reader :depth
24
+ attr_reader :component_index
21
25
 
22
- def component_name
23
- [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
24
34
  end
25
35
 
26
- def hierarchy
36
+ def component_name
37
+ [@layer, @base_name].compact.join('@')
27
38
  end
28
39
 
29
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