Ignore:
Timestamp:
May 22, 2019, 10:03:37 PM (5 years ago)
Author:
coas-nagasima
Message:

ビルドが通るよう更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeSignaturePlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby;charset=UTF-8
    r388 r389  
    55#   Copyright (C) 2008-2017 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
    5136#   $Id$
     
    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 MrubyBridgeSignaturePlugin < SignaturePlugin
    8368
    84   # プラグイン引数名 => Proc
     69  # プラグイン引数名 => Proc
    8570  MrubyBridgePluginArgProc = {
    8671      "ignoreUnsigned" => Proc.new { |obj,rhs| obj.set_ignoreUnsigned rhs },
     
    9277  @@b_no_banner = false         #
    9378  @@b_gen_post_code_by_dependent = false  # true if gen_post_code is called by MrubyBridgeCellPlugin
    94   @@celltypes = { }             # {celltype_name => [ BridgePlugin のインスタンスのé
    95 åˆ— }
    96   @@init_celltypes = { }        # {celltype_name => [ BridgePlugin のインスタンスのé
    97 åˆ— }
     79  @@celltypes = { }             # {celltype_name => [ BridgePlugin のインスタンスの配列 }
     80  @@init_celltypes = { }        # {celltype_name => [ BridgePlugin のインスタンスの配列 }
    9881  @@struct_list = { }           # {struct_name=>StructType}
    99   @@ptr_list = { }              # {ptr_celltype_name=> @@TYPE_MAP の対応するもの}
     82  @@ptr_list = { }              # {ptr_celltype_name=> @@TYPE_MAP の対応するもの}
    10083  @@VM_list = { }               # VM_name => true
    101   @@VM_celltypes = {  }             # VM_name => { @celltype_name => セルのé
    102 åˆ— }
     84  @@VM_celltypes = {  }             # VM_name => { @celltype_name => セルの配列 }
    10385  @@VM_struct_list = { }           # {name=>StructType}
    104   @@VM_ptr_list = { }              # { VM_name => {name=> @@TYPE_MAP の対応するもの} }
     86  @@VM_ptr_list = { }              # { VM_name => {name=> @@TYPE_MAP の対応するもの} }
    10587  @@TYPE_MAP = {           # type_str   class             GET_SET
    10688    :char_t            => [:char_t,    "Char",     :Char,  :INT   ],
     
    119101
    120102    :int               => [:int,       "Int",      :Int,  :INT   ],
    121     :char              => [:char,      "Char",     :Char, :INT   ],    # char は char_t として扱う
     103    :char              => [:char,      "Char",     :Char, :INT   ],    # char は char_t として扱う
    122104    :short             => [:short,     "Short",    :Int,  :INT   ],
    123105    :long              => [:long,      "Long",     :Int,  :INT   ],
     
    141123  # included  or excluded functions
    142124
    143   ### ロードされた時点で実行される ###
    144 
    145   # -I に $(TECSPATH)/mruby を追加
     125  ### ロードされた時点で実行される ###
     126
     127  # -I に $(TECSPATH)/mruby を追加
    146128  # TECSGEN::Makefile.add_obj "$(MRUBY_MAIN_OBJ)"
    147129  TECSGEN::Makefile.add_ldflag "-lmruby -L$(MRUBYPATH)/lib -lm"
     
    150132  # TECSGEN::Makefile.add_var "MRUBY_MAIN_OBJ", "$(_TECS_OBJ_DIR)tecs_mruby.o", "CHANGE this if your have your main"
    151133
    152   #=== プラグインインスタンスの初期化
    153   # 戻り値、引数の型が使用可能なものかチェックする
     134  #=== プラグインインスタンスの初期化
     135  # 戻り値、引数の型が使用可能なものかチェックする
    154136  #
    155137  def initialize( signature, option )
     
    184166
    185167    if signature.get_function_head_array == nil then
    186       return   # 以前に文法エラー発生
     168      return   # 以前に文法エラー発生
    187169    end
    188170
     
    281263        when FloatType
    282264        when PtrType
    283           ttype_org = type_org.get_type       # ポインタの指しているå
    284 ˆã®åž‹
    285           ttype = ttype_org.get_original_type # 上記の typedef されている場合、å
    286 ƒã®åž‹
     265          ttype_org = type_org.get_type       # ポインタの指している先の型
     266          ttype = ttype_org.get_original_type # 上記の typedef されている場合、元の型
    287267          register_ptr_type ttype_org, fh
    288268
     
    340320  end
    341321
    342   #=== 構造体のメンバーの型のチェック
     322  #=== 構造体のメンバーの型のチェック
    343323  def check_struct_member struct_type, fh
    344324    #p "tag name:#{struct_type.get_name}"
     
    349329        cdl_info( "MRI9999 tagless-struct cannot be handled, $1 automatcally excluded", fh.get_name )
    350330        @auto_exclude_list[ fh.get_name ] = fh
    351         return  # 登録しないように打ち切る
     331        return  # 登録しないように打ち切る
    352332      else
    353333        cdl_error( "MRB10007 tagless-struct cannot be handled")
     
    363343                    d.get_name, d.get_type.get_type_str + d.get_type.get_type_str_post, fh.get_name )
    364344          @auto_exclude_list[ fh.get_name ] = fh
    365           return  # 登録しないように打ち切る
     345          return  # 登録しないように打ち切る
    366346        else
    367347          cdl_error( "MRB1006 $1: type $2 not allowed for struct member", d.get_name, d.get_type.get_type_str + d.get_type.get_type_str_post )
     
    400380      return
    401381    end
    402     tstr = ttype.get_type_str.sub( /const /, "" )    # const は無視
    403     tstr = tstr.sub( /volatile /, "" )               # volatile も無視
     382    tstr = ttype.get_type_str.sub( /const /, "" )    # const は無視
     383    tstr = tstr.sub( /volatile /, "" )               # volatile も無視
    404384    if @b_ignoreUnsigned then
    405       tstr = tstr.sub( /unsigned /, "" )             # volatile も無視
    406       tstr = tstr.sub( /uint/, "int" )               # volatile も無視
    407       tstr = tstr.sub( /[cs]char/, "char" )          # volatile も無視
     385      tstr = tstr.sub( /unsigned /, "" )             # volatile も無視
     386      tstr = tstr.sub( /uint/, "int" )               # volatile も無視
     387      tstr = tstr.sub( /[cs]char/, "char" )          # volatile も無視
    408388    end
    409389    return @@TYPE_MAP[ tstr.to_sym ]
    410390  end
    411391
    412   #===  CDL ファイルの生成
    413   #      typedef, signature, celltype, cell コードを生成
    414   #file::        FILE       ç”Ÿæˆã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«
     392  #===  CDL ファイルの生成
     393  #      typedef, signature, celltype, cell コードを生成
     394  #file::        FILE       生成するファイル
    415395  def gen_cdl_file(file)
    416396
    417     # ブリッジセルタイプの生成
     397    # ブリッジセルタイプの生成
    418398    if @@celltypes[ @celltype_name ] == nil then
    419399      @@celltypes[ @celltype_name ] = [ self ]
     
    458438EOT
    459439
    460       # 構造体セルタイプの生成
     440      # 構造体セルタイプの生成
    461441      @struct_list.each{ |name, sttype|
    462442        if @@struct_list[ name ] == nil then
     
    479459  end
    480460
    481   #=== gen_cdl_file で定義したセルタイプに 新しいセルが定義された
    482   # cell のセルタイプの名前は @celltype_name
     461  #=== gen_cdl_file で定義したセルタイプに 新しいセルが定義された
     462  # cell のセルタイプの名前は @celltype_name
    483463  def new_cell cell
    484464    if cell.get_celltype.get_name != @celltype_name then
     
    499479      file = CFile.open( initializer_celltype_cdl, "w" )
    500480
    501       # TECS 初期化セル(プロトタイプ宣言)
     481      # TECS 初期化セル(プロトタイプ宣言)
    502482      print_msg "  MrubyBridgePlugin: join your VM's cInitialize to #{vm_name}_TECSInitializer.eInitialize\n"
    503483
     
    544524  end
    545525
    546   #=== プラグインが CDL の POST コードを生成
    547   # tmp_plugin_post_code.cdl への出力
     526  #=== プラグインが CDL の POST コードを生成
     527  # tmp_plugin_post_code.cdl への出力
    548528  def self.gen_post_code file
    549529    dbgPrint "#{self.name}: gen_post_code\n"
     
    580560# EOT
    581561
    582 # gen_post_code で生成した celltype は gen_ep_func が呼び出されない #847
     562# gen_post_code で生成した celltype は gen_ep_func が呼び出されない #847
    583563#    @@struct_list.each{ |name,sttype|
    584564#      file.print <<EOT
     
    649629  end
    650630
    651   ####### 以下コード生成段階 ######
    652 
    653   #===  受け口関数の本体コードを生成(頭部と末尾は別途出力)
    654   #ct_name:: Symbol    (プラグインで生成された) セルタイプ名 .Symbol として送られてくる
     631  ####### 以下コード生成段階 ######
     632
     633  #===  受け口関数の本体コードを生成(頭部と末尾は別途出力)
     634  #ct_name:: Symbol    (プラグインで生成された) セルタイプ名 .Symbol として送られてくる
    655635  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 )
    656636    if @@celltypes[ ct_name ] then
     
    756736  end
    757737
    758   #===  受け口関数の preamble (C言語)を生成する
    759   #     å¿
    760 è¦ãªã‚‰ preamble 部に出力する
    761   #file::           FILE        出力å
    762 ˆãƒ•ã‚¡ã‚¤ãƒ«
     738  #===  受け口関数の preamble (C言語)を生成する
     739  #     必要なら preamble 部に出力する
     740  #file::           FILE        出力先ファイル
    763741  #b_singleton::    bool        true if singleton
    764742  #ct_name::        Symbol
     
    805783
    806784  def gen_preamble_instance( file, b_singleton, ct_name, global_ct_name )
    807     # 「#1005  MrubyBridgePlugin-test のビルドに失敗」にて追加
    808     # 「#1004 idx_is_id が true の場合(domain の場合は未指定でも true) の CBP のプロトタイプ宣言」にて不要になる見込み
     785    # 「#1005  MrubyBridgePlugin-test のビルドに失敗」にて追加
     786    # 「#1004 idx_is_id が true の場合(domain の場合は未指定でも true) の CBP のプロトタイプ宣言」にて不要になる見込み
    809787    nsp = NamespacePath.new( :nMruby, true )
    810788    nsp.append! ct_name
     
    12501228    if( param.get_size ) then
    12511229      sz_str = param.get_size.to_s
    1252     elsif param.get_string then      # mikan とりあえず size_is と string の同時指定 (二重ポインタ) はなし
     1230    elsif param.get_string then      # mikan とりあえず size_is と string の同時指定 (二重ポインタ) はなし
    12531231      sz_str = param.get_string.to_s
    12541232    else
    12551233      sz_str = "1"
    12561234    end
    1257     # unsigned 型の場合には cast がå¿
    1258 è¦
     1235    # unsigned 型の場合には cast が必要
    12591236    if ttype.get_original_type.get_type_str != param.get_type.get_type.get_type_str then
    12601237      cast_str = "(#{param.get_type.get_type_str})"
     
    12861263  end
    12871264
    1288   #=== プラグイン引数 ignoreUnsigned
     1265  #=== プラグイン引数 ignoreUnsigned
    12891266  def set_ignoreUnsigned rhs
    12901267    if rhs == "true" || rhs == nil then
     
    12921269    end
    12931270  end
    1294   #=== プラグイン引数 include
     1271  #=== プラグイン引数 include
    12951272  def set_include rhs
    12961273    funcs = rhs.split ','
     
    13101287    }
    13111288  end
    1312   #=== プラグイン引数 exclude
     1289  #=== プラグイン引数 exclude
    13131290  def set_exclude rhs
    13141291    funcs = rhs.split ','
     
    13231300    }
    13241301  end
    1325   #=== プラグイン引数 auto_exclude
     1302  #=== プラグイン引数 auto_exclude
    13261303  def set_auto_exclude rhs
    13271304    if rhs == "false" then
Note: See TracChangeset for help on using the changeset viewer.