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,283 @@
1
+ #
2
+ # TECS Generator
3
+ # Generator for TOPPERS Embedded Component System
4
+ #
5
+ # Copyright (C) 2008-2011 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: MrubyBridgeCelltypePluginModule.rb 2952 2018-05-07 10:19:07Z okuma-top $
37
+ #++
38
+
39
+ #== celltype プラグインの共通の親クラス
40
+ module MrubyBridgeCelltypePluginModule
41
+
42
+ # プラグイン引数名 => Proc
43
+ MrubyBridgePluginArgProc = {
44
+ "ignoreUnsigned" => Proc.new {|obj, rhs| obj.set_ignoreUnsigned rhs },
45
+ "include_inner_cell" => Proc.new {|obj, rhs| obj.set_include_inner_cell rhs },
46
+ "exclude_cell" => Proc.new {|obj, rhs| obj.set_exclude_cell rhs },
47
+ "exclude_port" => Proc.new {|obj, rhs| obj.set_exclude_port rhs },
48
+ "exclude_port_func" => Proc.new {|obj, rhs| obj.set_exclude_port_func rhs },
49
+ "auto_exclude" => Proc.new {|obj, rhs| obj.set_auto_exclude rhs },
50
+ }
51
+
52
+ require_tecsgen_lib("MrubyBridgeCellPlugin.rb")
53
+ @@plugin_list = []
54
+ @@count = 1
55
+
56
+ # celltype:: Celltype セルタイプ(インスタンス)
57
+ def initialize(celltype, option)
58
+ dbgPrint "#{self.class.name}: initialzie: #{celltype.get_name}\n"
59
+
60
+ super
61
+ @celltype = celltype
62
+ @cell_list = []
63
+ @include_inner_cell = false
64
+ @exclude_cells = []
65
+ @exclude_port = []
66
+ @exclude_port_func = {}
67
+ @b_ignoreUnsigned = false
68
+ @b_auto_exclude = true # auto_exclude = true by default
69
+ @@plugin_list << self
70
+
71
+ @plugin_arg_check_proc_tab = MrubyBridgePluginArgProc
72
+ @plugin_arg_str = CDLString.remove_dquote option
73
+ parse_plugin_arg
74
+
75
+ MrubyBridgeCellPlugin.set_gen_post_code_by_dependent
76
+ end
77
+
78
+ #=== 新しいセル
79
+ # cell:: Cell セル
80
+ #
81
+ # celltype プラグインを指定されたセルタイプのセルが生成された
82
+ # セルタイププラグインに対する新しいセルの報告
83
+ # generate 文により呼び出された場合、それまでに定義された cell については、initialize のタイミングで呼び出される
84
+ def new_cell(cell)
85
+ dbgPrint "MrubyBridgeCelltypePluginModule: new_cell: #{cell.get_name}\n"
86
+
87
+ return if @cell_list.include? cell # この行は、本来不要のはず
88
+ if TECSGEN.post_coded? # post_code 以降のセルは対象から外す
89
+ cdl_info("I9999 MrubyBridgeCelltypePlugin: $1 is excluded because cell generated after post_coded", cell.get_name)
90
+ return
91
+ end
92
+
93
+ # include_inner_cell option
94
+ if cell.is_cloned? && @include_inner_cell == false
95
+ # p "#{cell.get_name} excluded"
96
+ cdl_info("I9999 MrubyBridgeCelltypePlugin: inner cell $1 is excluded", cell.get_name)
97
+ return
98
+ # else
99
+ # p "#{cell.get_name} included"
100
+ end
101
+
102
+ # exclude_cell option
103
+ if @exclude_cells.include?(cell.get_name)
104
+ return
105
+ end
106
+
107
+ opt_str = "ignoreUnsigned=#{@b_ignoreUnsigned}, auto_exclude=#{@b_auto_exclude}"
108
+ @exclude_port.each{|port|
109
+ opt_str += ",exclude_port=#{port}"
110
+ }
111
+ @exclude_port_func.each{|port, funcs|
112
+ funcs.each{|func|
113
+ opt_str += ",exclude_port_func=#{port}.#{func}"
114
+ }
115
+ }
116
+
117
+ # p "MrubyBridgeCelltypePlugin: opt_str=#{opt_str}"
118
+
119
+ fn2 = "#{$gen}/tmp_MrubyBridgeCelltypePluginModule_#{@celltype.get_name}_#{@@count}.cdl"
120
+ f2 = File.open(fn2, "w")
121
+ f2.print <<EOT
122
+ /* MrubyBridgeCelltypePluginModule: celltype=#{@celltype.get_name} */
123
+ generate( MrubyBridgeCellPlugin, #{cell.get_namespace_path}, "#{opt_str}" );
124
+ EOT
125
+ f2.close
126
+ dbgPrint "MrubyBridgeCelltypePluginModule new_cell: Import #{fn2}\n"
127
+ Import.new fn2.to_s
128
+ @@count += 1
129
+ end
130
+
131
+ ### 意味解析段階で呼び出されるメソッド ###
132
+ #=== CDL ファイルの生成
133
+ # typedef, signature, celltype, cell のコードを生成
134
+ # 重複して生成してはならない
135
+ # すでに生成されている場合は出力しないこと。
136
+ # もしくは同名の import により、重複を避けること。
137
+ # file:: FILE 生成するファイル
138
+ def gen_cdl_file(file)
139
+ # この段階で呼びだすと generate 文が呼び出される前のセルのみの出力となる
140
+
141
+ # dbgPrint "MrubyBridgeCelltypePlugin: gen_cdl_file: #{@celltype.get_name}\n"
142
+ # file.print <<EOT
143
+ # /* MrubyBridgeCelltypePlugin: celltype=#{@celltype.get_name}
144
+ # *
145
+ # * cell's generate before celltype's generate
146
+ # */
147
+ #
148
+ # EOT
149
+ # @celltype.get_cell_list.each { |cell|
150
+ # @cell_list << cell
151
+ # # mikan option, region
152
+ # dbgPrint "MrubyBridgeCelltypePlugin: cell=#{cell.get_name}\n"
153
+ # file.print <<EOT
154
+ # generate( MrubyBridgeCellPlugin, #{cell.get_namespace_path}, "" );
155
+ # EOT
156
+ # }
157
+ end
158
+
159
+ #=== tCelltype_factory.h に挿入するコードを生成する
160
+ # file 以外の他のファイルにファクトリコードを生成してもよい
161
+ # セルタイププラグインが指定されたセルタイプのみ呼び出される
162
+ def gen_factory(file)
163
+ end
164
+
165
+ def get_celltype
166
+ @celltype
167
+ end
168
+
169
+
170
+ @@b_gen_post_code_called = false
171
+ #=== 後ろの CDL コードを生成
172
+ # プラグインの後ろの CDL コードを生成
173
+ # file:: File:
174
+ def self.gen_post_code(file)
175
+ dbgPrint "#{self.name}: gen_post_code_body\n"
176
+
177
+ if @@b_gen_post_code_called == false
178
+ @@b_gen_post_code_called = true
179
+ MrubyBridgeCellPlugin.gen_post_code_body file
180
+ end
181
+
182
+ # この段階で生成すると、同じポストコードで出力される mruby の初期化コードに反映されない
183
+
184
+ # # MrubyBridgeCelltypePlugin の生成する generate 文は、
185
+ # fn2 = "#{$gen}/tmp_MrubyBridgeCelltypePlugin_post.cdl"
186
+ # f2 = File.open( fn2, "w" )
187
+ # # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
188
+ # dbgPrint "MrubyBridgeCelltypePlugin: gen_post_code\n"
189
+ # f2.print "/* '#{self.name}' post code */\n"
190
+ # @@plugin_list.each{ |plugin|
191
+ # plugin.get_celltype.get_cell_list.each{ |cell|
192
+ # # mikan option, region
193
+ # f2.print <<EOT
194
+ # generate( MrubyBridgeCellPlugin, #{cell.get_namespace_path}, "" );
195
+ # EOT
196
+ # }
197
+ # }
198
+ # f2.close
199
+ # p Import
200
+ # Import.new "#{fn2}"
201
+ end
202
+
203
+ #=== プラグイン引数
204
+
205
+ #=== プラグイン引数 ignoreUnsigned
206
+ def set_ignoreUnsigned(rhs)
207
+ if rhs == "true" || rhs.nil?
208
+ @b_ignoreUnsigned = true
209
+ end
210
+ end
211
+
212
+ def set_include_inner_cell(rhs)
213
+ if rhs == "true" || rhs.nil?
214
+ @include_inner_cell = true
215
+ end
216
+ end
217
+
218
+ def set_exclude_cell(rhs)
219
+ cells = rhs.split ","
220
+ cells.each{|rhs_cell|
221
+ rhs_cell.gsub!(/\s/, "")
222
+ @exclude_cells << rhs_cell.to_sym
223
+ }
224
+ end
225
+
226
+ def set_exclude_port(rhs)
227
+ ports = rhs.split ","
228
+ ct = @cell.get_celltype
229
+ return if ct.nil? # error case
230
+ ports.each{|rhs_port|
231
+ obj = ct.find(rhs_port.to_sym)
232
+ if (!obj.instance_of? Port) || obj.get_port_type != :ENTRY
233
+ cdl_error("MRB9999 exclude_port '$1' not found or not entry in celltype '$2'", rhs_port, ct.get_name)
234
+ else
235
+ # print "MRBBridgeCellPlugin: exclude #{rhs_port}\n"
236
+ @exclude_port << rhs_port
237
+ end
238
+ }
239
+ end
240
+
241
+ #=== プラグイン引数 exclude_port_func
242
+ def set_exclude_port_func(rhs)
243
+ port_funcs = rhs.split ","
244
+ ct = @celltype
245
+ return if ct.nil? # error case
246
+ port_funcs.each{|rhs_port_func|
247
+ port_func = rhs_port_func.split(".")
248
+ if port_func.length != 2
249
+ cdl_error("MRB9999 exclude_port_func: '$1' not in 'port.func' form", rhs_port_func)
250
+ end
251
+ obj = ct.find(port_func[0].to_sym)
252
+ if (!obj.instance_of? Port) || obj.get_port_type != :ENTRY
253
+ cdl_error("MRB9999 exclude_port_func: port '$1' not found in celltype '$2'", rhs_port_func, ct.get_name)
254
+ else
255
+ signature = obj.get_signature
256
+ next if signature.nil? # error case
257
+ if signature.get_function_head port_func[1].to_sym
258
+ # print "MRBBridgeCellPlugin: #{port_func[0]}.#{port_func[1]} exclude\n"
259
+ if @exclude_port_func[port_func[0]]
260
+ @exclude_port_func[port_func[0]] << port_func[1]
261
+ else
262
+ @exclude_port_func[port_func[0]] = [port_func[1]]
263
+ end
264
+ else
265
+ cdl_error("MRB9999 include_port_func: func '$1' not found in port '$2' celltype $3",
266
+ port_func[1], port_func[0], ct.get_name)
267
+ end
268
+ end
269
+ }
270
+ end
271
+
272
+ #=== プラグイン引数 auto_exclude
273
+ def set_auto_exclude(rhs)
274
+ # print "MrubyBridgeCellPlugin: auto_exclude=#{rhs}\n"
275
+ if rhs == "false"
276
+ @b_auto_exclude = false
277
+ elsif rhs == "true"
278
+ @b_auto_exclude = true # auto_exclude = true by default
279
+ else
280
+ cdl_warning("MRB9999 auto_exclude: unknown rhs value ignored. specify true or false")
281
+ end
282
+ end
283
+ end
@@ -0,0 +1,277 @@
1
+ # coding: utf-8
2
+ module MrubyBridgeSignaturePluginModule
3
+
4
+ # プラグイン引数名 => Proc
5
+ MrubyBridgePluginArgProc = {
6
+ "ignoreUnsigned" => Proc.new { |obj,rhs| obj.set_ignoreUnsigned rhs },
7
+ "include" => Proc.new { |obj,rhs| obj.set_include rhs },
8
+ "exclude" => Proc.new { |obj,rhs| obj.set_exclude rhs },
9
+ "auto_exclude" => Proc.new { |obj,rhs| obj.set_auto_exclude rhs },
10
+ }
11
+
12
+ @@celltypes = { } # {celltype_name => [ BridgePlugin のインスタンスの配列 }
13
+ @@init_celltypes = { } # {celltype_name => [ BridgePlugin のインスタンスの配列 }
14
+ @@struct_list = { } # {struct_name=>StructType}
15
+ @@ptr_list = { } # {ptr_celltype_name=> @@TYPE_MAP の対応するもの}
16
+ @@VM_list = { } # VM_name => true
17
+ @@VM_celltypes = { } # VM_name => { @celltype_name => セルの配列 }
18
+ @@VM_struct_list = { } # {name=>StructType}
19
+ @@VM_ptr_list = { } # { VM_name => {name=> @@TYPE_MAP の対応するもの} }
20
+ @@TYPE_MAP = { # type_str class GET_SET
21
+ :char_t => [:char_t, "Char", :Char, :INT ],
22
+ :uchar_t => [:uchar_t, "UChar", :Char, :INT ],
23
+ :schar_t => [:schar_t, "SChar", :Char, :INT ],
24
+
25
+ :bool_t => [:bool_t, "Bool", :Bool, :BOOL ],
26
+ :int8_t => [:int8_t, "Int8", :Int, :INT ],
27
+ :int16_t => [:int16_t, "Int16", :Int, :INT ],
28
+ :int32_t => [:int32_t, "Int32", :Int, :INT ],
29
+ :int64_t => [:int64_t, "Int64", :Int, :INT ],
30
+ :uint8_t => [:uint8_t, "UInt8", :Int, :INT ],
31
+ :uint16_t => [:uint16_t, "UInt16", :Int, :INT ],
32
+ :uint32_t => [:uint32_t, "UInt32", :Int, :INT ],
33
+ :uint64_t => [:uint64_t, "UInt64", :Int, :INT ],
34
+
35
+ :int => [:int, "Int", :Int, :INT ],
36
+ :char => [:char, "Char", :Char, :INT ], # char は char_t として扱う
37
+ :short => [:short, "Short", :Int, :INT ],
38
+ :long => [:long, "Long", :Int, :INT ],
39
+
40
+ :"unsigned char" => [:uchar_t, "UChar", :Char, :INT ],
41
+ :"unsigned int" => [:"unsigned int", "UInt", :Int, :INT ],
42
+ :"unsigned short" => [:"unsigned short", "UShort", :Int, :INT ],
43
+ :"unsigned long" => [:"unsigned long", "ULong", :Int, :INT ],
44
+ :"signed char" => [:schar_t, "SChar", :Char, :INT ],
45
+ :"signed int" => [:int, "Int", :Int, :INT ],
46
+ :"signed short" => [:short, "Short", :Int, :INT ],
47
+ :"signed long" => [:long, "Long", :Int, :INT ],
48
+
49
+ :float32_t => [:float32_t, "Float32", :Float, :FLOAT ],
50
+ :double64_t => [:double64_t,"Double64", :Float, :FLOAT ],
51
+
52
+ :float => [:float, "Float32", :Float, :FLOAT ],
53
+ :double => [:double, "Double64", :Float, :FLOAT ]
54
+ }
55
+
56
+ def gen_preamble_ptr( file, b_singleton, ct_name, global_ct_name )
57
+ tment = @@ptr_list[ ct_name ]
58
+ file.print <<EOT
59
+
60
+ GET_SET_#{tment[3]}( #{tment[1]}, #{tment[0]} )
61
+ POINTER_CLASS( #{tment[1]}, #{tment[0]} )
62
+ EOT
63
+ end
64
+
65
+ def gen_preamble_struct( file, b_singleton, ct_name, global_ct_name )
66
+ tag = ct_name
67
+ structType = @@struct_list[ tag ]
68
+ file.print <<EOT
69
+ /* struct #{tag} */
70
+ STRUCT_CLASS( #{tag} )
71
+ EOT
72
+ structType.get_members_decl.get_items.each{ |d|
73
+ type = d.get_type.get_original_type
74
+ case type
75
+ when IntType, CIntType
76
+ bit_size = type.get_bit_size
77
+ case bit_size
78
+ when -11, -1
79
+ tType = "Char"
80
+ ttype = "char"
81
+ when -2
82
+ tType = "Short"
83
+ ttype = "short"
84
+ when -3
85
+ tType = "Int"
86
+ ttype = "int"
87
+ when -4
88
+ tType = "Long"
89
+ ttype = "long"
90
+ when -5
91
+ tType = "IntPtr"
92
+ ttype = "intptr"
93
+ when 8, 16, 32, 64
94
+ tType = "Int#{bit_size}"
95
+ ttype = "int#{bit_size}"
96
+ else
97
+ raise "MrubyBridgeSignaturePlugin: MrubyBridgeSignaturePlugin: cannot handle bit_size #{bit_size}"
98
+ end
99
+ file.print "MEMBER_GET_SET_INT( #{tag}, #{d.get_name}, #{tType}, #{ttype} )\n"
100
+ when FloatType, CFloatType
101
+ file.print "MEMBER_GET_SET_FLOAT( #{tag}, #{d.get_name} )\n"
102
+ else
103
+ raise "MrubyBridgeSignaturePlugin: MrubyBridgeSignaturePlugin: cannot handle type"
104
+ end
105
+ }
106
+ end
107
+
108
+ def gen_ep_func_body_ptr( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
109
+
110
+ t = @@ptr_list[ct_name]
111
+ type = t[1]
112
+ file.print <<EOT
113
+ struct RClass *a; /* MBP710 */
114
+
115
+ a = mrb_define_class_under(mrb, TECS, "#{type}Pointer", mrb->object_class);
116
+ MRB_SET_INSTANCE_TT(a, MRB_TT_DATA);
117
+
118
+ mrb_define_method(mrb, a, "initialize", #{type}Pointer_initialize, MRB_ARGS_REQ(1));
119
+ mrb_define_method(mrb, a, "[]", #{type}Pointer_aget, MRB_ARGS_REQ(1));
120
+ mrb_define_method(mrb, a, "value", #{type}Pointer_get_val, MRB_ARGS_NONE());
121
+ mrb_define_method(mrb, a, "[]=", #{type}Pointer_aset, MRB_ARGS_REQ(2));
122
+ mrb_define_method(mrb, a, "value=", #{type}Pointer_set_val, MRB_ARGS_REQ(1));
123
+ mrb_define_method(mrb, a, "size", #{type}Pointer_size, MRB_ARGS_NONE());
124
+ mrb_define_method(mrb, a, "length", #{type}Pointer_size, MRB_ARGS_NONE());
125
+ EOT
126
+
127
+ if t[2] == :Char then
128
+ file.print <<EOT
129
+ mrb_define_method(mrb, a, "to_s", CharPointer_to_s, MRB_ARGS_NONE());
130
+ mrb_define_method(mrb, a, "from_s", CharPointer_from_s, MRB_ARGS_REQ(1));
131
+ EOT
132
+ end
133
+ end
134
+
135
+ def gen_ep_func_body_struct( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
136
+ tag = ct_name
137
+ structType = @@struct_list[ tag ]
138
+ file.print <<EOT
139
+ struct RClass *a; /* MBP720 */
140
+
141
+ a = mrb_define_class_under(mrb, TECS, "Struct#{tag}", mrb->object_class);
142
+ MRB_SET_INSTANCE_TT(a, MRB_TT_DATA);
143
+
144
+ mrb_define_method(mrb, a, "initialize", Struct_#{tag}_initialize, MRB_ARGS_NONE());
145
+ EOT
146
+
147
+ structType.get_members_decl.get_items.each{ |d|
148
+ file.print " STRUCT_INIT_MEMBER( #{tag}, #{d.get_name} )\n"
149
+ }
150
+ end
151
+
152
+ def ptrMrb2C file, type, param
153
+ ttype = type.get_type.get_original_type
154
+ tment = get_type_map_ent ttype
155
+ tstr = tment[1]
156
+ =begin
157
+ case ttype
158
+ when IntType
159
+ bit_size = ttype.get_bit_size
160
+ case bit_size
161
+ when -1, -11
162
+ tstr = "Char"
163
+ when 8, 16, 32, 64
164
+ tstr = "Int#{bit_size}"
165
+ when -2
166
+ tstr = "Short"
167
+ when -3
168
+ tstr = "Int"
169
+ when -4
170
+ tstr = "Long"
171
+ when -5
172
+ tstr = "IntPtr"
173
+ else
174
+ raise "MrubyBridgeSignaturePlugin: not handle type"
175
+ end
176
+ when FloatType
177
+ if ttype.get_bit_size == 32 then
178
+ tstr = "Float32"
179
+ else
180
+ tstr = "Double64"
181
+ end
182
+ when BoolType
183
+ tstr = "Bool"
184
+ when StructType
185
+ raise "MrubyBridgeSignaturePlugin: not handle type 2 #{ttype}"
186
+ else
187
+ raise "MrubyBridgeSignaturePlugin: not handle type 2 #{ttype}"
188
+ end
189
+ =end
190
+ if( param.get_size ) then
191
+ sz_str = param.get_size.to_s
192
+ elsif param.get_string then # mikan とりあえず size_is と string の同時指定 (二重ポインタ) はなし
193
+ sz_str = param.get_string.to_s
194
+ else
195
+ sz_str = "1"
196
+ end
197
+ # unsigned 型の場合には cast が必要
198
+ if ttype.get_original_type.get_type_str != param.get_type.get_type.get_type_str then
199
+ cast_str = "(#{param.get_type.get_type_str})"
200
+ else
201
+ cast_str = ""
202
+ end
203
+
204
+ modify = ""
205
+ case param.get_direction
206
+ when :OUT, :INOUT
207
+ case tstr
208
+ when "Char", "SChar", "UChar"
209
+ modify = "Mod"
210
+ end
211
+ end
212
+ if param.is_nullable? then
213
+ nullable = "Nullable"
214
+ else
215
+ nullable = ""
216
+ end
217
+
218
+ # file.print " CHECK_POINTER( #{tstr}, mrb_#{param.get_name}, #{sz_str} );\n"
219
+ # file.print " #{param.get_name} = #{cast_str}((struct #{tstr}PointerBody*)(DATA_PTR(mrb_#{param.get_name})))->buf;\n"
220
+ file.print " #{param.get_name} = CheckAndGet#{tstr}Pointer#{modify}#{nullable}( mrb, mrb_#{param.get_name}, #{sz_str} );\n"
221
+ end
222
+
223
+ def get_celltype_name
224
+ @celltype_name
225
+ end
226
+
227
+ #=== プラグイン引数 ignoreUnsigned
228
+ def set_ignoreUnsigned rhs
229
+ if rhs == "true" || rhs == nil then
230
+ @b_ignoreUnsigned = true
231
+ end
232
+ end
233
+
234
+ #=== プラグイン引数 include
235
+ def set_include rhs
236
+ funcs = rhs.split ','
237
+ funcs.each{ |rhs_func|
238
+ found = false
239
+ rhs_func.gsub!( /\s/, "" )
240
+ @signature.get_function_head_array.each{ |a|
241
+ if rhs_func.to_sym == a.get_name then
242
+ found = true
243
+ end
244
+ }
245
+ if found == false then
246
+ cdl_error( "MRB1009 include function '$1' not found in signagture '$2'", rhs, @signature.get_name )
247
+ else
248
+ @includes << rhs_func.to_sym
249
+ end
250
+ }
251
+ end
252
+
253
+ #=== プラグイン引数 exclude
254
+ def set_exclude rhs
255
+ funcs = rhs.split ','
256
+ funcs.each{ |rhs_func|
257
+ rhs_func.gsub!( /\s/, "" )
258
+ func_head = @signature.get_function_head rhs_func.to_sym
259
+ if func_head == false then
260
+ cdl_error( "MRB1010 exclude function '$1' not found in signagture '$2", rhs, @signature.get_name )
261
+ else
262
+ @excludes << rhs_func.to_sym
263
+ end
264
+ }
265
+ end
266
+
267
+ #=== プラグイン引数 auto_exclude
268
+ def set_auto_exclude rhs
269
+ if rhs == "false" then
270
+ @b_auto_exclude = false
271
+ elsif rhs == "true" then
272
+ @b_auto_exclude = true # auto_exclude = true by default
273
+ else
274
+ cdl_warning( "MRB9999 auto_exclude: unknown rhs value ignored. specify true or false" )
275
+ end
276
+ end
277
+ end