rggen-core 0.15.0 → 0.20.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) 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 +4 -4
  6. data/lib/rggen/core/base/component.rb +25 -4
  7. data/lib/rggen/core/base/component_factory.rb +22 -9
  8. data/lib/rggen/core/base/component_layer_extension.rb +194 -0
  9. data/lib/rggen/core/base/feature.rb +16 -3
  10. data/lib/rggen/core/base/feature_factory.rb +7 -5
  11. data/lib/rggen/core/base/feature_layer_extension.rb +158 -0
  12. data/lib/rggen/core/builder/builder.rb +25 -25
  13. data/lib/rggen/core/builder/component_entry.rb +6 -1
  14. data/lib/rggen/core/builder/component_registry.rb +24 -18
  15. data/lib/rggen/core/builder/{category.rb → layer.rb} +27 -26
  16. data/lib/rggen/core/builder/plugins.rb +5 -3
  17. data/lib/rggen/core/configuration/component.rb +5 -0
  18. data/lib/rggen/core/configuration/component_factory.rb +1 -5
  19. data/lib/rggen/core/configuration/input_data.rb +15 -0
  20. data/lib/rggen/core/input_base/component_factory.rb +37 -6
  21. data/lib/rggen/core/input_base/feature.rb +15 -5
  22. data/lib/rggen/core/input_base/input_data.rb +13 -10
  23. data/lib/rggen/core/input_base/input_matcher.rb +15 -16
  24. data/lib/rggen/core/input_base/loader.rb +2 -3
  25. data/lib/rggen/core/input_base/verifier.rb +6 -7
  26. data/lib/rggen/core/input_base/yaml_loader.rb +22 -17
  27. data/lib/rggen/core/output_base/code_generator.rb +10 -23
  28. data/lib/rggen/core/output_base/component.rb +42 -39
  29. data/lib/rggen/core/output_base/component_factory.rb +6 -2
  30. data/lib/rggen/core/output_base/feature.rb +6 -7
  31. data/lib/rggen/core/printers.rb +2 -2
  32. data/lib/rggen/core/register_map.rb +3 -3
  33. data/lib/rggen/core/register_map/component.rb +4 -3
  34. data/lib/rggen/core/register_map/component_factory.rb +20 -3
  35. data/lib/rggen/core/register_map/feature.rb +2 -2
  36. data/lib/rggen/core/register_map/hash_loader.rb +16 -23
  37. data/lib/rggen/core/register_map/input_data.rb +30 -16
  38. data/lib/rggen/core/register_map/loader.rb +1 -1
  39. data/lib/rggen/core/register_map/ruby_loader.rb +1 -1
  40. data/lib/rggen/core/utility/code_utility.rb +8 -2
  41. data/lib/rggen/core/version.rb +1 -1
  42. metadata +9 -9
  43. data/lib/rggen/core/base/hierarchical_accessors.rb +0 -91
  44. data/lib/rggen/core/base/hierarchical_feature_accessors.rb +0 -83
  45. 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: ec4c2a7ada4a8af68c0969d9c13ef4b54ff80f176720a88fb52b03d2ad92fbba
4
- data.tar.gz: 807e8ca8ef6593a44de7f033ddb9ffdbf277715c94cda70ba65556842f39f55c
3
+ metadata.gz: d9079e5f068e752e9f083fd64c97dda8cdc9f47f2e4ce3c6f1d0568f4950caa3
4
+ data.tar.gz: e60e14aa24f9f7b003391f0d87d773a35adbdf99c794016cdd803fc8025df8de
5
5
  SHA512:
6
- metadata.gz: 400ddb69015ddc339db84803976e8bbf5e427bc76014288cfb577ef4f817b16dee8ccf529a89371562169d79582092e7a5b96ac1e9dec903c89877890d0fb6da
7
- data.tar.gz: 95e434257b80b8b27204e6fcb9f366413847f47b5fef71972fbe47fcf8e905f0006dab15a6e9729e1c6f198ca8b0ee3ef96c4e5fab71ad5b91c9618685d511fa
6
+ metadata.gz: 7f2b3f56089899d459e62bd6873166a467eec667d559690ad26a17558a72b4e399744d156c9a092181067a1313c82615db12a63469e8b7d9145678adfed2c830
7
+ data.tar.gz: a5cf836ea12ba57a905d925f29406f76155ce3e389d4678f76adee6da8bec9f5964c3f973f2803019c4aa8756f7223abf1de958f2ceb6b6fd97024d663c02327
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,10 +31,10 @@ 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'
@@ -50,6 +49,7 @@ require_relative 'core/input_base/property'
50
49
  require_relative 'core/input_base/feature'
51
50
  require_relative 'core/input_base/feature_factory'
52
51
 
52
+ require_relative 'core/configuration/input_data'
53
53
  require_relative 'core/configuration/error'
54
54
  require_relative 'core/configuration/component'
55
55
  require_relative 'core/configuration/component_factory'
@@ -92,7 +92,7 @@ require_relative 'core/builder/output_component_registry'
92
92
  require_relative 'core/builder/simple_feature_entry'
93
93
  require_relative 'core/builder/list_feature_entry'
94
94
  require_relative 'core/builder/feature_registry'
95
- require_relative 'core/builder/category'
95
+ require_relative 'core/builder/layer'
96
96
  require_relative 'core/builder/plugins'
97
97
  require_relative 'core/builder/builder'
98
98
  require_relative 'core/builder'
@@ -4,19 +4,40 @@ module RgGen
4
4
  module Core
5
5
  module Base
6
6
  class Component
