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.
- checksums.yaml +4 -4
- data/exe/rggen +2 -2
- data/lib/rggen/core.rb +7 -4
- 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/feature_registry.rb +6 -9
- data/lib/rggen/core/builder/input_component_registry.rb +43 -10
- data/lib/rggen/core/builder/layer.rb +132 -0
- 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 +3 -3
- data/lib/rggen/core/input_base/input_data.rb +13 -10
- 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 +5 -4
- 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/attribute_setter.rb +4 -0
- 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 +2 -2
- metadata +10 -7
- 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/category.rb +0 -116
- data/lib/rggen/core/builder/plugins.rb +0 -77
@@ -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.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Taichi Ishitani
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-10-24 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,6 +108,7 @@ 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
|
@@ -123,6 +125,7 @@ files:
|
|
123
125
|
- lib/rggen/core/input_base/input_data.rb
|
124
126
|
- lib/rggen/core/input_base/input_matcher.rb
|
125
127
|
- lib/rggen/core/input_base/input_value.rb
|
128
|
+
- lib/rggen/core/input_base/input_value_extractor.rb
|
126
129
|
- lib/rggen/core/input_base/json_loader.rb
|
127
130
|
- lib/rggen/core/input_base/loader.rb
|
128
131
|
- lib/rggen/core/input_base/property.rb
|
@@ -186,5 +189,5 @@ requirements: []
|
|
186
189
|
rubygems_version: 3.1.2
|
187
190
|
signing_key:
|
188
191
|
specification_version: 4
|
189
|
-
summary: rggen-core-0.
|
192
|
+
summary: rggen-core-0.23.1
|
190
193
|
test_files: []
|
@@ -1,91 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RgGen
|
4
|
-
module Core
|
5
|
-
module Base
|
6
|
-
module HierarchicalAccessors
|
7
|
-
module RegisterMap
|
8
|
-
def hierarchy
|
9
|
-
:register_map
|
10
|
-
end
|
11
|
-
|
12
|
-
def register_blocks
|
13
|
-
children
|
14
|
-
end
|
15
|
-
|
16
|
-
def registers
|
17
|
-
register_blocks.flat_map(&:children)
|
18
|
-
end
|
19
|
-
|
20
|
-
def bit_fields
|
21
|
-
registers.flat_map(&:children)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
module RegisterBlock
|
26
|
-
def hierarchy
|
27
|
-
:register_block
|
28
|
-
end
|
29
|
-
|
30
|
-
def register_map
|
31
|
-
parent
|
32
|
-
end
|
33
|
-
|
34
|
-
def registers
|
35
|
-
children
|
36
|
-
end
|
37
|
-
|
38
|
-
def bit_fields
|
39
|
-
registers.flat_map(&:children)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
module Register
|
44
|
-
def hierarchy
|
45
|
-
:register
|
46
|
-
end
|
47
|
-
|
48
|
-
def register_map
|
49
|
-
register_block.parent
|
50
|
-
end
|
51
|
-
|
52
|
-
def register_block
|
53
|
-
parent
|
54
|
-
end
|
55
|
-
|
56
|
-
def bit_fields
|
57
|
-
children
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
module BitField
|
62
|
-
def hierarchy
|
63
|
-
:bit_field
|
64
|
-
end
|
65
|
-
|
66
|
-
def register_map
|
67
|
-
register_block.parent
|
68
|
-
end
|
69
|
-
|
70
|
-
def register_block
|
71
|
-
register.parent
|
72
|
-
end
|
73
|
-
|
74
|
-
def register
|
75
|
-
parent
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
private
|
80
|
-
|
81
|
-
ACCESSOR_EXTENSIONS = [
|
82
|
-
RegisterMap, RegisterBlock, Register, BitField
|
83
|
-
].freeze
|
84
|
-
|
85
|
-
def define_hierarchical_accessors
|
86
|
-
extend ACCESSOR_EXTENSIONS[level]
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|