tecscde 0.6.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.
Files changed (237) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rubocop.yml +125 -0
  4. data/.rubocop_todo.yml +188 -0
  5. data/CHANGELOG.md +3 -0
  6. data/Gemfile +6 -0
  7. data/LICENSE +46 -0
  8. data/LICENSE.ja +32 -0
  9. data/README.ja.md +200 -0
  10. data/README.md +35 -0
  11. data/Rakefile +27 -0
  12. data/bin/tecscde +64 -0
  13. data/glade/tecscde-cell-property.glade +205 -0
  14. data/glade/tecscde-celltype-property.glade +172 -0
  15. data/glade/tecscde-celltype.glade +414 -0
  16. data/glade/tecscde-export.glade +161 -0
  17. data/glade/test-cell-plugin.rb +51 -0
  18. data/glade/test-cell-property.rb +35 -0
  19. data/glade/test-export.rb +35 -0
  20. data/glade/test-palette.rb +26 -0
  21. data/lib/tcflow.rb +148 -0
  22. data/lib/tecscde.rb +65 -0
  23. data/lib/tecscde/NewCell.png +0 -0
  24. data/lib/tecscde/SelectArrow.png +0 -0
  25. data/lib/tecscde/attr_tree_view.rb +253 -0
  26. data/lib/tecscde/cell_plugin_dialog.glade +294 -0
  27. data/lib/tecscde/cell_plugin_dialog.rb +89 -0
  28. data/lib/tecscde/celltype_tree_view.rb +105 -0
  29. data/lib/tecscde/change_set_control.rb +35 -0
  30. data/lib/tecscde/change_set_control/change_set.rb +32 -0
  31. data/lib/tecscde/change_set_control/change_set_manager.rb +62 -0
  32. data/lib/tecscde/command.rb +35 -0
  33. data/lib/tecscde/control.rb +491 -0
  34. data/lib/tecscde/highlighted_objects.rb +180 -0
  35. data/lib/tecscde/logger.rb +74 -0
  36. data/lib/tecscde/main_view_and_model.rb +80 -0
  37. data/lib/tecscde/palette.glade +553 -0
  38. data/lib/tecscde/palette.rb +174 -0
  39. data/lib/tecscde/preferences.glade +117 -0
  40. data/lib/tecscde/preferences.rb +44 -0
  41. data/lib/tecscde/tecs_model.rb +1137 -0
  42. data/lib/tecscde/tecs_model/hbar.rb +68 -0
  43. data/lib/tecscde/tecs_model/tm_c_port.rb +122 -0
  44. data/lib/tecscde/tecs_model/tm_c_port_array.rb +98 -0
  45. data/lib/tecscde/tecs_model/tm_cell.rb +496 -0
  46. data/lib/tecscde/tecs_model/tm_e_port.rb +126 -0
  47. data/lib/tecscde/tecs_model/tm_e_port_array.rb +78 -0
  48. data/lib/tecscde/tecs_model/tm_join.rb +293 -0
  49. data/lib/tecscde/tecs_model/tm_join_bar.rb +146 -0
  50. data/lib/tecscde/tecs_model/tm_port.rb +238 -0
  51. data/lib/tecscde/tecs_model/tm_port_array.rb +246 -0
  52. data/lib/tecscde/tecs_model/tm_region.rb +107 -0
  53. data/lib/tecscde/tecs_model/tm_uneditable.rb +68 -0
  54. data/lib/tecscde/tecs_model/vbar.rb +68 -0
  55. data/lib/tecscde/templates/_cell_info.cde.erb +15 -0
  56. data/lib/tecscde/templates/_join_info.cde.erb +28 -0
  57. data/lib/tecscde/templates/main.cde.erb +49 -0
  58. data/lib/tecscde/tm_object.rb +91 -0
  59. data/lib/tecscde/version.rb +4 -0
  60. data/lib/tecscde/view.rb +58 -0
  61. data/lib/tecscde/view/cairo_matrix.rb +90 -0
  62. data/lib/tecscde/view/canvas.rb +59 -0
  63. data/lib/tecscde/view/constants.rb +114 -0
  64. data/lib/tecscde/view/main_view.rb +1245 -0
  65. data/lib/tecsflow.rb +475 -0
  66. data/lib/tecsflow/C_parser.tab.rb +2471 -0
  67. data/lib/tecsflow/C_parser.y.rb +1087 -0
  68. data/lib/tecsflow/classes.rb +421 -0
  69. data/lib/tecsgen.rb +581 -0
  70. data/lib/tecsgen/core/C_parser.tab.rb +2477 -0
  71. data/lib/tecsgen/core/C_parser.y +1032 -0
  72. data/lib/tecsgen/core/bnf-deb.tab.rb +5193 -0
  73. data/lib/tecsgen/core/bnf.tab.rb +5193 -0
  74. data/lib/tecsgen/core/bnf.y +2211 -0
  75. data/lib/tecsgen/core/componentobj.rb +7901 -0
  76. data/lib/tecsgen/core/ctypes.rb +226 -0
  77. data/lib/tecsgen/core/expression.rb +1031 -0
  78. data/lib/tecsgen/core/gen_xml.rb +374 -0
  79. data/lib/tecsgen/core/generate.rb +5206 -0
  80. data/lib/tecsgen/core/location.rb +116 -0
  81. data/lib/tecsgen/core/messages.rb +101 -0
  82. data/lib/tecsgen/core/optimize.rb +456 -0
  83. data/lib/tecsgen/core/plugin.rb +332 -0
  84. data/lib/tecsgen/core/pluginModule.rb +165 -0
  85. data/lib/tecsgen/core/syntaxobj.rb +1234 -0
  86. data/lib/tecsgen/core/tecs_lang.rb +306 -0
  87. data/lib/tecsgen/core/tecsgen.rb +453 -0
  88. data/lib/tecsgen/core/tecsinfo.rb +860 -0
  89. data/lib/tecsgen/core/tool_info.rb +258 -0
  90. data/lib/tecsgen/core/types.rb +1632 -0
  91. data/lib/tecsgen/core/unjoin_plugin.rb +218 -0
  92. data/lib/tecsgen/core/value.rb +650 -0
  93. data/lib/tecsgen/messages/messages_console_en_US.rb +1171 -0
  94. data/lib/tecsgen/messages/messages_console_ja_JP.rb +1171 -0
  95. data/lib/tecsgen/messages/messages_file_en_US.rb +334 -0
  96. data/lib/tecsgen/messages/messages_file_ja_JP.rb +163 -0
  97. data/lib/tecsgen/plugin/ATK1AlarmPlugin.rb +196 -0
  98. data/lib/tecsgen/plugin/ATK1DelayTaskPlugin.rb +106 -0
  99. data/lib/tecsgen/plugin/ATK1EventPlugin.rb +147 -0
  100. data/lib/tecsgen/plugin/ATK1ISRPlugin.rb +174 -0
  101. data/lib/tecsgen/plugin/ATK1KernelPlugin.rb +287 -0
  102. data/lib/tecsgen/plugin/ATK1ResourcePlugin.rb +124 -0
  103. data/lib/tecsgen/plugin/ATK1TaskPlugin.rb +220 -0
  104. data/lib/tecsgen/plugin/C2TECSBridgePlugin.rb +210 -0
  105. data/lib/tecsgen/plugin/CellPlugin.rb +61 -0
  106. data/lib/tecsgen/plugin/CelltypePlugin.rb +72 -0
  107. data/lib/tecsgen/plugin/CompositePlugin.rb +66 -0
  108. data/lib/tecsgen/plugin/DomainPlugin.rb +89 -0
  109. data/lib/tecsgen/plugin/HRP2AlarmHandlerPlugin.rb +76 -0
  110. data/lib/tecsgen/plugin/HRP2Cache.rb +1 -0
  111. data/lib/tecsgen/plugin/HRP2CyclicHandlerPlugin.rb +75 -0
  112. data/lib/tecsgen/plugin/HRP2DataqueuePlugin.rb +68 -0
  113. data/lib/tecsgen/plugin/HRP2EventflagPlugin.rb +68 -0
  114. data/lib/tecsgen/plugin/HRP2FixedSizeMemoryPoolPlugin.rb +68 -0
  115. data/lib/tecsgen/plugin/HRP2HandlerPlugin.rb +117 -0
  116. data/lib/tecsgen/plugin/HRP2KernelObjectPlugin.rb +372 -0
  117. data/lib/tecsgen/plugin/HRP2ObjectPlugin.rb +94 -0
  118. data/lib/tecsgen/plugin/HRP2Plugin.rb +140 -0
  119. data/lib/tecsgen/plugin/HRP2PostHook.rb +111 -0
  120. data/lib/tecsgen/plugin/HRP2PriorityDataqueuePlugin.rb +66 -0
  121. data/lib/tecsgen/plugin/HRP2RPCPlugin.rb +319 -0
  122. data/lib/tecsgen/plugin/HRP2SVCPlugin.rb +473 -0
  123. data/lib/tecsgen/plugin/HRP2SemaphorePlugin.rb +67 -0
  124. data/lib/tecsgen/plugin/HRP2TaskPlugin.rb +200 -0
  125. data/lib/tecsgen/plugin/HRPHandlerPlugin.rb +125 -0
  126. data/lib/tecsgen/plugin/HRPKernelObjectManager.rb +72 -0
  127. data/lib/tecsgen/plugin/HRPKernelObjectPlugin.rb +333 -0
  128. data/lib/tecsgen/plugin/HRPObjectPlugin.rb +93 -0
  129. data/lib/tecsgen/plugin/HRPPlugin.rb +356 -0
  130. data/lib/tecsgen/plugin/HRPRPCPlugin.rb +407 -0
  131. data/lib/tecsgen/plugin/HRPSVCPlugin.rb +859 -0
  132. data/lib/tecsgen/plugin/HRPTaskPlugin.rb +107 -0
  133. data/lib/tecsgen/plugin/Mruby2CBridgePlugin.rb +86 -0
  134. data/lib/tecsgen/plugin/MrubyBridgeCellPlugin.rb +264 -0
  135. data/lib/tecsgen/plugin/MrubyBridgeCelltypePlugin.rb +293 -0
  136. data/lib/tecsgen/plugin/MrubyBridgeCompositePlugin.rb +49 -0
  137. data/lib/tecsgen/plugin/MrubyBridgePlugin.rb +67 -0
  138. data/lib/tecsgen/plugin/MrubyBridgeSignaturePlugin.rb +1307 -0
  139. data/lib/tecsgen/plugin/MrubyInfoBridgePlugin.rb +14 -0
  140. data/lib/tecsgen/plugin/MrubyInfoBridgeSignaturePlugin.rb +994 -0
  141. data/lib/tecsgen/plugin/MultiPlugin.rb +57 -0
  142. data/lib/tecsgen/plugin/NotifierPlugin.rb +1217 -0
  143. data/lib/tecsgen/plugin/OpaqueMarshalerPlugin.rb +81 -0
  144. data/lib/tecsgen/plugin/OpaqueRPCPlugin.rb +323 -0
  145. data/lib/tecsgen/plugin/RPCPlugin.rb +266 -0
  146. data/lib/tecsgen/plugin/RepeatCellPlugin.rb +166 -0
  147. data/lib/tecsgen/plugin/RepeatJoinPlugin.rb +130 -0
  148. data/lib/tecsgen/plugin/SharedOpaqueRPCPlugin.rb +357 -0
  149. data/lib/tecsgen/plugin/SharedRPCPlugin.rb +329 -0
  150. data/lib/tecsgen/plugin/SignaturePlugin.rb +77 -0
  151. data/lib/tecsgen/plugin/TECS2CBridgePlugin.rb +178 -0
  152. data/lib/tecsgen/plugin/TECSInfoPlugin.rb +280 -0
  153. data/lib/tecsgen/plugin/ThroughPlugin.rb +333 -0
  154. data/lib/tecsgen/plugin/TracePlugin.rb +484 -0
  155. data/lib/tecsgen/plugin/lib/GenHRP2Marshaler.rb +761 -0
  156. data/lib/tecsgen/plugin/lib/GenOpaqueMarshaler.rb +1107 -0
  157. data/lib/tecsgen/plugin/lib/GenParamCopy.rb +365 -0
  158. data/lib/tecsgen/plugin/lib/GenTransparentMarshaler.rb +683 -0
  159. data/lib/tecsgen/plugin/lib/MrubyBridgeCelltypePluginModule.rb +283 -0
  160. data/lib/tecsgen/plugin/lib/MrubyBridgeSignaturePluginModule.rb +277 -0
  161. data/lib/tecsgen/version.rb +6 -0
  162. data/samples/FigureSamples/active/active.cde +104 -0
  163. data/samples/FigureSamples/active/active.cdl +20 -0
  164. data/samples/FigureSamples/active/active.pdf +0 -0
  165. data/samples/FigureSamples/active/active.png +0 -0
  166. data/samples/FigureSamples/active/gen/tmp_C_src.c +36 -0
  167. data/samples/FigureSamples/active/gen/tmp_cygwin_tecs.h +1908 -0
  168. data/samples/FigureSamples/active/gen/tmp_plugin_post_code.cdl +0 -0
  169. data/samples/FigureSamples/allocator/allocator-internal.png +0 -0
  170. data/samples/FigureSamples/allocator/allocator.cde +171 -0
  171. data/samples/FigureSamples/allocator/allocator.cdl +58 -0
  172. data/samples/FigureSamples/allocator/allocator.png +0 -0
  173. data/samples/FigureSamples/basic/Makefile +87 -0
  174. data/samples/FigureSamples/basic/SimpleSample-trace.cdl +50 -0
  175. data/samples/FigureSamples/basic/SimpleSample.cde +91 -0
  176. data/samples/FigureSamples/basic/SimpleSample.cdl +47 -0
  177. data/samples/FigureSamples/basic/basic.cde +93 -0
  178. data/samples/FigureSamples/basic/basic.cdl +46 -0
  179. data/samples/FigureSamples/basic/basic.png +0 -0
  180. data/samples/FigureSamples/callback/callback.cde +130 -0
  181. data/samples/FigureSamples/callback/callback.cdl +29 -0
  182. data/samples/FigureSamples/callback/callback.png +0 -0
  183. data/samples/FigureSamples/carray/carray.cde +144 -0
  184. data/samples/FigureSamples/carray/carray.cdl +38 -0
  185. data/samples/FigureSamples/carray/carray.png +0 -0
  186. data/samples/FigureSamples/cearray/cearray.cde +314 -0
  187. data/samples/FigureSamples/cearray/cearray.cdl +60 -0
  188. data/samples/FigureSamples/cearray/cearray.png +0 -0
  189. data/samples/FigureSamples/composite/composite-internal.png +0 -0
  190. data/samples/FigureSamples/composite/composite.cde +216 -0
  191. data/samples/FigureSamples/composite/composite.cdl +95 -0
  192. data/samples/FigureSamples/composite/composite.png +0 -0
  193. data/samples/FigureSamples/earray/earray.cde +142 -0
  194. data/samples/FigureSamples/earray/earray.cdl +38 -0
  195. data/samples/FigureSamples/earray/earray.png +0 -0
  196. data/samples/FigureSamples/join/Makefile +87 -0
  197. data/samples/FigureSamples/join/join.cde +132 -0
  198. data/samples/FigureSamples/join/join.cdl +40 -0
  199. data/samples/FigureSamples/join/join.png +0 -0
  200. data/samples/FigureSamples/relay/Makefile +99 -0
  201. data/samples/FigureSamples/relay/relay-internal.png +0 -0
  202. data/samples/FigureSamples/relay/relay.cde +284 -0
  203. data/samples/FigureSamples/relay/relay.cdl +52 -0
  204. data/samples/FigureSamples/relay/relay.png +0 -0
  205. data/samples/FigureSamples/rpc/Makefile +123 -0
  206. data/samples/FigureSamples/rpc/rpc-expand.png +0 -0
  207. data/samples/FigureSamples/rpc/rpc.cde +245 -0
  208. data/samples/FigureSamples/rpc/rpc.png +0 -0
  209. data/samples/FigureSamples/rpc/rpc_sample.cdl +53 -0
  210. data/samples/SimpleSample/Makefile +25 -0
  211. data/samples/SimpleSample/SimpleSample/Makefile +86 -0
  212. data/samples/SimpleSample/SimpleSample/Makefile-trace +91 -0
  213. data/samples/SimpleSample/SimpleSample/README.txt +106 -0
  214. data/samples/SimpleSample/SimpleSample/SimpleSample-trace.cdl +50 -0
  215. data/samples/SimpleSample/SimpleSample/SimpleSample.cdl +45 -0
  216. data/samples/SimpleSample/SimpleSample/src/tSample.c +77 -0
  217. data/samples/SimpleSample/SimpleSample/src/tSimple.c +48 -0
  218. data/samples/SimpleSample/SimpleSample/src/tecs-types.h +27 -0
  219. data/samples/SimpleSample/SimpleSampleOpaqueRPC/Makefile +51 -0
  220. data/samples/SimpleSample/SimpleSampleOpaqueRPC/Makefile-trace +91 -0
  221. data/samples/SimpleSample/SimpleSampleOpaqueRPC/README.txt +106 -0
  222. data/samples/SimpleSample/SimpleSampleOpaqueRPC/SimpleSample-trace.cdl +80 -0
  223. data/samples/SimpleSample/SimpleSampleOpaqueRPC/SimpleSample.cdl +77 -0
  224. data/samples/SimpleSample/SimpleSampleOpaqueRPC/rSample/Makefile +112 -0
  225. data/samples/SimpleSample/SimpleSampleOpaqueRPC/rSimple/Makefile +109 -0
  226. data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tSample.c +80 -0
  227. data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tSimple.c +47 -0
  228. data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tTaskMain.c +66 -0
  229. data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tecs-types.h +27 -0
  230. data/samples/SimpleSample/SimpleSampleTransparentRPC/Makefile +125 -0
  231. data/samples/SimpleSample/SimpleSampleTransparentRPC/Makefile-trace +130 -0
  232. data/samples/SimpleSample/SimpleSampleTransparentRPC/SimpleSample-trace.cdl +54 -0
  233. data/samples/SimpleSample/SimpleSampleTransparentRPC/SimpleSample.cdl +53 -0
  234. data/samples/SimpleSample/SimpleSampleTransparentRPC/src/tSample.c +80 -0
  235. data/samples/SimpleSample/SimpleSampleTransparentRPC/src/tSimple.c +54 -0
  236. data/tecscde.gemspec +41 -0
  237. metadata +353 -0
