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/core/generate.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby;charset=UTF-8
    r388 r389  
    66#   Copyright (C) 2008-2019 by TOPPERS Project
    77#--
    8 #   ä¸Šè¨˜è‘—作権è€
    9 ã¯ï¼Œä»¥ä¸‹ã®(1)~(4)の条件を満たす場合に限り,本ソフトウェ
    10 #   ã‚¢ï¼ˆæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’改変したものを含む.以下同じ)を使用・複製・改
    11 #   å¤‰ãƒ»å†é
    12 å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
    13 #   (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    14 #       æ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定が,そのままの形でソー
    15 #       ã‚¹ã‚³ãƒ¼ãƒ‰ä¸­ã«å«ã¾ã‚Œã¦ã„ること.
    16 #   (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    17 #       ç”¨ã§ãã‚‹å½¢ã§å†é
    18 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    19 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    20 #       è€
    21 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    22 #       ã®ç„¡ä¿è¨¼è¦å®šã‚’掲載すること.
    23 #   (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    24 #       ç”¨ã§ããªã„形で再é
    25 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
    26 #       ã¨ï¼Ž
    27 #     (a) 再é
    28 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    29 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    30 #         ä½œæ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定を掲載すること.
    31 #     (b) 再é
    32 å¸ƒã®å½¢æ
    33 ‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
    34 #         å ±å‘Šã™ã‚‹ã“と.
    35 #   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    36 #       å®³ã‹ã‚‰ã‚‚,上記著作権è€
    37 ãŠã‚ˆã³TOPPERSプロジェクトをå
    38 è²¬ã™ã‚‹ã“と.
    39 #       ã¾ãŸï¼Œæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ãƒ¦ãƒ¼ã‚¶ã¾ãŸã¯ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ã‹ã‚‰ã®ã„かなる理
    40 #       ç”±ã«åŸºã¥ãè«‹æ±‚からも,上記著作権è€
    41 ãŠã‚ˆã³TOPPERSプロジェクトを
    42 #       å
    43 è²¬ã™ã‚‹ã“と.
     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#       免責すること.
    4430
    45 #   æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ï¼Œç„¡ä¿è¨¼ã§æä¾›ã•ã‚Œã¦ã„るものである.上記著作権è€
    46 ãŠ
    47 #   ã‚ˆã³TOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    48 #   ã«å¯¾ã™ã‚‹é©åˆæ€§ã‚‚含めて,いかなる保証も行わない.また,本ソフトウェ
    49 #   ã‚¢ã®åˆ©ç”¨ã«ã‚ˆã‚Šç›´æŽ¥çš„または間接的に生じたいかなる損害に関しても,そ
    50 #   ã®è²¬ä»»ã‚’負わない.
     31#   本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     32#   よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     33#   に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     34#   アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     35#   の責任を負わない.
    5136
    5237#   $Id$
     
    134119end
    135120
    136 # celltype_private.h を生成
     121# celltype_private.h を生成
    137122
    138123class Namespace
     
    141126
    142127    begin
    143       # root namespace ならば makefile を出力する(å
    144 ¨ã‚»ãƒ«ã‚¿ã‚¤ãƒ—に関わるものだけ)
    145       # å
    146 ˆã«å‡ºåŠ›ã™ã‚‹
     128      # root namespace ならば makefile を出力する(全セルタイプに関わるものだけ)
     129      # 先に出力する
    147130      if @name == "::" then
    148131
     
    159142
    160143      dbgPrint "generating region: #{$generating_region.get_name} namespace=#{@name} gen_dir=#{$gen}\n"
    161       # global_tecsgen.h (typedef, struct, const) の生成
     144      # global_tecsgen.h (typedef, struct, const) の生成
    162145      gen_global_header
    163146
     
    171154      end
    172155     
    173       # signature のコードを生成
     156      # signature のコードを生成
    174157      @signature_list.each { |s|
    175158        s.generate
    176159      }
    177160
    178       # celltype のコードを生成
     161      # celltype のコードを生成
    179162      @celltype_list.each { |t|
    180163        t.generate
    181164      }
    182165
    183       # サブネームスペースのコードを生成
     166      # サブネームスペースのコードを生成
    184167      @namespace_list.each { |n|
    185168        n.generate
     
    187170
    188171    rescue => evar
    189       # もしスタックトレースが出るまでい時間がかかるようならば、次をコメントアウトしてみるべし
     172      # もしスタックトレースが出るまでい時間がかかるようならば、次をコメントアウトしてみるべし
    190173      cdl_error( "H1001 tecsgen: fatal internal error during code generation"  )
    191174      print_exception( evar )
     
    200183
    201184    begin
    202       # global_tecsgen.h (typedef, struct, const) の終わりのガードコード生成
     185      # global_tecsgen.h (typedef, struct, const) の終わりのガードコード生成
    203186      gen_global_header_post
    204187
    205       # signature のコードを生成
     188      # signature のコードを生成
    206189      @signature_list.each { |s|
    207190        s.generate_post
    208191      }
    209192
    210       # celltype のコードを生成
     193      # celltype のコードを生成
    211194      @celltype_list.each { |t|
    212195        t.generate_post
    213196      }
    214197
    215       # サブネームスペースのコードを生成
     198      # サブネームスペースのコードを生成
    216199      @namespace_list.each { |n|
    217200        n.generate_post
     
    227210  def gen_global_header
    228211
    229     # global_tecs.h の生成
     212    # global_tecs.h の生成
    230213    f = AppFile.open( "#{$gen}/global_tecsgen.#{$h_suffix}" )
    231214
     
    233216      print_note f
    234217
    235       # ガードコードを出力
     218      # ガードコードを出力
    236219      f.print <<EOT
    237220#ifndef GLOBAL_TECSGEN_H
     
    240223EOT
    241224
    242       # import_C で指定されたヘッダファイルの #include を出力
     225      # import_C で指定されたヘッダファイルの #include を出力
    243226      if Import_C.get_header_list2.length > 0 then
    244         # ヘッダ include の出力
     227        # ヘッダ include の出力
    245228        f.printf TECSMsg.get( :IMP_comment ), "#_IMP_#"
    246229        Import_C.get_header_list2.each{ |h|
     
    253236    end
    254237
    255     # typedef, struct, enum を生成
     238    # typedef, struct, enum を生成
    256239    @decl_list.each { |d|
    257240
    258       # d は Typedef, StructType, EnumType のいずれか
     241      # d は Typedef, StructType, EnumType のいずれか
    259242      if d.instance_of?( Typedef ) then
    260243
    261         # Typedef の場合、declarator の @type が CType でないか
     244        # Typedef の場合、declarator の @type が CType でないか
    262245        if ! d.get_declarator.get_type.kind_of?( CType ) then
    263246          d.gen_gh f
     
    265248      elsif ! d.kind_of?( CType ) then
    266249
    267         # CType ではない (StructType または EnumType)
     250        # CType ではない (StructType または EnumType)
    268251        d.gen_gh f
    269252#     else
    270 #       ã“こに該当するのは CStructType, CEnumType
     253#       ここに該当するのは CStructType, CEnumType
    271254      end
    272255    }
     
    297280    end
    298281
    299     # const を生成  mikan
     282    # const を生成  mikan
    300283    @const_decl_list.each { |d|
    301284      f.printf( "#define %-14s ((%s%s)%s)\n", d.get_global_name,
     
    310293  def gen_global_header_post
    311294
    312     # global_tecs.h を開く
     295    # global_tecs.h を開く
    313296    f = AppFile.open( "#{$gen}/global_tecsgen.#{$h_suffix}" )
    314297
     
    324307  end
    325308
    326   #=== Makefile.tecsgen, Makefile.templ の出力
    327   # å
    328 ¨ã‚»ãƒ«ã‚¿ã‚¤ãƒ—名を出力する部分を出力
    329   #    (本メソッドは root namespace に対して呼出す)
    330   #     å€‹ã€
    331 ã®ã‚»ãƒ«ã‚¿ã‚¤ãƒ—のメークルールは Celltype クラスで出力
     309  #=== Makefile.tecsgen, Makefile.templ の出力
     310  # 全セルタイプ名を出力する部分を出力
     311  #    (本メソッドは root namespace に対して呼出す)
     312  #     個々のセルタイプのメークルールは Celltype クラスで出力
    332313  def gen_makefile
    333314    gen_makefile_template
     
    339320    return if $generate_no_template
    340321
    341     ### Makefile.templ の生成
     322    ### Makefile.templ の生成
    342323    f = AppFile.open( "#{$gen}/Makefile.templ" )
    343324
    344325    print_Makefile_note f
    345326
    346     # Makefile の変数の出力
     327    # Makefile の変数の出力
    347328    f.printf TECSMsg.get( :MVAR_comment ), "#_MVAR_#"
    348329    f.printf "# fixed variable (unchangeable by config or plugin)\n"
    349330
    350     # TARGET の出力 (第一引数 $target に region 名および .exe を付加)
     331    # TARGET の出力 (第一引数 $target に region 名および .exe を付加)
    351332    target = $target
    352333    if $generating_region != @@root_namespace then
    353       # 子 region のリンクターゲットの場合
     334      # 子 region のリンクターゲットの場合
    354335      target += "-#{$generating_region.get_global_name}"
    355336    end
     
    433414EOT
    434415
    435     # make ルールの出力
     416    # make ルールの出力
    436417    f.printf( TECSMsg.get( :MRUL_comment), "#_MRUL_#" )
    437418
     
    461442    f.print "-include $(GEN_DIR)/Makefile.tecsgen\n"
    462443    if $generating_region.get_n_cells != 0 then
    463       # Makefile.depend の include
     444      # Makefile.depend include
    464445      f.print "-include $(GEN_DIR)/Makefile.depend\n\n"
    465446
     
    471452      f.print "\nsub_regions:$(TIMESTAMP)\n"
    472453      Region.get_link_roots.each {|region|
    473         if region.get_global_name != "" then  # Root region: この Makefile 自身
     454        if region.get_global_name != "" then  # Root region: この Makefile 自身
    474455          f.print "\tcd #{region.get_global_name}; make all\n"
    475456        end
     
    478459    end
    479460
    480     # clean: ターゲット
     461    # clean: ターゲット
    481462    f.print "clean :\n"
    482463    if $generating_region == @@root_namespace then
    483464      Region.get_link_roots.each {|region|
    484         if region.get_global_name != "" then  # Root region: この Makefile 自身
     465        if region.get_global_name != "" then  # Root region: この Makefile 自身
    485466          f.print "\tcd #{region.get_global_name}; make clean\n"
    486467        end
     
    493474    f.print "\n"
    494475
    495     # tecs: ターゲット
     476    # tecs: ターゲット
    496477    if $generating_region == @@root_namespace then
    497478      f.print "tecs : $(PRE_TECSGEN_TARGET) $(TIMESTAMP) $(POST_TECSGEN_TARGET)\n\n"
     
    504485    end
    505486
    506     # tecsflow:, tcflow ターゲット
     487    # tecsflow:, tcflow ターゲット
    507488    if $generating_region.get_n_cells != 0 || $generating_region == @@root_namespace then
    508489      f.print "#####  TECSFlow targets  #####\n"
     
    561542
    562543  def gen_makefile_tecsgen
    563     ### Makefile.tecsgen の生成
     544    ### Makefile.tecsgen の生成
    564545    f = AppFile.open( "#{$gen}/Makefile.tecsgen" )
    565546
     
    658639    domain_regions = nil
    659640    DomainType.get_domain_regions.each{ |dt, regions|
    660       # domain_type は一つのノードには、一つしかないので、このループは、å¿
    661 ãšä¸€å›žã—か回らない
    662         ###   mikan 複数のノードがあり、異なる domain_type が指定される可能性はある
     641      # domain_type は一つのノードには、一つしかないので、このループは、必ず一回しか回らない
     642        ###   mikan 複数のノードがあり、異なる domain_type が指定される可能性はある
    663643      domain_regions = regions
    664644      domain_type = dt
     
    836816  end
    837817
    838   #=== すべてのセルタイプの名前を出力
    839   #f::       FILE:   å‡ºåŠ›å
    840 ˆãƒ•ã‚¡ã‚¤ãƒ«
    841   #prepend:: string: 前置文字列
    842   #append::  string: 後置文字列
    843   #b_plguin::  bool:   plugin により生成されたセルタイプを出力
    844   ##b_inline_only::  bool:   true ならば inline の entry port のみのセルタイプを含める
    845   #b_inline_only_or_proc::  bool|Proc:   true ならば inline の entry port のみ、かつインアクティブなセルタイプを含める
    846   #                                      Proc ならば Proc を実行した結果 true ならば含める
    847   #  namespace "::" から呼出される
     818  #=== すべてのセルタイプの名前を出力
     819  #f::       FILE:   出力先ファイル
     820  #prepend:: string: 前置文字列
     821  #append::  string: 後置文字列
     822  #b_plguin::  bool:   plugin により生成されたセルタイプを出力
     823  ##b_inline_only::  bool:   true ならば inline の entry port のみのセルタイプを含める
     824  #b_inline_only_or_proc::  bool|Proc:   true ならば inline の entry port のみ、かつインアクティブなセルタイプを含める
     825  #                                      Proc ならば Proc を実行した結果 true ならば含める
     826  #  namespace "::" から呼出される
    848827  def gen_celltype_names( f, prepend, append, b_plugin, b_inline_only_or_proc = true )
    849828    dbgPrint "gen_celltype_names #{@name}\n"
     
    865844  end
    866845
    867   #=== すべてのセルタイプの名前を出力
     846  #=== すべてのセルタイプの名前を出力
    868847  #region:: Region:
    869   # gen_celltype_names とgen_celltype_names_domain の相違:
    870   #   region を domain_roots に含む場合、出力する.
    871   #   ã¾ãŸã¯ã€region を含まないが、domain_roots が複数かつルートリージョンの場合、出力する.
    872   # それ以外は、gen_celltype_names の説明を参ç
    873 §
     848  # gen_celltype_names とgen_celltype_names_domain の相違:
     849  #   region を domain_roots に含む場合、出力する.
     850  #   または、region を含まないが、domain_roots が複数かつルートリージョンの場合、出力する.
     851  # それ以外は、gen_celltype_names の説明を参照
    874852  def gen_celltype_names_domain( f, prepend, append, domain_type, region, b_plugin, b_inline_only = true )
    875853    dbgPrint "gen_celltype_names #{@name}\n"
     
    901879    }
    902880  end
    903   #== Namespace#すべてのセルタイプの名前を出力
    904   # セルタイプコードのための名前出力
    905   # gen_celltype_names_domain と gen_celltype_names_domain2 の相違
    906   # ・どれか一つのリージョンにしか出さない
    907   #     domain_roots が1つだけで、指定リージョンを含む
    908   #     domain_roots が2つ以上で、指定リージョンがルートリージョン
    909   # ・ドメイン名を付加しない
     881  #== Namespace#すべてのセルタイプの名前を出力
     882  # セルタイプコードのための名前出力
     883  # gen_celltype_names_domain と gen_celltype_names_domain2 の相違
     884  # ・どれか一つのリージョンにしか出さない
     885  #     domain_roots が1つだけで、指定リージョンを含む
     886  #     domain_roots が2つ以上で、指定リージョンがルートリージョン
     887  # ・ドメイン名を付加しない
    910888  def gen_celltype_names_domain2( f, prepend, append, domain_type, region, b_plugin, b_inline_only = true )
    911889    dbgPrint "gen_celltype_names #{@name}\n"
     
    933911  end
    934912
    935   #=== Namespace#すべてのシグニチャをたどる
    936   def travers_all_signature # ブロック引数 { |signature|  }
    937     proc = Proc.new    # このメソッドのブロック引数
     913  #=== Namespace#すべてのシグニチャをたどる
     914  def travers_all_signature # ブロック引数 { |signature|  }
     915    proc = Proc.new    # このメソッドのブロック引数
    938916    @signature_list.each{ |sig|
    939917      proc.call sig
     
    952930  end
    953931
    954   #=== Namespace#すべてのセルタイプをたどる
    955   def travers_all_celltype # ブロック引数 { |celltype|  }
    956     proc = Proc.new    # このメソッドのブロック引数
     932  #=== Namespace#すべてのセルタイプをたどる
     933  def travers_all_celltype # ブロック引数 { |celltype|  }
     934    proc = Proc.new    # このメソッドのブロック引数
    957935    @celltype_list.each{ |ct|
    958936      proc.call ct
     
    10781056  def gen_sh_func_tab f
    10791057
    1080     # シグニチャディスクリプタの出力
     1058    # シグニチャディスクリプタの出力
    10811059    f.printf TECSMsg.get(:SD_comment), "#_SD_#"
    10821060    f.print "struct tag_#{@global_name}_VDES {\n"
     
    10841062    f.print "};\n\n"
    10851063
    1086     # シグニチャ関数テーブルの出力
     1064    # シグニチャ関数テーブルの出力
    10871065    f.printf TECSMsg.get(:SFT_comment), "#_SFT_#"
    10881066    f.print( "struct tag_#{@global_name}_VMT {\n" )
     
    10991077        len = items.length
    11001078      else
    1101         # ここで nil になるのは、引数なしの時に void がなかった場合
     1079        # ここで nil になるのは、引数なしの時に void がなかった場合
    11021080        items = []
    11031081        len = 0
     
    11291107  end
    11301108
    1131   #=== Signature# 関数の ID の define を出力
     1109  #=== Signature# 関数の ID の define を出力
    11321110  def gen_sh_func_id f
    11331111    f.print "/* function id */\n"
     
    11481126  def generate
    11491127
    1150     if need_generate?    # セルのないセルタイプは生成しない
     1128    if need_generate?    # セルのないセルタイプは生成しない
    11511129
    11521130      generate_private_header
     
    11591137      generate_makefile
    11601138
    1161     elsif $generate_all_template   # テンプレートコード生成オプション
     1139    elsif $generate_all_template   # テンプレートコード生成オプション
    11621140
    11631141      generate_template_code
    11641142      generate_inline_template_code
    11651143
    1166       # generate_makefile_template は Makefile に追記するものだから、呼び出さない
     1144      # generate_makefile_template は Makefile に追記するものだから、呼び出さない
    11671145
    11681146    end
     
    11711149
    11721150  def generate_post
    1173     return if ! need_generate?    # セルのないセルタイプは生成しない
     1151    return if ! need_generate?    # セルのないセルタイプは生成しない
    11741152
    11751153    generate_private_header_post
     
    11911169    gen_ph_cell_cb_type f
    11921170    gen_ph_INIB_as_CB f
    1193     gen_ph_extern_cell f          # セルタイプグルコード以外は参ç
    1194 §ã—ない
    1195     gen_ph_typedef_idx f          # mikan 参ç
    1196 §ã™ã‚‹ã‚‚のができていない
     1171    gen_ph_extern_cell f          # セルタイプグルコード以外は参照しない
     1172    gen_ph_typedef_idx f          # mikan 参照するものができていない
    11971173    gen_ph_ep_fun_prototype f
    11981174    end_extern_C f
     
    12021178
    12031179    if @n_entry_port_inline == 0 then
    1204       # inline がなければ CB_TYPE_ONLY とする
    1205       # inline ありの場合、いったん define しておいて、後ですべて undef する
     1180      # inline がなければ CB_TYPE_ONLY とする
     1181      # inline ありの場合、いったん define しておいて、後ですべて undef する
    12061182      ifndef_cb_type_only f
    12071183    end
     
    12291205#    gen_ph_cell_cb_type f
    12301206#    gen_ph_INIB_as_CB f
    1231 #    gen_ph_extern_cell f          # セルタイプグルコード以外は参ç
    1232 §ã—ない
    1233     # gen_ph_typedef_idx f          # mikan 参ç
    1234 §ã™ã‚‹ã‚‚のができていない
     1207#    gen_ph_extern_cell f          # セルタイプグルコード以外は参照しない
     1208    # gen_ph_typedef_idx f          # mikan 参照するものができていない
    12351209#    gen_ph_ep_fun_prototype f
    12361210    gen_ph_ep_skel_prototype f
    12371211
    1238     #--- CB_TYPE_ONLY の場合、ref_desc, set_desc 関数は含めない (マクロ参ç
    1239 §ã™ã‚‹ãŸã‚)
     1212    #--- CB_TYPE_ONLY の場合、ref_desc, set_desc 関数は含めない (マクロ参照するため)
    12401213    if @n_entry_port_inline == 0 then
    12411214      ifndef_cb_type_only f
     
    12491222    endif_macro_only f
    12501223
    1251     # 短縮形などのマクロ出力
     1224    # 短縮形などのマクロ出力
    12521225    if @n_entry_port_inline == 0 then
    12531226      ifndef_cb_type_only f
     
    12611234    gen_ph_test_optional_call_port_abbrev f
    12621235    gen_ph_ep_fun_macro f         if @n_entry_port > 0
    1263     gen_ph_foreach_cell f         # FOREACH マクロの出力
    1264     gen_ph_cb_initialize_macro f   # CB 初期化マクロの出力.消費しないので ram_initializer フラグに関わらず出力
     1236    gen_ph_foreach_cell f         # FOREACH マクロの出力
     1237    gen_ph_cb_initialize_macro f   # CB 初期化マクロの出力.消費しないので ram_initializer フラグに関わらず出力
    12651238    gen_ph_dealloc_code f, ""
    12661239    gen_ph_dealloc_code f, "_RESET"
     
    13091282        next if p.get_port_type != :CALL
    13101283
    1311         # is_...joined は omit するケースでも出力されるため、omit を検査する前に出力
     1284        # is_...joined は omit するケースでも出力されるため、omit を検査する前に出力
    13121285        if p.is_optional? then
    13131286          f.print( "#undef is_#{p.get_name}_joined\n" )
     
    13531326  end
    13541327
    1355   #=== CELLTYPE_tecsgen.c を生成
     1328  #=== CELLTYPE_tecsgen.c を生成
    13561329  def generate_cell_code
    13571330    fs = { }
     
    13881361    end
    13891362
    1390     # すべての _tecsgen.c に出力
     1363    # すべての _tecsgen.c に出力
    13911364    print_note f
    13921365    gen_cell_private_header f
     
    13941367    gen_cell_ep_des_type f
    13951368
    1396     # すべての _tecsgen.c に出力
     1369    # すべての _tecsgen.c に出力
    13971370    fs.each{ |r,f2|
    13981371      if f == f2 then
     
    14051378    }
    14061379
    1407     # 一つの _tecsgen.c に出力
     1380    # 一つの _tecsgen.c に出力
    14081381    gen_cell_skel_fun f
    14091382    gen_cell_fun_table f
    14101383    gen_cell_var_init f
    14111384
    1412     # セルごとに _tecsgen.c に出力
     1385    # セルごとに _tecsgen.c に出力
    14131386    gen_cell_ep_vdes fs
    14141387    gen_cell_ep_vdes_array fs
    1415     gen_cell_cb_out_init fs         # INITIALIZE_CB で参ç
    1416 §ã•ã‚Œã‚‹ãŸã‚ ram_initializer=false でも消せない
     1388    gen_cell_cb_out_init fs         # INITIALIZE_CB で参照されるため ram_initializer=false でも消せない
    14171389    gen_cell_cb fs
    14181390    gen_cell_extern_mt fs
    14191391    gen_cell_ep_des fs
    14201392
    1421     # 一つの _tecsgen.c に出力
     1393    # 一つの _tecsgen.c に出力
    14221394    gen_cell_cb_tab f
    14231395    if $ram_initializer then
     
    14811453
    14821454  def gen_ph_include f
    1483     # ランタイムヘッダの include
     1455    # ランタイムヘッダの include
    14841456#    f.printf TECSMsg.get( :IRTH_comment), "#_IRTH_#"
    14851457#    f.print "#include \"tecs.#{$h_suffix}\"\n\n"
    14861458
    1487     # グローバルヘッダの include
     1459    # グローバルヘッダの include
    14881460    f.printf TECSMsg.get( :IGH_comment ), "#_IGH_#"
    14891461    f.print "#include \"global_tecsgen.#{$h_suffix}\"\n\n"
    14901462
    1491     # シグニチャヘッダの include
     1463    # シグニチャヘッダの include
    14921464    f.printf TECSMsg.get( :ISH_comment ), "#_ISH_#"
    14931465    @port.each { |p|
     
    15071479    end
    15081480
    1509     # 最適化のため参ç
    1510 §ã™ã‚‹ã‚»ãƒ«ã‚¿ã‚¤ãƒ—の CB 型の定義を取込む
    1511     # _CB_TYPE_ONLY を定義した上で include する
     1481    # 最適化のため参照するセルタイプの CB 型の定義を取込む
     1482    # _CB_TYPE_ONLY を定義した上で include する
    15121483    f.printf( TECSMsg.get( :ICT_comment ), "#_ICT_#" )
    15131484
     
    15221493
    15231494      if p.is_skelton_useless? || p.is_cell_unique? || p.is_VMT_useless? then
    1524         # 最適化コード (optimize) # スケルトン不要など
     1495        # 最適化コード (optimize) # スケルトン不要など
    15251496        p2 = p.get_real_callee_port
    15261497        if p2 then
     
    15311502          end
    15321503        # else
    1533           # optional で未結合
     1504          # optional で未結合
    15341505        end
    15351506      end
     
    15431514#      next if p.get_port_type != :CALL
    15441515#      if p.is_skelton_useless? || p.is_cell_unique? || p.is_VMT_useless? then
    1545 #        # 最適化コード (optimize) # スケルトン不要など
     1516#        # 最適化コード (optimize) # スケルトン不要など
    15461517#        p2 = p.get_real_callee_port
    15471518#        ct = p2.get_celltype
     
    15591530    return if @singleton
    15601531
    1561     # ID の基数および個数の define を出力
     1532    # ID の基数および個数の define を出力
    15621533    f.printf("#define %-20s %10s  /* %s #_NIDB_# */\n", "#{@global_name}_ID_BASE", "(#{@id_base})", TECSMsg.get(:NIDB_comment))
    15631534    f.printf("#define %-20s %10s  /* %s  #_NCEL_# */\n\n", "#{@global_name}_N_CELL", "(#{@n_cell_gen})", TECSMsg.get(:NCEL_comment))
     
    15671538    return if @singleton
    15681539
    1569     # mikan  最適化
    1570     # IDX 正当性チェックマクロの出力
     1540    # mikan  最適化
     1541    # IDX 正当性チェックマクロの出力
    15711542    f.printf( TECSMsg.get( :CVI_comment ), "#_CVI_#" )
    15721543    if @idx_is_id_act then
     
    15811552    return if @singleton
    15821553
    1583     # IDX 正当性チェックマクロ(短縮形)の出力
     1554    # IDX 正当性チェックマクロ(短縮形)の出力
    15841555    f.printf( TECSMsg.get( :CVIA_comment ), "#_CVIA_#")
    15851556    f.print("#define VALID_IDX(IDX)  #{@global_name}_VALID_IDX(IDX)\n\n")
     
    15871558  end
    15881559
    1589   #=== 呼び口é
    1590 åˆ—の大きさを得るマクロの出力
     1560  #=== 呼び口配列の大きさを得るマクロの出力
    15911561  #
    1592   #セルタイプヘッダへ呼び口の個数を出力
     1562  #セルタイプヘッダへ呼び口の個数を出力
    15931563  def gen_ph_n_cp f
    15941564
     
    16041574      end
    16051575
    1606       if p.get_array_size != "[]" then       # 固定長é
    1607 åˆ—
     1576      if p.get_array_size != "[]" then       # 固定長配列
    16081577        f.print( "#define N_CP_#{p.get_name}    (#{p.get_array_size})\n" )
    16091578        f.print( "#define NCP_#{p.get_name}     (#{p.get_array_size})\n" )
    1610       else                                   # 可変長é
    1611 åˆ—
     1579      else                                   # 可変長配列
    16121580        if @singleton then
    16131581          if has_INIB? then
     
    16181586          f.print( "#define N_CP_#{p.get_name}  (#{@global_name}_SINGLE_CELL_#{inib}.n_#{p.get_name})\n" )
    16191587          f.print( "#define NCP_#{p.get_name}   (#{@global_name}_SINGLE_CELL_#{inib}.n_#{p.get_name})\n" )
    1620           # mikan singleton ならば、固定長化できる
     1588          # mikan singleton ならば、固定長化できる
    16211589        else
    16221590          if has_CB? && has_INIB? then
     
    16321600  end
    16331601
    1634   #=== 受け口é
    1635 åˆ—の大きさを得るマクロの出力
     1602  #=== 受け口配列の大きさを得るマクロの出力
    16361603  #
    1637   #セルタイプヘッダへ受け口の個数を出力
     1604  #セルタイプヘッダへ受け口の個数を出力
    16381605  def gen_ph_n_ep f
    16391606
     
    16411608    @port.each { |p|
    16421609      next if p.get_port_type != :ENTRY
    1643       # next if p.is_omit?                       # 受け口é
    1644 åˆ—の個数は省略しない
     1610      # next if p.is_omit?                       # 受け口配列の個数は省略しない
    16451611      next if p.get_array_size == nil
    16461612
     
    16501616      end
    16511617
    1652       if p.get_array_size != "[]" then       # 固定長é
    1653 åˆ—
     1618      if p.get_array_size != "[]" then       # 固定長配列
    16541619        f.print( "#define NEP_#{p.get_name}     (#{p.get_array_size})\n" )
    1655       else                                   # 可変長é
    1656 åˆ—
     1620      else                                   # 可変長配列
    16571621        if @singleton then
    16581622          if has_INIB? then
     
    16621626          end
    16631627          f.print( "#define NEP_#{p.get_name}   (#{@global_name}_SINGLE_CELL_#{inib}.n_#{p.get_name})\n" )
    1664           # mikan singleton ならば、固定長化できる
     1628          # mikan singleton ならば、固定長化できる
    16651629        else
    16661630          if has_CB? && has_INIB? then
     
    16751639  end
    16761640
    1677   #=== optional な呼び口が結合されているかテストするコードの生成
     1641  #=== optional な呼び口が結合されているかテストするコードの生成
    16781642  def gen_ph_test_optional_call_port f
    16791643    b_comment = false
     
    16961660      next if p.get_port_type != :CALL
    16971661      next if ! p.is_optional?
    1698       # next if p.is_omit?  # omit でも test コードは生成する
     1662      # next if p.is_omit?  # omit でも test コードは生成する
    16991663
    17001664      if b_comment == false then
     
    17201684      end
    17211685
    1722       # 関数名の出力(標準:受け口ディスクリプタから VMT の関数名、最適化:受け口関数 or 受け口ディスクリプタ)
    1723       # mikan  å
    1724 ¨éƒ¨ã¤ãªãŒã£ã¦ã„るかどうかで (1) を判定する
     1686      # 関数名の出力(標準:受け口ディスクリプタから VMT の関数名、最適化:受け口関数 or 受け口ディスクリプタ)
     1687      # mikan  全部つながっているかどうかで (1) を判定する
    17251688      if ! p.is_VMT_useless? then
    17261689        if p.is_dynamic? then
     
    17341697        end
    17351698
    1736         # 標準コード
     1699        # 標準コード
    17371700        if p.get_array_size == nil then
    17381701          if @singleton then
     
    17421705          end
    17431706        else
    1744           # é
    1745 åˆ—の場合
     1707          # 配列の場合
    17461708          if @singleton then
    17471709            f.print( "\t  ((#{@global_name}_SINGLE_CELL_#{inib_tmp}.#{p.get_name}!=0) \\\n" )
     
    17531715        end
    17541716      else
    1755         # 最適化コード (optimize) # VMT 不要(é
    1756 åˆ—要素すべて同じ)
     1717        # 最適化コード (optimize) # VMT 不要(配列要素すべて同じ)
    17571718        p2 = p.get_real_callee_port
    17581719        if p2 then
    17591720          ct = p2.get_celltype
    17601721          if p.is_skelton_useless? then
    1761             # 受け口関数を直接呼出す
     1722            # 受け口関数を直接呼出す
    17621723            f.print( "\t  (1)\n" )
    17631724          else
    1764             # 受け口スケルトン関数を直接呼出す
     1725            # 受け口スケルトン関数を直接呼出す
    17651726            f.print( "\t  (1)\n" )
    17661727          end
    17671728        else
    1768           # optional で未結合
     1729          # optional で未結合
    17691730          f.print( "\t  (0)    /* not joined */\n" )
    17701731        end
     
    17731734  end
    17741735
    1775   #=== optional な呼び口が結合されているかテストするコードの生成(短縮形)
     1736  #=== optional な呼び口が結合されているかテストするコードの生成(短縮形)
    17761737  def gen_ph_test_optional_call_port_abbrev f
    17771738    b_comment = false
     
    17801741      next if p.get_port_type != :CALL
    17811742      next if ! p.is_optional?
    1782       # next if p.is_omit?  # omit でも test コードは生成する
     1743      # next if p.is_omit?  # omit でも test コードは生成する
    17831744
    17841745      if b_comment == false then
     
    18051766  end
    18061767
    1807   #=== CELLCB へのポインタを得るマクロを出力
    1808   #   ã‚»ãƒ«ã‚¿ã‚¤ãƒ—ヘッダへ出力
     1768  #=== CELLCB へのポインタを得るマクロを出力
     1769  #   セルタイプヘッダへ出力
    18091770  def gen_ph_get_cellcb f
    18101771    f.printf( TECSMsg.get( :GCB_comment ), "#_GCB_#" )
    18111772    if ( ! has_CB? && ! has_INIB? ) || @singleton then
    18121773      f.print( "#define #{@global_name}_GET_CELLCB(idx) ((void *)0)\n" )
    1813     elsif @idx_is_id_act then   # mikan 単一のセルの場合の最適化, idx_is_id でない場合
     1774    elsif @idx_is_id_act then   # mikan 単一のセルの場合の最適化, idx_is_id でない場合
    18141775      f.print( "#define #{@global_name}_GET_CELLCB(idx) (#{@global_name}_CB_ptab[(idx) - #{@global_name}_ID_BASE])\n" )
    18151776    else
     
    18181779  end
    18191780
    1820   #=== CELLCB へのポインタを得るマクロ(短縮形)を出力
    1821   #  セルタイプヘッダへ出力
     1781  #=== CELLCB へのポインタを得るマクロ(短縮形)を出力
     1782  #  セルタイプヘッダへ出力
    18221783  def gen_ph_get_cellcb_abbrev f
    18231784    f.printf( TECSMsg.get( :GCBA_comment ), "#_GCBA_#" )
     
    18351796  end
    18361797
    1837   #===  attribute, var をアクセスするマクロを出力
    1838   #    セルタイプヘッダへ出力
     1798  #===  attribute, var をアクセスするマクロを出力
     1799  #    セルタイプヘッダへ出力
    18391800  def gen_ph_attr_access f
    18401801    if @n_attribute_rw > 0 || @n_attribute_ro > 0 then
     
    18461807      next if a.is_omit?
    18471808
    1848       # mikan const_value の場合
     1809      # mikan const_value の場合
    18491810      f.print( "#define " )
    18501811      if @singleton then
     
    18561817        f.printf( "%-20s", "#{@global_name}_ATTR_#{a.get_name}" )
    18571818        f.print( "\t(#{@global_name}_SINGLE_CELL_#{inib}.#{a.get_name})\n" )
    1858         # mikan ここでは cell ではなく celltype の名前
     1819        # mikan ここでは cell ではなく celltype の名前
    18591820      else
    18601821        if ! a.is_rw? && has_CB? && has_INIB? then
     
    18871848      end
    18881849
    1889       # mikan const_value の場合
     1850      # mikan const_value の場合
    18901851      f.print( "#define " )
    18911852      if @singleton then
    18921853        f.printf( "%-20s", "#{@global_name}_GET_#{a.get_name}()" )
    18931854        f.print( "\t(#{@global_name}_SINGLE_CELL_#{inib}.#{a.get_name})\n" )
    1894         # mikan ここでは cell ではなく celltype の名前
     1855        # mikan ここでは cell ではなく celltype の名前
    18951856      else
    18961857        f.printf( "%-20s", "#{@global_name}_GET_#{a.get_name}(p_that)" )
     
    19031864          f.printf( "%-20s", "#{@global_name}_SET_#{a.get_name}(val)" )
    19041865          f.print( "\t(#{@global_name}_SINGLE_CELL_#{inib}.#{a.get_name} = (val))\n" )
    1905           # mikan ここでは cell ではなく celltype の名前
     1866          # mikan ここでは cell ではなく celltype の名前
    19061867        else
    19071868          f.printf( "%-20s", "#{@global_name}_SET_#{a.get_name}(p_that,val)" )
     
    19351896      end
    19361897
    1937       # mikan const_value の場合
     1898      # mikan const_value の場合
    19381899      f.print( "#define " )
    19391900      if @singleton then
    19401901        f.printf( "%-20s", "#{@global_name}_VAR_#{v.get_name}" )
    19411902        f.print( "\t(#{@global_name}_SINGLE_CELL_#{inib}.#{v.get_name})\n" )
    1942         # mikan ここでは cell ではなく celltype の名前
     1903        # mikan ここでは cell ではなく celltype の名前
    19431904      else
    19441905        f.printf( "%-20s", "#{@global_name}_VAR_#{v.get_name}(p_that)" )
     
    19511912      next if v.is_omit?
    19521913
    1953       # mikan const_value の場合
     1914      # mikan const_value の場合
    19541915      f.print( "#define " )
    19551916      if @singleton then
    19561917        f.printf( "%-20s", "#{@global_name}_GET_#{v.get_name}()" )
    19571918        f.print( "\t(#{@global_name}_SINGLE_CELL_CB.#{v.get_name})\n" )
    1958         # mikan ここでは cell ではなく celltype の名前
     1919        # mikan ここでは cell ではなく celltype の名前
    19591920      else
    19601921        f.printf( "%-20s", "#{@global_name}_GET_#{v.get_name}(p_that)" )
     
    19661927        f.printf( "%-20s", "#{@global_name}_SET_#{v.get_name}(val)" )
    19671928        f.print( "\t(#{@global_name}_SINGLE_CELL_CB.#{v.get_name}=(val))\n" )
    1968         # mikan ここでは cell ではなく celltype の名前
     1929        # mikan ここでは cell ではなく celltype の名前
    19691930      else
    19701931        f.printf( "%-20s", "#{@global_name}_SET_#{v.get_name}(p_that,val)" )
     
    19761937  end
    19771938
    1978   #===  attribute/var アクセスマクロ(短縮形)コードの生成
     1939  #===  attribute/var アクセスマクロ(短縮形)コードの生成
    19791940  def gen_ph_attr_access_abbrev f
    19801941    if @n_attribute_rw > 0 || @n_attribute_ro > 0 then
     
    19851946      next if a.is_omit?
    19861947
    1987       # mikan const_value の場合
     1948      # mikan const_value の場合
    19881949      f.print( "#define " )
    19891950      f.printf( "%-20s", "ATTR_#{a.get_name}" )
     
    20031964      next if v.is_omit?
    20041965
    2005       # mikan const_value の場合
     1966      # mikan const_value の場合
    20061967      f.print( "#define " )
    20071968      f.printf( "%-20s", "VAR_#{v.get_name}" )
     
    20722033        delim = ""
    20732034
    2074         # 関数名の出力(標準:受け口ディスクリプタから VMT の関数名、最適化:受け口関数 or 受け口ディスクリプタ)
     2035        # 関数名の出力(標準:受け口ディスクリプタから VMT の関数名、最適化:受け口関数 or 受け口ディスクリプタ)
    20752036        if b_flow then
    20762037          f.print( "\t  (p_that)->#{p.get_name}#{subsc}.#{fun.get_name}__T( \\\n" )
    20772038        elsif ! p.is_VMT_useless? then
    2078           # 標準コード
     2039          # 標準コード
    20792040          if @singleton then
    20802041            f.print( "\t  #{@global_name}_SINGLE_CELL_#{inib}.#{p.get_name}" )
     
    20842045          f.print( "#{subsc}->VMT->#{fun.get_name}__T( \\\n" )
    20852046        else
    2086           # 最適化コード (optimize) # VMT 不要
     2047          # 最適化コード (optimize) # VMT 不要
    20872048          p2 = p.get_real_callee_port
    20882049          if p2 then
    20892050            ct = p2.get_celltype
    20902051            if p.is_skelton_useless? then
    2091               # 受け口関数を直接呼出す
     2052              # 受け口関数を直接呼出す
    20922053              f.print( "\t  #{ct.get_global_name}_#{p2.get_name}_#{fun.get_name}( \\\n" )
    20932054            else
    2094               # 受け口スケルトン関数を直接呼出す
     2055              # 受け口スケルトン関数を直接呼出す
    20952056              f.print( "\t  #{ct.get_global_name}_#{p2.get_name}_#{fun.get_name}_skel( \\\n" )
    20962057              # print "skelton: #{@name} #{ct.get_global_name}_#{p2.get_name}\n"
    20972058            end
    20982059          else
    2099             # optional で未結合
     2060            # optional で未結合
    21002061            f.print( "\t  ((#{fun.get_declarator.get_type.get_type.get_type_str} (*)()" )
    21012062            f.print( "#{fun.get_declarator.get_type.get_type.get_type_str_post})0)()\n" )
     
    21072068        end
    21082069
    2109         b_join = true    # optional で結合していない場合 false
    2110 
    2111         # 受け口æƒ
    2112 å ±ã®å‡ºåŠ›(標準:受け口ディスクリプタ、最適化:IDX など)
     2070        b_join = true    # optional で結合していない場合 false
     2071
     2072        # 受け口情報の出力(標準:受け口ディスクリプタ、最適化:IDX など)
    21132073        if b_flow then
    21142074        elsif ! p.is_skelton_useless? && ! p.is_cell_unique? then
    2115           # 標準コード
     2075          # 標準コード
    21162076          if @singleton then
    21172077            f.print( "\t  #{@global_name}_SINGLE_CELL_#{inib}.#{p.get_name}#{subsc}" )
     
    21222082          end
    21232083        else
    2124           # 最適化コード (optimize) # スケルトン不要
    2125           c2 = p.get_real_callee_cell               # 唯一のセル(でない場合もある、複数セルがある場合)
    2126           p2 = p.get_real_callee_port               # 唯一のポート(でない場合は、ない)
     2084          # 最適化コード (optimize) # スケルトン不要
     2085          c2 = p.get_real_callee_cell               # 唯一のセル(でない場合もある、複数セルがある場合)
     2086          p2 = p.get_real_callee_port               # 唯一のポート(でない場合は、ない)
    21272087          if p2 then
    2128             ct = p2.get_celltype                    # 呼びå
    2129 ˆã®ã‚»ãƒ«ã‚¿ã‚¤ãƒ—
     2088            ct = p2.get_celltype                    # 呼び先のセルタイプ
    21302089            if ! ct.is_singleton? then
    21312090              if ct.has_CB? || ct.has_INIB? then
     
    21342093                  f.print( "\t   #{name_array[7]}" )
    21352094                else
    2136                   # CELLCB IDX を渡す (標準コードと同じだが、扱う型は異なる)
    2137                   # p.is_skelton_useless? == true/false ともに同じ
     2095                  # CELLCB IDX を渡す (標準コードと同じだが、扱う型は異なる)
     2096                  # p.is_skelton_useless? == true/false ともに同じ
    21382097                  f.print( "\t   (p_that)#{inib}->#{p.get_name}#{subsc}" )
    21392098                end
     
    21462105            end
    21472106          else
    2148             # optional で未結合
     2107            # optional で未結合
    21492108            b_join = false
    21502109          end
     
    21632122  end
    21642123
    2165   #=== ref_desc 指定された呼び口に対するディスクリプタ参ç
    2166 §é–¢æ•°ã®ç”Ÿæˆ
     2124  #=== ref_desc 指定された呼び口に対するディスクリプタ参照関数の生成
    21672125  def gen_ph_ref_desc_func f
    21682126    if @n_call_port_ref_desc >0 then
     
    22192177  end
    22202178
    2221   #=== dynamic 指定された呼び口に対するディスクリプタ設定関数の生成
     2179  #=== dynamic 指定された呼び口に対するディスクリプタ設定関数の生成
    22222180  def gen_ph_set_desc_func f
    22232181    if @n_call_port_dynamic >0 then
     
    22912249  end
    22922250
    2293   #=== send/receive で受け取ったメモリ領域を dealloc するマクロコード
     2251  #=== send/receive で受け取ったメモリ領域を dealloc するマクロコード
    22942252  #f:: File
    2295   #b_undef:: bool : true = #undef コードの生成,  false = #define コードの生成
     2253  #b_undef:: bool : true = #undef コードの生成,  false = #define コードの生成
    22962254  def  gen_ph_dealloc_code( f, append_name, b_undef = false )
    22972255    b_msg = false
     
    23002258
    23012259      p.each_param{ |port, fd, par|
    2302         case par.get_direction                        # 引数の方向指定子 (in, out, inout, send, receive )
     2260        case par.get_direction                        # 引数の方向指定子 (in, out, inout, send, receive )
    23032261        when :SEND
    23042262          # next if port.get_port_type == :CALL
     
    23172275        end
    23182276
    2319         #                      ポート名         é–¢æ•°å         ãƒ‘ラメータ名
     2277        #                      ポート名         関数名         パラメータ名
    23202278        dealloc_func_name = "#{port.get_name}_#{fd.get_name}_#{par.get_name}_dealloc"
    23212279        dealloc_macro_name = dealloc_func_name.upcase
     
    23562314    @port.each { |p|
    23572315      next if p.get_port_type != :CALL
    2358       # next if p.is_omit?  呼び出すとエラーを起こすコードを生成
     2316      # next if p.is_omit?  呼び出すとエラーを起こすコードを生成
    23592317
    23602318      p.get_signature.get_function_head_array.each{ |fun|
     
    25312489        f.print( "struct tag_#{@global_name}_CB *" )
    25322490      elsif has_INIB? then
    2533         # f.print( "struct tag_#{@global_name}_INIB *" )  # const を出力していない
     2491        # f.print( "struct tag_#{@global_name}_INIB *" )  # const を出力していない
    25342492        f.print( "const struct tag_#{@global_name}_INIB *" )
    25352493      else
     
    25672525
    25682526        if p.get_array_size then
    2569           f.print( "#{delim} int_t subscript" )     # mikan singleton 時の ',' の始末
     2527          f.print( "#{delim} int_t subscript" )     # mikan singleton 時の ',' の始末
    25702528          delim = ","
    25712529        end
     
    25752533          len = items.length
    25762534        else
    2577           # ここで nil になるのは、引数なしの時に void がなかった場合
     2535          # ここで nil になるのは、引数なしの時に void がなかった場合
    25782536          items = []
    25792537          len = 0
     
    25962554
    25972555  def gen_ph_ep_skel_prototype f
    2598     # 受け口スケルトン関数のプロトタイプ宣言を出力
     2556    # 受け口スケルトン関数のプロトタイプ宣言を出力
    25992557    if @n_entry_port >0 then
    26002558      f.printf( TECSMsg.get( :EPSP_comment ), "#_EPSP_#" )
     
    26032561      next if p.get_port_type != :ENTRY
    26042562      next if p.is_omit?
    2605 #      if p.is_skelton_useless? || ! p.is_VMT_useless? then    # 受け口最適化
    2606       if p.is_skelton_useless? then    # 受け口最適化
     2563#      if p.is_skelton_useless? || ! p.is_VMT_useless? then    # 受け口最適化
     2564      if p.is_skelton_useless? then    # 受け口最適化
    26072565#        f.print( "/* #{p.get_name} : omitted by entry port optimize */\n" )
    26082566        next
     
    26232581          len = items.length
    26242582        else
    2625           # ここで nil になるのは、引数なしの時に void がなかった場合
     2583          # ここで nil になるのは、引数なしの時に void がなかった場合
    26262584          items = []
    26272585          len = 0
     
    26462604
    26472605    if ( $rom )then
    2648       # 定数部は ROM, 変数部は RAM
     2606      # 定数部は ROM, 変数部は RAM
    26492607
    26502608      if has_INIB? then
     
    26802638
    26812639    else
    2682       # å
    2683 ¨ã¦ RAM
     2640      # 全て RAM
    26842641      f.printf( TECSMsg.get( :CCTPO_comment ), "#_CCTPO_#" )
    26852642
     
    26952652
    26962653
    2697   #===   attribute の型宣言出力
    2698   #inib_cb::  :INIB または :CB
     2654  #===   attribute の型宣言出力
     2655  #inib_cb::  :INIB または :CB
    26992656  def gen_cell_cb_type_attribute( f, inib_cb )
    27002657    if inib_cb == :INIB && @n_attribute_ro > 0 then
     
    27292686      next if v.is_omit?
    27302687      next if v.get_size_is == nil
    2731       next if $rom && inib_cb == :CB      # size_is 指定されたものは INIB にのみ出力する
     2688      next if $rom && inib_cb == :CB      # size_is 指定されたものは INIB にのみ出力する
    27322689
    27332690      f.print "    "
     
    27382695
    27392696  def gen_cell_cb_type_var f
    2740     # 変数の出力
     2697    # 変数の出力
    27412698    if @n_var > 0 then
    27422699      f.print "    /* var #_VA_# */ \n"
     
    27462703
    27472704      next if v.is_omit?
    2748       next if v.get_size_is != nil    # size_is 指定された var は attribute へ出力する
     2705      next if v.get_size_is != nil    # size_is 指定された var は attribute へ出力する
    27492706
    27502707      f.print "    "
     
    27602717
    27612718  def gen_cell_cb_type_call_port( f, inib_cb )
    2762     # 呼び口
     2719    # 呼び口
    27632720    if @n_call_port >0 then
    27642721      f.print "    /* call port #_TCP_# */\n"
     
    27852742
    27862743        if ! p.is_skelton_useless? then
    2787           # 標準形
     2744          # 標準形
    27882745          if inib_cb == :INIB && p.is_dynamic? && p.get_array_size != nil && $ram_initializer then
    27892746            f.print( "    struct tag_#{p.get_signature.get_global_name}_VDES #{ptr}#{const2}*#{p.get_name;}_init_;\n" )
     
    27952752          end
    27962753        else
    2797           # 最適化 skelton 関数を呼出さない(受け口関数を直接呼出す)
    2798           # 呼びå
    2799 ˆã‚»ãƒ«ã‚¿ã‚¤ãƒ—の CB の IDX 型
     2754          # 最適化 skelton 関数を呼出さない(受け口関数を直接呼出す)
     2755          # 呼び先セルタイプの CB の IDX 型
    28002756          if p.get_real_callee_cell then
    28012757            f.print( "    " )
    28022758            p.get_real_callee_cell.get_celltype.gen_ph_idx_type f
    28032759            f.print( " #{ptr}#{p.get_name;};\n" )
    2804             # 相互参ç
    2805 §ã«å‚™ãˆã¦ã€typedef した型を使わない
     2760            # 相互参照に備えて、typedef した型を使わない
    28062761            # f.print( "    #{p.get_real_callee_cell.get_celltype.get_global_name}_IDX #{ptr}#{p.get_name;};\n" )
    28072762            if p.get_array_size == "[]" then
     
    28092764            end
    28102765          #else
    2811           #  optional で未結合
     2766          #  optional で未結合
    28122767          end
    28132768        end
    28142769      # else
    2815         # 最適化 一つしかセルがない場合、受け口ディスクリプタまたは受け側の IDX は呼び口関数マクロに埋め込まれる
    2816       end
    2817     }
    2818   end
    2819 
    2820   #=== Celltype#受け口é
    2821 åˆ—添数を記憶する変数の定義
     2770        # 最適化 一つしかセルがない場合、受け口ディスクリプタまたは受け側の IDX は呼び口関数マクロに埋め込まれる
     2771      end
     2772    }
     2773  end
     2774
     2775  #=== Celltype#受け口配列添数を記憶する変数の定義
    28222776  def gen_cell_cb_type_entry_port( f, inib_cb )
    2823     # 呼び口
     2777    # 呼び口
    28242778    if @n_entry_port >0 then
    28252779      f.print "    /* call port #_NEP_# */ \n"
     
    28272781
    28282782    @port.each{ |p|
    2829       # next if p.is_omit?                       # 受け口é
    2830 åˆ—の個数は省略しない
     2783      # next if p.is_omit?                       # 受け口配列の個数は省略しない
    28312784      if p.get_port_type == :ENTRY && p.get_array_size == "[]"
    28322785        f.print( "    int_t n_#{p.get_name};\n" )
     
    28502803        f.print "extern #{@global_name}_CB  *const #{@global_name}_CB_ptab[];\n"
    28512804        @ordered_cell_list.each{ |c|
    2852           if c.is_generate? then                           # 生成対象か?
     2805          if c.is_generate? then                           # 生成対象か?
    28532806            name_array = get_name_array c
    28542807            f.print "extern #{@global_name}_CB  #{name_array[4]};\n"
     
    28582811        f.print "extern #{@global_name}_INIB  *const #{@global_name}_INIB_ptab[];\n"
    28592812        @ordered_cell_list.each{ |c|
    2860           if c.is_generate? then                           # 生成対象か?
     2813          if c.is_generate? then                           # 生成対象か?
    28612814            name_array = get_name_array c
    28622815            f.print "extern #{@global_name}_INIB  #{name_array[11]};\n"
     
    28752828
    28762829  def gen_ph_INIB_as_CB f
    2877     # ここは、手抜きである。本来なら INIB を出力すべき
     2830    # ここは、手抜きである。本来なら INIB を出力すべき
    28782831    if ! has_CB? && has_INIB? then
    28792832      f.printf( TECSMsg.get( :DCI_comment ),  "#_DCI_#" )
     
    28922845  end
    28932846
    2894   #===  イテレータコード (FOREACH_CELL)の生成
    2895   #      singleton では出力しない
     2847  #===  イテレータコード (FOREACH_CELL)の生成
     2848  #      singleton では出力しない
    28962849  def gen_ph_foreach_cell f
    28972850
     
    29362889
    29372890
    2938   #===  変数var初期化コード
     2891  #===  変数var初期化コード
    29392892  #
    29402893  def gen_ph_cb_initialize_macro f
     
    29472900        type = v.get_type
    29482901        if( type.kind_of? PtrType )then
    2949           # PtrType は ArrayType にすり替える
    2950 
    2951           # 初期化子の要素数とする (後は 0 である)
     2902          # PtrType は ArrayType にすり替える
     2903
     2904          # 初期化子の要素数とする (後は 0 である)
    29522905          t2 = ArrayType.new( Expression.create_integer_constant( init.length, nil ) )
    29532906          t2.set_type( type.get_type )
     
    30052958      }
    30062959
    3007       # dynamic call port の初期化コード
     2960      # dynamic call port の初期化コード
    30082961      b_dyn_port = false
    30092962      @port.each{ |p|
     
    30613014
    30623015    # else
    3063     #   ã‚»ãƒ«ãŒä¸€ã¤ã‚‚なければ出力しない
     3016    #   セルが一つもなければ出力しない
    30643017    end
    30653018
     
    30683021
    30693022  def gen_ph_inline f
    3070     # inline ポートが一つでもあれば、inline.h の include
     3023    # inline ポートが一つでもあれば、inline.h の include
    30713024    if @n_entry_port_inline > 0 then
    30723025      f.printf( TECSMsg.get( :INL_comment ), "#_INL_#" )
     
    31203073      next if p.get_port_type != :ENTRY
    31213074      next if p.is_omit?
    3122       if p.is_skelton_useless?    # 受け口最適化
     3075      if p.is_skelton_useless?    # 受け口最適化
    31233076        f.print( "/* #{p.get_name} : omitted by entry port optimize */\n\n" )
    31243077        next
     
    31313084        f.print( "    #{@name}_IDX  idx;\n" )
    31323085      else
    3133         # CB も INIB も存在しない (ので、idx として整数で初期化しておく)
     3086        # CB も INIB も存在しない (ので、idx として整数で初期化しておく)
    31343087        f.print( "    int           idx;\n" )
    31353088      end
     
    31493102      next if p.get_port_type != :ENTRY
    31503103      next if p.is_omit?
    3151       if p.is_skelton_useless? then    # 受け口最適化
     3104      if p.is_skelton_useless? then    # 受け口最適化
    31523105        f.print( "/* #{p.get_name} : omitted by entry port optimize */\n" )
    31533106        next
     
    31683121          len = items.length
    31693122        else
    3170           # ここで nil になるのは、引数なしの時に void がなかった場合
     3123          # ここで nil になるのは、引数なしの時に void がなかった場合
    31713124          items = []
    31723125          len = 0
     
    31903143        end
    31913144
    3192         if functype.get_type_str == "void" then # mikan "void" の typedef に未対応
     3145        if functype.get_type_str == "void" then # mikan "void" の typedef に未対応
    31933146          f.print "    "
    31943147        else
     
    32333186      next if p.get_port_type != :ENTRY
    32343187      next if p.is_omit?
    3235       if p.is_VMT_useless? then    # 受け口最適化
     3188      if p.is_VMT_useless? then    # 受け口最適化
    32363189        f.print "/* #{p.get_name} : omitted by entry port optimize */\n"
    32373190        next
     
    32593212    end
    32603213
    3261     # このセルタイプのすべてのセルについて
     3214    # このセルタイプのすべてのセルについて
    32623215    @ordered_cell_list.each{ |c|
    3263       if c.is_generate? then                           # 生成対象か?
     3216      if c.is_generate? then                           # 生成対象か?
    32643217
    32653218        f = fs[ c.get_region.get_domain_root ]
    32663219
    3267         # 結合のリスト (NamedList)
     3220        # 結合のリスト (NamedList)
    32683221        jl = c.get_join_list
    32693222
    3270         # å
    3271 ¨ã¦ã®çµåˆãƒªã‚¹ãƒˆã«ã¤ã„て
     3223        # 全ての結合リストについて
    32723224        jl.get_items.each{ |j|
    32733225
    3274           # 左辺の定義を得る
     3226          # 左辺の定義を得る
    32753227          definition = j.get_definition
    32763228
    3277           # 呼び口ではない? (属性)
     3229          # 呼び口ではない? (属性)
    32783230          next unless definition.instance_of? Port
    32793231
    3280           port = find j.get_name # celltype の Port (こちらに最適化æƒ
    3281 å ±ãŒã‚ã‚‹)
    3282           # port = definition    # definition は composite の Port が得られることがある
     3232          port = find j.get_name # celltype の Port (こちらに最適化情報がある)
     3233          # port = definition    # definition は composite の Port が得られることがある
    32833234          next if port.is_cell_unique?
    32843235          next if port.is_omit?
    32853236
    3286           # é
    3287 åˆ—要素を得る(受け口é
    3288 åˆ—でなければ nil が返る)
     3237          # 配列要素を得る(受け口配列でなければ nil が返る)
    32893238          am = j.get_array_member2
    32903239
    3291           # 呼び口é
    3292 åˆ—か?
     3240          # 呼び口配列か?
    32933241          if am  then
    32943242            i = 0
     
    32973245              if j then
    32983246                if am[i].get_rhs_cell.get_celltype == self then
    3299                   # 同じセルタイプへ結合している場合(VDES では type conflict になる)
     3247                  # 同じセルタイプへ結合している場合(VDES では type conflict になる)
    33003248                  p = am[i].get_rhs_port
    33013249                  des_type = "const struct tag_#{@global_name}_#{p.get_name}_DES"
     
    33043252                end
    33053253
    3306                 # 右辺は受け口é
    3307 åˆ—か?
     3254                # 右辺は受け口配列か?
    33083255                if j.get_rhs_subscript then
    33093256
    3310                   # 受け口のé
    3311 åˆ—添数
     3257                  # 受け口の配列添数
    33123258                  subscript = j.get_rhs_subscript
    33133259
     
    33223268                end
    33233269              #else if j == nil
    3324               #  optioanl でé
    3325 åˆ—要素が初期化されていない
     3270              #  optioanl で配列要素が初期化されていない
    33263271              end
    33273272              i += 1
     
    33303275            dbgPrint "me=#{@name} callee=#{j.get_rhs_cell.get_celltype.get_name} #{j.get_cell.get_celltype.get_name} \n"
    33313276            if j.get_rhs_cell.get_celltype == self then
    3332               # 同じセルタイプへ結合している場合(VDES では type conflict になる)
     3277              # 同じセルタイプへ結合している場合(VDES では type conflict になる)
    33333278              p = j.get_rhs_port
    33343279              des_type = "const struct tag_#{@global_name}_#{p.get_name}_DES"
     
    33383283
    33393284            if j.get_rhs_subscript then
    3340               # 受け口é
    3341 åˆ—
     3285              # 受け口配列
    33423286              subscript = j.get_rhs_subscript
    33433287              f.printf( "extern %s %s%d;\n",
     
    33513295            end
    33523296          end
    3353           # mikan   cell の namespace 未対応、Join で Cell オブジェクトを引当ておくå¿
    3354 è¦ã‚ã‚Š
     3297          # mikan   cell の namespace 未対応、Join で Cell オブジェクトを引当ておく必要あり
    33553298        }
    33563299
     
    33623305  def gen_cell_ep_vdes_array fs
    33633306    if @n_cell_gen >0 then
    3364       fs.each{ |r, f| f.printf( TECSMsg.get( :CPA_comment ), "#_CPA_#" ) }  # mikan 呼び口é
    3365 åˆ—が無い場合も出てしまう
     3307      fs.each{ |r, f| f.printf( TECSMsg.get( :CPA_comment ), "#_CPA_#" ) }  # mikan 呼び口配列が無い場合も出てしまう
    33663308    end
    33673309
     
    33713313
    33723314        jl = c.get_join_list
    3373         # ループを回す変数を jl から @port に変更
     3315        # ループを回す変数を jl から @port に変更
    33743316        # dynamic, optional
    33753317#        jl.get_items.each{ |j|
     
    33823324          j = jl.get_item( port.get_name )
    33833325
    3384           # port = definition    # definition は composite の Port が得られることがある
    3385           # port = find j.get_name # celltype の Port (こちらに最適化æƒ
    3386 å ±ãŒã‚ã‚‹)
     3326          # port = definition    # definition は composite の Port が得られることがある
     3327          # port = find j.get_name # celltype の Port (こちらに最適化情報がある)
    33873328          next if port.is_cell_unique?
    33883329          next if port.is_omit?
     
    34053346          if b_array  then
    34063347#          if am then
    3407             # 左辺はé
    3408 åˆ—
     3348            # 左辺は配列
    34093349            const = ( port.is_dynamic? && ! $ram_initializer ) ? '' : 'const '
    34103350            init = ( port.is_dynamic? && $ram_initializer ) ? '_init_' : ''
     
    34173357            else
    34183358
    3419 #              スケルトン関数不要最適化の場合、このé
    3420 åˆ—は参ç
    3421 §ã•ã‚Œãªã„
    3422               # mikan このケースがテストされていない
     3359#              スケルトン関数不要最適化の場合、この配列は参照されない
     3360              # mikan このケースがテストされていない
    34233361              f.printf( "#{const}%s_IDX  %s_%s[] = {\n",
    3424 #                        "#{j.get_celltype.get_global_name}",   # 右辺 composite に対応できない
     3362#                        "#{j.get_celltype.get_global_name}",   # 右辺 composite に対応できない
    34253363                        "#{j.get_rhs_cell.get_celltype.get_global_name}",
    34263364                        "#{c.get_global_name}",
     
    34443382
    34453383              if j then
    3446                 # 同一セルタイプの結合の場合、VDES 型へのキャストがå¿
    3447 è¦
     3384                # 同一セルタイプの結合の場合、VDES 型へのキャストが必要
    34483385                if j.get_rhs_cell.get_celltype == self then
    34493386                  definition = j.get_definition
     
    34553392               
    34563393                if j.get_rhs_subscript then
    3457                   # 右辺é
    3458 åˆ—の場合(最適化はない)
     3394                  # 右辺配列の場合(最適化はない)
    34593395                  subscript = j.get_rhs_subscript
    34603396                  f.printf( "    %s%d,\n",
     
    34653401
    34663402                else
    3467                   # 右辺非é
    3468 åˆ—の場合 */
     3403                  # 右辺非配列の場合 */
    34693404                  if ! port.is_skelton_useless? then
    34703405                    f.printf( "    %s,\n",
     
    34773412                end
    34783413              else
    3479                 # optional で呼び口é
    3480 åˆ—要素が初期化されていない
     3414                # optional で呼び口配列要素が初期化されていない
    34813415                f.printf( "    0,\n" )
    34823416              end
    34833417            # }
    34843418            end
    3485             # mikan   cell の namespace 未対応、Join で Cell オブジェクトを引当ておくå¿
    3486 è¦ã‚ã‚Š
     3419            # mikan   cell の namespace 未対応、Join で Cell オブジェクトを引当ておく必要あり
    34873420            f.print "};\n"
    3488             # dynamic の呼び口é
    3489 åˆ—
     3421            # dynamic の呼び口配列
    34903422            if port.is_dynamic? && $ram_initializer then
    34913423              f.printf( "struct %s * %s_%s[ #{length} ];\n",
     
    35023434  end
    35033435
    3504   #=== CB を初期化するプログラムの生成
     3436  #=== CB を初期化するプログラムの生成
    35053437  def gen_cell_cb_initialize_code f
    35063438    if ! need_CB_initializer?
     
    35343466  end
    35353467
    3536   # === CB/INIB の外で初期化される変数の出力
     3468  # === CB/INIB の外で初期化される変数の出力
    35373469  def gen_cell_cb_out_init fs
    35383470
    3539     # セルがなければ、出力しない
     3471    # セルがなければ、出力しない
    35403472    if @n_cell_gen == 0 then
    35413473      return
     
    35443476    fs.each{ |r, f| f.printf( TECSMsg.get( :AVAI_comment ), "#_AVAI_#" ) }
    35453477
    3546     # attribute, var のポインタ型の参ç
    3547 §ã™ã‚‹é
    3548 åˆ—を生成
     3478    # attribute, var のポインタ型の参照する配列を生成
    35493479    @ordered_cell_list.each{ |c|
    35503480      next if  ! c.is_generate?
     
    35563486      jl = c.get_join_list
    35573487
    3558       # attribute, var のポインタ変数がé
    3559 åˆ—により初期化される場合の、é
    3560 åˆ—を出力
     3488      # attribute, var のポインタ変数が配列により初期化される場合の、配列を出力
    35613489      av_list = ct.get_attribute_list + ct.get_var_list
    35623490      if av_list.length != 0 then
     
    35743502
    35753503            if size then
    3576               # 式を評価する(attribute, var に含まれる変数を参ç
    3577 §å¯èƒ½)
     3504              # 式を評価する(attribute, var に含まれる変数を参照可能)
    35783505              sz = size.eval_const( c.get_join_list, c.get_celltype.get_name_list )
    3579               # 式を生成しなおす (変数を含まない形にする)  不完å
    3580 ¨ãªå½¢ã§ Token を生成 (エラー発生しないから)
     3506              # 式を生成しなおす (変数を含まない形にする)  不完全な形で Token を生成 (エラー発生しないから)
    35813507              size = Expression.new( [:INTEGER_CONSTANT, Token.new(sz, nil, 0, 0)] )
    35823508              array_type = ArrayType.new( size )
     
    35923518                                                                # name_array[3]: cell_CB_INIT
    35933519              if !( $ram_initializer && a.get_kind == :VAR ) then
    3594                 # -R (ram initializer 使用) の場合 var は初期化コードを出力しない
     3520                # -R (ram initializer 使用) の場合 var は初期化コードを出力しない
    35953521                if( init )then
    35963522                  str = " = #{gen_cell_cb_init( f, c, name_array, array_type, init, a.get_identifier, 1, true )}"
     
    36103536  end
    36113537
    3612   #=== var の初期値の ROM 部への
     3538  #=== var の初期値の ROM 部への
    36133539  def gen_cell_var_init f
    3614     # var の{ }で囲まれた初期値指定があるか調べる
     3540    # var の{ }で囲まれた初期値指定があるか調べる
    36153541    n_init = 0
    36163542    @var.each { |v|
     
    36303556
    36313557          if( org_type.kind_of? PtrType )then
    3632             # PtrType は ArrayType にすり替える
    3633 
    3634             # 初期化子の要素数だけとする(後は 0)
     3558            # PtrType は ArrayType にすり替える
     3559
     3560            # 初期化子の要素数だけとする(後は 0)
    36353561            t2 = ArrayType.new( Expression.create_integer_constant( init.length, nil ) )
    36363562            t2.set_type( type.get_type )
     
    36393565          end
    36403566
    3641           c = @ordered_cell_list[0]   # 仮の cell (実際には使われない)
     3567          c = @ordered_cell_list[0]   # 仮の cell (実際には使われない)
    36423568          name_array = get_name_array( c )
    36433569          # f.print "const #{type0.get_type_str}\t#{@global_name}_#{v.get_name}_VAR_INIT#{type0.get_type_str_post} = "
    36443570          f.print "const #{type.get_type_str}\t#{@global_name}_#{v.get_name}_VAR_INIT#{type.get_type_str_post} = "
    36453571          if org_type.kind_of? StructType then
    3646             # celltype の default の初期値あり
     3572            # celltype の default の初期値あり
    36473573            str = gen_cell_cb_init( f, c, name_array, type, init, v.get_identifier, 1, true )
    36483574          elsif( org_type.kind_of?( PtrType ) || org_type.kind_of?( ArrayType ) ) then
    36493575            str = "{ "
    36503576            type = org_type.get_type
    3651             # mikan ポインタではなく、é
    3652 åˆ—型としないと、ポインタ変数の領域の分、損する
     3577            # mikan ポインタではなく、配列型としないと、ポインタ変数の領域の分、損する
    36533578            init.each { |i|
    36543579              str += gen_cell_cb_init( f, c, name_array, type, i, v.get_identifier, 1, true )
     
    37073632
    37083633        unless @singleton then
    3709           # 1 つの cell INIB の終わり
     3634          # 1 つの cell INIB の終わり
    37103635          if @b_need_ptab then
    37113636            f.print( "};\n\n" )
     
    37253650      end
    37263651
    3727       # RAM initializer を使用しない、または ROM 化しない
     3652      # RAM initializer を使用しない、または ROM 化しない
    37283653      if $ram_initializer == false || $rom == false then
    37293654        if @singleton then
     
    37723697
    37733698          unless @singleton then
    3774             # 1 つの cell CB の終わり
     3699            # 1 つの cell CB の終わり
    37753700            if @b_need_ptab then
    37763701              f.print( "};\n\n" )
     
    38103735        f.print "/* ID to INIB table #_INTAB_# */\n"
    38113736        @ordered_cell_list.each{ |c|
    3812           if c.is_generate? && ( c.get_region.get_domain_root != Region.get_root ) then # 生成対象かつ、ルート以外か
     3737          if c.is_generate? && ( c.get_region.get_domain_root != Region.get_root ) then # 生成対象かつ、ルート以外か
    38133738            name_array = get_name_array( c )
    38143739            print_indent( f, indent + 1 )
     
    38193744        f.print "#{@global_name}_INIB *const #{@global_name}_INIB_ptab[] ={\n"
    38203745        @ordered_cell_list.each{ |c|
    3821           if c.is_generate? then                           # 生成対象か?
     3746          if c.is_generate? then                           # 生成対象か?
    38223747            name_array = get_name_array( c )
    38233748            print_indent( f, indent + 1 )
     
    38303755        f.print "/* ID to CB table #_CBTAB_# */\n"
    38313756        @ordered_cell_list.each{ |c|
    3832           if c.is_generate? && ( c.get_region.get_domain_root != Region.get_root ) then # 生成対象かつ、ルート以外か
     3757          if c.is_generate? && ( c.get_region.get_domain_root != Region.get_root ) then # 生成対象かつ、ルート以外か
    38333758            name_array = get_name_array( c )
    38343759            print_indent( f, indent + 1 )
     
    38393764        f.print "#{@global_name}_CB *const #{@global_name}_CB_ptab[] ={\n"
    38403765        @ordered_cell_list.each{ |c|
    3841           if c.is_generate? then                           # 生成対象か?
     3766          if c.is_generate? then                           # 生成対象か?
    38423767            name_array = get_name_array( c )
    38433768            print_indent( f, indent + 1 )
     
    38513776
    38523777
    3853   #=== name_array を生成
     3778  #=== name_array を生成
    38543779  # IN:   cell  : Cell
    3855   #       index : CB, INIB é
    3856 åˆ—の添数
     3780  #       index : CB, INIB 配列の添数
    38573781  # RETURN: name_array
    38583782  #   name_array[0] = @name           # celltype name
    38593783  #   name_array[1] = cell.get_name   # cell name
    38603784  #   name_array[2] = cell_CB_name    # cell_CB_name
    3861   #   name_array[3] = cell_CB_INIT    # cell_CB_INIT # CB の外側で初期化がå¿
    3862 è¦ãªé
    3863 åˆ—の名前
     3785  #   name_array[3] = cell_CB_INIT    # cell_CB_INIT # CB の外側で初期化が必要な配列の名前
    38643786  #   name_array[4] = cell_CB_proto   # CB name for prototype
    38653787  #   name_array[5] = cell_INIB       # INIB name
     
    39033825      cell_CBP = "&#{cell_INIB_name}"
    39043826    else
    3905       cell_CBP = "NULL"    # CB も INIB もなければ NULL に置換
     3827      cell_CBP = "NULL"    # CB も INIB もなければ NULL に置換
    39063828    end
    39073829
     
    39293851  end
    39303852
    3931   #=== attribute と size_is 指定された var (ポインタ)の初期化データを出力
     3853  #=== attribute と size_is 指定された var (ポインタ)の初期化データを出力
    39323854  #
    3933   # ROM 化サポートの有無、および出力対象が CB か INIB かにより出力されるå†
    3934 å®¹ãŒç•°ãªã‚‹
     3855  # ROM 化サポートの有無、および出力対象が CB か INIB かにより出力される内容が異なる
    39353856  def gen_cell_cb_attribute( cell, indent, f, name_array, cb_inib )
    39363857    ct = self
     
    39423863      f.print "/* attribute(RO) */ \n"
    39433864    elsif $rom then  # && cb_inib == CB
    3944       # CB で rw と var
     3865      # CB で rw と var
    39453866      return if @n_attribute_rw == 0
    39463867      print_indent( f, indent + 1 )
    39473868      f.print "/* attribute(RW) */ \n"
    39483869    else  # cb_inib == CB && $rom == false
    3949       # CB にå
    3950 ¨éƒ¨
     3870      # CB に全部
    39513871      return if @n_attribute_rw == 0 && @n_attribute_ro == 0 && @n_var_size_is == 0
    39523872      print_indent( f, indent + 1 )
     
    39583878      next if a.is_omit?
    39593879      if cb_inib == :INIB && a.is_rw? == true then
    3960         # $rom == true でしか、ここへ来ない
     3880        # $rom == true でしか、ここへ来ない
    39613881        next
    39623882      elsif cb_inib == :CB && $rom && ! a.is_rw? then
     
    39663886      j = jl.get_item( a.get_identifier )
    39673887      if j then
    3968         # cell の初期値指定あり
     3888        # cell の初期値指定あり
    39693889        gen_cell_cb_init( f, cell, name_array, a.get_type, j.get_rhs, a.get_identifier, indent + 1 )
    39703890      elsif a.get_initializer then
    3971         # celltype の default の初期値あり
     3891        # celltype の default の初期値あり
    39723892        gen_cell_cb_init( f, cell, name_array, a.get_type, a.get_initializer, a.get_identifier, indent + 1 )
    39733893      else
    3974         # 初期値未指定
     3894        # 初期値未指定
    39753895        gen_cell_cb_init( f, cell, name_array, a.get_type, nil, a.get_identifier, indent + 1 )
    39763896      end
     
    39783898    @var.each{ |v|
    39793899      next if v.is_omit?
    3980       next if v.get_size_is == nil   # size_is 指定がある場合 attribute の一部として出力
     3900      next if v.get_size_is == nil   # size_is 指定がある場合 attribute の一部として出力
    39813901
    39823902      if v.get_initializer && $ram_initializer == false then
    39833903        gen_cell_cb_init( f, cell, name_array, v.get_type, v.get_initializer, v.get_identifier, indent + 1 )
    39843904      else
    3985         # 初期値未指定 または RAM initializer 使用
     3905        # 初期値未指定 または RAM initializer 使用
    39863906        gen_cell_cb_init( f, cell, name_array, v.get_type, nil, v.get_identifier, indent + 1 )
    39873907      end
     
    39893909  end
    39903910
    3991   #=== var の初期化データを出力
     3911  #=== var の初期化データを出力
    39923912  def gen_cell_cb_var( cell, indent, f, name_array )
    39933913    jl = cell.get_join_list
     
    39993919
    40003920        next if v.is_omit?
    4001         next if v.get_size_is      # size_is 指定がある場合 attribute の一部として出力
     3921        next if v.get_size_is      # size_is 指定がある場合 attribute の一部として出力
    40023922
    40033923        if v.get_initializer && $ram_initializer == false then
    40043924          gen_cell_cb_init( f, cell, name_array, v.get_type, v.get_initializer, v.get_identifier, indent + 1 )
    40053925        else
    4006           # 初期値未指定 または RAM initializer 使用
     3926          # 初期値未指定 または RAM initializer 使用
    40073927          gen_cell_cb_init( f, cell, name_array, v.get_type, nil, v.get_identifier, indent + 1 )
    40083928        end
     
    40173937  end
    40183938
    4019   #=== 呼び口の初期化コードの生成
     3939  #=== 呼び口の初期化コードの生成
    40203940  def gen_cell_cb_call_port( cell, indent, f, name_array, inib_cb )
    40213941    jl = cell.get_join_list
     
    40313951        next if p.get_port_type != :CALL
    40323952        next if p.is_omit?
    4033         next if p.is_cell_unique?        # 最適化(単一セルで呼び口マクロに埋め込まれる)
     3953        next if p.is_cell_unique?        # 最適化(単一セルで呼び口マクロに埋め込まれる)
    40343954        next if inib_cb == :INIB && p.is_dynamic? && p.get_array_size == nil && ! $ram_initializer
    40353955        next if inib_cb == :CB_DYNAMIC && ( ! p.is_dynamic? || p.get_array_size != nil )
     
    40413961        if j == nil then
    40423962          dbgPrint "cell_cb_call_port: #{p.get_name} array size=#{p.get_array_size}\n"
    4043           # optional 呼び口
     3963          # optional 呼び口
    40443964          # cdl_error( "H1003 internal error: cell \'$1\' port \'$2\': initializer not found\n" , cell.get_name, p.get_name )
    40453965          # exit( 1 )
     
    40593979            end
    40603980            if p.get_array_size == "[]" then
    4061               # 添数省略の呼び口é
    4062 åˆ—
     3981              # 添数省略の呼び口配列
    40633982              print_indent( f, indent + 1 )
    40643983              f.printf( "%-40s /* %s #_CCP6_# */\n", "0,", "length of #{p.get_name} (n_#{p.get_name})" )
     
    40723991        am = j.get_array_member2
    40733992        if am then
    4074           # 呼び口é
    4075 åˆ—の場合
     3993          # 呼び口配列の場合
    40763994          if inib_cb == :INIB && p.is_dynamic? && p.get_array_size != nil && $ram_initializer then
    40773995            f.printf( "%-40s /* #_CCP3_# _init_ */\n",  "#{cell.get_global_name}_#{j.get_name}_init_," )
     
    40803998          f.printf( "%-40s /* #_CCP3B_# */\n",  "#{cell.get_global_name}_#{j.get_name}," )
    40813999          if p.get_array_size == "[]" then
    4082             # 添数省略の呼び口é
    4083 åˆ—
     4000            # 添数省略の呼び口配列
    40844001            print_indent( f, indent + 1 )
    40854002            f.printf( "%-40s /* %s #_CCP4_# */\n", "#{am.length},", "length of #{p.get_name} (n_#{p.get_name})" )
    40864003          end
    40874004        else
    4088           # 同一セルタイプの結合の場合、VDES 型へのキャストがå¿
    4089 è¦
     4005          # 同一セルタイプの結合の場合、VDES 型へのキャストが必要
    40904006          #print "CCP0/CCP1 #{p.get_name}, #{j.get_rhs_cell.get_celltype.get_name}, #{@name}\n"
    40914007          if j.get_rhs_cell.get_celltype == self then
     
    40994015
    41004016          if j.get_rhs_subscript then
    4101             # 受け口é
    4102 åˆ—の場合
     4017            # 受け口配列の場合
    41034018            subscript = j.get_rhs_subscript
    41044019            f.printf( "%-40s /* %s #_CCP0_# */\n",
     
    41074022                      p.get_name.to_s + init )
    41084023          else
    4109             # 呼び口é
    4110 åˆ—でも、受け口é
    4111 åˆ—でもない
     4024            # 呼び口配列でも、受け口配列でもない
    41124025            if ! p.is_skelton_useless? then
    41134026              f.printf( "%-40s /* %s #_CCP1_# */\n",
     
    41154028                        p.get_name.to_s + init )
    41164029            else
    4117               # スケルトン不要最適化(CB (INIB) へのポインタを埋め込む)
    4118               c = j.get_rhs_cell                    # 呼びå
    4119 ˆã‚»ãƒ«
    4120               ct = c.get_celltype                   # 呼びå
    4121 ˆã‚»ãƒ«ã‚¿ã‚¤ãƒ—
    4122               name_array = ct.get_name_array( c )   # 呼びå
    4123 ˆã‚»ãƒ«ã‚¿ã‚¤ãƒ—で name_array を得る
     4030              # スケルトン不要最適化(CB (INIB) へのポインタを埋め込む)
     4031              c = j.get_rhs_cell                    # 呼び先セル
     4032              ct = c.get_celltype                   # 呼び先セルタイプ
     4033              name_array = ct.get_name_array( c )   # 呼び先セルタイプで name_array を得る
    41244034              if ct.has_INIB? || ct.has_CB? then
    41254035                f.printf( "%-40s /* %s #_CCP2_# */\n", "#{name_array[7]},", p.get_name )
    41264036              else
    4127                 # 呼びå
    4128 ˆã¯ CB も INIB も持たない(NULL に初期化)
     4037                # 呼び先は CB も INIB も持たない(NULL に初期化)
    41294038                f.printf( "%-40s /* %s #_CCP2B_# */\n", "0,", p.get_name )
    41304039              end
     
    41374046  end
    41384047
    4139   #=== 受け口の初期化コードの生成
     4048  #=== 受け口の初期化コードの生成
    41404049  def gen_cell_cb_entry_port( cell, indent, f, name_array )
    41414050    jl = cell.get_join_list
     
    41464055      f.print "/* entry port #_EP_# */ \n"
    41474056      @port.each{ |p|
    4148         # next if p.is_omit?  # 受け口é
    4149 åˆ—の個数は省略しない
     4057        # next if p.is_omit?  # 受け口配列の個数は省略しない
    41504058        if p.get_port_type == :ENTRY && p.get_array_size == "[]"
    41514059          print_indent( f, indent + 1 )
     
    41564064  end
    41574065
    4158   #=== セルの attribute の初期値を出力
     4066  #=== セルの attribute の初期値を出力
    41594067  #
    4160   #f_get_str:: true の場合、文字列を返す、false の場合、ファイル f に出力する.
    4161   # 文字列を返すとき、末尾に ',' は含まれない.
    4162   # ファイルへ出力するとき、末尾に ',' が出力される.構造体要素、é
    4163 åˆ—要素の初期値を出力すると ',' が二重に出力される.
    4164   # ただし現状では、ファイルへ出力することはない
     4068  #f_get_str:: true の場合、文字列を返す、false の場合、ファイル f に出力する.
     4069  # 文字列を返すとき、末尾に ',' は含まれない.
     4070  # ファイルへ出力するとき、末尾に ',' が出力される.構造体要素、配列要素の初期値を出力すると ',' が二重に出力される.
     4071  # ただし現状では、ファイルへ出力することはない
    41654072  #
    41664073  def gen_cell_cb_init( f, cell, name_array, type, init, identifier, indent, f_get_str = false )
     
    41764083
    41774084      if f_get_str then
    4178         # 初期値未指定
     4085        # 初期値未指定
    41794086        if type.kind_of?( BoolType ) then
    41804087          str = "false"   # formerly tecs_false
     
    42004107        return str
    42014108      else
    4202         # 初期値未指定
     4109        # 初期値未指定
    42034110        if type.kind_of?( BoolType ) then
    42044111          f.print "    " * indent
     
    42344141    end   
    42354142
    4236     # このメソッドは Celltype のものであるå¿
    4237 è¦ã¯ç„¡ã„(上に続くのでここに置く)
    4238     # 初期値指定あり
     4143    # このメソッドは Celltype のものである必要は無い(上に続くのでここに置く)
     4144    # 初期値指定あり
    42394145    if type.kind_of?( BoolType ) then
    42404146      if init.instance_of?( C_EXP ) then
     
    43024208
    43034209      len.times {
    4304         next if ! init[i]        # mikan この処置は適切?
     4210        next if ! init[i]        # mikan この処置は適切?
    43054211        if f_get_str then
    43064212          str += gen_cell_cb_init( f, cell, name_array, at, init[i], "#{identifier}[#{i}]", indent + 1, f_get_str )
     
    43844290  end
    43854291
    4386   #== 関数テーブルの外部参ç
    4387 §
     4292  #== 関数テーブルの外部参照
    43884293  def gen_cell_extern_mt fs
    43894294    fs.each{ |r, f|
     
    44004305  end
    44014306
    4402   #=== 受け口ディスクリプタの定義を生成
     4307  #=== 受け口ディスクリプタの定義を生成
    44034308  def gen_cell_ep_des fs
    44044309    if @n_cell_gen >0 then
     
    44134318      f = fs[ c.get_region.get_domain_root ]
    44144319
    4415       ct = c.get_celltype     # ct = self でも同じ
     4320      ct = c.get_celltype     # ct = self でも同じ
    44164321      jl = c.get_join_list
    44174322      name_array = get_name_array( c )
     
    44224327          next if p.get_port_type != :ENTRY
    44234328          next if p.is_omit?
    4424           if p.is_skelton_useless?       # 受け口最適化n ep_opt
     4329          if p.is_skelton_useless?       # 受け口最適化n ep_opt
    44254330            f.print( "/* #{p.get_name} : omitted by entry port optimize */\n" )
    44264331            next
     
    44334338
    44344339          if len != nil then
    4435             # 受け口é
    4436 åˆ—の場合
     4340            # 受け口配列の場合
    44374341            i = 0
    44384342            while i < len
     
    45194423    return if @b_reuse && ! $generate_all_template
    45204424    if ! ( @plugin && @plugin.gen_ep_func? ) then
    4521       return if $generate_no_template     # $generate_all_template より優å
    4522 ˆã•ã‚Œã‚‹
    4523 
    4524       # 参考として出力するテンプレートファイルであることを示すために "_templ" を付加する
     4425      return if $generate_no_template     # $generate_all_template より優先される
     4426
     4427      # 参考として出力するテンプレートファイルであることを示すために "_templ" を付加する
    45254428      fname = "#{$gen}/#{@global_name}_templ.#{$c_suffix}"
    45264429    else
    4527       # Plugin により生成されたセルタイプについては、原則的にテンプレートではなく、
    4528       # 修正不要なセルタイプの実è£
    4529 ã‚³ãƒ¼ãƒ‰ã‚’生成する.
    4530       # このため、ファイル名に _temp を付加しない
     4430      # Plugin により生成されたセルタイプについては、原則的にテンプレートではなく、
     4431      # 修正不要なセルタイプの実装コードを生成する.
     4432      # このため、ファイル名に _temp を付加しない
    45314433      fname = "#{$gen}/#{@global_name}.#{$c_suffix}"
    45324434    end
     
    45434445    gen_template_attr_access f
    45444446    gen_template_cp_fun f
    4545     # gen_template_types f     # 0805503 追加してみたが、やっぱりやめる
     4447    # gen_template_types f     # 0805503 追加してみたが、やっぱりやめる
    45464448    f.print( " *\n * #[</PREAMBLE>]# */\n\n" )
    45474449    f.printf TECSMsg.get( :PAC_comment ), "#_PAC_#"
     
    45494451    gen_template_private_header f
    45504452    if ( @plugin ) then
    4551       # このメソッドの引数は plugin.rb の説明を見よ
     4453      # このメソッドの引数は plugin.rb の説明を見よ
    45524454      @plugin.gen_preamble( f, @singleton, @name, @global_name )
    45534455    end
     
    45584460
    45594461    if ( @plugin ) then
    4560       # このメソッドの引数は plugin.rb の説明を見よ
     4462      # このメソッドの引数は plugin.rb の説明を見よ
    45614463      @plugin.gen_postamble( f, @singleton, @name, @global_name )
    45624464    end
     
    47404642      next if p.get_port_type != :ENTRY
    47414643      next if p.is_omit?
    4742       next if b_inline && ! p.is_inline?  # inline ポート
    4743       next if ! b_inline && p.is_inline?  # 非 inline ポート
     4644      next if b_inline && ! p.is_inline?  # inline ポート
     4645      next if ! b_inline && p.is_inline?  # 非 inline ポート
    47444646
    47454647      inline_prefix = ""
     
    47984700          len = items.length
    47994701        else
    4800           # ここで nil になるのは、引数なしの時に void がなかった場合
     4702          # ここで nil になるのは、引数なしの時に void がなかった場合
    48014703          items = []
    48024704          len = 0
     
    48194721
    48204722        if ( @plugin && @plugin.gen_ep_func? ) then
    4821           # このメソッドの引数は plugin.rb の説明を見よ
     4723          # このメソッドの引数は plugin.rb の説明を見よ
    48224724          @plugin.gen_ep_func_body( f, @singleton, @name, @global_name, p.get_signature.get_global_name, p.get_name, fun.get_name, "#{@global_name}_#{p.get_name}_#{fun.get_name}", functype, items )
    48234725
     
    48674769    if ! ( @plugin && @plugin.gen_ep_func? ) then
    48684770      return if @b_reuse && ! $generate_all_template
    4869       return if $generate_no_template     # $generate_all_template より優å
    4870 ˆã•ã‚Œã‚‹
    4871 
    4872       # 参考として出力するテンプレートファイルであることを示すために "_templ" を付加する
     4771      return if $generate_no_template     # $generate_all_template より優先される
     4772
     4773      # 参考として出力するテンプレートファイルであることを示すために "_templ" を付加する
    48734774      fname = "#{$gen}/#{@global_name}_inline_templ.#{$h_suffix}"
    48744775    else
    4875       # Plugin により生成されたセルタイプについては、原則的にテンプレートではなく、
    4876       # 修正不要なセルタイプの実è£
    4877 ã‚³ãƒ¼ãƒ‰ã‚’生成する.
    4878       # このため、ファイル名に _temp を付加しない
     4776      # Plugin により生成されたセルタイプについては、原則的にテンプレートではなく、
     4777      # 修正不要なセルタイプの実装コードを生成する.
     4778      # このため、ファイル名に _temp を付加しない
    48794779      fname = "#{$gen}/#{@global_name}_inline.#{$h_suffix}"
    48804780    end
     
    48994799
    49004800    if ( @plugin ) then
    4901       # このメソッドの引数は plugin.rb の説明を見よ
     4801      # このメソッドの引数は plugin.rb の説明を見よ
    49024802      @plugin.gen_postamble( f, @singleton, @name, @global_name )
    49034803    end
     
    49164816      if fa.get_name == :write then
    49174817
    4918         # 前後の " を取り除く
     4818        # 前後の " を取り除く
    49194819        # file_name = fa.get_file_name.sub( /^\"(.*)\"$/, "\\1" )
    49204820        file_name = CDLString.remove_dquote fa.get_file_name
    49214821        format = CDLString.remove_dquote fa.get_format
    4922         # format    = fa.get_format.sub( /^\"(.*)/, "\\1" )        # 前の " を取り除く
    4923         # format    = format.sub( /(.*)\"\z/, "\\1" )              # 後の " を取り除く
     4822        # format    = fa.get_format.sub( /^\"(.*)/, "\\1" )        # 前の " を取り除く
     4823        # format    = format.sub( /(.*)\"\z/, "\\1" )              # 後の " を取り除く
    49244824        format    = format.gsub( /\\\n/, "\n" )                  # \\\n => \n
    49254825
    49264826
    4927         # mikan 以下は subst_name で置換するように変更すべき
    4928         file_name = file_name.gsub( /(^|[^\$])\$ct\$/, "\\1#{@name}" )   # $ct$ をセルタイプ名に置換
    4929         file_name = file_name.gsub( /(^|[^\$])\$ct_global\$/, "\\1#{@global_name}" )   # $ct$ をセルタイプ名に置換
    4930         format    = format.gsub( /(^|[^\$])\$ct\$/, "\\1#{@name}" )   # $ct$ をセルタイプ名に置換
    4931         format    = format.gsub( /(^|[^\$])\$ct_global\$/, "\\1#{@global_name}" )   # $ct$ をセルタイプ名に置換
    4932         format    = format.gsub( /\$\$/, "\$" )                # $$ を $ に置換
     4827        # mikan 以下は subst_name で置換するように変更すべき
     4828        file_name = file_name.gsub( /(^|[^\$])\$ct\$/, "\\1#{@name}" )   # $ct$ をセルタイプ名に置換
     4829        file_name = file_name.gsub( /(^|[^\$])\$ct_global\$/, "\\1#{@global_name}" )   # $ct$ をセルタイプ名に置換
     4830        format    = format.gsub( /(^|[^\$])\$ct\$/, "\\1#{@name}" )   # $ct$ をセルタイプ名に置換
     4831        format    = format.gsub( /(^|[^\$])\$ct_global\$/, "\\1#{@global_name}" )   # $ct$ をセルタイプ名に置換
     4832        format    = format.gsub( /\$\$/, "\$" )                # $$ を $ に置換
    49334833
    49344834        if file_name[0] != ?/ then
     
    49424842            puts( format )
    49434843          end
    4944           # format 中の \n, \r, \t, \f と \" などを置換
     4844          # format 中の \n, \r, \t, \f と \" などを置換
    49454845          fmt = CDLString.escape format
    49464846          cfg_file.print( fmt )
     
    49594859    @ordered_cell_list.each{ |c|
    49604860
    4961       # cell のプロトタイプ宣言なら無視
     4861      # cell のプロトタイプ宣言なら無視
    49624862      next if ! c.is_generate?
    49634863
     
    49684868        if fa.get_name == :write then
    49694869
    4970           # 前後の " を取り除く
     4870          # 前後の " を取り除く
    49714871          # file_name = fa.get_file_name.sub( /^\"(.*)\"$/, "\\1" )
    49724872          file_name = CDLString.remove_dquote fa.get_file_name
    49734873          file_name = subst_name( file_name, name_array )
    4974           # format    = fa.get_format.sub( /^\"(.*)\"$/, "\\1" )        # 前後の "" を取り除く
     4874          # format    = fa.get_format.sub( /^\"(.*)\"$/, "\\1" )        # 前後の "" を取り除く
    49754875          format    = CDLString.remove_dquote fa.get_format
    4976           # format    = fa.get_format.sub( /^\"(.*)/, "\\1" )        # 前の " を取り除く
    4977           # format    = format.sub( /(.*)\"\z/, "\\1" )              # 後の " を取り除く
     4876          # format    = fa.get_format.sub( /^\"(.*)/, "\\1" )        # 前の " を取り除く
     4877          # format    = format.sub( /(.*)\"\z/, "\\1" )              # 後の " を取り除く
    49784878          format    = format.gsub( /\\\n/, "\n" )                  # \\\n => \n
    49794879
     
    49864886          end
    49874887
    4988           na = []     # シンボルを attribute の値に置き換えた後の引数
     4888          na = []     # シンボルを attribute の値に置き換えた後の引数
    49894889          if arg_list then
    49904890            arg_list.each { |a|
    49914891              case a[0]
    4992               when :STRING_LITERAL   # 文字列定数
    4993                 # s = a[1].sub( /^\"(.*)\"$/, "\\1" )            # 前後の "" を取り除く
     4892              when :STRING_LITERAL   # 文字列定数
     4893                # s = a[1].sub( /^\"(.*)\"$/, "\\1" )            # 前後の "" を取り除く
    49944894                s = CDLString.remove_dquote a[1]
    49954895                s = subst_name( s, name_array )
     
    49984898                na << s
    49994899              when :IDENTIFIER
    5000                 param_name = a[1]    # 識別子(属性の名前)
     4900                param_name = a[1]    # 識別子(属性の名前)
    50014901                attr = self.find( param_name )
    5002                 init = attr.get_initializer      # celltype で指定された初期値
    5003 
    5004                 # cell の join のリストから名前を探す
     4902                init = attr.get_initializer      # celltype で指定された初期値
     4903
     4904                # cell の join のリストから名前を探す
    50054905                j = c.get_join_list.get_item( param_name )
    5006                 if j then    # param_name の cell のジョインがあるか
    5007                   init = j.get_rhs                    # cell で指定された初期値を優å
    5008 ˆ
     4906                if j then    # param_name の cell のジョインがあるか
     4907                  init = j.get_rhs                    # cell で指定された初期値を優先
    50094908                end
    50104909
     
    50124911                                      # file,cell, name_array, type,          init, identifier,       indent, f_get_str
    50134912
    5014                 # str = str.sub( /^\"(.*)\"$/, "\\1" )            # 前後の "" を取り除く mikan ここで置換でよい?
     4913                # str = str.sub( /^\"(.*)\"$/, "\\1" )            # 前後の "" を取り除く mikan ここで置換でよい?
    50154914                str = CDLString.remove_dquote str
    50164915                na << str
     
    50304929            end
    50314930
    5032             # format 中の \n, \r, \t, \f と \" などを置換
     4931            # format 中の \n, \r, \t, \f と \" などを置換
    50334932            fmt = CDLString.escape format
    50344933            cfg_file.printf( fmt, *na )
     
    50544953    return if $generate_no_template
    50554954
    5056     # Makefile.templ の生成(追記)
     4955    # Makefile.templ の生成(追記)
    50574956
    50584957    f = AppFile.open( "#{$gen}/Makefile.templ" )
     
    50624961 
    50634962EOT
    5064 # この生成規則は2点で意味がない
    5065 ãƒ»$(GEN_DIR) に .o を生成するルールがない
    5066 ãƒ»ãƒ†ãƒ³ãƒ—レートコードをそのままビルドするのは紛らわしい
     4963# この生成規則は2点で意味がない
     4964・$(GEN_DIR) に .o を生成するルールがない
     4965・テンプレートコードをそのままビルドするのは紛らわしい
    50674966# # Celltype: #{@name}
    50684967# $(GEN_DIR)/#{@global_name}_tecsgen.o : $(GEN_DIR)/#{@global_name}_tecsgen.#{$c_suffix}
     
    50814980    headers = [ "$(GEN_DIR)/#{@global_name}_tecsgen.#{$h_suffix}", "$(GEN_DIR)/#{@global_name}_factory.#{$h_suffix}", "$(GEN_DIR)/global_tecsgen.#{$h_suffix}" ]
    50824981
    5083     # inline 受け口を持つか?
     4982    # inline 受け口を持つか?
    50844983    if @n_entry_port_inline > 0 then
    50854984      headers << "#{@global_name}_inline.#{$h_suffix}"
    50864985    end
    50874986
    5088     # 呼び口または受け口のシグニチャのヘッダ
     4987    # 呼び口または受け口のシグニチャのヘッダ
    50894988    @port.each { |p|
    50904989      next if p.is_omit?
     
    51115010  end
    51125011
    5113   #=== decl 用の dealloc コードを生成
    5114   #b_reset:: Bool:  リセット用の dealloc コードの生成 (NULL ポインタの場合 dealloc しない)
    5115   # mikan string 修飾されたポインタのå
    5116 ˆã«ãƒã‚¤ãƒ³ã‚¿ãŒæ¥ãªã„と仮定。ポインタ型を持つ構造体の可能性を排除していない
    5117   # このメソッドでは、行を出力する直前に " \\\n" を出力し、行末で改行文字を出力しない
     5012  #=== decl 用の dealloc コードを生成
     5013  #b_reset:: Bool:  リセット用の dealloc コードの生成 (NULL ポインタの場合 dealloc しない)
     5014  # mikan string 修飾されたポインタの先にポインタが来ないと仮定。ポインタ型を持つ構造体の可能性を排除していない
     5015  # このメソッドでは、行を出力する直前に " \\\n" を出力し、行末で改行文字を出力しない
    51185016  def gen_dealloc_code_for_type( f, type, dealloc_func_name, pre, name, post, level, b_reset, count_str = nil )
    51195017    type = type.get_original_type
     
    51445042        post2 = ""
    51455043        type2 = md.get_type.get_original_type
    5146         if type2.kind_of? PtrType then   # mikan typedef された型
     5044        if type2.kind_of? PtrType then   # mikan typedef された型
    51475045          if type2.get_count then
    51485046            count_str = type2.get_count.to_str( members_decl, pre2, post2 )
     
    52175115    end
    52185116
    5219     # 呼び口の結合å
    5220 ˆã®ã‚»ãƒ«ã‚¿ã‚¤ãƒ—のヘッダ(最適化の場合のみ)
    5221     # 結合å
    5222 ˆã®å—け口が inline の場合、inline ヘッダも
     5117    # 呼び口の結合先のセルタイプのヘッダ(最適化の場合のみ)
     5118    # 結合先の受け口が inline の場合、inline ヘッダも
    52235119    @port.each { |p|
    52245120      next if p.get_port_type != :CALL
     
    52265122
    52275123      if p.is_skelton_useless? || p.is_cell_unique? || p.is_VMT_useless? then
    5228         # 最適化コード (optimize) # スケルトン不要など
     5124        # 最適化コード (optimize) # スケルトン不要など
    52295125        p2 = p.get_real_callee_port
    52305126        if p2 then
     
    52365132          headers += ct.get_depend_header_list_( celltype_list )
    52375133        #else
    5238         #  optional で未結合 
     5134        #  optional で未結合 
    52395135        end
    52405136      end
     
    52445140
    52455141
    5246   #=== $id$, $ct$, $cb$, $idx$ 置換
     5142  #=== $id$, $ct$, $cb$, $idx$ 置換
    52475143  #
    5248   #  str に以下の置換を行う
    5249   #-   $ct$ ⇒ セルタイプ名(ct)
    5250   #-   $cell$ ⇒ セル名(cell)   cell が nil ならば以下の置換は行われない
    5251   #-   $cb$ ⇒ CB の C 言語名(cb)
    5252   #-   $cbp$ ⇒ CB へのポインタ(cbp)
    5253   #-   $cb_proto$ ⇒ CB の C 言語名プロトタイプ宣言用(cb_proto)
    5254   #-   $id$ ⇒ $ct$_$cell_global$    # ct_cell  before or same V1.5.2
    5255   #-   $idx$ ⇒ idx
    5256   #-   $ID$ ⇒ id (整数の番号)
    5257   #-   $ct_global$ ⇒ セルタイプ名(ct)
    5258   #-   $cell_global$ ⇒ セル名(cell)
    5259   #-   $$   â‡’ $
     5144  #  str に以下の置換を行う
     5145  #-   $ct$ ⇒ セルタイプ名(ct)
     5146  #-   $cell$ ⇒ セル名(cell)   cell が nil ならば以下の置換は行われない
     5147  #-   $cb$ ⇒ CB の C 言語名(cb)
     5148  #-   $cbp$ ⇒ CB へのポインタ(cbp)
     5149  #-   $cb_proto$ ⇒ CB の C 言語名プロトタイプ宣言用(cb_proto)
     5150  #-   $id$ $ct$_$cell_global$    # ct_cell  before or same V1.5.2
     5151  #-   $idx$ idx
     5152  #-   $ID$ ⇒ id (整数の番号)
     5153  #-   $ct_global$ ⇒ セルタイプ名(ct)
     5154  #-   $cell_global$ ⇒ セル名(cell)
     5155  #-   $$    $
    52605156  def subst_name( str, name_array )
    52615157    ct   = name_array[0]    # celltype name
    52625158    cell = name_array[1]    # cell name
    52635159    cb   = name_array[2]    # cell CB name
    5264     cb_init = name_array[3] # cell CB INIT, これは置換に使われない
     5160    cb_init = name_array[3] # cell CB INIT, これは置換に使われない
    52655161    cb_proto = name_array[4] # cell CB name for prototype
    52665162    id   = name_array[6]    # cell ID
     
    52835179      str = str.gsub( /(^|[^\$])\$cell_global\$/, "\\1#{cell_global}" )
    52845180    end
    5285     str = str.gsub( /\$\$/, "\$" )                       # $$ を $ に置換
     5181    str = str.gsub( /\$\$/, "\$" )                       # $$ を $ に置換
    52865182
    52875183    return str
     
    52905186end
    52915187
    5292 # Appendable File(追記可能ファイル)
     5188# Appendable File(追記可能ファイル)
    52935189class AppFile
    5294   # 開いたファイルのリスト
     5190  # 開いたファイルのリスト
    52955191  @@file_name_list = {}
    52965192
     
    53095205    end
    53105206
    5311     # 既に開いているか?
     5207    # 既に開いているか?
    53125208    if @@file_name_list[ name ] then
    53135209#2.0
    53145210      mode = "a" + mode
    5315       # 追記モードで開く
     5211      # 追記モードで開く
    53165212      file = File.open( real_name, mode )
    53175213    else
    53185214#2.0
    53195215      mode = "w" + mode
    5320       # 新規モードで開く(既にあれば、サイズを0にする)
     5216      # 新規モードで開く(既にあれば、サイズを0にする)
    53215217      file = File.open( real_name, mode )
    53225218      @@file_name_list[ name ] = true
    53235219    end
    5324     # File クラスのオブジェクトを返す
     5220    # File クラスのオブジェクトを返す
    53255221    return file
    53265222  end
Note: See TracChangeset for help on using the changeset viewer.