rggen-core 0.18.0 → 0.23.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|