@@ -0,0 +1,116 @@
1
+ #
2
+ # TECS Generator
3
+ # Generator for TOPPERS Embedded Component System
4
+ #
5
+ # Copyright (C) 2008-2017 by TOPPERS Project
6
+ #--
7
+ # 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
8
+ # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
9
+ # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
10
+ # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
11
+ # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
12
+ # スコード中に含まれていること.
13
+ # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
14
+ # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
15
+ # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
16
+ # の無保証規定を掲載すること.
17
+ # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
18
+ # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
19
+ # と.
20
+ # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
21
+ # 作権表示,この利用条件および下記の無保証規定を掲載すること.
22
+ # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
23
+ # 報告すること.
24
+ # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
25
+ # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
26
+ # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
27
+ # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
28
+ # 免責すること.
29
+ #
30
+ # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
31
+ # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
32
+ # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
33
+ # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
34
+ # の責任を負わない.
35
+ #
36
+ # $Id: location.rb 2640 2017-06-03 11:27:12Z okuma-top $
37
+ #++
38
+
39
+ class TECSGEN
40
+ #------ manupulate location information --------#
41
+ def self.new_cell_location(cell_location)
42
+ @@current_tecsgen.new_cell_location cell_location
43
+ end
44
+
45
+ def new_cell_location(cell_location)
46
+ @cell_location_list << cell_location
47
+ end
48
+
49
+ def get_cell_location_list
50
+ @cell_location_list
51
+ end
52
+
53
+ def self.new_join_location(join_location)
54
+ @@current_tecsgen.new_join_location join_location
55
+ end
56
+
57
+ def new_join_location(join_location)
58
+ @join_location_list << join_location
59
+ end
60
+
61
+ def get_join_location_list
62
+ @join_location_list
63
+ end
64
+
65
+ #== Cell_location
66
+ # tecscde の位置情報
67
+ class Cell_location
68
+ #=== Join_location#initialize
69
+ # cell_nspath::NamespacePath
70
+ # x,y,w,h::Expression
71
+ # port_location_list::[ [Symbol(ep_or_cp_name), Symbol(edge_name), Expression(offset)], ... ]
72
+ # ep_name::Symbol
73
+ def initialize(cell_nspath, x, y, w, h, port_location_list)
74
+ # p "Cell_location: #{cell_nspath}, #{x}, #{y}, #{w}, #{h}, #{port_location_list}"
75
+ @cell_nspath = cell_nspath
76
+ @x = x.eval_const nil
77
+ @y = y.eval_const nil
78
+ @w = w.eval_const nil
79
+ @h = h.eval_const nil
80
+ @port_location_list = port_location_list
81
+
82
+ TECSGEN.new_cell_location self
83
+ end
84
+
85
+ def get_location
86
+ [@cell_nspath, @x, @y, @w, @h, @port_location_list]
87
+ end
88
+ end # Cell_location
89
+
90
+ #== Join_location
91
+ # tecscde の位置情報
92
+ class Join_location
93
+ @@join_location_list = []
94
+
95
+ #=== Join_location#initialize
96
+ # cp_cell_nspath::NamespacePath
97
+ # cp_name::Symbol
98
+ # ep_cell_nspath::NamespacePath
99
+ # ep_name::Symbol
100
+ # bar_list::[[Symbol (VBar or HBar), Expression(position mm)], ....]
101
+ def initialize(cp_cell_nspath, cp_name, ep_cell_path, ep_name, bar_list)
102
+ # p "Join_location #{cp_cell_nspath}, #{cp_name}, #{ep_cell_path}, #{ep_name} #{bar_list}"
103
+ @cp_cell_nspath = cp_cell_nspath
104
+ @cp_name = cp_name
105
+ @ep_cell_path = ep_cell_path
106
+ @ep_name = ep_name
107
+ @bar_list = bar_list
108
+
109
+ TECSGEN.new_join_location self
110
+ end
111
+
112
+ def get_location
113
+ [@cp_cell_nspath, @cp_name, @ep_cell_path, @ep_name, @bar_list]
114
+ end
115
+ end # Join_location
116
+ end # TECSGEN
@@ -0,0 +1,101 @@
1
+ #
2
+ # TECS Generator
3
+ # Generator for TOPPERS Embedded Component System
4
+ #
5
+ # Copyright (C) 2008-2017 by TOPPERS Project
6
+ #--
7
+ # 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
8
+ # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
9
+ # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
10
+ # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
11
+ # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
12
+ # スコード中に含まれていること.
13
+ # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
14
+ # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
15
+ # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
16
+ # の無保証規定を掲載すること.
17
+ # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
18
+ # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
19
+ # と.
20
+ # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
21
+ # 作権表示,この利用条件および下記の無保証規定を掲載すること.
22
+ # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
23
+ # 報告すること.
24
+ # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
25
+ # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
26
+ # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
27
+ # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
28
+ # 免責すること.
29
+ #
30
+ # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
31
+ # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
32
+ # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
33
+ # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
34
+ # の責任を負わない.
35
+ #
36
+ # $Id: messages.rb 2633 2017-04-02 06:02:05Z okuma-top $
37
+ #++
38
+
39
+ #== TECS の生成する各国語化必要な文字列
40
+ # 現状、エラーメッセージは英語のみ
41
+ # 生成ファイルのコメントとして出力される文字列
42
+ class TECSMsg
43
+ #=== TECSMsg#生成するヘッダやテンプレートなどに含めるコメントの取得
44
+ # CDL の文字コードに合わせて、文字コード変換を行う
45
+ def self.get(msg)
46
+ str = @@comment[msg]
47
+ if $ENCODING_TECSGEN == $ENCODING_CDL || $ENCODING_CDL == Encoding::BINARY
48
+ return str
49
+ else
50
+ return str.encode($ENCODING_CDL)
51
+ end
52
+ end
53
+
54
+ #=== TECSMsg#ローカライズされたエラーメッセージを得る
55
+ # body::String : "S0001 error message body" の形式
56
+ # S0001 の部分が使用される
57
+ # Generator.error2 から呼び出される
58
+ def self.get_error_message(body)
59
+ body =~ /^[A-Z0-9]+/ # エラー番号を取り出す
60
+ num = $&
61
+ if num
62
+ msg = @@error_message[num.to_sym]
63
+ else
64
+ msg = nil
65
+ end
66
+ if msg.nil?
67
+ m = body
68
+ else
69
+ m = num + " " + msg
70
+ end
71
+ return m
72
+ end
73
+
74
+ #=== TECSMsg#ローカライズされたウォーニングメッセージを得る
75
+ # Generator.warning2 から呼び出される
76
+ def self.get_warning_message(body)
77
+ body =~ /^[A-Z0-9]+/ # ウォーニング番号を取り出す
78
+ num = $&
79
+ msg = @@warning_message[num.to_sym]
80
+ if msg.nil?
81
+ m = body
82
+ else
83
+ m = num + " " + msg
84
+ end
85
+ return m
86
+ end
87
+
88
+ #=== TECSMsg#ローカライズされた情報メッセージを得る
89
+ # Generator.info2 から呼び出される
90
+ def self.get_info_message(body)
91
+ body =~ /^[A-Z0-9]+/ # 情報番号を取り出す
92
+ num = $&
93
+ msg = @@info_message[num.to_sym]
94
+ if msg.nil?
95
+ m = body
96
+ else
97
+ m = num + " " + msg
98
+ end
99
+ return m
100
+ end
101
+ end
@@ -0,0 +1,456 @@
1
+ #
2
+ # TECS Generator
3
+ # Generator for TOPPERS Embedded Component System
4
+ #
5
+ # Copyright (C) 2008-2018 by TOPPERS Project
6
+ #--
7
+ # 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
8
+ # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
9
+ # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
10
+ # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
11
+ # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
12
+ # スコード中に含まれていること.
13
+ # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
14
+ # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
15
+ # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
16
+ # の無保証規定を掲載すること.
17
+ # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
18
+ # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
19
+ # と.
20
+ # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
21
+ # 作権表示,この利用条件および下記の無保証規定を掲載すること.
22
+ # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
23
+ # 報告すること.
24
+ # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
25
+ # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
26
+ # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
27
+ # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
28
+ # 免責すること.
29
+ #
30
+ # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
31
+ # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
32
+ # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
33
+ # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
34
+ # の責任を負わない.
35
+ #
36
+ # $Id: optimize.rb 2831 2018-03-18 06:16:30Z okuma-top $
37
+ #++
38
+
39
+ =begin
40
+ This file includes the processes between semantics analysis and code generation.
41
+ Optimize is one of them.
42
+ Other processes are setting ID for each cell and setting domain information
43
+
44
+ このファイルには、意味解析からコード生成の間で行うべき処理が含まれる.
45
+ 最適化もその一つである.
46
+ その他に、セル毎の ID 付け、ドメインわけを行う.
47
+ コード生成対象となるセルを対象に処理を行うものが含まれる.
48
+ =end
49
+
50
+ class Namespace
51
+ #=== 各セルに ID (整数値)を割付ける
52
+ def set_cell_id_and_domain
53
+ # celltype の各セルに ID を割付ける
54
+ @celltype_list.each {|t|
55
+ t.set_cell_id_and_domain
56
+ }
57
+
58
+ # サブネームスペースの各セルに ID を割付ける
59
+ @namespace_list.each {|n|
60
+ n.set_cell_id_and_domain
61
+ }
62
+ end
63
+
64
+ def optimize
65
+ # celltype の最適化
66
+ @celltype_list.each {|t|
67
+ t.optimize
68
+ }
69
+
70
+ # サブネームスペースの最適化
71
+ @namespace_list.each {|n|
72
+ n.optimize
73
+ }
74
+ end
75
+
76
+ def reset_optimize
77
+ # celltype の最適化
78
+ @celltype_list.each {|t|
79
+ t.reset_optimize
80
+ }
81
+
82
+ # サブネームスペースの最適化
83
+ @namespace_list.each {|n|
84
+ n.reset_optimize
85
+ }
86
+ end
87
+ end
88
+
89
+ class Celltype
90
+ ID_BASE = 1 # reset_optimize でリセットする
91
+ @@ID_BASE = ID_BASE
92
+
93
+ def set_cell_id_and_domain
94
+ set_cell_id
95
+ set_domain
96
+ end
97
+
98
+ #=== 各セルに ID (整数値)を割付ける
99
+ def set_cell_id
100
+ if $verbose
101
+ print("=== id for the cells of celltype #{get_namespace_path} ===\n")
102
+ end
103
+
104
+ if $unique_id
105
+ @id_base = @@ID_BASE # id をシステム全体で連番にする
106
+ else
107
+ @id_base = 1 # base を常に 1 から始める
108
+ end
109
+
110
+ id_specified_cells = []
111
+ no_id_specified_cells = []
112
+
113
+ # プロトタイプを除いた数を求める
114
+ @cell_list.each{|c|
115
+ if c.is_generate?
116
+ # c.set_id( @id_base + @n_cell_gen )
117
+ id = c.get_specified_id
118
+ if id
119
+ id_specified_cells << c
120
+ else
121
+ no_id_specified_cells << c
122
+ end
123
+
124
+ # p "#{c.get_name} #{@id_base+@n_cell_gen}"
125
+ @@ID_BASE += 1
126
+ @n_cell_gen += 1
127
+ end
128
+ }
129
+
130
+ @ordered_cell_list = [] # id = 1 が添数 0 に格納される
131
+ # ID 指定されているセルに id 番号を与える
132
+ id_specified_cells.each{|c|
133
+ id = c.get_specified_id
134
+ if id > 0
135
+ if id >= @n_cell_gen
136
+ cdl_error("S3001 $1: id too large $2 (max=$3)", c.get_name, id, @n_cell_gen)
137
+ next
138
+ end
139
+ else
140
+ if - id >= @n_cell_gen
141
+ cdl_error("S3002 $1: id too large $2 (max=$3)", c.get_name, id, @n_cell_gen)
142
+ next
143
+ end
144
+ id = @n_cell_gen + id + 1
145
+ end
146
+
147
+ if @ordered_cell_list[id - 1]
148
+ cdl_error("S3003 $1: id number '$2' conflict with $3", c.get_name, id, @ordered_cell_list[id - 1].get_name)
149
+ end
150
+ @ordered_cell_list[id - 1] = c
151
+ # 通し番号とする場合のため @id_base を加える
152
+ c.set_id(@id_base - 1 + id)
153
+ if $verbose
154
+ print("#{c.get_name}: id=#{c.get_id} specified id=#{c.get_specified_id}\n")
155
+ end
156
+ }
157
+
158
+ # ID 指定されていないセルに id 番号を与える
159
+ i = 0
160
+ no_id_specified_cells.each{|c|
161
+ while !@ordered_cell_list[i].nil?
162
+ i += 1
163
+ end
164
+ @ordered_cell_list[i] = c
165
+ c.set_id(@id_base + i)
166
+ if $verbose
167
+ print("#{c.get_name}: id=#{c.get_id}\n")
168
+ end
169
+ }
170
+ if @n_cell_gen > 0 && i >= @n_cell_gen
171
+ raise "id over id=#{i} N=#{@n_cell_gen}"
172
+ end
173
+ end
174
+
175
+ def set_domain
176
+ domain_cells = {}
177
+ @cell_list.each{|c|
178
+ if c.is_generate?
179
+ dr = c.get_region.get_domain_root
180
+ if dr.get_domain_type
181
+ dn = dr.get_domain_type.get_name
182
+ else
183
+ dn = nil
184
+ end
185
+ if @domain_roots[dn]
186
+ @domain_roots[dn] << dr
187
+ else
188
+ @domain_roots[dn] = [dr]
189
+ end
190
+ if domain_cells[dr]
191
+ domain_cells[dr] << c
192
+ else
193
+ domain_cells[dr] = [c]
194
+ end
195
+ end
196
+ }
197
+
198
+ @domain_roots.each{|dn, drs|
199
+ drs.uniq!
200
+ if $verbose && dn
201
+ print "[domain] celltype=#{@name} domainType=#{dn} domainRootRegions={"
202
+ delim = ""
203
+ drs.each{|r|
204
+ print delim, r.get_name
205
+ delim = ", "
206
+ }
207
+ print "}\n"
208
+ drs.each{|r|
209
+ print "[domain] celltype=#{@name} domainRootRegion=#{r.get_name} domainType=#{dn} domainKind=#{r.get_domain_root.get_domain_type.get_kind} domainCells={"
210
+ delim = ""
211
+ domain_cells[r].each{|c|
212
+ print delim, c.get_name
213
+ delim = ", "
214
+ }
215
+ print "}\n"
216
+ }
217
+ end
218
+ }
219
+ if @domain_roots.length > 1
220
+ p @domain_roots
221
+ raise "ambigous DomainType"
222
+ end
223
+
224
+ @domain_roots.each{|dn, regions|
225
+ # domain_type は一つのノードに一つしかないので、一つの要素を無条件で取り出す
226
+ if regions.length > 1
227
+ cdl_info("I9999 celltype '$1' has cells in multi-domain.\n", @name)
228
+ if @idx_is_id == false
229
+ cdl_info("I9999 celltype '$1' forcely set idx_is_id\n", @name)
230
+ end
231
+ @idx_is_id_act = true
232
+ end
233
+ }
234
+ end
235
+
236
+ def optimize
237
+ # port の参照するセルタイプの数、セルの数を求める
238
+ if $verbose
239
+ print "=== optimizing celltype #{get_namespace_path} ===\n"
240
+ end
241
+
242
+ optimize_call
243
+ if $unopt_entry == false
244
+ optimize_entry
245
+ end
246
+ end
247
+
248
+ #=== Celltype#呼び口最適化
249
+ def optimize_call
250
+ @port.each{|port|
251
+ next if port.get_port_type != :CALL
252
+ if port.is_omit?
253
+ # 呼び口最適化実施
254
+ @b_cp_optimized = true
255
+ @n_call_port_omitted_in_CB += 1 # CB で省略する呼び口
256
+ port.set_skelton_useless # スケルトン関数不要最適化
257
+ port.set_VMT_useless # VMT 不要最適化 (直接受け口関数を呼出す)
258
+ if $verbose
259
+ print "optimized by omit: port: #{port.get_name} : o\n"
260
+ end
261
+ next
262
+ elsif port.is_dynamic?
263
+ if $verbose
264
+ print "unoptimized by dynamic: port: #{port.get_name}\n"
265
+ end
266
+ next
267
+ elsif port.is_ref_desc?
268
+ if $verbose
269
+ print "unoptimized by ref_desc: port: #{port.get_name}\n"
270
+ end
271
+ next
272
+ end
273
+
274
+ if $verbose
275
+ print "optimizing port : #{port.get_name}\n"
276
+ end
277
+
278
+ port_cells = [] # 呼び先セル
279
+ port_ports = [] # 呼び先のポート
280
+
281
+ # セルの参照するセルを集める(ポートも一緒に集める)
282
+ @cell_list.each{|cell|
283
+
284
+ if !cell.is_generate?
285
+ next
286
+ end
287
+
288
+ jl = cell.get_join_list
289
+ j = jl.get_item(port.get_name)
290
+
291
+ if j
292
+ if j.get_array_member2
293
+ # 呼び口配列の場合、全部の結合先を集める
294
+ j.get_array_member2.each {|j2|
295
+ if j2
296
+ port_cells << j2.get_rhs_cell
297
+ port_ports << j2.get_rhs_port # 右辺のポート
298
+ else
299
+ # optional で、ある添数のみ初期化されていない(すべて初期化されない場合は、下)
300
+ port_cells << nil
301
+ port_ports << nil
302
+ end
303
+ }
304
+ else
305
+ # 全ての結合先を集める
306
+ port_cells << j.get_rhs_cell
307
+ port_ports << j.get_rhs_port # 右辺のポート
308
+ end
309
+ else
310
+ # optional で初期化されていない(nil を要素に加えておく)
311
+ port_cells << nil
312
+ port_ports << nil # 右辺のポート
313
+ end
314
+ }
315
+
316
+ # 重複要素を取り除く
317
+ port_cells.uniq!
318
+ port_ports.uniq!
319
+
320
+ # 呼び口の呼び先が一つのポートだけか?
321
+ if port_ports.length == 1
322
+
323
+ # 呼び口配列が可変長の場合、最適化しない
324
+ # mikan 呼び口配列要素数マクロ不具合暫定対策
325
+ # より望ましい修正は、受け口へのポインタは省略するが、配列個数は出力する(#_CP_#, #_TCP_#)
326
+ # さらに配列個数が定数化できるのであれば、定数マクロを出力 (#_NCPA_#)
327
+ next if port.get_array_size == "[]"
328
+
329
+ # 呼び口最適化実施
330
+ @b_cp_optimized = true
331
+
332
+ # 呼び先が一つのセルだけか?
333
+ if port_cells.length == 1
334
+
335
+ # 呼び口は optional で初期化されていない、または受け口は配列ではないか?
336
+ if port_ports[0].nil? || port_ports[0].get_array_size.nil?
337
+
338
+ @n_call_port_omitted_in_CB += 1 # CB で省略する呼び口
339
+ port.set_cell_unique # セル一つだけ最適化
340
+ port.set_skelton_useless # スケルトン関数不要最適化
341
+ port.set_VMT_useless # VMT 不要最適化 (直接受け口関数を呼出す)
342
+
343
+ if $verbose
344
+ print "cell_unique, VMT_useless & skelton_useless optimize\n"
345
+ end
346
+ else
347
+ port.set_VMT_useless # VMT 不要最適化 (スケルトン関数を呼出す)
348
+
349
+ if $verbose
350
+ print "VMT_useless optimize\n"
351
+ end
352
+ end
353
+
354
+ else # 呼び先が複数のセル(単一のポート)
355
+
356
+ # 呼び口は optional で初期化されていない、または受け口は配列ではないか?
357
+ if port_ports[0].nil? || port_ports[0].get_array_size.nil?
358
+ if !@singleton
359
+ port.set_skelton_useless # スケルトン関数不要最適化
360
+ port.set_VMT_useless # VMT 不要最適化 (スケルトン関数 or 受け口関数を呼出す)
361
+
362
+ if $verbose
363
+ print "VMT_useless & skelton useless optimize\n"
364
+ end
365
+ else
366
+ port.set_VMT_useless # VMT 不要最適化 (スケルトン関数 or 受け口関数を呼出す)
367
+
368
+ if $verbose
369
+ print "VMT_useless optimize\n"
370
+ end
371
+ end
372
+ end
373
+ end
374
+
375
+ port.set_only_callee(port_ports[0], port_cells[0])
376
+ # set_cell_unique でない場合 cell は意味がない
377
+
378
+ end
379
+
380
+ # debug
381
+ dbgPrint "#{port.get_name} : # of cells : #{port_cells.length} # of ports : #{port_ports.length}\n"
382
+ }
383
+ end
384
+
385
+ #=== Celltype#受け口最適化
386
+ # optimize_entry は、呼び口最適化の結果を使用している
387
+ def optimize_entry
388
+ # 受け口最適化の設定
389
+ @port.each{|port|
390
+ next if port.get_port_type != :CALL
391
+
392
+ # 呼び口側の最適化状態
393
+ b_VMT_useless = port.is_VMT_useless?
394
+ b_skelton_useless = port.is_skelton_useless?
395
+
396
+ # セルの参照するセルを集める(ポートも一緒に集める)
397
+ @cell_list.each{|cell|
398
+
399
+ if !cell.is_generate?
400
+ next
401
+ end
402
+
403
+ jl = cell.get_join_list
404
+ j = jl.get_item(port.get_name)
405
+
406
+ if j # optional で結合されていない場合 nil
407
+ if j.get_array_member2
408
+ # 呼び口配列
409
+ j.get_array_member2.each {|j2|
410
+ if j2
411
+ port2 = j2.get_rhs_port # 右辺のポート
412
+ # 受け口側の最適化可能性を設定
413
+ port2.set_entry_VMT_skelton_useless(b_VMT_useless, b_skelton_useless)
414
+ # else
415
+ # optional で呼び口配列要素が初期化されていない
416
+ end
417
+ }
418
+ else
419
+ port2 = j.get_rhs_port # 右辺のポート
420
+ # 受け口側の最適化可能性を設定
421
+ port2.set_entry_VMT_skelton_useless(b_VMT_useless, b_skelton_useless)
422
+ end
423
+ end
424
+ }
425
+ }
426
+ end
427
+
428
+ # Celltype# リセットする
429
+ def reset_optimize
430
+ @@ID_BASE = ID_BASE # 本当は一回だけでよい
431
+ @id_base = 1 # set_cell_id でリセットされるので不要
432
+
433
+ @b_cp_optimized = false # 呼び口最適化
434
+ @n_call_port_omitted_in_CB = 0 # 呼び口最適化により不生成となったポートの数
435
+ @n_cell_gen = 0 # 生成セル個数
436
+ @port.each{|p|
437
+ p.reset_optimize
438
+ }
439
+ @included_header = {}
440
+ @domain_roots = {}
441
+ end
442
+
443
+ # Celltype# ヘッダは include されているか
444
+ # hname::Symbol : ヘッダ名
445
+ # RETURN:: bool_t: false インクルードされていない、true インクルードされている
446
+ # #_ISH_#, #_ICT_# でヘッダが取り込まれているかチェックする
447
+ # false が返った場合、hname は登録されて、次回の呼び出しでは true が返る
448
+ def header_included?(hname)
449
+ if @included_header[hname].nil?
450
+ @included_header[hname] = true
451
+ return false
452
+ else
453
+ return true
454
+ end
455
+ end
456
+ end