rggen-core 0.18.0 → 0.23.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 +4 -4
- data/LICENSE +1 -1
- data/README.md +2 -2
- data/exe/rggen +2 -2
- data/lib/rggen/core.rb +7 -5
- data/lib/rggen/core/base/component.rb +16 -7
- data/lib/rggen/core/base/component_factory.rb +12 -9
- data/lib/rggen/core/base/component_layer_extension.rb +194 -0
- data/lib/rggen/core/base/feature_layer_extension.rb +158 -0
- data/lib/rggen/core/builder/builder.rb +38 -52
- data/lib/rggen/core/builder/component_entry.rb +3 -2
- data/lib/rggen/core/builder/component_registry.rb +22 -17
- data/lib/rggen/core/builder/input_component_registry.rb +43 -10
- data/lib/rggen/core/builder/{category.rb → layer.rb} +27 -26
- data/lib/rggen/core/builder/loader_registry.rb +48 -0
- data/lib/rggen/core/builder/plugin_manager.rb +140 -0
- data/lib/rggen/core/configuration.rb +3 -2
- data/lib/rggen/core/configuration/component.rb +5 -0
- data/lib/rggen/core/configuration/component_factory.rb +1 -1
- data/lib/rggen/core/configuration/hash_loader.rb +4 -2
- data/lib/rggen/core/configuration/input_data.rb +15 -0
- data/lib/rggen/core/dsl.rb +3 -1
- data/lib/rggen/core/exceptions.rb +9 -4
- data/lib/rggen/core/generator.rb +3 -3
- data/lib/rggen/core/input_base/component_factory.rb +37 -6
- data/lib/rggen/core/input_base/feature.rb +4 -4
- data/lib/rggen/core/input_base/input_data.rb +13 -10
- data/lib/rggen/core/input_base/input_matcher.rb +15 -16
- data/lib/rggen/core/input_base/input_value_extractor.rb +34 -0
- data/lib/rggen/core/input_base/loader.rb +64 -21
- data/lib/rggen/core/input_base/yaml_loader.rb +22 -17
- data/lib/rggen/core/options.rb +18 -14
- data/lib/rggen/core/output_base/code_generator.rb +10 -23
- data/lib/rggen/core/output_base/component.rb +42 -39
- data/lib/rggen/core/output_base/component_factory.rb +4 -0
- data/lib/rggen/core/output_base/feature.rb +6 -7
- data/lib/rggen/core/printers.rb +11 -7
- data/lib/rggen/core/register_map.rb +6 -5
- data/lib/rggen/core/register_map/component.rb +4 -3
- data/lib/rggen/core/register_map/component_factory.rb +18 -1
- data/lib/rggen/core/register_map/feature.rb +2 -2
- data/lib/rggen/core/register_map/hash_loader.rb +61 -27
- data/lib/rggen/core/register_map/input_data.rb +30 -16
- data/lib/rggen/core/register_map/loader.rb +1 -1
- data/lib/rggen/core/register_map/ruby_loader.rb +1 -1
- data/lib/rggen/core/utility/code_utility.rb +8 -2
- data/lib/rggen/core/utility/error_utility.rb +33 -6
- data/lib/rggen/core/version.rb +1 -1
- metadata +12 -10
- data/lib/rggen/core/base/hierarchical_accessors.rb +0 -91
- data/lib/rggen/core/base/hierarchical_feature_accessors.rb +0 -83
- data/lib/rggen/core/builder/plugins.rb +0 -77
- data/lib/rggen/core/core_extensions/casecmp.rb +0 -12
data/lib/rggen/core/printers.rb
CHANGED
@@ -18,18 +18,20 @@ module RgGen
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def run(builder, options)
|
21
|
-
verbose? &&
|
21
|
+
verbose? && load_plugins(builder, options)
|
22
22
|
puts version_message(builder)
|
23
23
|
end
|
24
24
|
|
25
25
|
private
|
26
26
|
|
27
|
-
def
|
28
|
-
|
27
|
+
def load_plugins(builder, options)
|
28
|
+
plugins = options[:plugins]
|
29
|
+
no_default_plugins = options[:no_default_plugins]
|
30
|
+
builder.load_plugins(plugins, no_default_plugins, false)
|
29
31
|
end
|
30
32
|
|
31
|
-
def
|
32
|
-
|
33
|
+
def verbose?
|
34
|
+
@verbose
|
33
35
|
end
|
34
36
|
|
35
37
|
def version_message(builder)
|
@@ -44,8 +46,10 @@ module RgGen
|
|
44
46
|
end
|
45
47
|
|
46
48
|
def verbose_version(builder)
|
47
|
-
[
|
48
|
-
|
49
|
+
[
|
50
|
+
"rggen-core #{Core::VERSION}",
|
51
|
+
*builder.plugin_manager.version_info
|
52
|
+
].map { |version_info| " - #{version_info}" }
|
49
53
|
end
|
50
54
|
end
|
51
55
|
end
|
@@ -6,14 +6,15 @@ module RgGen
|
|
6
6
|
def self.setup(builder)
|
7
7
|
builder.input_component_registry(:register_map) do
|
8
8
|
register_component [
|
9
|
-
:
|
10
|
-
] do |
|
9
|
+
:root, :register_block, :register_file, :register, :bit_field
|
10
|
+
] do |layer|
|
11
11
|
component Component, ComponentFactory
|
12
|
-
feature Feature, FeatureFactory if
|
12
|
+
feature Feature, FeatureFactory if layer != :root
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
|
15
|
+
register_loader :ruby, RubyLoader
|
16
|
+
register_loader :yaml, YAMLLoader
|
17
|
+
register_loader :json, JSONLoader
|
17
18
|
end
|
18
19
|
end
|
19
20
|
end
|
@@ -4,15 +4,16 @@ module RgGen
|
|
4
4
|
module Core
|
5
5
|
module RegisterMap
|
6
6
|
class Component < InputBase::Component
|
7
|
-
include Base::
|
7
|
+
include Base::ComponentLayerExtension
|
8
8
|
|
9
9
|
attr_reader :configuration
|
10
10
|
|
11
11
|
private
|
12
12
|
|
13
|
-
def post_initialize(
|
13
|
+
def post_initialize(configuration)
|
14
14
|
@configuration = configuration
|
15
|
-
|
15
|
+
define_layer_methods
|
16
|
+
layer == :bit_field && need_no_children
|
16
17
|
end
|
17
18
|
end
|
18
19
|
end
|
@@ -4,6 +4,8 @@ module RgGen
|
|
4
4
|
module Core
|
5
5
|
module RegisterMap
|
6
6
|
class ComponentFactory < InputBase::ComponentFactory
|
7
|
+
include RaiseError
|
8
|
+
|
7
9
|
private
|
8
10
|
|
9
11
|
def select_actual_sources(configuration, *_)
|
@@ -11,7 +13,22 @@ module RgGen
|
|
11
13
|
end
|
12
14
|
|
13
15
|
def create_input_data(&block)
|
14
|
-
|
16
|
+
InputData.new(:root, valid_value_lists, &block)
|
17
|
+
end
|
18
|
+
|
19
|
+
def find_child_factory(_configuration, register_map)
|
20
|
+
component_factories[register_map.layer]
|
21
|
+
end
|
22
|
+
|
23
|
+
NO_CHILDREN_ERROR_MESSAGES = {
|
24
|
+
root: 'no register blocks are given',
|
25
|
+
register_block: 'neither register files nor registers are given',
|
26
|
+
register_file: 'neither register files nor registers are given',
|
27
|
+
register: 'no bit fields are given'
|
28
|
+
}.freeze
|
29
|
+
|
30
|
+
def raise_no_children_error(comoponent)
|
31
|
+
error(NO_CHILDREN_ERROR_MESSAGES[comoponent.layer])
|
15
32
|
end
|
16
33
|
end
|
17
34
|
end
|
@@ -4,7 +4,7 @@ module RgGen
|
|
4
4
|
module Core
|
5
5
|
module RegisterMap
|
6
6
|
class Feature < InputBase::Feature
|
7
|
-
include Base::
|
7
|
+
include Base::FeatureLayerExtension
|
8
8
|
include RaiseError
|
9
9
|
|
10
10
|
private
|
@@ -14,7 +14,7 @@ module RgGen
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def post_initialize
|
17
|
-
|
17
|
+
define_layer_methods
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
@@ -4,42 +4,76 @@ module RgGen
|
|
4
4
|
module Core
|
5
5
|
module RegisterMap
|
6
6
|
module HashLoader
|
7
|
-
def format(read_data, file)
|
8
|
-
format_data(:register_map, register_map, read_data, file)
|
9
|
-
rescue TypeError => e
|
10
|
-
raise Core::LoadError.new(e.message, file)
|
11
|
-
end
|
12
|
-
|
13
7
|
private
|
14
8
|
|
15
|
-
|
16
|
-
|
17
|
-
register_block: :register,
|
18
|
-
|
9
|
+
SUB_LAYER_KEYS = {
|
10
|
+
root: [:register_block, :register_blocks],
|
11
|
+
register_block: [:register_file, :register_files, :register, :registers],
|
12
|
+
register_file: [:register_file, :register_files, :register, :registers],
|
13
|
+
register: [:bit_field, :bit_fields]
|
19
14
|
}.freeze
|
20
15
|
|
21
|
-
|
22
|
-
|
23
|
-
register_block: :registers,
|
24
|
-
|
16
|
+
SUB_LAYER_KEY_MAP = {
|
17
|
+
root: { register_blocks: :register_block },
|
18
|
+
register_block: { register_files: :register_file, registers: :register },
|
19
|
+
register_file: { register_files: :register_file, registers: :register },
|
20
|
+
register: { bit_fields: :bit_field }
|
25
21
|
}.freeze
|
26
22
|
|
27
|
-
def
|
28
|
-
read_data
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
23
|
+
def format_layer_data(read_data, layer, file)
|
24
|
+
if read_data.is_a?(Array)
|
25
|
+
format_array_layer_data(read_data, layer, file)
|
26
|
+
else
|
27
|
+
fomrat_hash_layer_data(read_data, layer, file)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def format_array_layer_data(read_data, layer, file)
|
32
|
+
read_data.each_with_object({}) do |data, layer_data|
|
33
|
+
layer_data.merge!(fomrat_hash_layer_data(data, layer, file))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def fomrat_hash_layer_data(read_data, layer, file)
|
38
|
+
convert_to_hash(read_data, file)
|
39
|
+
.reject { |key, _| SUB_LAYER_KEYS[layer]&.include?(key) }
|
40
|
+
end
|
41
|
+
|
42
|
+
def format_sub_layer_data(read_data, layer, file)
|
43
|
+
if read_data.is_a?(Array)
|
44
|
+
format_array_sub_layer_data(read_data, layer, file)
|
45
|
+
else
|
46
|
+
format_hash_sub_layer_data(read_data, layer, file)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def format_array_sub_layer_data(read_data, layer, file)
|
51
|
+
read_data.each_with_object({}) do |data, sub_layer_data|
|
52
|
+
format_hash_sub_layer_data(data, layer, file, sub_layer_data)
|
37
53
|
end
|
38
54
|
end
|
39
55
|
|
40
|
-
def
|
41
|
-
|
42
|
-
|
56
|
+
def format_hash_sub_layer_data(read_data, layer, file, sub_layer_data = {})
|
57
|
+
convert_to_hash(read_data, file)
|
58
|
+
.select { |key, _| SUB_LAYER_KEYS[layer]&.include?(key) }
|
59
|
+
.each do |key, value|
|
60
|
+
merge_sub_layer_data(sub_layer_data, layer, key, value)
|
61
|
+
end
|
62
|
+
sub_layer_data
|
63
|
+
end
|
64
|
+
|
65
|
+
def merge_sub_layer_data(sub_layer_data, layer, key, value)
|
66
|
+
if SUB_LAYER_KEY_MAP[layer].key?(key)
|
67
|
+
(sub_layer_data[SUB_LAYER_KEY_MAP[layer][key]] ||= []).concat(value)
|
68
|
+
else
|
69
|
+
(sub_layer_data[key] ||= []) << value
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def convert_to_hash(read_data, file)
|
74
|
+
Hash(read_data)
|
75
|
+
rescue TypeError => e
|
76
|
+
raise Core::LoadError.new(e.message, file)
|
43
77
|
end
|
44
78
|
end
|
45
79
|
end
|
@@ -3,30 +3,44 @@
|
|
3
3
|
module RgGen
|
4
4
|
module Core
|
5
5
|
module RegisterMap
|
6
|
-
class
|
7
|
-
|
6
|
+
class InputData < InputBase::InputData
|
7
|
+
module Root
|
8
|
+
def register_block(value_list = nil, &block)
|
9
|
+
child(:register_block, value_list, &block)
|
10
|
+
end
|
11
|
+
end
|
8
12
|
|
9
|
-
|
10
|
-
|
13
|
+
module RegisterBlockRegisterFile
|
14
|
+
def register_file(value_list = nil, &block)
|
15
|
+
child(:register_file, value_list, &block)
|
16
|
+
end
|
11
17
|
|
12
|
-
|
13
|
-
|
18
|
+
def register(value_list = nil, &block)
|
19
|
+
child(:register, value_list, &block)
|
20
|
+
end
|
14
21
|
end
|
15
|
-
end
|
16
22
|
|
17
|
-
|
18
|
-
|
23
|
+
module Register
|
24
|
+
def bit_field(value_list = nil, &block)
|
25
|
+
child(:bit_field, value_list, &block)
|
26
|
+
end
|
27
|
+
end
|
19
28
|
|
20
|
-
|
21
|
-
|
29
|
+
module BitField
|
30
|
+
def self.extended(object)
|
31
|
+
object.singleton_exec { undef_method :child }
|
32
|
+
end
|
22
33
|
end
|
23
|
-
end
|
24
34
|
|
25
|
-
|
26
|
-
|
35
|
+
LAYER_EXTENSIONS = {
|
36
|
+
root: Root, register_block: RegisterBlockRegisterFile,
|
37
|
+
register_file: RegisterBlockRegisterFile, register: Register,
|
38
|
+
bit_field: BitField
|
39
|
+
}.freeze
|
27
40
|
|
28
|
-
def
|
29
|
-
|
41
|
+
def initialize(layer, valid_value_list)
|
42
|
+
extend(LAYER_EXTENSIONS[layer])
|
43
|
+
super
|
30
44
|
end
|
31
45
|
end
|
32
46
|
end
|
@@ -8,13 +8,15 @@ module RgGen
|
|
8
8
|
code_block
|
9
9
|
end
|
10
10
|
|
11
|
-
|
11
|
+
module_function
|
12
12
|
|
13
13
|
def newline
|
14
14
|
"\n"
|
15
15
|
end
|
16
16
|
|
17
|
-
|
17
|
+
def nl
|
18
|
+
newline
|
19
|
+
end
|
18
20
|
|
19
21
|
def comma
|
20
22
|
','
|
@@ -36,6 +38,10 @@ module RgGen
|
|
36
38
|
"\"#{expression}\""
|
37
39
|
end
|
38
40
|
|
41
|
+
def array_name(name, size)
|
42
|
+
[name, *size&.map { |s| "[#{s}]" }].join
|
43
|
+
end
|
44
|
+
|
39
45
|
def code_block(indent = 0, &body)
|
40
46
|
CodeBlock.new(indent, &body)
|
41
47
|
end
|
@@ -4,14 +4,41 @@ module RgGen
|
|
4
4
|
module Core
|
5
5
|
module Utility
|
6
6
|
module ErrorUtility
|
7
|
-
|
7
|
+
class MessageComposer
|
8
|
+
def compose(error, verbose, backtrace)
|
9
|
+
lines = []
|
10
|
+
add_basic_info(error, lines)
|
11
|
+
add_verbose_info(error, lines) if verbose
|
12
|
+
add_backtrace(error, lines) if backtrace
|
13
|
+
lines.join("\n")
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def add_basic_info(error, lines)
|
19
|
+
lines << "[#{error.class.lastname}] #{error}"
|
20
|
+
end
|
21
|
+
|
22
|
+
def add_verbose_info(error, lines)
|
23
|
+
return unless error.respond_to?(:verbose_info)
|
24
|
+
return unless error.verbose_info
|
25
|
+
|
26
|
+
lines << 'verbose information:'
|
27
|
+
error
|
28
|
+
.verbose_info.lines(chomp: true)
|
29
|
+
.each { |info| lines << " #{info}" }
|
30
|
+
end
|
8
31
|
|
9
|
-
|
10
|
-
|
11
|
-
lines << "[#{error.class.lastname}] #{error.message}"
|
12
|
-
verbose &&
|
32
|
+
def add_backtrace(error, lines)
|
33
|
+
lines << 'backtrace:'
|
13
34
|
error.backtrace.each { |trace| lines << " #{trace}" }
|
14
|
-
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
module_function
|
39
|
+
|
40
|
+
def compose_error_message(error, verbose, backtrace)
|
41
|
+
MessageComposer.new.compose(error, verbose, backtrace)
|
15
42
|
end
|
16
43
|
end
|
17
44
|
end
|
data/lib/rggen/core/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rggen-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.23.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Taichi Ishitani
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: docile
|
@@ -81,23 +81,24 @@ files:
|
|
81
81
|
- lib/rggen/core.rb
|
82
82
|
- lib/rggen/core/base/component.rb
|
83
83
|
- lib/rggen/core/base/component_factory.rb
|
84
|
+
- lib/rggen/core/base/component_layer_extension.rb
|
84
85
|
- lib/rggen/core/base/feature.rb
|
85
86
|
- lib/rggen/core/base/feature_factory.rb
|
86
|
-
- lib/rggen/core/base/
|
87
|
-
- lib/rggen/core/base/hierarchical_feature_accessors.rb
|
87
|
+
- lib/rggen/core/base/feature_layer_extension.rb
|
88
88
|
- lib/rggen/core/base/internal_struct.rb
|
89
89
|
- lib/rggen/core/base/proxy_call.rb
|
90
90
|
- lib/rggen/core/base/shared_context.rb
|
91
91
|
- lib/rggen/core/builder.rb
|
92
92
|
- lib/rggen/core/builder/builder.rb
|
93
|
-
- lib/rggen/core/builder/category.rb
|
94
93
|
- lib/rggen/core/builder/component_entry.rb
|
95
94
|
- lib/rggen/core/builder/component_registry.rb
|
96
95
|
- lib/rggen/core/builder/feature_registry.rb
|
97
96
|
- lib/rggen/core/builder/input_component_registry.rb
|
97
|
+
- lib/rggen/core/builder/layer.rb
|
98
98
|
- lib/rggen/core/builder/list_feature_entry.rb
|
99
|
+
- lib/rggen/core/builder/loader_registry.rb
|
99
100
|
- lib/rggen/core/builder/output_component_registry.rb
|
100
|
-
- lib/rggen/core/builder/
|
101
|
+
- lib/rggen/core/builder/plugin_manager.rb
|
101
102
|
- lib/rggen/core/builder/simple_feature_entry.rb
|
102
103
|
- lib/rggen/core/cli.rb
|
103
104
|
- lib/rggen/core/configuration.rb
|
@@ -107,11 +108,11 @@ files:
|
|
107
108
|
- lib/rggen/core/configuration/feature.rb
|
108
109
|
- lib/rggen/core/configuration/feature_factory.rb
|
109
110
|
- lib/rggen/core/configuration/hash_loader.rb
|
111
|
+
- lib/rggen/core/configuration/input_data.rb
|
110
112
|
- lib/rggen/core/configuration/json_loader.rb
|
111
113
|
- lib/rggen/core/configuration/loader.rb
|
112
114
|
- lib/rggen/core/configuration/ruby_loader.rb
|
113
115
|
- lib/rggen/core/configuration/yaml_loader.rb
|
114
|
-
- lib/rggen/core/core_extensions/casecmp.rb
|
115
116
|
- lib/rggen/core/core_extensions/object.rb
|
116
117
|
- lib/rggen/core/dsl.rb
|
117
118
|
- lib/rggen/core/exceptions.rb
|
@@ -124,6 +125,7 @@ files:
|
|
124
125
|
- lib/rggen/core/input_base/input_data.rb
|
125
126
|
- lib/rggen/core/input_base/input_matcher.rb
|
126
127
|
- lib/rggen/core/input_base/input_value.rb
|
128
|
+
- lib/rggen/core/input_base/input_value_extractor.rb
|
127
129
|
- lib/rggen/core/input_base/json_loader.rb
|
128
130
|
- lib/rggen/core/input_base/loader.rb
|
129
131
|
- lib/rggen/core/input_base/property.rb
|
@@ -177,15 +179,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
177
179
|
requirements:
|
178
180
|
- - ">="
|
179
181
|
- !ruby/object:Gem::Version
|
180
|
-
version: '2.
|
182
|
+
version: '2.4'
|
181
183
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
182
184
|
requirements:
|
183
185
|
- - ">="
|
184
186
|
- !ruby/object:Gem::Version
|
185
187
|
version: '0'
|
186
188
|
requirements: []
|
187
|
-
rubygems_version: 3.
|
189
|
+
rubygems_version: 3.1.2
|
188
190
|
signing_key:
|
189
191
|
specification_version: 4
|
190
|
-
summary: rggen-core-0.
|
192
|
+
summary: rggen-core-0.23.0
|
191
193
|
test_files: []
|