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,218 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # TECS Generator
4
+ # Generator for TOPPERS Embedded Component System
5
+ #
6
+ # Copyright (C) 2008-2019 by TOPPERS Project
7
+ #--
8
+ # 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
9
+ # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
10
+ # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
11
+ # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
12
+ # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
13
+ # スコード中に含まれていること.
14
+ # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
15
+ # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
16
+ # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
17
+ # の無保証規定を掲載すること.
18
+ # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
19
+ # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
20
+ # と.
21
+ # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
22
+ # 作権表示,この利用条件および下記の無保証規定を掲載すること.
23
+ # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
24
+ # 報告すること.
25
+ # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
26
+ # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
27
+ # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
28
+ # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
29
+ # 免責すること.
30
+ #
31
+ # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
32
+ # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
33
+ # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
34
+ # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
35
+ # の責任を負わない.
36
+ #
37
+ # $Id: bnf.y.rb 2850 2018-04-01 12:38:45Z okuma-top $
38
+ #++
39
+
40
+ # Marshal.dump で不都合な事項への対策
41
+ # Proc は _dump_data が定義されていないため、定義する.
42
+ # plugin 関係は、tecsflow に Plugin クラスが存在しないため、消しておく.
43
+
44
+ # Proc は、Marshal.dump することができないため _dump_data を定義
45
+ class Proc
46
+ def _dump_data
47
+ nil
48
+ end
49
+ end
50
+
51
+ class Object
52
+ @@visited = {}
53
+ @@n_visited = 0
54
+ @@n_found = 0
55
+ @@n_plugin_proxy = 0
56
+
57
+ # do nothing now. this function is used to find remained Proxy object.
58
+ def find_plugin level, object_list
59
+
60
+ # find_plugin_1 level, object_list
61
+ # print "find_plugin: n_visted=", @@n_visited, " (len=", @@visited.length, ") found=", @@n_found, " proxy=", @@n_plugin_proxy, "\n"
62
+ end
63
+
64
+ def find_plugin_1 level, object_list
65
+ if @@visited[ self ] then
66
+ return
67
+ end
68
+ @@visited[ self ] = true
69
+ @@n_visited += 1
70
+
71
+ if kind_of? Expression then
72
+ # print # Expression では print が別に定義されている
73
+ get_elements.each{|ele|
74
+ ele.find_plugin_1 level+1, object_list
75
+ }
76
+ return
77
+ end
78
+
79
+ if level > 100 then # 100 is enough now, 50 is too small
80
+ print "reached max level: "
81
+ if respond_to? :get_name then
82
+ print "#{get_name}(#{self.class.name})\n"
83
+ else
84
+ print "(#{self.class.name})\n"
85
+ end
86
+ return
87
+ end
88
+
89
+ object_list.push self ##### ここから return 不可
90
+
91
+ if (kind_of? Plugin) || (kind_of? HRPSVCPlugin) then
92
+ @@n_found += 1
93
+ print "Plugin found: #{self.class.name}\n"
94
+ object_list.each{ |obj|
95
+ if obj.respond_to? :get_name then
96
+ print "#{obj.get_name}(#{obj.class.name}), "
97
+ else
98
+ print "(#{obj.class.name}), "
99
+ end
100
+ }
101
+ print "\n"
102
+ elsif kind_of? Join::ThroughPluginProxy then
103
+ @@n_plugin_proxy += 1
104
+ end
105
+
106
+ level += 1
107
+ if kind_of? Array then
108
+ each{ |val|
109
+ val.find_plugin_1 level, object_list
110
+ }
111
+ elsif kind_of? Hash then
112
+ each{ |key, val|
113
+ key.find_plugin_1 level, object_list
114
+ val.find_plugin_1 level, object_list
115
+ }
116
+ else
117
+ instance_variables.each{|iv|
118
+ iv_val = instance_variable_get iv
119
+ iv_val.find_plugin_1 level, object_list
120
+ }
121
+ end
122
+ object_list.pop ##### ここまで return 不可
123
+ end
124
+ end
125
+
126
+ class Namespace
127
+ def unjoin_plugin
128
+ @signature_list.each{ |sig| sig.unjoin_plugin }
129
+ @celltype_list.each{ |ct| ct.unjoin_plugin }
130
+ @cell_list.each{ |cell| cell.unjoin_plugin }
131
+ @namespace_list.each{ |ns| ns.unjoin_plugin}
132
+ end
133
+ end
134
+
135
+ class Region < Namespace
136
+ def unjoin_plugin
137
+ if @domain_type then
138
+ @domain_type.unjoin_plugin
139
+ end
140
+ @cell_port_throug_plugin_list.each{ |key, po|
141
+ proxy = Join::ThroughPluginProxy.new po.get_cell_namespace_path, po.get_through_entry_port_name, po.get_through_entry_port_subscript
142
+ @cell_port_throug_plugin_list[ key ] = proxy
143
+ }
144
+ super
145
+ end
146
+ end
147
+
148
+ class DomainType < Node
149
+ def unjoin_plugin
150
+ @plugin = nil
151
+ end
152
+ end
153
+
154
+ class Signature < NSBDNode
155
+ def unjoin_plugin
156
+ @generate = nil
157
+ end
158
+ end
159
+
160
+ class Celltype < NSBDNode
161
+ def unjoin_plugin
162
+ @generate = nil
163
+ @generate_list = []
164
+ @plugin = nil
165
+ end
166
+ end
167
+
168
+ class Cell < NSBDNode
169
+ def unjoin_plugin
170
+ @generate = nil
171
+ @plugin = nil
172
+ @join_list.get_items.each{ |j| j.unjoin_plugin }
173
+ end
174
+ end
175
+
176
+ class Join < BDNode
177
+ class ThroughPluginProxy
178
+ def initialize namespace_path, entry_port_name, entry_port_subscript
179
+ @namespace_path = namespace_path
180
+ @entry_port_name = entry_port_name
181
+ @entry_port_subscript = entry_port_subscript
182
+ end
183
+ def get_cell_namespace_path
184
+ @namespace_path
185
+ end
186
+ def get_through_entry_port_name
187
+ @entry_port_name
188
+ end
189
+ def get_through_entry_port_subscript
190
+ @entry_port_subscript
191
+ end
192
+ end
193
+
194
+ def unjoin_plugin
195
+ # @thourhg_generated_list is refered in get_rhs_cell, get_rhs_port
196
+ @through_generated_list.map!{|po| # po: plugin object
197
+ ThroughPluginProxy.new po.get_cell_namespace_path, po.get_through_entry_port_name, po.get_through_entry_port_subscript
198
+ }
199
+ @region_through_generated_list.map!{|po| # po: plugin object
200
+ ThroughPluginProxy.new po.get_cell_namespace_path, po.get_through_entry_port_name, po.get_through_entry_port_subscript
201
+ }
202
+ if @array_member2 then
203
+ @array_member2.each{ |j|
204
+ if j then
205
+ j.unjoin_plugin2
206
+ end
207
+ }
208
+ end
209
+ end
210
+ def unjoin_plugin2
211
+ @through_generated_list.map!{|po| # po: plugin object
212
+ ThroughPluginProxy.new po.get_cell_namespace_path, po.get_through_entry_port_name, po.get_through_entry_port_subscript
213
+ }
214
+ @region_through_generated_list.map!{|po| # po: plugin object
215
+ ThroughPluginProxy.new po.get_cell_namespace_path, po.get_through_entry_port_name, po.get_through_entry_port_subscript
216
+ }
217
+ end
218
+ end
@@ -0,0 +1,650 @@
1
+ #
2
+ # TECS Generator
3
+ # Generator for TOPPERS Embedded Component System
4
+ #
5
+ # Copyright (C) 2008-2014 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: value.rb 2061 2014-05-31 22:15:33Z okuma-top $
37
+ #++
38
+
39
+ #= BaseVal 整数、浮動小数などの値を扱うクラスの基底クラス
40
+ #
41
+ # TECS の CDL で扱う値は、以下に分類される
42
+ # ・整数
43
+ # ・浮動小数
44
+ # ・文字列
45
+ # ・ブール値
46
+ # 集成型(構造体、配列)と C_EXP はここでは扱わない
47
+ #
48
+ # このクラスで定義済みの演算子は、エラーとなる
49
+ # 型により演算可能な場合、演算子をオーバーライドする
50
+ #
51
+ class BaseVal < Node
52
+ def ~@
53
+ unsupport "~"
54
+ end
55
+
56
+ def -@
57
+ unsupport "unary -"
58
+ end
59
+
60
+ def +@
61
+ unsupport "unary +"
62
+ end
63
+
64
+ def not # ! val
65
+ unsupport "!"
66
+ end
67
+
68
+ def *(val)
69
+ unsupport "*"
70
+ end
71
+
72
+ def /(val)
73
+ unsupport "/"
74
+ end
75
+
76
+ def %(val)
77
+ unsupport "%"
78
+ end
79
+
80
+ def +(val)
81
+ unsupport "+"
82
+ end
83
+
84
+ def -(val)
85
+ unsupport "-"
86
+ end
87
+
88
+ def <<(val)
89
+ unsupport "<<"
90
+ end
91
+
92
+ def >>(val)
93
+ unsupport ">>"
94
+ end
95
+
96
+ def >(val)
97
+ unsupport ">"
98
+ end
99
+
100
+ def <(val)
101
+ unsupport "<"
102
+ end
103
+
104
+ def >=(val)
105
+ unsupport ">="
106
+ end
107
+
108
+ def <=(val)
109
+ unsupport "<="
110
+ end
111
+
112
+ def eq(val) # == val
113
+ unsupport "=="
114
+ end
115
+
116
+ def neq(val) # != val
117
+ unsupport "!="
118
+ end
119
+
120
+ def &(val)
121
+ unsupport "&"
122
+ end
123
+
124
+ def ^(val)
125
+ unsupport "^"
126
+ end
127
+
128
+ def |(val)
129
+ unsupport "|"
130
+ end
131
+
132
+ def lAND(val) # && val
133
+ unsupport "&&"
134
+ end
135
+
136
+ def lOR(val) # || val
137
+ unsupport "||"
138
+ end
139
+
140
+ def cast(type)
141
+ unsupport "CAST"
142
+ end
143
+
144
+ def unsupport(op)
145
+ cdl_error("V1001 $1: unable for $2", op, self.class)
146
+ end
147
+
148
+ def to_s
149
+ raise "to_s not overridden"
150
+ end
151
+
152
+ def to_b
153
+ cdl_error("V1002 $1: cannot cast to bool (implicitly)", self.class)
154
+ false
155
+ end
156
+
157
+ def to_i
158
+ cdl_error("V1003 $1: cannot cast to integer (implicitly)", self.class)
159
+ 1
160
+ end
161
+
162
+ def to_f
163
+ cdl_error("V1004 $1: cannot cast to float (implicitly)", self.class)
164
+ 1.0
165
+ end
166
+ end
167
+
168
+ #= Pointer 値 (IntegerVal の Pointer 版)
169
+ #
170
+ # ポインタ値は、CDL で直接生成されることはない
171
+ # 整数値のキャスト演算により生成される
172
+ class PointerVal < BaseVal
173
+ # @int_val:: IntegerVal: IntegerVal でなくてはならない
174
+ # @ptr_type:: PtrType: ポインタの指す先の型
175
+
176
+ def initialize(int_val, ptr_type)
177
+ super()
178
+ @int_val = int_val
179
+ @ptr_type = ptr_type
180
+ end
181
+
182
+ #=== ポインタの指す先の型を得る
183
+ # PointerVal 専用のメソッド
184
+ def get_type
185
+ @ptr_type
186
+ end
187
+
188
+ def cast(type)
189
+ t = type.get_original_type # typedef の元を得る
190
+ if t.is_a? IntType
191
+ val = t.check_and_clip(@int_val, :IntType)
192
+ return IntegerVal.new(val)
193
+ elsif t.is_a? FloatType
194
+ cdl_error("V1005 Cannot cast pointer to float")
195
+ return FloatVal.new(@int_val)
196
+ elsif t.is_a? PtrType
197
+ return PointerVal.new(@int_val, type)
198
+ else
199
+ cdl_error("V1006 pointer value cannot cast to $1", type.class)
200
+ return nil
201
+ end
202
+ end
203
+
204
+ def to_s
205
+ "(#{@ptr_type.get_type_str}#{@ptr_type.get_type_str_post})#{sprintf("0x%X", @int_val)}"
206
+ end
207
+
208
+ def to_b
209
+ cdl_error("V1007 convert pointer value to bool")
210
+ false
211
+ end
212
+
213
+ def to_i
214
+ cdl_error("V1008 convert pointer value to integer without cast")
215
+ @val.to_i
216
+ end
217
+ end
218
+
219
+ #= IntegerVal: 整数値を扱うクラス
220
+ class IntegerVal < BaseVal
221
+ # @val:: Integer: value
222
+ # @str:: string: literal
223
+ # @sign:: Symbol: :SIGNED | :UNSIGNED
224
+ # @size:: Symbol: :NORMAL | :SHORT | :LONG | :LONGLONG
225
+
226
+ def initialize(val, str = nil, sign = :SIGNED, size = :NORMAL)
227
+ super()
228
+ @val = val.to_i
229
+ @str = str
230
+ @sign = sign
231
+ @size = size
232
+ end
233
+
234
+ def ~@
235
+ IntegerVal.new(~ @val)
236
+ end
237
+
238
+ def -@
239
+ IntegerVal.new(- @val)
240
+ end
241
+
242
+ def +@
243
+ self
244
+ end
245
+
246
+ def not # !
247
+ BoolVal.new(self.to_b)
248
+ end
249
+
250
+ def *(val)
251
+ if val.is_a? FloatVal
252
+ return FloatVal.new(@val.to_f * val.to_f)
253
+ else
254
+ return IntegerVal.new(@val * val.to_i)
255
+ end
256
+ end
257
+
258
+ def /(val)
259
+ if val.is_a? FloatVal
260
+ v2 = val.to_f # to_f を2回評価しない
261
+ if v2 == 0.0
262
+ cdl_error("V1009 / : divieded by zero")
263
+ return FloatVal.new(1.0)
264
+ end
265
+ return FloatVal.new(@val.to_f / v2)
266
+ else
267
+ v2 = val.to_i # to_i を2回評価しない
268
+ if v2 == 0
269
+ cdl_error("V1010 / : divieded by zero")
270
+ return IntegerVal.new(1)
271
+ end
272
+ return IntegerVal.new(@val / v2)
273
+ end
274
+ end
275
+
276
+ def %(val)
277
+ if val.is_a? FloatVal
278
+ v2 = val.to_f # to_f を2回評価しない
279
+ if v2 == 0.0
280
+ cdl_error("V1011 % : divieded by zero")
281
+ return FloatVal.new(1.0)
282
+ end
283
+ return FloatVal.new(@val.to_f % v2)
284
+ else
285
+ v2 = val.to_i # to_i を2回評価しない
286
+ if v2 == 0
287
+ cdl_error("V1012 % : divieded by zero")
288
+ return IntegerVal.new(1)
289
+ end
290
+ return IntegerVal.new(@val % v2)
291
+ end
292
+ end
293
+
294
+ def +(val)
295
+ if val.is_a? FloatVal
296
+ return FloatVal.new(@val.to_f + val.to_f)
297
+ else
298
+ return IntegerVal.new(@val + val.to_i)
299
+ end
300
+ end
301
+
302
+ def -(val)
303
+ if val.is_a? FloatVal
304
+ return FloatVal.new(@val.to_f - val.to_f)
305
+ else
306
+ return IntegerVal.new(@val - val.to_i)
307
+ end
308
+ end
309
+
310
+ def <<(val)
311
+ return IntegerVal.new(@val << val.to_i)
312
+ end
313
+
314
+ def >>(val)
315
+ return IntegerVal.new(@val >> val.to_i)
316
+ end
317
+
318
+ def >(val)
319
+ if val.is_a? FloatVal
320
+ return BoolVal.new(@val.to_f > val.to_f)
321
+ else
322
+ return BoolVal.new(@val > val.to_i)
323
+ end
324
+ end
325
+
326
+ def <(val)
327
+ if val.is_a? FloatVal
328
+ return BoolVal.new(@val.to_f < val.to_f)
329
+ else
330
+ return BoolVal.new(@val < val.to_i)
331
+ end
332
+ end
333
+
334
+ def >=(val)
335
+ if val.is_a? FloatVal
336
+ return BoolVal.new(@val.to_f >= val.to_f)
337
+ else
338
+ return BoolVal.new(@val >= val.to_i)
339
+ end
340
+ end
341
+
342
+ def <=(val)
343
+ if val.is_a? FloatVal
344
+ return BoolVal.new(@val.to_f <= val.to_f)
345
+ else
346
+ return BoolVal.new(@val <= val.to_i)
347
+ end
348
+ end
349
+
350
+ def eq(val) # == val
351
+ if val.is_a? FloatVal
352
+ return BoolVal.new(@val.to_f == val.to_f)
353
+ else
354
+ return BoolVal.new(@val == val.to_i)
355
+ end
356
+ end
357
+
358
+ def neq(val) # != val
359
+ if val.is_a? FloatVal
360
+ return BoolVal.new(@val.to_f != val.to_f)
361
+ else
362
+ return BoolVal.new(@val != val.to_i)
363
+ end
364
+ end
365
+
366
+ def &(val)
367
+ IntegerVal.new(@val & val.to_i)
368
+ end
369
+
370
+ def ^(val)
371
+ IntegerVal.new(@val ^ val.to_i)
372
+ end
373
+
374
+ def |(val)
375
+ IntegerVal.new(@val | val.to_i)
376
+ end
377
+
378
+ def lAND(val) # && val
379
+ BoolVal.new(self.to_b && val.to_b)
380
+ end
381
+
382
+ def lOR(val) # || val
383
+ BoolVal.new(self.to_b || val.to_b)
384
+ end
385
+
386
+ def cast(type)
387
+ t = type.get_original_type # typedef の元を得る
388
+ if t.is_a? IntType
389
+ val = t.check_and_clip(@val, :IntType)
390
+ return IntegerVal.new(val)
391
+ elsif t.is_a? FloatType
392
+ return FloatVal.new(@val)
393
+ elsif t.is_a? PtrType
394
+ return PointerVal.new(@val, type)
395
+ elsif t.is_a? BoolType
396
+ return BoolVal.new(@val.to_b)
397
+ else
398
+ cdl_error("V1013 integer value cannot cast to $1", type.class)
399
+ return nil
400
+ end
401
+ end
402
+
403
+ def to_s
404
+ if @str
405
+ @str
406
+ else
407
+ @val.to_s
408
+ end
409
+ end
410
+
411
+ def to_b
412
+ @val != 0
413
+ end
414
+
415
+ def to_i
416
+ @val
417
+ end
418
+
419
+ def to_f
420
+ @val.to_f
421
+ end
422
+ end
423
+
424
+ #= BoolVal: bool 値を扱うクラス
425
+ class BoolVal < BaseVal
426
+ # @val:: bool: true, false
427
+
428
+ def initialize(val)
429
+ super()
430
+ if val == true || val == false
431
+ @val = val
432
+ elsif val.to_i != 0
433
+ @val = true
434
+ else
435
+ @val = false
436
+ end
437
+ # raise "No boolean val" if val != true && val != false
438
+ end
439
+
440
+ def not # ! val
441
+ BoolVal.new(!@val)
442
+ end
443
+
444
+ def eq(val) # == val
445
+ if val.is_a? BoolVal
446
+ return BoolVal.new(self.to_i == val.to_i)
447
+ else
448
+ cdl_error("V1014 comparing bool value with \'$1\'", val.class)
449
+ return BoolVal.new(false)
450
+ end
451
+ end
452
+
453
+ def neq(val) # != val
454
+ if val.is_a? BoolVal
455
+ return BoolVal.new(self.to_i != val.to_i)
456
+ else
457
+ cdl_error("V1015 comparing bool value with \'$1\'", val.class)
458
+ return BoolVal.new(false)
459
+ end
460
+ end
461
+
462
+ def lAND(val) # && val
463
+ BoolVal.new(self.to_b && val.to_b)
464
+ end
465
+
466
+ def lOR(val) # || val
467
+ BoolVal.new(self.to_b || val.to_b)
468
+ end
469
+
470
+ def cast(type)
471
+ t = type.get_original_type # typedef の元を得る
472
+ if @val
473
+ val = 1
474
+ else
475
+ val = 0
476
+ end
477
+ if t.is_a? IntType
478
+ return IntegerVal.new(val)
479
+ elsif t.is_a? FloatType
480
+ return FloatVal.new(val)
481
+ elsif t.is_a? BoolType
482
+ return self
483
+ else
484
+ cdl_error("V1016 bool value cannot cast to $1", type.class)
485
+ return nil
486
+ end
487
+ end
488
+
489
+ def to_s
490
+ if @val
491
+ return "true"
492
+ else
493
+ return "false"
494
+ end
495
+ end
496
+
497
+ def to_b
498
+ @val
499
+ end
500
+
501
+ def to_i
502
+ return 0 if @val == false
503
+ return 1
504
+ end
505
+
506
+ def to_f
507
+ return 0.0 if @val == false
508
+ return 1.0
509
+ end
510
+
511
+ attr_reader :val
512
+ end
513
+
514
+ #= FloatVal: 実数値を扱うクラス
515
+ class FloatVal < BaseVal
516
+ # @val:: Float
517
+ def initialize(val)
518
+ super()
519
+ @val = val.to_f
520
+ end
521
+
522
+ def -@
523
+ FloatVal.new(- @val)
524
+ end
525
+
526
+ def +@
527
+ self
528
+ end
529
+
530
+ def *(val)
531
+ FloatVal.new(@val * val.to_f)
532
+ end
533
+
534
+ def /(val)
535
+ v2 = val.to_f # to_f を2回評価しない
536
+ if v2 == 0.0
537
+ cdl_error("V1017 / : divieded by zero")
538
+ return FloatVal.new(1.0)
539
+ end
540
+ return FloatVal.new(@val.to_f / v2)
541
+ end
542
+
543
+ def %(val)
544
+ v2 = val.to_f # to_f を2回評価しない
545
+ if v2 == 0.0
546
+ cdl_error("V1018 % : divieded by zero")
547
+ return FloatVal.new(1.0)
548
+ end
549
+ return FloatVal.new(@val.to_f % v2)
550
+ end
551
+
552
+ def +(val)
553
+ FloatVal.new(@val + val.to_f)
554
+ end
555
+
556
+ def -(val)
557
+ FloatVal.new(@val - val.to_f)
558
+ end
559
+
560
+ def >(val)
561
+ BoolVal.new(@val > val.to_f)
562
+ end
563
+
564
+ def <(val)
565
+ BoolVal.new(@val < val.to_f)
566
+ end
567
+
568
+ def >=(val)
569
+ BoolVal.new(@val >= val.to_f)
570
+ end
571
+
572
+ def <=(val)
573
+ BoolVal.new(@val <= val.to_f)
574
+ end
575
+
576
+ def eq(val) # == val
577
+ BoolVal.new(@val == val.to_f)
578
+ end
579
+
580
+ def neq(val) # != val
581
+ BoolVal.new(@val != val.to_f)
582
+ end
583
+
584
+ def cast(type)
585
+ t = type.get_original_type # typedef の元を得る
586
+ if t.is_a? IntType
587
+ val = t.check_and_clip(@val, :FloatType)
588
+ return IntegerVal.new(val)
589
+ elsif t.is_a? FloatType
590
+ return self
591
+ else
592
+ cdl_error("V1019 floating value cannot cast to $1", type)
593
+ return self
594
+ end
595
+ end
596
+
597
+ def to_b
598
+ cdl_error("V1020 convert floating value to bool without cast")
599
+ @val.to_i
600
+ end
601
+
602
+ def to_i
603
+ cdl_error("V1021 convert floating value to integer without cast")
604
+ @val.to_i
605
+ end
606
+
607
+ def to_s
608
+ @val.to_s
609
+ end
610
+
611
+ def to_f
612
+ @val
613
+ end
614
+ end
615
+
616
+ #= 文字列リテラルを扱うクラス
617
+ class StringVal < BaseVal
618
+ # @str:: Token:
619
+ # @specifier:: Symbol: :WIDE, :NORMAL
620
+
621
+ def initialize(str, spec = :NORMAL)
622
+ super()
623
+ @str = str
624
+ @specifier = spec # mikan L"str" wide 文字列未対応
625
+ end
626
+
627
+ #===
628
+ #
629
+ # string の cast はできない mikan ポインタ型への cast はできるべき
630
+ def cast(type)
631
+ t = type.get_original_type # typedef の元を得る
632
+ if t.is_a? IntType
633
+ cdl_error("V1022 string cannot cast to integer")
634
+ elsif t.is_a? FloatType
635
+ cdl_error("V1023 string cannot cast to float")
636
+ elsif t.is_a? PtrType
637
+ cdl_error("V1024 string cannot cast to pointer")
638
+ else
639
+ cdl_error("V1025 string cannot cast to $1", type)
640
+ end
641
+ end
642
+
643
+ def to_s
644
+ @str.to_s
645
+ end
646
+
647
+ def val
648
+ @str.to_s # Token で扱われていた名残 (val を取り出す)
649
+ end
650
+ end