- Timestamp:
- Aug 23, 2017, 9:27:43 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgePlugin.rb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby;charset=UTF-8
r270 r321 5 5 # Copyright (C) 2008-2015 by TOPPERS Project 6 6 # 7 # ä¸è¨èä½æ¨©è 8 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 9 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 10 # å¤ã»åé 11 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 12 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 13 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 14 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 15 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 16 # ç¨ã§ããå½¢ã§åé 17 å¸ããå ´åã«ã¯ï¼åé 18 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 19 # è 20 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 21 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 22 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 23 # ç¨ã§ããªãå½¢ã§åé 24 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 25 # ã¨ï¼ 26 # (a) åé 27 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 28 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 29 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 30 # (b) åé 31 å¸ã®å½¢æ 32 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 33 # å ±åãããã¨ï¼ 34 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 35 # 害ãããï¼ä¸è¨èä½æ¨©è 36 ããã³TOPPERSããã¸ã§ã¯ããå 37 責ãããã¨ï¼ 38 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 39 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ãã 41 # å 42 責ãããã¨ï¼ 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 # 免責すること. 43 29 # 44 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 45 ã 46 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 47 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 48 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 49 # ã®è²¬ä»»ãè² ããªãï¼ 30 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 31 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 32 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 33 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 34 # の責任を負わない. 50 35 # 51 # $Id : MrubyBridgePlugin.rb 1011 2016-07-11 02:20:01Z coas-nagasima$36 # $Id$ 52 37 # 53 38 54 39 # Todo: 55 # çæãããã®40 # 生成するもの 56 41 # gen_cdl_file 57 # ããªãã¸åæåã»ã«ã¿ã¤ã (ã·ã°ããã£ãã¨)58 # @@init_celltypes ã«è¨é²59 # ããªãã¸ã»ã«ã¿ã¤ã (ã·ã°ããã£ãã¨)60 # @@celltypes ã«è¨é²61 # æ§é ä½ã»ã«ã¿ã¤ã62 # @@struct_list ã«è¨é²42 # ブリッジ初期化セルタイプ (シグニチャごと) 43 # @@init_celltypes に記録 44 # ブリッジセルタイプ (シグニチャごと) 45 # @@celltypes に記録 46 # 構造体セルタイプ 47 # @@struct_list に記録 63 48 # new_cell 64 # TECS åæåã»ã«(ãããã¿ã¤ã宣è¨)65 # @@VM_init_cells ã«è¨é²66 # @@VM_struct_list ã«è¨é²67 # @@VM_ptr_list ã«è¨é²49 # TECS 初期化セル(プロトタイプ宣言) 50 # @@VM_init_cells に記録 51 # @@VM_struct_list に記録 52 # @@VM_ptr_list に記録 68 53 # gen_post_code 69 # æ§é ä½åæåã»ã«70 # ãã¤ã³ã¿åæåã»ã«71 # TECS åæåã»ã«54 # 構造体初期化セル 55 # ポインタ初期化セル 56 # TECS 初期化セル 72 57 # 73 # ep_func ã®ä½æ74 # signature, ãã¤ã³ã¿ãæ§é ä½ â¦ åæååãå£ï¼mruby VM ã¸ã®ç»é²75 # ãã¤ã³ã¿76 # preamble ã®ä½æ77 # ãã¤ã³ã¿ãæ§é ä½ â¦ ã¢ã¯ã»ã¹ç¨ã³ã¼ãã®çæ78 # signature ⦠ããªãã¸é¢æ°ã®ãããã¿ã¤ã宣è¨79 # postamble ã®ä½æ80 # signature ⦠ããªãã¸é¢æ°ã®å®ç¾©58 # ep_func の作成 59 # signature, ポインタ、構造体 … 初期化受け口=mruby VM への登録 60 # ポインタ 61 # preamble の作成 62 # ポインタ、構造体 … アクセス用コードの生成 63 # signature … ブリッジ関数のプロトタイプ宣言 64 # postamble の作成 65 # signature … ブリッジ関数の定義 81 66 82 67 class MrubyBridgePlugin < SignaturePlugin 83 68 84 # ãã©ã°ã¤ã³å¼æ°å=> Proc69 # プラグイン引数名 => Proc 85 70 MrubyBridgePluginArgProc = { 86 71 "ignoreUnsigned" => Proc.new { |obj,rhs| obj.set_ignoreUnsigned rhs }, … … 89 74 } 90 75 91 @@celltypes = { } # {celltype_name => [ BridgePlugin ã®ã¤ã³ã¹ã¿ã³ã¹ã®é 92 å } 93 @@init_celltypes = { } # {celltype_name => [ BridgePlugin ã®ã¤ã³ã¹ã¿ã³ã¹ã®é 94 å } 76 @@celltypes = { } # {celltype_name => [ BridgePlugin のインスタンスの配列 } 77 @@init_celltypes = { } # {celltype_name => [ BridgePlugin のインスタンスの配列 } 95 78 @@struct_list = { } # {struct_name=>StructType} 96 @@ptr_list = { } # {ptr_celltype_name=> @@TYPE_MAP ã®å¯¾å¿ãããã®}79 @@ptr_list = { } # {ptr_celltype_name=> @@TYPE_MAP の対応するもの} 97 80 @@VM_list = { } # VM_name => true 98 @@VM_celltypes = { } # VM_name => { @celltype_name => ã»ã«ã®é 99 å } 81 @@VM_celltypes = { } # VM_name => { @celltype_name => セルの配列 } 100 82 @@VM_struct_list = { } # {name=>StructType} 101 @@VM_ptr_list = { } # { VM_name => {name=> @@TYPE_MAP ã®å¯¾å¿ãããã®} }83 @@VM_ptr_list = { } # { VM_name => {name=> @@TYPE_MAP の対応するもの} } 102 84 @@TYPE_MAP = { # type_str class GET_SET 103 85 :char_t => [:char_t, "Char", :Char, :INT ], … … 116 98 117 99 :int => [:int, "Int", :Int, :INT ], 118 :char => [:char, "Char", :Char, :INT ], # char 㯠char_t ã¨ãã¦æ±ã100 :char => [:char, "Char", :Char, :INT ], # char は char_t として扱う 119 101 :short => [:short, "Short", :Int, :INT ], 120 102 :long => [:long, "Long", :Int, :INT ], … … 138 120 # included or excluded functions 139 121 140 ### ãã¼ããããæç¹ã§å®è¡ããã###141 142 # -I ã« $(TECSPATH)/mruby ã追å122 ### ロードされた時点で実行される ### 123 124 # -I に $(TECSPATH)/mruby を追加 143 125 # TECSGEN::Makefile.add_obj "$(MRUBY_MAIN_OBJ)" 144 126 TECSGEN::Makefile.add_ldflag "-lmruby -L$(MRUBYPATH)/lib -lm" … … 148 130 149 131 150 #=== ãã©ã°ã¤ã³ã¤ã³ã¹ã¿ã³ã¹ã®åæå151 # æ»ãå¤ãå¼æ°ã®åã使ç¨å¯è½ãªãã®ããã§ãã¯ãã132 #=== プラグインインスタンスの初期化 133 # 戻り値、引数の型が使用可能なものかチェックする 152 134 # 153 135 def initialize( signature, option ) … … 178 160 179 161 if signature.get_function_head_array == nil then 180 return # 以åã«ææ³ã¨ã©ã¼çºç162 return # 以前に文法エラー発生 181 163 end 182 164 … … 257 239 when FloatType 258 240 when PtrType 259 ttype_org = type_org.get_type # ãã¤ã³ã¿ã®æãã¦ããå 260 ã®å 261 ttype = ttype_org.get_original_type # ä¸è¨ã® typedef ããã¦ããå ´åãå 262 ã®å 241 ttype_org = type_org.get_type # ポインタの指している先の型 242 ttype = ttype_org.get_original_type # 上記の typedef されている場合、元の型 263 243 register_ptr_type ttype_org 264 244 … … 298 278 end 299 279 300 #=== æ§é ä½ã®ã¡ã³ãã¼ã®åã®ãã§ãã¯280 #=== 構造体のメンバーの型のチェック 301 281 def check_struct_member struct_type 302 282 #p "tag name:#{struct_type.get_name}" … … 345 325 return 346 326 end 347 tstr = ttype.get_type_str.sub( /const /, "" ) # const ã¯ç¡è¦348 tstr = tstr.sub( /volatile /, "" ) # volatile ãç¡è¦327 tstr = ttype.get_type_str.sub( /const /, "" ) # const は無視 328 tstr = tstr.sub( /volatile /, "" ) # volatile も無視 349 329 if @b_ignoreUnsigned then 350 tstr = tstr.sub( /unsigned /, "" ) # volatile ãç¡è¦351 tstr = tstr.sub( /uint/, "int" ) # volatile ãç¡è¦352 tstr = tstr.sub( /[cs]char/, "char" ) # volatile ãç¡è¦330 tstr = tstr.sub( /unsigned /, "" ) # volatile も無視 331 tstr = tstr.sub( /uint/, "int" ) # volatile も無視 332 tstr = tstr.sub( /[cs]char/, "char" ) # volatile も無視 353 333 end 354 334 return @@TYPE_MAP[ tstr.to_sym ] 355 335 end 356 336 357 #=== CDL ãã¡ã¤ã«ã®çæ358 # typedef, signature, celltype, cell ã³ã¼ããçæ359 #file:: FILE çæãããã¡ã¤ã«337 #=== CDL ファイルの生成 338 # typedef, signature, celltype, cell コードを生成 339 #file:: FILE 生成するファイル 360 340 def gen_cdl_file(file) 361 341 362 # ããªãã¸ã»ã«ã¿ã¤ãã®çæ342 # ブリッジセルタイプの生成 363 343 if @@celltypes[ @celltype_name ] == nil then 364 344 @@celltypes[ @celltype_name ] = [ self ] … … 389 369 EOT 390 370 391 # æ§é ä½ã»ã«ã¿ã¤ãã®çæ371 # 構造体セルタイプの生成 392 372 @struct_list.each{ |name, sttype| 393 373 if @@struct_list[ name ] == nil then … … 410 390 end 411 391 412 #=== gen_cdl_file ã§å®ç¾©ããã»ã«ã¿ã¤ãã« æ°ããã»ã«ãå®ç¾©ããã413 # cell ã®ã»ã«ã¿ã¤ãã®ååã¯@celltype_name392 #=== gen_cdl_file で定義したセルタイプに 新しいセルが定義された 393 # cell のセルタイプの名前は @celltype_name 414 394 def new_cell cell 415 395 if cell.get_celltype.get_name != @celltype_name then … … 430 410 file = CFile.open( initializer_celltype_cdl, "w" ) 431 411 432 # TECS åæåã»ã«(ãããã¿ã¤ã宣è¨)412 # TECS 初期化セル(プロトタイプ宣言) 433 413 print_msg " MrubyBridgePlugin: join your VM's cInitialize to #{vm_name}_TECSInitializer.eInitialize\n" 434 414 … … 475 455 end 476 456 477 #=== ãã©ã°ã¤ã³ã CDL ã® POST ã³ã¼ããçæ478 # tmp_plugin_post_code.cdl ã¸ã®åºå457 #=== プラグインが CDL の POST コードを生成 458 # tmp_plugin_post_code.cdl への出力 479 459 def self.gen_post_code file 480 460 … … 498 478 # EOT 499 479 500 # gen_post_code ã§çæãã celltype 㯠gen_ep_func ãå¼ã³åºãããªã#847480 # gen_post_code で生成した celltype は gen_ep_func が呼び出されない #847 501 481 # @@struct_list.each{ |name,sttype| 502 482 # file.print <<EOT … … 566 546 end 567 547 568 ####### 以ä¸ã³ã¼ãçæ段é######569 570 #=== åãå£é¢æ°ã®æ¬ä½ã³ã¼ããçæï¼é é¨ã¨æ«å°¾ã¯å¥éåºåï¼571 #ct_name:: Symbol ( ãã©ã°ã¤ã³ã§çæããã) ã»ã«ã¿ã¤ãå ï¼Symbol ã¨ãã¦éããã¦ãã548 ####### 以下コード生成段階 ###### 549 550 #=== 受け口関数の本体コードを生成(頭部と末尾は別途出力) 551 #ct_name:: Symbol (プラグインで生成された) セルタイプ名 .Symbol として送られてくる 572 552 def gen_ep_func_body( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params ) 573 553 if @@celltypes[ ct_name ] then … … 673 653 end 674 654 675 #=== åãå£é¢æ°ã® preamble (Cè¨èª)ãçæãã 676 # å¿ 677 è¦ãªã preamble é¨ã«åºåãã 678 #file:: FILE åºåå 679 ãã¡ã¤ã« 655 #=== 受け口関数の preamble (C言語)を生成する 656 # 必要なら preamble 部に出力する 657 #file:: FILE 出力先ファイル 680 658 #b_singleton:: bool true if singleton 681 659 #ct_name:: Symbol … … 1135 1113 if( param.get_size ) then 1136 1114 sz_str = param.get_size.to_s 1137 elsif param.get_string then # mikan ã¨ãããã size_is 㨠string ã®åææå® (äºéãã¤ã³ã¿) ã¯ãªã1115 elsif param.get_string then # mikan とりあえず size_is と string の同時指定 (二重ポインタ) はなし 1138 1116 sz_str = param.get_string.to_s 1139 1117 else 1140 1118 sz_str = "1" 1141 1119 end 1142 # unsigned åã®å ´åã«ã¯ cast ãå¿ 1143 è¦ 1120 # unsigned 型の場合には cast が必要 1144 1121 if ttype.get_original_type.get_type_str != param.get_type.get_type.get_type_str then 1145 1122 cast_str = "(#{param.get_type.get_type_str})" … … 1171 1148 end 1172 1149 1173 #=== ãã©ã°ã¤ã³å¼æ°ignoreUnsigned1150 #=== プラグイン引数 ignoreUnsigned 1174 1151 def set_ignoreUnsigned rhs 1175 1152 if rhs == "true" || rhs == nil then … … 1177 1154 end 1178 1155 end 1179 #=== ãã©ã°ã¤ã³å¼æ°include1156 #=== プラグイン引数 include 1180 1157 def set_include rhs 1181 1158 funcs = rhs.split ',' … … 1195 1172 } 1196 1173 end 1197 #=== ãã©ã°ã¤ã³å¼æ°exclude1174 #=== プラグイン引数 exclude 1198 1175 def set_exclude rhs 1199 1176 funcs = rhs.split ',' -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.