Ignore:
Timestamp:
Aug 23, 2017, 9:27:43 AM (7 years ago)
Author:
coas-nagasima
Message:

文字コードを設定

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 to text/x-ruby;charset=UTF-8
    r270 r321  
    55#   Copyright (C) 2008-2015 by TOPPERS Project
    66#
    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#       免責すること.
    4329
    44 #   æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ï¼Œç„¡ä¿è¨¼ã§æä¾›ã•ã‚Œã¦ã„るものである.上記著作権è€
    45 ãŠ
    46 #   ã‚ˆã³TOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    47 #   ã«å¯¾ã™ã‚‹é©åˆæ€§ã‚‚含めて,いかなる保証も行わない.また,本ソフトウェ
    48 #   ã‚¢ã®åˆ©ç”¨ã«ã‚ˆã‚Šç›´æŽ¥çš„または間接的に生じたいかなる損害に関しても,そ
    49 #   ã®è²¬ä»»ã‚’負わない.
     30#   本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     31#   よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     32#   に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     33#   アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     34#   の責任を負わない.
    5035
    51 #   $Id: MrubyBridgePlugin.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
     36#   $Id$
    5237#
    5338
    5439# Todo:
    55 # 生成するもの
     40# 生成するもの
    5641#  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 に記録
    6348#  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 に記録
    6853#  gen_post_code
    69 #    構造体初期化セル
    70 #    ポインタ初期化セル
    71 #    TECS 初期化セル
     54#    構造体初期化セル
     55#    ポインタ初期化セル
     56#    TECS 初期化セル
    7257#
    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 … ブリッジ関数の定義
    8166
    8267class MrubyBridgePlugin < SignaturePlugin
    8368
    84   # プラグイン引数名 => Proc
     69  # プラグイン引数名 => Proc
    8570  MrubyBridgePluginArgProc = {
    8671      "ignoreUnsigned" => Proc.new { |obj,rhs| obj.set_ignoreUnsigned rhs },
     
    8974  }
    9075
    91   @@celltypes = { }             # {celltype_name => [ BridgePlugin のインスタンスのé
    92 åˆ— }
    93   @@init_celltypes = { }        # {celltype_name => [ BridgePlugin のインスタンスのé
    94 åˆ— }
     76  @@celltypes = { }             # {celltype_name => [ BridgePlugin のインスタンスの配列 }
     77  @@init_celltypes = { }        # {celltype_name => [ BridgePlugin のインスタンスの配列 }
    9578  @@struct_list = { }           # {struct_name=>StructType}
    96   @@ptr_list = { }              # {ptr_celltype_name=> @@TYPE_MAP の対応するもの}
     79  @@ptr_list = { }              # {ptr_celltype_name=> @@TYPE_MAP の対応するもの}
    9780  @@VM_list = { }               # VM_name => true
    98   @@VM_celltypes = {  }             # VM_name => { @celltype_name => セルのé
    99 åˆ— }
     81  @@VM_celltypes = {  }             # VM_name => { @celltype_name => セルの配列 }
    10082  @@VM_struct_list = { }           # {name=>StructType}
    101   @@VM_ptr_list = { }              # { VM_name => {name=> @@TYPE_MAP の対応するもの} }
     83  @@VM_ptr_list = { }              # { VM_name => {name=> @@TYPE_MAP の対応するもの} }
    10284  @@TYPE_MAP = {           # type_str   class             GET_SET
    10385    :char_t            => [:char_t,    "Char",     :Char,  :INT   ],
     
    11698
    11799    :int               => [:int,       "Int",      :Int,  :INT   ],
    118     :char              => [:char,      "Char",     :Char, :INT   ],    # char は char_t として扱う
     100    :char              => [:char,      "Char",     :Char, :INT   ],    # char は char_t として扱う
    119101    :short             => [:short,     "Short",    :Int,  :INT   ],
    120102    :long              => [:long,      "Long",     :Int,  :INT   ],
     
    138120  # included  or excluded functions
    139121
    140   ### ロードされた時点で実行される ###
    141 
    142   # -I に $(TECSPATH)/mruby を追加
     122  ### ロードされた時点で実行される ###
     123
     124  # -I に $(TECSPATH)/mruby を追加
    143125  # TECSGEN::Makefile.add_obj "$(MRUBY_MAIN_OBJ)"
    144126  TECSGEN::Makefile.add_ldflag "-lmruby -L$(MRUBYPATH)/lib -lm"
     
    148130
    149131
    150   #=== プラグインインスタンスの初期化
    151   # 戻り値、引数の型が使用可能なものかチェックする
     132  #=== プラグインインスタンスの初期化
     133  # 戻り値、引数の型が使用可能なものかチェックする
    152134  #
    153135  def initialize( signature, option )
     
    178160
    179161    if signature.get_function_head_array == nil then
    180       return   # 以前に文法エラー発生
     162      return   # 以前に文法エラー発生
    181163    end
    182164
     
    257239        when FloatType
    258240        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 されている場合、元の型
    263243          register_ptr_type ttype_org
    264244
     
    298278  end
    299279
    300   #=== 構造体のメンバーの型のチェック
     280  #=== 構造体のメンバーの型のチェック
    301281  def check_struct_member struct_type
    302282    #p "tag name:#{struct_type.get_name}"
     
    345325      return
    346326    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 も無視
    349329    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 も無視
    353333    end
    354334    return @@TYPE_MAP[ tstr.to_sym ]
    355335  end
    356336
    357   #===  CDL ファイルの生成
    358   #      typedef, signature, celltype, cell コードを生成
    359   #file::        FILE       ç”Ÿæˆã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«
     337  #===  CDL ファイルの生成
     338  #      typedef, signature, celltype, cell コードを生成
     339  #file::        FILE       生成するファイル
    360340  def gen_cdl_file(file)
    361341
    362     # ブリッジセルタイプの生成
     342    # ブリッジセルタイプの生成
    363343    if @@celltypes[ @celltype_name ] == nil then
    364344      @@celltypes[ @celltype_name ] = [ self ]
     
    389369EOT
    390370
    391       # 構造体セルタイプの生成
     371      # 構造体セルタイプの生成
    392372      @struct_list.each{ |name, sttype|
    393373        if @@struct_list[ name ] == nil then
     
    410390  end
    411391
    412   #=== gen_cdl_file で定義したセルタイプに 新しいセルが定義された
    413   # cell のセルタイプの名前は @celltype_name
     392  #=== gen_cdl_file で定義したセルタイプに 新しいセルが定義された
     393  # cell のセルタイプの名前は @celltype_name
    414394  def new_cell cell
    415395    if cell.get_celltype.get_name != @celltype_name then
     
    430410      file = CFile.open( initializer_celltype_cdl, "w" )
    431411
    432       # TECS 初期化セル(プロトタイプ宣言)
     412      # TECS 初期化セル(プロトタイプ宣言)
    433413      print_msg "  MrubyBridgePlugin: join your VM's cInitialize to #{vm_name}_TECSInitializer.eInitialize\n"
    434414
     
    475455  end
    476456
    477   #=== プラグインが CDL の POST コードを生成
    478   # tmp_plugin_post_code.cdl への出力
     457  #=== プラグインが CDL の POST コードを生成
     458  # tmp_plugin_post_code.cdl への出力
    479459  def self.gen_post_code file
    480460
     
    498478# EOT
    499479
    500 # gen_post_code で生成した celltype は gen_ep_func が呼び出されない #847
     480# gen_post_code で生成した celltype は gen_ep_func が呼び出されない #847
    501481#    @@struct_list.each{ |name,sttype|
    502482#      file.print <<EOT
     
    566546  end
    567547
    568   ####### 以下コード生成段階 ######
    569 
    570   #===  受け口関数の本体コードを生成(頭部と末尾は別途出力)
    571   #ct_name:: Symbol    (プラグインで生成された) セルタイプ名 .Symbol として送られてくる
     548  ####### 以下コード生成段階 ######
     549
     550  #===  受け口関数の本体コードを生成(頭部と末尾は別途出力)
     551  #ct_name:: Symbol    (プラグインで生成された) セルタイプ名 .Symbol として送られてくる
    572552  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 )
    573553    if @@celltypes[ ct_name ] then
     
    673653  end
    674654
    675   #===  受け口関数の preamble (C言語)を生成する
    676   #     å¿
    677 è¦ãªã‚‰ preamble 部に出力する
    678   #file::           FILE        出力å
    679 ˆãƒ•ã‚¡ã‚¤ãƒ«
     655  #===  受け口関数の preamble (C言語)を生成する
     656  #     必要なら preamble 部に出力する
     657  #file::           FILE        出力先ファイル
    680658  #b_singleton::    bool        true if singleton
    681659  #ct_name::        Symbol
     
    11351113    if( param.get_size ) then
    11361114      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 の同時指定 (二重ポインタ) はなし
    11381116      sz_str = param.get_string.to_s
    11391117    else
    11401118      sz_str = "1"
    11411119    end
    1142     # unsigned 型の場合には cast がå¿
    1143 è¦
     1120    # unsigned 型の場合には cast が必要
    11441121    if ttype.get_original_type.get_type_str != param.get_type.get_type.get_type_str then
    11451122      cast_str = "(#{param.get_type.get_type_str})"
     
    11711148  end
    11721149
    1173   #=== プラグイン引数 ignoreUnsigned
     1150  #=== プラグイン引数 ignoreUnsigned
    11741151  def set_ignoreUnsigned rhs
    11751152    if rhs == "true" || rhs == nil then
     
    11771154    end
    11781155  end
    1179   #=== プラグイン引数 include
     1156  #=== プラグイン引数 include
    11801157  def set_include rhs
    11811158    funcs = rhs.split ','
     
    11951172    }
    11961173  end
    1197   #=== プラグイン引数 exclude
     1174  #=== プラグイン引数 exclude
    11981175  def set_exclude rhs
    11991176    funcs = rhs.split ','
Note: See TracChangeset for help on using the changeset viewer.