7
- def initialize(*args)
8
- @parent = args.first
7
+ def initialize(parent, base_name, layer, *args)
8
+ @parent = parent
9
+ @base_name = base_name
10
+ @layer = layer
9
11
  @children = []
10
12
  @need_children = true
11
- @level = (parent && parent.level + 1) || 0
12
13
  @features = {}
14
+ @depth = (parent&.depth || 0) + 1
15
+ @component_index = parent&.children&.size || 0
13
16
  post_initialize(*args)
14
17
  block_given? && yield(self)
15
18
  end
16
19
 
17
20
  attr_reader :parent
21
+ attr_reader :layer
18
22
  attr_reader :children
19
- attr_reader :level
23
+ attr_reader :depth
24
+ attr_reader :component_index
25
+
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
34
+ end
35
+
36
+ def component_name
37
+ [@layer, @base_name].compact.join('@')
38
+ end
39
+
40
+ alias_method :to_s, :component_name
20
41
 
21
42
  def need_children?
22
43
  @need_children
@@ -4,14 +4,19 @@ module RgGen
4
4
  module Core
5
5
  module Base
6
6
  class ComponentFactory
7
- def initialize
7
+ def initialize(component_name, layer)
8
+ @component_name = component_name
9
+ @layer = layer
8
10
  @root_factory = false
9
11
  block_given? && yield(self)
10
12
  end
11
13
 
14
+ attr_reader :component_name
15
+ attr_reader :layer
16
+
12
17
  attr_setter :target_component
18
+ attr_setter :component_factories
13
19
  attr_setter :feature_factories
14
- attr_setter :child_factory
15
20
 
16
21
  def root_factory
17
22
  @root_factory = true
@@ -24,7 +29,7 @@ module RgGen
24
29
  else
25
30
  [args.first, preprocess(args[1..-1])]
26
31
  end
27
- create_component(parent, *sources) do |component|
32
+ create_component(parent, sources) do |component|
28
33
  build_component(parent, component, sources)
29
34
  root_factory? && finalize(component)
30
35
  end
@@ -36,6 +41,15 @@ module RgGen
36
41
  @root_factory
37
42
  end
38
43
 
44
+ def create_component(parent, sources, &block)
45
+ actual_sources = Array(select_actual_sources(*sources))
46
+ @target_component
47
+ .new(parent, component_name, layer, *actual_sources, &block)
48
+ end
49
+
50
+ def select_actual_sources(*sources)
51
+ end
52
+
39
53
  def build_component(parent, component, sources)
40
54
  do_create_features(component, sources)
41
55
  do_create_children(component, sources)
@@ -44,8 +58,7 @@ module RgGen
44
58
  end
45
59
 
46
60
  def do_create_features(component, sources)
47
- return unless create_features?
48
- create_features(component, *sources)
61
+ create_features? && create_features(component, *sources)
49
62
  end
50
63
 
51
64
  def create_features?
@@ -53,12 +66,11 @@ module RgGen
53
66
  end
54
67
 
55
68
  def do_create_children(component, sources)
56
- return unless create_children?(component)
57
- create_children(component, *sources)
69
+ create_children?(component) && create_children(component, *sources)
58
70
  end
59
71
 
60
72
  def create_children?(component)
61
- @child_factory && component.need_children?
73
+ @component_factories && component.need_children?
62
74
  end
63
75
 
64
76
  def preprocess(args)
@@ -76,7 +88,8 @@ module RgGen
76
88
  end
77
89
 
78
90
  def create_child(component, *args)
79
- @child_factory.create(component, *args)
91
+ factory = find_child_factory(*args)
92
+ factory.create(component, *args)
80
93
  end
81
94
  end
82
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
@@ -8,15 +8,28 @@ module RgGen
8
8
  extend SharedContext
9
9
  extend Forwardable
10
10
 
11
- def initialize(component, feature_name)
12
- @component = component
11
+ def initialize(feature_name, sub_feature_name, component)
13
12
  @feature_name = feature_name
13
+ @sub_feature_name = sub_feature_name
14
+ @component = component
14
15
  post_initialize
15
16
  block_given? && yield(self)
16
17
  end
17
18
 
18
19
  attr_reader :component
19
- attr_reader :feature_name
20
+
21
+ def feature_name(verbose: false)
22
+ if verbose
23
+ [@feature_name, @sub_feature_name]
24
+ .compact.reject(&:empty?).join(':')
25
+ else
26
+ @feature_name
27
+ end
28
+ end
29
+
30
+ def inspect
31
+ "#{feature_name(verbose: true)}(#{component})"
32
+ end
20
33
 
21
34
  class << self
22
35
  attr_reader :printables
@@ -15,8 +15,8 @@ module RgGen
15
15
  attr_setter :target_features
16
16
 
17
17
  def create_feature(component, *args)
18
- klass = select_target_feature(*args)
19
- klass.new(component, @feature_name) do |feature|
18
+ klass, sub_feature_name = select_feature(*args)
19
+ klass.new(@feature_name, sub_feature_name, component) do |feature|
20
20
  feature.available? || break
21
21
  block_given? && yield(feature)
22
22
  component.add_feature(feature)
@@ -25,11 +25,13 @@ module RgGen
25
25
 
26
26
  private
27
27
 
28
- def select_target_feature(*args)
29
- (@target_features && select_feature(*args)) || @target_feature
28
+ def select_feature(*args)
29
+ key = @target_features && target_feature_key(*args)
30
+ feature = (key && @target_features[key]) || @target_feature
31
+ [feature, key]
30
32
  end
31
33
 
32
- def select_feature(*args)
34
+ def target_feature_key(*args)
33
35
  end
34
36
  end
35
37
  end