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

文字コードを設定

File:
1 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/generate.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby;charset=UTF-8
    r270 r321  
    66#   Copyright (C) 2008-2016 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
    52 #   $Id: generate.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
     37#   $Id$
    5338#++
    5439
     
    134119end
    135120
    136 # celltype_private.h を生成
     121# celltype_private.h を生成
    137122
    138123class Namespace
     
    140125
    141126    begin
    142       # root namespace ならば makefile を出力する(å
    143 ¨ã‚»ãƒ«ã‚¿ã‚¤ãƒ—に関わるものだけ)
    144       # å
    145 ˆã«å‡ºåŠ›ã™ã‚‹
     127      # root namespace ならば makefile を出力する(全セルタイプに関わるものだけ)
     128      # 先に出力する
    146129      if @name == "::" then
    147130
     
    155138
    156139      dbgPrint "generating region: #{$generating_region.get_name} namespace=#{@name} gen_dir=#{$gen}\n"
    157       # global_tecsgen.h (typedef, struct, const) の生成
     140      # global_tecsgen.h (typedef, struct, const) の生成
    158141      gen_global_header
    159142
    160       # signature のコードを生成
     143      # signature のコードを生成
    161144      @signature_list.each { |s|
    162145        s.generate
    163146      }
    164147
    165       # celltype のコードを生成
     148      # celltype のコードを生成
    166149      @celltype_list.each { |t|
    167150        t.generate
    168151      }
    169152
    170       # サブネームスペースのコードを生成
     153      # サブネームスペースのコードを生成
    171154      @namespace_list.each { |n|
    172155        n.generate
     
    174157
    175158    rescue => evar
    176       # もしスタックトレースが出るまでい時間がかかるようならば、次をコメントアウトしてみるべし
     159      # もしスタックトレースが出るまでい時間がかかるようならば、次をコメントアウトしてみるべし
    177160      cdl_error( "H1001 tecsgen: fatal internal error during code generation"  )
    178161      print_exception( evar )
     
    187170
    188171    begin
    189       # global_tecsgen.h (typedef, struct, const) の終わりのガードコード生成
     172      # global_tecsgen.h (typedef, struct, const) の終わりのガードコード生成
    190173      gen_global_header_post
    191174
    192       # signature のコードを生成
     175      # signature のコードを生成
    193176      @signature_list.each { |s|
    194177        s.generate_post
    195178      }
    196179
    197       # celltype のコードを生成
     180      # celltype のコードを生成
    198181      @celltype_list.each { |t|
    199182        t.generate_post
    200183      }
    201184
    202       # サブネームスペースのコードを生成
     185      # サブネームスペースのコードを生成
    203186      @namespace_list.each { |n|
    204187        n.generate_post
     
    214197  def gen_global_header
    215198
    216     # global_tecs.h の生成
     199    # global_tecs.h の生成
    217200    f = AppFile.open( "#{$gen}/global_tecsgen.#{$h_suffix}" )
    218201
     
    220203      print_note f
    221204
    222       # ガードコードを出力
     205      # ガードコードを出力
    223206      f.print <<EOT
    224207#ifndef GLOBAL_TECSGEN_H
     
    227210EOT
    228211
    229       # import_C で指定されたヘッダファイルの #include を出力
     212      # import_C で指定されたヘッダファイルの #include を出力
    230213      if Import_C.get_header_list2.length > 0 then
    231         # ヘッダ include の出力
     214        # ヘッダ include の出力
    232215        f.printf TECSMsg.get( :IMP_comment ), "#_IMP_#"
    233216        Import_C.get_header_list2.each{ |h|
     
    240223    end
    241224
    242     # typedef, struct, enum を生成
     225    # typedef, struct, enum を生成
    243226    @decl_list.each { |d|
    244227
    245       # d は Typedef, StructType, EnumType のいずれか
     228      # d は Typedef, StructType, EnumType のいずれか
    246229      if d.instance_of?( Typedef ) then
    247230
    248         # Typedef の場合、declarator の @type が CType でないか
     231        # Typedef の場合、declarator の @type が CType でないか
    249232        if ! d.get_declarator.get_type.kind_of?( CType ) then
    250233          d.gen_gh f
     
    252235      elsif ! d.kind_of?( CType ) then
    253236
    254         # CType ではない (StructType または EnumType)
     237        # CType ではない (StructType または EnumType)
    255238        d.gen_gh f
    256239#     else
    257 #       ã“こに該当するのは CStructType, CEnumType
     240#       ここに該当するのは CStructType, CEnumType
    258241      end
    259242    }
     
    283266    end
    284267
    285     # const を生成  mikan
     268    # const を生成  mikan
    286269    @const_decl_list.each { |d|
    287270      f.printf( "#define %-14s ((%s%s)%s)\n", d.get_global_name,
     
    296279  def gen_global_header_post
    297280
    298     # global_tecs.h を開く
     281    # global_tecs.h を開く
    299282    f = AppFile.open( "#{$gen}/global_tecsgen.#{$h_suffix}" )
    300283
     
    310293  end
    311294
    312   #=== Makefile.tecsgen, Makefile.templ の出力
    313   # å
    314 ¨ã‚»ãƒ«ã‚¿ã‚¤ãƒ—名を出力する部分を出力
    315   #    (本メソッドは root namespace に対して呼出す)
    316   #     å€‹ã€
    317 ã®ã‚»ãƒ«ã‚¿ã‚¤ãƒ—のメークルールは Celltype クラスで出力
     295  #=== Makefile.tecsgen, Makefile.templ の出力
     296  # 全セルタイプ名を出力する部分を出力
     297  #    (本メソッドは root namespace に対して呼出す)
     298  #     個々のセルタイプのメークルールは Celltype クラスで出力
    318299  def gen_makefile
    319300    gen_makefile_template
     
    325306    return if $generate_no_template
    326307
    327     ### Makefile.templ の生成
     308    ### Makefile.templ の生成
    328309    f = AppFile.open( "#{$gen}/Makefile.templ" )
    329310
    330311    print_Makefile_note f
    331312
    332     # Makefile の変数の出力
     313    # Makefile の変数の出力
    333314    f.printf TECSMsg.get( :MVAR_comment ), "#_MVAR_#"
    334315    f.printf "# fixed variable (unchangeable by config or plugin)\n"
    335316
    336     # TARGET の出力 (第一引数 $target に region 名および .exe を付加)
     317    # TARGET の出力 (第一引数 $target に region 名および .exe を付加)
    337318    target = $target
    338319    if $generating_region != @@root_namespace then
    339       # 子 region のリンクターゲットの場合
     320      # 子 region のリンクターゲットの場合
    340321      target += "-#{$generating_region.get_global_name}"
    341322    end
     
    419400EOT
    420401
    421     # make ルールの出力
     402    # make ルールの出力
    422403    f.printf( TECSMsg.get( :MRUL_comment), "#_MRUL_#" )
    423404
     
    447428    f.print "-include $(GEN_DIR)/Makefile.tecsgen\n"
    448429    if $generating_region.get_n_cells != 0 then
    449       # Makefile.depend の include
     430      # Makefile.depend include
    450431      f.print "-include $(GEN_DIR)/Makefile.depend\n\n"
    451432
     
    457438      f.print "\nsub_regions:$(TIMESTAMP)\n"
    458439      Region.get_link_roots.each {|region|
    459         if region.get_global_name != "" then  # Root region: この Makefile 自身
     440        if region.get_global_name != "" then  # Root region: この Makefile 自身
    460441          f.print "\tcd #{region.get_global_name}; make all\n"
    461442        end
     
    464445    end
    465446
    466     # clean: ターゲット
     447    # clean: ターゲット
    467448    f.print "clean :\n"
    468449    if $generating_region == @@root_namespace then
    469450      Region.get_link_roots.each {|region|
    470         if region.get_global_name != "" then  # Root region: この Makefile 自身
     451        if region.get_global_name != "" then  # Root region: この Makefile 自身
    471452          f.print "\tcd #{region.get_global_name}; make clean\n"
    472453        end
     
    479460    f.print "\n"
    480461
    481     # tecs: ターゲット
     462    # tecs: ターゲット
    482463    if $generating_region == @@root_namespace then
    483464      f.print "tecs : $(PRE_TECSGEN_TARGET) $(TIMESTAMP) $(POST_TECSGEN_TARGET)\n\n"
     
    508489
    509490  def gen_makefile_tecsgen
    510     ### Makefile.tecsgen の生成
     491    ### Makefile.tecsgen の生成
    511492    f = AppFile.open( "#{$gen}/Makefile.tecsgen" )
    512493
     
    563544    domain_regions = nil
    564545    DomainType.get_domain_regions.each{ |dt, regions|
    565       # domain_type は一つのノードには、一つしかないので、このループは、å¿
    566 ãšä¸€å›žã—か回らない
     546      # domain_type は一つのノードには、一つしかないので、このループは、必ず一回しか回らない
    567547      domain_regions = regions
    568548      domain_type = dt
     
    687667  end
    688668
    689   #=== すべてのセルタイプの名前を出力
    690   #f::       FILE:   å‡ºåŠ›å
    691 ˆãƒ•ã‚¡ã‚¤ãƒ«
    692   #prepend:: string: 前置文字列
    693   #append::  string: 後置文字列
    694   #b_plguin::  bool:   plugin により生成されたセルタイプを出力
    695   ##b_inline_only::  bool:   true ならば inline の entry port のみのセルタイプを含める
    696   #b_inline_only_or_proc::  bool|Proc:   true ならば inline の entry port のみ、かつインアクティブなセルタイプを含める
    697   #                                      Proc ならば Proc を実行した結果 true ならば含める
    698   #  namespace "::" から呼出される
     669  #=== すべてのセルタイプの名前を出力
     670  #f::       FILE:   出力先ファイル
     671  #prepend:: string: 前置文字列
     672  #append::  string: 後置文字列
     673  #b_plguin::  bool:   plugin により生成されたセルタイプを出力
     674  ##b_inline_only::  bool:   true ならば inline の entry port のみのセルタイプを含める
     675  #b_inline_only_or_proc::  bool|Proc:   true ならば inline の entry port のみ、かつインアクティブなセルタイプを含める
     676  #                                      Proc ならば Proc を実行した結果 true ならば含める
     677  #  namespace "::" から呼出される
    699678  def gen_celltype_names( f, prepend, append, b_plugin, b_inline_only_or_proc = true )
    700679    dbgPrint "gen_celltype_names #{@name}\n"
     
    716695  end
    717696
    718   #=== すべてのセルタイプの名前を出力
     697  #=== すべてのセルタイプの名前を出力
    719698  #region:: Region:
    720   # gen_celltype_names とgen_celltype_names_domain の相違:
    721   #   region を domain_roots に含む場合、出力する.
    722   #   ã¾ãŸã¯ã€region を含まないが、domain_roots が複数かつルートリージョンの場合、出力する.
    723   # それ以外は、gen_celltype_names の説明を参ç
    724 §
     699  # gen_celltype_names とgen_celltype_names_domain の相違:
     700  #   region を domain_roots に含む場合、出力する.
     701  #   または、region を含まないが、domain_roots が複数かつルートリージョンの場合、出力する.
     702  # それ以外は、gen_celltype_names の説明を参照
    725703  def gen_celltype_names_domain( f, prepend, append, domain_type, region, b_plugin, b_inline_only = true )
    726704    dbgPrint "gen_celltype_names #{@name}\n"
     
    752730    }
    753731  end
    754   #== Namespace#すべてのセルタイプの名前を出力
    755   # セルタイプコードのための名前出力
    756   # gen_celltype_names_domain と gen_celltype_names_domain2 の相違
    757   # ・どれか一つのリージョンにしか出さない
    758   #     domain_roots が1つだけで、指定リージョンを含む
    759   #     domain_roots が2つ以上で、指定リージョンがルートリージョン
    760   # ・ドメイン名を付加しない
     732  #== Namespace#すべてのセルタイプの名前を出力
     733  # セルタイプコードのための名前出力
     734  # gen_celltype_names_domain と gen_celltype_names_domain2 の相違
     735  # ・どれか一つのリージョンにしか出さない
     736  #     domain_roots が1つだけで、指定リージョンを含む
     737  #     domain_roots が2つ以上で、指定リージョンがルートリージョン
     738  # ・ドメイン名を付加しない
    761739  def gen_celltype_names_domain2( f, prepend, append, domain_type, region, b_plugin, b_inline_only = true )
    762740    dbgPrint "gen_celltype_names #{@name}\n"
     
    885863  def gen_sh_func_tab f
    886864
    887     # シグニチャディスクリプタの出力
     865    # シグニチャディスクリプタの出力
    888866    f.printf TECSMsg.get(:SD_comment), "#_SD_#"
    889867    f.print "struct tag_#{@global_name}_VDES {\n"
     
    891869    f.print "};\n\n"
    892870
    893     # シグニチャ関数テーブルの出力
     871    # シグニチャ関数テーブルの出力
    894872    f.printf TECSMsg.get(:SFT_comment), "#_SFT_#"
    895873    f.print( "struct tag_#{@global_name}_VMT {\n" )
     
    906884        len = items.length
    907885      else
    908         # ここで nil になるのは、引数なしの時に void がなかった場合
     886        # ここで nil になるのは、引数なしの時に void がなかった場合
    909887        items = []
    910888        len = 0
     
    932910  end
    933911
    934   #=== Signature# 関数の ID の define を出力
     912  #=== Signature# 関数の ID の define を出力
    935913  def gen_sh_func_id f
    936914    f.print "/* function id */\n"
     
    951929  def generate
    952930
    953     if need_generate?    # セルのないセルタイプは生成しない
     931    if need_generate?    # セルのないセルタイプは生成しない
    954932
    955933      generate_private_header
     
    962940      generate_makefile
    963941
    964     elsif $generate_all_template   # テンプレートコード生成オプション
     942    elsif $generate_all_template   # テンプレートコード生成オプション
    965943
    966944      generate_template_code
    967945      generate_inline_template_code
    968946
    969       # generate_makefile_template は Makefile に追記するものだから、呼び出さない
     947      # generate_makefile_template は Makefile に追記するものだから、呼び出さない
    970948
    971949    end
     
    974952
    975953  def generate_post
    976     return if ! need_generate?    # セルのないセルタイプは生成しない
     954    return if ! need_generate?    # セルのないセルタイプは生成しない
    977955
    978956    generate_private_header_post
     
    994972    gen_ph_cell_cb_type f
    995973    gen_ph_INIB_as_CB f
    996     gen_ph_extern_cell f          # セルタイプグルコード以外は参ç
    997 §ã—ない
    998     gen_ph_typedef_idx f          # mikan 参ç
    999 §ã™ã‚‹ã‚‚のができていない
     974    gen_ph_extern_cell f          # セルタイプグルコード以外は参照しない
     975    gen_ph_typedef_idx f          # mikan 参照するものができていない
    1000976    gen_ph_ep_fun_prototype f
    1001977    end_extern_C f
     
    1005981
    1006982    if @n_entry_port_inline == 0 then
    1007       # inline がなければ CB_TYPE_ONLY とする
    1008       # inline ありの場合、いったん define しておいて、後ですべて undef する
     983      # inline がなければ CB_TYPE_ONLY とする
     984      # inline ありの場合、いったん define しておいて、後ですべて undef する
    1009985      ifndef_cb_type_only f
    1010986    end
     
    10281004#    gen_ph_cell_cb_type f
    10291005#    gen_ph_INIB_as_CB f
    1030 #    gen_ph_extern_cell f          # セルタイプグルコード以外は参ç
    1031 §ã—ない
    1032     # gen_ph_typedef_idx f          # mikan 参ç
    1033 §ã™ã‚‹ã‚‚のができていない
     1006#    gen_ph_extern_cell f          # セルタイプグルコード以外は参照しない
     1007    # gen_ph_typedef_idx f          # mikan 参照するものができていない
    10341008#    gen_ph_ep_fun_prototype f
    10351009    gen_ph_ep_skel_prototype f
     
    10371011    endif_macro_only f
    10381012
    1039     # 短縮形などのマクロ出力
     1013    # 短縮形などのマクロ出力
    10401014    if @n_entry_port_inline == 0 then
    10411015      ifndef_cb_type_only f
     
    10471021    gen_ph_test_optional_call_port_abbrev f
    10481022    gen_ph_ep_fun_macro f         if @n_entry_port > 0
    1049     gen_ph_foreach_cell f         # FOREACH マクロの出力
    1050     gen_ph_cb_initialize_macro f   # CB 初期化マクロの出力.消費しないので ram_initializer フラグに関わらず出力
     1023    gen_ph_foreach_cell f         # FOREACH マクロの出力
     1024    gen_ph_cb_initialize_macro f   # CB 初期化マクロの出力.消費しないので ram_initializer フラグに関わらず出力
    10511025    gen_ph_dealloc_code f, ""
    10521026    gen_ph_dealloc_code f, "_RESET"
     
    10951069        next if p.get_port_type != :CALL
    10961070
    1097         # is_...joined は omit するケースでも出力されるため、omit を検査する前に出力
     1071        # is_...joined は omit するケースでも出力されるため、omit を検査する前に出力
    10981072        if p.is_optional? then
    10991073          f.print( "#undef is_#{p.get_name}_joined\n" )
     
    11301104  end
    11311105
    1132   #=== CELLTYPE_tecsgen.c を生成
     1106  #=== CELLTYPE_tecsgen.c を生成
    11331107  def generate_cell_code
    11341108    fs = { }
     
    11651139    end
    11661140
    1167     # すべての _tecsgen.c に出力
     1141    # すべての _tecsgen.c に出力
    11681142    print_note f
    11691143    gen_cell_private_header f
     
    11711145    gen_cell_ep_des_type f
    11721146
    1173     # すべての _tecsgen.c に出力
     1147    # すべての _tecsgen.c に出力
    11741148    fs.each{ |r,f2|
    11751149      if f == f2 then
     
    11821156    }
    11831157
    1184     # 一つの _tecsgen.c に出力
     1158    # 一つの _tecsgen.c に出力
    11851159    gen_cell_skel_fun f
    11861160    gen_cell_fun_table f
    11871161    gen_cell_var_init f
    11881162
    1189     # セルごとに _tecsgen.c に出力
     1163    # セルごとに _tecsgen.c に出力
    11901164    gen_cell_ep_vdes fs
    11911165    gen_cell_ep_vdes_array fs
    1192     gen_cell_cb_out_init fs         # INITIALIZE_CB で参ç
    1193 §ã•ã‚Œã‚‹ãŸã‚ ram_initializer=false でも消せない
     1166    gen_cell_cb_out_init fs         # INITIALIZE_CB で参照されるため ram_initializer=false でも消せない
    11941167    gen_cell_cb fs
    11951168    gen_cell_extern_mt fs
    11961169    gen_cell_ep_des fs
    11971170
    1198     # 一つの _tecsgen.c に出力
     1171    # 一つの _tecsgen.c に出力
    11991172    gen_cell_cb_tab f
    12001173    if $ram_initializer then
     
    12511224
    12521225  def gen_ph_include f
    1253     # ランタイムヘッダの include
     1226    # ランタイムヘッダの include
    12541227#    f.printf TECSMsg.get( :IRTH_comment), "#_IRTH_#"
    12551228#    f.print "#include \"tecs.#{$h_suffix}\"\n\n"
    12561229
    1257     # グローバルヘッダの include
     1230    # グローバルヘッダの include
    12581231    f.printf TECSMsg.get( :IGH_comment ), "#_IGH_#"
    12591232    f.print "#include \"global_tecsgen.#{$h_suffix}\"\n\n"
    12601233
    1261     # シグニチャヘッダの include
     1234    # シグニチャヘッダの include
    12621235    f.printf TECSMsg.get( :ISH_comment ), "#_ISH_#"
    12631236    @port.each { |p|
     
    12771250    end
    12781251
    1279     # 最適化のため参ç
    1280 §ã™ã‚‹ã‚»ãƒ«ã‚¿ã‚¤ãƒ—の CB 型の定義を取込む
    1281     # _CB_TYPE_ONLY を定義した上で include する
     1252    # 最適化のため参照するセルタイプの CB 型の定義を取込む
     1253    # _CB_TYPE_ONLY を定義した上で include する
    12821254    f.printf( TECSMsg.get( :ICT_comment ), "#_ICT_#" )
    12831255
     
    12921264
    12931265      if p.is_skelton_useless? || p.is_cell_unique? || p.is_VMT_useless? then
    1294         # 最適化コード (optimize) # スケルトン不要など
     1266        # 最適化コード (optimize) # スケルトン不要など
    12951267        p2 = p.get_real_callee_port
    12961268        if p2 then
     
    13011273          end
    13021274        # else
    1303           # optional で未結合
     1275          # optional で未結合
    13041276        end
    13051277      end
     
    13131285#      next if p.get_port_type != :CALL
    13141286#      if p.is_skelton_useless? || p.is_cell_unique? || p.is_VMT_useless? then
    1315 #        # 最適化コード (optimize) # スケルトン不要など
     1287#        # 最適化コード (optimize) # スケルトン不要など
    13161288#        p2 = p.get_real_callee_port
    13171289#        ct = p2.get_celltype
     
    13291301    return if @singleton
    13301302
    1331     # ID の基数および個数の define を出力
     1303    # ID の基数および個数の define を出力
    13321304    f.printf("#define %-20s %10s  /* %s #_NIDB_# */\n", "#{@global_name}_ID_BASE", "(#{@id_base})", TECSMsg.get(:NIDB_comment))
    13331305    f.printf("#define %-20s %10s  /* %s  #_NCEL_# */\n\n", "#{@global_name}_N_CELL", "(#{@n_cell_gen})", TECSMsg.get(:NCEL_comment))
     
    13371309    return if @singleton
    13381310
    1339     # mikan  最適化
    1340     # IDX 正当性チェックマクロの出力
     1311    # mikan  最適化
     1312    # IDX 正当性チェックマクロの出力
    13411313    f.printf( TECSMsg.get( :CVI_comment ), "#_CVI_#" )
    13421314    if @idx_is_id_act then
     
    13511323    return if @singleton
    13521324
    1353     # IDX 正当性チェックマクロ(短縮形)の出力
     1325    # IDX 正当性チェックマクロ(短縮形)の出力
    13541326    f.printf( TECSMsg.get( :CVIA_comment ), "#_CVIA_#")
    13551327    f.print("#define VALID_IDX(IDX)  #{@global_name}_VALID_IDX(IDX)\n\n")
     
    13571329  end
    13581330
    1359   #=== 呼び口é
    1360 åˆ—の大きさを得るマクロの出力
     1331  #=== 呼び口配列の大きさを得るマクロの出力
    13611332  #
    1362   #セルタイプヘッダへ呼び口の個数を出力
     1333  #セルタイプヘッダへ呼び口の個数を出力
    13631334  def gen_ph_n_cp f
    13641335
     
    13741345      end
    13751346
    1376       if p.get_array_size != "[]" then       # 固定長é
    1377 åˆ—
     1347      if p.get_array_size != "[]" then       # 固定長配列
    13781348        f.print( "#define N_CP_#{p.get_name}    (#{p.get_array_size})\n" )
    13791349        f.print( "#define NCP_#{p.get_name}     (#{p.get_array_size})\n" )
    1380       else                                   # 可変長é
    1381 åˆ—
     1350      else                                   # 可変長配列
    13821351        if @singleton then
    13831352          if has_INIB? then
     
    13881357          f.print( "#define N_CP_#{p.get_name}  (#{@global_name}_SINGLE_CELL_#{inib}.n_#{p.get_name})\n" )
    13891358          f.print( "#define NCP_#{p.get_name}   (#{@global_name}_SINGLE_CELL_#{inib}.n_#{p.get_name})\n" )
    1390           # mikan singleton ならば、固定長化できる
     1359          # mikan singleton ならば、固定長化できる
    13911360        else
    13921361          if has_CB? && has_INIB? then
     
    14021371  end
    14031372
    1404   #=== 受け口é
    1405 åˆ—の大きさを得るマクロの出力
     1373  #=== 受け口配列の大きさを得るマクロの出力
    14061374  #
    1407   #セルタイプヘッダへ受け口の個数を出力
     1375  #セルタイプヘッダへ受け口の個数を出力
    14081376  def gen_ph_n_ep f
    14091377
     
    14111379    @port.each { |p|
    14121380      next if p.get_port_type != :ENTRY
    1413       # next if p.is_omit?                       # 受け口é
    1414 åˆ—の個数は省略しない
     1381      # next if p.is_omit?                       # 受け口配列の個数は省略しない
    14151382      next if p.get_array_size == nil
    14161383
     
    14201387      end
    14211388
    1422       if p.get_array_size != "[]" then       # 固定長é
    1423 åˆ—
     1389      if p.get_array_size != "[]" then       # 固定長配列
    14241390        f.print( "#define NEP_#{p.get_name}     (#{p.get_array_size})\n" )
    1425       else                                   # 可変長é
    1426 åˆ—
     1391      else                                   # 可変長配列
    14271392        if @singleton then
    14281393          if has_INIB? then
     
    14321397          end
    14331398          f.print( "#define NEP_#{p.get_name}   (#{@global_name}_SINGLE_CELL_#{inib}.n_#{p.get_name})\n" )
    1434           # mikan singleton ならば、固定長化できる
     1399          # mikan singleton ならば、固定長化できる
    14351400        else
    14361401          if has_CB? && has_INIB? then
     
    14451410  end
    14461411
    1447   #=== optional な呼び口が結合されているかテストするコードの生成
     1412  #=== optional な呼び口が結合されているかテストするコードの生成
    14481413  def gen_ph_test_optional_call_port f
    14491414    b_comment = false
     
    14661431      next if p.get_port_type != :CALL
    14671432      next if ! p.is_optional?
    1468       # next if p.is_omit?  # omit でも test コードは生成する
     1433      # next if p.is_omit?  # omit でも test コードは生成する
    14691434
    14701435      if b_comment == false then
     
    14841449      end
    14851450
    1486       # 関数名の出力(標準:受け口ディスクリプタから VMT の関数名、最適化:受け口関数 or 受け口ディスクリプタ)
    1487       # mikan  å
    1488 ¨éƒ¨ã¤ãªãŒã£ã¦ã„るかどうかで (1) を判定する
     1451      # 関数名の出力(標準:受け口ディスクリプタから VMT の関数名、最適化:受け口関数 or 受け口ディスクリプタ)
     1452      # mikan  全部つながっているかどうかで (1) を判定する
    14891453      if ! p.is_VMT_useless? then
    1490         # 標準コード
     1454        # 標準コード
    14911455        if p.get_array_size == nil then
    14921456          if @singleton then
     
    14961460          end
    14971461        else
    1498           # é
    1499 åˆ—の場合
     1462          # 配列の場合
    15001463          if @singleton then
    15011464            f.print( "\t  ((#{@global_name}_SINGLE_CELL_#{inib}.#{p.get_name}!=0) \\\n" )
     
    15071470        end
    15081471      else
    1509         # 最適化コード (optimize) # VMT 不要(é
    1510 åˆ—要素すべて同じ)
     1472        # 最適化コード (optimize) # VMT 不要(配列要素すべて同じ)
    15111473        p2 = p.get_real_callee_port
    15121474        if p2 then
    15131475          ct = p2.get_celltype
    15141476          if p.is_skelton_useless? then
    1515             # 受け口関数を直接呼出す
     1477            # 受け口関数を直接呼出す
    15161478            f.print( "\t  (1)\n" )
    15171479          else
    1518             # 受け口スケルトン関数を直接呼出す
     1480            # 受け口スケルトン関数を直接呼出す
    15191481            f.print( "\t  (1)\n" )
    15201482          end
    15211483        else
    1522           # optional で未結合
     1484          # optional で未結合
    15231485          f.print( "\t  (0)    /* not joined */\n" )
    15241486        end
     
    15271489  end
    15281490
    1529   #=== optional な呼び口が結合されているかテストするコードの生成(短縮形)
     1491  #=== optional な呼び口が結合されているかテストするコードの生成(短縮形)
    15301492  def gen_ph_test_optional_call_port_abbrev f
    15311493    b_comment = false
     
    15341496      next if p.get_port_type != :CALL
    15351497      next if ! p.is_optional?
    1536       # next if p.is_omit?  # omit でも test コードは生成する
     1498      # next if p.is_omit?  # omit でも test コードは生成する
    15371499
    15381500      if b_comment == false then
     
    15501512  end
    15511513
    1552   #=== CELLCB へのポインタを得るマクロを出力
    1553   #   ã‚»ãƒ«ã‚¿ã‚¤ãƒ—ヘッダへ出力
     1514  #=== CELLCB へのポインタを得るマクロを出力
     1515  #   セルタイプヘッダへ出力
    15541516  def gen_ph_get_cellcb f
    15551517    f.printf( TECSMsg.get( :GCB_comment ), "#_GCB_#" )
    15561518    if ( ! has_CB? && ! has_INIB? ) || @singleton then
    15571519      f.print( "#define #{@global_name}_GET_CELLCB(idx) ((void *)0)\n" )
    1558     elsif @idx_is_id_act then   # mikan 単一のセルの場合の最適化, idx_is_id でない場合
     1520    elsif @idx_is_id_act then   # mikan 単一のセルの場合の最適化, idx_is_id でない場合
    15591521      f.print( "#define #{@global_name}_GET_CELLCB(idx) (#{@global_name}_CB_tab[(idx) - #{@global_name}_ID_BASE])\n" )
    15601522    else
     
    15631525  end
    15641526
    1565   #=== CELLCB へのポインタを得るマクロ(短縮形)を出力
    1566   #  セルタイプヘッダへ出力
     1527  #=== CELLCB へのポインタを得るマクロ(短縮形)を出力
     1528  #  セルタイプヘッダへ出力
    15671529  def gen_ph_get_cellcb_abbrev f
    15681530    f.printf( TECSMsg.get( :GCBA_comment ), "#_GCBA_#" )
     
    15801542  end
    15811543
    1582   #===  attribute, var をアクセスするマクロを出力
    1583   #    セルタイプヘッダへ出力
     1544  #===  attribute, var をアクセスするマクロを出力
     1545  #    セルタイプヘッダへ出力
    15841546  def gen_ph_attr_access f
    15851547    if @n_attribute_rw > 0 || @n_attribute_ro > 0 then
     
    15911553      next if a.is_omit?
    15921554
    1593       # mikan const_value の場合
     1555      # mikan const_value の場合
    15941556      f.print( "#define " )
    15951557      if @singleton then
     
    16011563        f.printf( "%-20s", "#{@global_name}_ATTR_#{a.get_name}" )
    16021564        f.print( "\t(#{@global_name}_SINGLE_CELL_#{inib}.#{a.get_name})\n" )
    1603         # mikan ここでは cell ではなく celltype の名前
     1565        # mikan ここでは cell ではなく celltype の名前
    16041566      else
    16051567        if ! a.is_rw? && has_CB? && has_INIB? then
     
    16321594      end
    16331595
    1634       # mikan const_value の場合
     1596      # mikan const_value の場合
    16351597      f.print( "#define " )
    16361598      if @singleton then
    16371599        f.printf( "%-20s", "#{@global_name}_GET_#{a.get_name}()" )
    16381600        f.print( "\t(#{@global_name}_SINGLE_CELL_#{inib}.#{a.get_name})\n" )
    1639         # mikan ここでは cell ではなく celltype の名前
     1601        # mikan ここでは cell ではなく celltype の名前
    16401602      else
    16411603        f.printf( "%-20s", "#{@global_name}_GET_#{a.get_name}(p_that)" )
     
    16481610          f.printf( "%-20s", "#{@global_name}_SET_#{a.get_name}(val)" )
    16491611          f.print( "\t(#{@global_name}_SINGLE_CELL_#{inib}.#{a.get_name} = (val))\n" )
    1650           # mikan ここでは cell ではなく celltype の名前
     1612          # mikan ここでは cell ではなく celltype の名前
    16511613        else
    16521614          f.printf( "%-20s", "#{@global_name}_SET_#{a.get_name}(p_that,val)" )
     
    16801642      end
    16811643
    1682       # mikan const_value の場合
     1644      # mikan const_value の場合
    16831645      f.print( "#define " )
    16841646      if @singleton then
    16851647        f.printf( "%-20s", "#{@global_name}_VAR_#{v.get_name}" )
    16861648        f.print( "\t(#{@global_name}_SINGLE_CELL_#{inib}.#{v.get_name})\n" )
    1687         # mikan ここでは cell ではなく celltype の名前
     1649        # mikan ここでは cell ではなく celltype の名前
    16881650      else
    16891651        f.printf( "%-20s", "#{@global_name}_VAR_#{v.get_name}(p_that)" )
     
    16961658      next if v.is_omit?
    16971659
    1698       # mikan const_value の場合
     1660      # mikan const_value の場合
    16991661      f.print( "#define " )
    17001662      if @singleton then
    17011663        f.printf( "%-20s", "#{@global_name}_GET_#{v.get_name}()" )
    17021664        f.print( "\t(#{@global_name}_SINGLE_CELL_CB.#{v.get_name})\n" )
    1703         # mikan ここでは cell ではなく celltype の名前
     1665        # mikan ここでは cell ではなく celltype の名前
    17041666      else
    17051667        f.printf( "%-20s", "#{@global_name}_GET_#{v.get_name}(p_that)" )
     
    17111673        f.printf( "%-20s", "#{@global_name}_SET_#{v.get_name}(val)" )
    17121674        f.print( "\t(#{@global_name}_SINGLE_CELL_CB.#{v.get_name}=(val))\n" )
    1713         # mikan ここでは cell ではなく celltype の名前
     1675        # mikan ここでは cell ではなく celltype の名前
    17141676      else
    17151677        f.printf( "%-20s", "#{@global_name}_SET_#{v.get_name}(p_that,val)" )
     
    17211683  end
    17221684
    1723   #===  attribute/var アクセスマクロ(短縮形)コードの生成
     1685  #===  attribute/var アクセスマクロ(短縮形)コードの生成
    17241686  def gen_ph_attr_access_abbrev f
    17251687    if @n_attribute_rw > 0 || @n_attribute_ro > 0 then
     
    17301692      next if a.is_omit?
    17311693
    1732       # mikan const_value の場合
     1694      # mikan const_value の場合
    17331695      f.print( "#define " )
    17341696      f.printf( "%-20s", "ATTR_#{a.get_name}" )
     
    17481710      next if v.is_omit?
    17491711
    1750       # mikan const_value の場合
     1712      # mikan const_value の場合
    17511713      f.print( "#define " )
    17521714      f.printf( "%-20s", "VAR_#{v.get_name}" )
     
    18091771        delim = ""
    18101772
    1811         # 関数名の出力(標準:受け口ディスクリプタから VMT の関数名、最適化:受け口関数 or 受け口ディスクリプタ)
     1773        # 関数名の出力(標準:受け口ディスクリプタから VMT の関数名、最適化:受け口関数 or 受け口ディスクリプタ)
    18121774        if ! p.is_VMT_useless? then
    1813           # 標準コード
     1775          # 標準コード
    18141776          if @singleton then
    18151777            f.print( "\t  #{@global_name}_SINGLE_CELL_#{inib}.#{p.get_name}" )
     
    18191781          f.print( "#{subsc}->VMT->#{fun.get_name}__T( \\\n" )
    18201782        else
    1821           # 最適化コード (optimize) # VMT 不要
     1783          # 最適化コード (optimize) # VMT 不要
    18221784          p2 = p.get_real_callee_port
    18231785          if p2 then
    18241786            ct = p2.get_celltype
    18251787            if p.is_skelton_useless? then
    1826               # 受け口関数を直接呼出す
     1788              # 受け口関数を直接呼出す
    18271789              f.print( "\t  #{ct.get_global_name}_#{p2.get_name}_#{fun.get_name}( \\\n" )
    18281790            else
    1829               # 受け口スケルトン関数を直接呼出す
     1791              # 受け口スケルトン関数を直接呼出す
    18301792              f.print( "\t  #{ct.get_global_name}_#{p2.get_name}_#{fun.get_name}_skel( \\\n" )
    18311793              # print "skelton: #{@name} #{ct.get_global_name}_#{p2.get_name}\n"
    18321794            end
    18331795          else
    1834             # optional で未結合
     1796            # optional で未結合
    18351797            f.print( "\t  ((#{fun.get_declarator.get_type.get_type.get_type_str} (*)()" )
    18361798            f.print( "#{fun.get_declarator.get_type.get_type.get_type_str_post})0)()\n" )
     
    18421804        end
    18431805
    1844         b_join = true    # optional で結合していない場合 false
    1845 
    1846         # 受け口æƒ
    1847 å ±ã®å‡ºåŠ›(標準:受け口ディスクリプタ、最適化:IDX など)
     1806        b_join = true    # optional で結合していない場合 false
     1807
     1808        # 受け口情報の出力(標準:受け口ディスクリプタ、最適化:IDX など)
    18481809        if ! p.is_skelton_useless? && ! p.is_cell_unique? then
    1849           # 標準コード
     1810          # 標準コード
    18501811          if @singleton then
    18511812            f.print( "\t  #{@global_name}_SINGLE_CELL_#{inib}.#{p.get_name}#{subsc}" )
     
    18561817          end
    18571818        else
    1858           # 最適化コード (optimize) # スケルトン不要
    1859           c2 = p.get_real_callee_cell               # 唯一のセル(でない場合もある、複数セルがある場合)
    1860           p2 = p.get_real_callee_port               # 唯一のポート(でない場合は、ない)
     1819          # 最適化コード (optimize) # スケルトン不要
     1820          c2 = p.get_real_callee_cell               # 唯一のセル(でない場合もある、複数セルがある場合)
     1821          p2 = p.get_real_callee_port               # 唯一のポート(でない場合は、ない)
    18611822          if p2 then
    1862             ct = p2.get_celltype                    # 呼びå
    1863 ˆã®ã‚»ãƒ«ã‚¿ã‚¤ãƒ—
     1823            ct = p2.get_celltype                    # 呼び先のセルタイプ
    18641824            if ! ct.is_singleton? then
    18651825              if ct.has_CB? || ct.has_INIB? then
     
    18681828                  f.print( "\t   #{name_array[7]}" )
    18691829                else
    1870                   # CELLCB IDX を渡す (標準コードと同じだが、扱う型は異なる)
    1871                   # p.is_skelton_useless? == true/false ともに同じ
     1830                  # CELLCB IDX を渡す (標準コードと同じだが、扱う型は異なる)
     1831                  # p.is_skelton_useless? == true/false ともに同じ
    18721832                  f.print( "\t   (p_that)#{inib}->#{p.get_name}#{subsc}" )
    18731833                end
     
    18801840            end
    18811841          else
    1882             # optional で未結合
     1842            # optional で未結合
    18831843            b_join = false
    18841844          end
     
    18971857  end
    18981858
    1899   #=== send/receive で受け取ったメモリ領域を dealloc するマクロコード
     1859  #=== send/receive で受け取ったメモリ領域を dealloc するマクロコード
    19001860  #f:: File
    1901   #b_undef:: bool : true = #undef コードの生成,  false = #define コードの生成
     1861  #b_undef:: bool : true = #undef コードの生成,  false = #define コードの生成
    19021862  def  gen_ph_dealloc_code( f, append_name, b_undef = false )
    19031863    b_msg = false
     
    19061866
    19071867      p.each_param{ |port, fd, par|
    1908         case par.get_direction                        # 引数の方向指定子 (in, out, inout, send, receive )
     1868        case par.get_direction                        # 引数の方向指定子 (in, out, inout, send, receive )
    19091869        when :SEND
    19101870          # next if port.get_port_type == :CALL
     
    19231883        end
    19241884
    1925         #                      ポート名         é–¢æ•°å         ãƒ‘ラメータ名
     1885        #                      ポート名         関数名         パラメータ名
    19261886        dealloc_func_name = "#{port.get_name}_#{fd.get_name}_#{par.get_name}_dealloc"
    19271887        dealloc_macro_name = dealloc_func_name.upcase
     
    19621922    @port.each { |p|
    19631923      next if p.get_port_type != :CALL
    1964       # next if p.is_omit?  呼び出すとエラーを起こすコードを生成
     1924      # next if p.is_omit?  呼び出すとエラーを起こすコードを生成
    19651925
    19661926      p.get_signature.get_function_head_array.each{ |fun|
     
    20672027        f.print( "struct tag_#{@global_name}_CB *" )
    20682028      elsif has_INIB? then
    2069         # f.print( "struct tag_#{@global_name}_INIB *" )  # const を出力していない
     2029        # f.print( "struct tag_#{@global_name}_INIB *" )  # const を出力していない
    20702030        f.print( "const struct tag_#{@global_name}_INIB *" )
    20712031      else
     
    21032063
    21042064        if p.get_array_size then
    2105           f.print( "#{delim} int_t subscript" )     # mikan singleton 時の ',' の始末
     2065          f.print( "#{delim} int_t subscript" )     # mikan singleton 時の ',' の始末
    21062066          delim = ","
    21072067        end
     
    21112071          len = items.length
    21122072        else
    2113           # ここで nil になるのは、引数なしの時に void がなかった場合
     2073          # ここで nil になるのは、引数なしの時に void がなかった場合
    21142074          items = []
    21152075          len = 0
     
    21322092
    21332093  def gen_ph_ep_skel_prototype f
    2134     # 受け口スケルトン関数のプロトタイプ宣言を出力
     2094    # 受け口スケルトン関数のプロトタイプ宣言を出力
    21352095    if @n_entry_port >0 then
    21362096      f.printf( TECSMsg.get( :EPSP_comment ), "#_EPSP_#" )
     
    21392099      next if p.get_port_type != :ENTRY
    21402100      next if p.is_omit?
    2141 #      if p.is_skelton_useless? || ! p.is_VMT_useless? then    # 受け口最適化
    2142       if p.is_skelton_useless? then    # 受け口最適化
     2101#      if p.is_skelton_useless? || ! p.is_VMT_useless? then    # 受け口最適化
     2102      if p.is_skelton_useless? then    # 受け口最適化
    21432103#        f.print( "/* #{p.get_name} : omitted by entry port optimize */\n" )
    21442104        next
     
    21592119          len = items.length
    21602120        else
    2161           # ここで nil になるのは、引数なしの時に void がなかった場合
     2121          # ここで nil になるのは、引数なしの時に void がなかった場合
    21622122          items = []
    21632123          len = 0
     
    21822142
    21832143    if ( $rom )then
    2184       # 定数部は ROM, 変数部は RAM
     2144      # 定数部は ROM, 変数部は RAM
    21852145
    21862146      if has_INIB? then
     
    22152175
    22162176    else
    2217       # å
    2218 ¨ã¦ RAM
     2177      # 全て RAM
    22192178      f.printf( TECSMsg.get( :CCTPO_comment ), "#_CCTPO_#" )
    22202179
     
    22302189
    22312190
    2232   #===   attribute の型宣言出力
    2233   #inib_cb::  :INIB または :CB
     2191  #===   attribute の型宣言出力
     2192  #inib_cb::  :INIB または :CB
    22342193  def gen_cell_cb_type_attribute( f, inib_cb )
    22352194    if inib_cb == :INIB && @n_attribute_ro > 0 then
     
    22642223      next if v.is_omit?
    22652224      next if v.get_size_is == nil
    2266       next if $rom && inib_cb == :CB      # size_is 指定されたものは INIB にのみ出力する
     2225      next if $rom && inib_cb == :CB      # size_is 指定されたものは INIB にのみ出力する
    22672226
    22682227      f.print "    "
     
    22732232
    22742233  def gen_cell_cb_type_var f
    2275     # 変数の出力
     2234    # 変数の出力
    22762235    if @n_var > 0 then
    22772236      f.print "    /* var #_VA_# */ \n"
     
    22812240
    22822241      next if v.is_omit?
    2283       next if v.get_size_is != nil    # size_is 指定された var は attribute へ出力する
     2242      next if v.get_size_is != nil    # size_is 指定された var は attribute へ出力する
    22842243
    22852244      f.print "    "
     
    22952254
    22962255  def gen_cell_cb_type_call_port f
    2297     # 呼び口
     2256    # 呼び口
    22982257    if @n_call_port >0 then
    22992258      f.print "    /* call port #_TCP_# */ \n"
     
    23082267      if ! p.is_cell_unique? then
    23092268        if ! p.is_skelton_useless? then
    2310           # 標準形
     2269          # 標準形
    23112270          f.print( "    struct tag_#{p.get_signature.get_global_name}_VDES #{ptr}const*#{p.get_name;};\n" )
    23122271          if p.get_array_size == "[]" then
     
    23142273          end
    23152274        else
    2316           # 最適化 skelton 関数を呼出さない(受け口関数を直接呼出す)
    2317           # 呼びå
    2318 ˆã‚»ãƒ«ã‚¿ã‚¤ãƒ—の CB の IDX 型
     2275          # 最適化 skelton 関数を呼出さない(受け口関数を直接呼出す)
     2276          # 呼び先セルタイプの CB の IDX 型
    23192277          if p.get_real_callee_cell then
    23202278            f.print( "    " )
    23212279            p.get_real_callee_cell.get_celltype.gen_ph_idx_type f
    23222280            f.print( " #{ptr}#{p.get_name;};\n" )
    2323             # 相互参ç
    2324 §ã«å‚™ãˆã¦ã€typedef した型を使わない
     2281            # 相互参照に備えて、typedef した型を使わない
    23252282            # f.print( "    #{p.get_real_callee_cell.get_celltype.get_global_name}_IDX #{ptr}#{p.get_name;};\n" )
    23262283            if p.get_array_size == "[]" then
     
    23282285            end
    23292286          #else
    2330           #  optional で未結合
     2287          #  optional で未結合
    23312288          end
    23322289        end
    23332290      # else
    2334         # 最適化 一つしかセルがない場合、受け口ディスクリプタまたは受け側の IDX は呼び口関数マクロに埋め込まれる
    2335       end
    2336     }
    2337   end
    2338 
    2339   #=== Celltype#受け口é
    2340 åˆ—添数を記憶する変数の定義
     2291        # 最適化 一つしかセルがない場合、受け口ディスクリプタまたは受け側の IDX は呼び口関数マクロに埋め込まれる
     2292      end
     2293    }
     2294  end
     2295
     2296  #=== Celltype#受け口配列添数を記憶する変数の定義
    23412297  def gen_cell_cb_type_entry_port f
    2342     # 呼び口
     2298    # 呼び口
    23432299    if @n_entry_port >0 then
    23442300      f.print "    /* call port #_NEP_# */ \n"
     
    23462302
    23472303    @port.each{ |p|
    2348       # next if p.is_omit?                       # 受け口é
    2349 åˆ—の個数は省略しない
     2304      # next if p.is_omit?                       # 受け口配列の個数は省略しない
    23502305      if p.get_port_type == :ENTRY && p.get_array_size == "[]"
    23512306        f.print( "    int_t n_#{p.get_name};\n" )
     
    23892344  end
    23902345
    2391   #===  イテレータコード (FOREACH_CELL)の生成
    2392   #      singleton では出力しない
     2346  #===  イテレータコード (FOREACH_CELL)の生成
     2347  #      singleton では出力しない
    23932348  def gen_ph_foreach_cell f
    23942349
     
    24312386
    24322387
    2433   #===  変数var初期化コード
     2388  #===  変数var初期化コード
    24342389  #
    24352390  def gen_ph_cb_initialize_macro f
     
    24422397        type = v.get_type
    24432398        if( type.kind_of? PtrType )then
    2444           # PtrType は ArrayType にすり替える
    2445 
    2446           # 初期化子の要素数とする (後は 0 である)
     2399          # PtrType は ArrayType にすり替える
     2400
     2401          # 初期化子の要素数とする (後は 0 である)
    24472402          t2 = ArrayType.new( Expression.create_integer_constant( init.length, nil ) )
    24482403          t2.set_type( type.get_type )
     
    25122467
    25132468    # else
    2514     #   ã‚»ãƒ«ãŒä¸€ã¤ã‚‚なければ出力しない
     2469    #   セルが一つもなければ出力しない
    25152470    end
    25162471
     
    25192474
    25202475  def gen_ph_inline f
    2521     # inline ポートが一つでもあれば、inline.h の include
     2476    # inline ポートが一つでもあれば、inline.h の include
    25222477    if @n_entry_port_inline > 0 then
    25232478      f.printf( TECSMsg.get( :INL_comment ), "#_INL_#" )
     
    25712526      next if p.get_port_type != :ENTRY
    25722527      next if p.is_omit?
    2573       if p.is_skelton_useless?    # 受け口最適化
     2528      if p.is_skelton_useless?    # 受け口最適化
    25742529        f.print( "/* #{p.get_name} : omitted by entry port optimize */\n\n" )
    25752530        next
     
    25822537        f.print( "    #{@name}_IDX  idx;\n" )
    25832538      else
    2584         # CB も INIB も存在しない (ので、idx として整数で初期化しておく)
     2539        # CB も INIB も存在しない (ので、idx として整数で初期化しておく)
    25852540        f.print( "    int           idx;\n" )
    25862541      end
     
    26002555      next if p.get_port_type != :ENTRY
    26012556      next if p.is_omit?
    2602       if p.is_skelton_useless? then    # 受け口最適化
     2557      if p.is_skelton_useless? then    # 受け口最適化
    26032558        f.print( "/* #{p.get_name} : omitted by entry port optimize */\n" )
    26042559        next
     
    26192574          len = items.length
    26202575        else
    2621           # ここで nil になるのは、引数なしの時に void がなかった場合
     2576          # ここで nil になるのは、引数なしの時に void がなかった場合
    26222577          items = []
    26232578          len = 0
     
    26412596        end
    26422597
    2643         if functype.get_type_str == "void" then # mikan "void" の typedef に未対応
     2598        if functype.get_type_str == "void" then # mikan "void" の typedef に未対応
    26442599          f.print "    "
    26452600        else
     
    26842639      next if p.get_port_type != :ENTRY
    26852640      next if p.is_omit?
    2686       if p.is_VMT_useless? then    # 受け口最適化
     2641      if p.is_VMT_useless? then    # 受け口最適化
    26872642        f.print "/* #{p.get_name} : omitted by entry port optimize */\n"
    26882643        next
     
    27102665    end
    27112666
    2712     # このセルタイプのすべてのセルについて
     2667    # このセルタイプのすべてのセルについて
    27132668    @ordered_cell_list.each{ |c|
    2714       if c.is_generate? then                           # 生成対象か?
     2669      if c.is_generate? then                           # 生成対象か?
    27152670
    27162671        f = fs[ c.get_region.get_domain_root ]
    27172672
    2718         # 結合のリスト (NamedList)
     2673        # 結合のリスト (NamedList)
    27192674        jl = c.get_join_list
    27202675
    2721         # å
    2722 ¨ã¦ã®çµåˆãƒªã‚¹ãƒˆã«ã¤ã„て
     2676        # 全ての結合リストについて
    27232677        jl.get_items.each{ |j|
    27242678
    2725           # 左辺の定義を得る
     2679          # 左辺の定義を得る
    27262680          definition = j.get_definition
    27272681
    2728           # 呼び口ではない? (属性)
     2682          # 呼び口ではない? (属性)
    27292683          next unless definition.instance_of? Port
    27302684
    2731           port = find j.get_name # celltype の Port (こちらに最適化æƒ
    2732 å ±ãŒã‚ã‚‹)
    2733           # port = definition    # definition は composite の Port が得られることがある
     2685          port = find j.get_name # celltype の Port (こちらに最適化情報がある)
     2686          # port = definition    # definition は composite の Port が得られることがある
    27342687          next if port.is_cell_unique?
    27352688          next if port.is_omit?
    27362689
    2737           # é
    2738 åˆ—要素を得る(受け口é
    2739 åˆ—でなければ nil が返る)
     2690          # 配列要素を得る(受け口配列でなければ nil が返る)
    27402691          am = j.get_array_member2
    27412692
    2742           # 呼び口é
    2743 åˆ—か?
     2693          # 呼び口配列か?
    27442694          if am  then
    27452695            i = 0
     
    27482698              if j then
    27492699                if am[i].get_cell.get_celltype == self then
    2750                   # 同じセルタイプへ結合している場合(VDES では type conflict になる)
     2700                  # 同じセルタイプへ結合している場合(VDES では type conflict になる)
    27512701                  p = am[i].get_rhs_port
    27522702                  des_type = "const struct tag_#{@global_name}_#{p.get_name}_DES"
     
    27552705                end
    27562706
    2757                 # 右辺は受け口é
    2758 åˆ—か?
     2707                # 右辺は受け口配列か?
    27592708                if j.get_rhs_subscript then
    27602709
    2761                   # 受け口のé
    2762 åˆ—添数
     2710                  # 受け口の配列添数
    27632711                  subscript = j.get_rhs_subscript
    27642712
     
    27732721                end
    27742722              #else if j == nil
    2775               #  optioanl でé
    2776 åˆ—要素が初期化されていない
     2723              #  optioanl で配列要素が初期化されていない
    27772724              end
    27782725              i += 1
     
    27802727          else
    27812728            if j.get_cell.get_celltype == self then
    2782               # 同じセルタイプへ結合している場合(VDES では type conflict になる)
     2729              # 同じセルタイプへ結合している場合(VDES では type conflict になる)
    27832730              p = j.get_rhs_port
    27842731              des_type = "const struct tag_#{@global_name}_#{p.get_name}_DES"
     
    27882735
    27892736            if j.get_rhs_subscript then
    2790               # 受け口é
    2791 åˆ—
     2737              # 受け口配列
    27922738              subscript = j.get_rhs_subscript
    27932739              f.printf( "extern %s %s%d;\n",
     
    28012747            end
    28022748          end
    2803           # mikan   cell の namespace 未対応、Join で Cell オブジェクトを引当ておくå¿
    2804 è¦ã‚ã‚Š
     2749          # mikan   cell の namespace 未対応、Join で Cell オブジェクトを引当ておく必要あり
    28052750        }
    28062751
     
    28122757  def gen_cell_ep_vdes_array fs
    28132758    if @n_cell_gen >0 then
    2814       fs.each{ |r, f| f.printf( TECSMsg.get( :CPA_comment ), "#_CPA_#" ) }  # mikan 呼び口é
    2815 åˆ—が無い場合も出てしまう
     2759      fs.each{ |r, f| f.printf( TECSMsg.get( :CPA_comment ), "#_CPA_#" ) }  # mikan 呼び口配列が無い場合も出てしまう
    28162760    end
    28172761
     
    28242768          definition = j.get_definition
    28252769          next unless definition.instance_of? Port
    2826           # port = definition    # definition は composite の Port が得られることがある
    2827           port = find j.get_name # celltype の Port (こちらに最適化æƒ
    2828 å ±ãŒã‚ã‚‹)
     2770          # port = definition    # definition は composite の Port が得られることがある
     2771          port = find j.get_name # celltype の Port (こちらに最適化情報がある)
    28292772          next if port.is_cell_unique?
    28302773          next if port.is_omit?
     
    28322775          am = j.get_array_member2
    28332776          if am  then
    2834             # 左辺はé
    2835 åˆ—
     2777            # 左辺は配列
    28362778
    28372779            if ! port.is_skelton_useless? then
     
    28422784            else
    28432785
    2844 #              スケルトン関数不要最適化の場合、このé
    2845 åˆ—は参ç
    2846 §ã•ã‚Œãªã„
    2847               # mikan このケースがテストされていない
     2786#              スケルトン関数不要最適化の場合、この配列は参照されない
     2787              # mikan このケースがテストされていない
    28482788              f.printf( "const %s_IDX  %s_%s[] = {\n",
    2849 #                        "#{j.get_celltype.get_global_name}",   # 右辺 composite に対応できない
     2789#                        "#{j.get_celltype.get_global_name}",   # 右辺 composite に対応できない
    28502790                        "#{j.get_rhs_cell.get_celltype.get_global_name}",
    28512791                        "#{c.get_global_name}",
     
    28642804
    28652805              if j then
    2866                 # 同一セルタイプの結合の場合、VDES 型へのキャストがå¿
    2867 è¦
     2806                # 同一セルタイプの結合の場合、VDES 型へのキャストが必要
    28682807                if j.get_rhs_cell.get_celltype == self then
    28692808                  definition = j.get_definition
     
    28752814               
    28762815                if j.get_rhs_subscript then
    2877                   # 右辺é
    2878 åˆ—の場合(最適化はない)
     2816                  # 右辺配列の場合(最適化はない)
    28792817                  subscript = j.get_rhs_subscript
    28802818                  f.printf( "    %s%d,\n",
     
    28852823
    28862824                else
    2887                   # 右辺非é
    2888 åˆ—の場合 */
     2825                  # 右辺非配列の場合 */
    28892826                  if ! port.is_skelton_useless? then
    28902827                    f.printf( "    %s,\n",
     
    28972834                end
    28982835              else
    2899                 # optional で呼び口é
    2900 åˆ—要素が初期化されていない
     2836                # optional で呼び口配列要素が初期化されていない
    29012837                f.printf( "    0,\n" )
    29022838              end
    29032839            # }
    29042840            end
    2905             # mikan   cell の namespace 未対応、Join で Cell オブジェクトを引当ておくå¿
    2906 è¦ã‚ã‚Š
     2841            # mikan   cell の namespace 未対応、Join で Cell オブジェクトを引当ておく必要あり
    29072842            f.print "};\n"
    29082843          end
     
    29142849  end
    29152850
    2916   #=== CB を初期化するプログラムの生成
     2851  #=== CB を初期化するプログラムの生成
    29172852  def gen_cell_cb_initialize_code f
    29182853    if ! need_CB_initializer?
     
    29462881  end
    29472882
    2948   # === CB/INIB の外で初期化される変数の出力
     2883  # === CB/INIB の外で初期化される変数の出力
    29492884  def gen_cell_cb_out_init fs
    29502885
    2951     # セルがなければ、出力しない
     2886    # セルがなければ、出力しない
    29522887    if @n_cell_gen == 0 then
    29532888      return
     
    29562891    fs.each{ |r, f| f.printf( TECSMsg.get( :AVAI_comment ), "#_AVAI_#" ) }
    29572892
    2958     # attribute, var のポインタ型の参ç
    2959 §ã™ã‚‹é
    2960 åˆ—を生成
     2893    # attribute, var のポインタ型の参照する配列を生成
    29612894    @ordered_cell_list.each{ |c|
    29622895      next if  ! c.is_generate?
     
    29682901      jl = c.get_join_list
    29692902
    2970       # attribute, var のポインタ変数がé
    2971 åˆ—により初期化される場合の、é
    2972 åˆ—を出力
     2903      # attribute, var のポインタ変数が配列により初期化される場合の、配列を出力
    29732904      av_list = ct.get_attribute_list + ct.get_var_list
    29742905      if av_list.length != 0 then
     
    29862917
    29872918            if size then
    2988               # 式を評価する(attribute, var に含まれる変数を参ç
    2989 §å¯èƒ½)
     2919              # 式を評価する(attribute, var に含まれる変数を参照可能)
    29902920              sz = size.eval_const( c.get_join_list, c.get_celltype.get_name_list )
    2991               # 式を生成しなおす (変数を含まない形にする)  不完å
    2992 ¨ãªå½¢ã§ Token を生成 (エラー発生しないから)
     2921              # 式を生成しなおす (変数を含まない形にする)  不完全な形で Token を生成 (エラー発生しないから)
    29932922              size = Expression.new( [:INTEGER_CONSTANT, Token.new(sz, nil, 0, 0)] )
    29942923              array_type = ArrayType.new( size )
     
    30042933                                                                # name_array[3]: cell_CB_INIT
    30052934              if !( $ram_initializer && a.get_kind == :VAR ) then
    3006                 # -R (ram initializer 使用) の場合 var は初期化コードを出力しない
     2935                # -R (ram initializer 使用) の場合 var は初期化コードを出力しない
    30072936                if( init )then
    30082937                  str = " = #{gen_cell_cb_init( f, c, name_array, array_type, init, a.get_identifier, 1, true )}"
     
    30222951  end
    30232952
    3024   #=== var の初期値の ROM 部への
     2953  #=== var の初期値の ROM 部への
    30252954  def gen_cell_var_init f
    3026     # var の{ }で囲まれた初期値指定があるか調べる
     2955    # var の{ }で囲まれた初期値指定があるか調べる
    30272956    n_init = 0
    30282957    @var.each { |v|
     
    30412970
    30422971          if( type.kind_of? PtrType )then
    3043             # PtrType は ArrayType にすり替える
    3044 
    3045             # 初期化子の要素数だけとする(後は 0)
     2972            # PtrType は ArrayType にすり替える
     2973
     2974            # 初期化子の要素数だけとする(後は 0)
    30462975            t2 = ArrayType.new( Expression.create_integer_constant( init.length, nil ) )
    30472976            t2.set_type( type.get_type )
     
    30492978          end
    30502979
    3051           c = @ordered_cell_list[0]   # 仮の cell (実際には使われない)
     2980          c = @ordered_cell_list[0]   # 仮の cell (実際には使われない)
    30522981          name_array = get_name_array( c )
    30532982          # f.print "const #{type0.get_type_str}\t#{@global_name}_#{v.get_name}_VAR_INIT#{type0.get_type_str_post} = "
    30542983          f.print "const #{type.get_type_str}\t#{@global_name}_#{v.get_name}_VAR_INIT#{type.get_type_str_post} = "
    30552984          if type.kind_of? StructType then
    3056             # celltype の default の初期値あり
     2985            # celltype の default の初期値あり
    30572986            str = gen_cell_cb_init( f, c, name_array, type, init, v.get_identifier, 1, true )
    30582987          elsif( type.kind_of?( PtrType ) || type.kind_of?( ArrayType ) ) then
    30592988            str = "{ "
    30602989            type = type.get_type
    3061             # mikan ポインタではなく、é
    3062 åˆ—型としないと、ポインタ変数の領域の分、損する
     2990            # mikan ポインタではなく、配列型としないと、ポインタ変数の領域の分、損する
    30632991            init.each { |i|
    30642992              str += gen_cell_cb_init( f, c, name_array, type, i, v.get_identifier, 1, true )
     
    31173045
    31183046        unless @singleton then
    3119           # 1 つの cell INIB の終わり
     3047          # 1 つの cell INIB の終わり
    31203048          if @idx_is_id_act then
    31213049            f.print( "};\n\n" )
     
    31353063      end
    31363064
    3137       # RAM initializer を使用しない、または ROM 化しない
     3065      # RAM initializer を使用しない、または ROM 化しない
    31383066      if $ram_initializer == false || $rom == false then
    31393067        if @singleton then
     
    31773105
    31783106          unless @singleton then
    3179             # 1 つの cell CB の終わり
     3107            # 1 つの cell CB の終わり
    31803108            if @idx_is_id_act then
    31813109              f.print( "};\n\n" )
     
    32153143        f.print "/* ID to INIB table #_INTAB_# */\n"
    32163144        @ordered_cell_list.each{ |c|
    3217           if c.is_generate? && ( c.get_region.get_domain_root != Region.get_root ) then # 生成対象かつ、ルート以外か
     3145          if c.is_generate? && ( c.get_region.get_domain_root != Region.get_root ) then # 生成対象かつ、ルート以外か
    32183146            name_array = get_name_array( c )
    32193147            print_indent( f, indent + 1 )
     
    32243152        f.print "#{@global_name}_INIB *#{@global_name}_INIB_tab[] ={\n"
    32253153        @ordered_cell_list.each{ |c|
    3226           if c.is_generate? then                           # 生成対象か?
     3154          if c.is_generate? then                           # 生成対象か?
    32273155            name_array = get_name_array( c )
    32283156            print_indent( f, indent + 1 )
     
    32353163        f.print "/* ID to CB table #_CBTAB_# */\n"
    32363164        @ordered_cell_list.each{ |c|
    3237           if c.is_generate? && ( c.get_region.get_domain_root != Region.get_root ) then # 生成対象かつ、ルート以外か
     3165          if c.is_generate? && ( c.get_region.get_domain_root != Region.get_root ) then # 生成対象かつ、ルート以外か
    32383166            name_array = get_name_array( c )
    32393167            print_indent( f, indent + 1 )
     
    32443172        f.print "#{@global_name}_CB *#{@global_name}_CB_tab[] ={\n"
    32453173        @ordered_cell_list.each{ |c|
    3246           if c.is_generate? then                           # 生成対象か?
     3174          if c.is_generate? then                           # 生成対象か?
    32473175            name_array = get_name_array( c )
    32483176            print_indent( f, indent + 1 )
     
    32563184
    32573185
    3258   #=== name_array を生成
     3186  #=== name_array を生成
    32593187  # IN:   cell  : Cell
    3260   #       index : CB, INIB é
    3261 åˆ—の添数
     3188  #       index : CB, INIB 配列の添数
    32623189  # RETURN: name_array
    32633190  #   name_array[0] = @name           # celltype name
    32643191  #   name_array[1] = cell.get_name   # cell name
    32653192  #   name_array[2] = cell_CB_name    # cell_CB_name
    3266   #   name_array[3] = cell_CB_INIT    # cell_CB_INIT # CB の外側で初期化がå¿
    3267 è¦ãªé
    3268 åˆ—の名前
     3193  #   name_array[3] = cell_CB_INIT    # cell_CB_INIT # CB の外側で初期化が必要な配列の名前
    32693194  #   name_array[4] = cell_CB_proto   # CB name for prototype
    32703195  #   name_array[5] = cell_INIB       # INIB name
     
    33053230
    33063231    if ! has_CB? && ! has_INIB? then
    3307       cell_CBP = "NULL"    # CB も INIB もなければ NULL に置換
     3232      cell_CBP = "NULL"    # CB も INIB もなければ NULL に置換
    33083233    else
    33093234      cell_CBP = "&#{cell_CB_name}"
     
    33263251  end
    33273252
    3328   #=== attribute と size_is 指定された var (ポインタ)の初期化データを出力
     3253  #=== attribute と size_is 指定された var (ポインタ)の初期化データを出力
    33293254  #
    3330   # ROM 化サポートの有無、および出力対象が CB か INIB かにより出力されるå†
    3331 å®¹ãŒç•°ãªã‚‹
     3255  # ROM 化サポートの有無、および出力対象が CB か INIB かにより出力される内容が異なる
    33323256  def gen_cell_cb_attribute( cell, indent, f, name_array, cb_inib )
    33333257    ct = self
     
    33393263      f.print "/* attribute(RO) */ \n"
    33403264    elsif $rom then  # && cb_inib == CB
    3341       # CB で rw と var
     3265      # CB で rw と var
    33423266      return if @n_attribute_rw == 0
    33433267      print_indent( f, indent + 1 )
    33443268      f.print "/* attribute(RW) */ \n"
    33453269    else  # cb_inib == CB && $rom == false
    3346       # CB にå
    3347 ¨éƒ¨
     3270      # CB に全部
    33483271      return if @n_attribute_rw == 0 && @n_attribute_ro == 0 && @n_var_size_is == 0
    33493272      print_indent( f, indent + 1 )
     
    33553278      next if a.is_omit?
    33563279      if cb_inib == :INIB && a.is_rw? == true then
    3357         # $rom == true でしか、ここへ来ない
     3280        # $rom == true でしか、ここへ来ない
    33583281        next
    33593282      elsif cb_inib == :CB && $rom && ! a.is_rw? then
     
    33633286      j = jl.get_item( a.get_identifier )
    33643287      if j then
    3365         # cell の初期値指定あり
     3288        # cell の初期値指定あり
    33663289        gen_cell_cb_init( f, cell, name_array, a.get_type, j.get_rhs, a.get_identifier, indent + 1 )
    33673290      elsif a.get_initializer then
    3368         # celltype の default の初期値あり
     3291        # celltype の default の初期値あり
    33693292        gen_cell_cb_init( f, cell, name_array, a.get_type, a.get_initializer, a.get_identifier, indent + 1 )
    33703293      else
    3371         # 初期値未指定
     3294        # 初期値未指定
    33723295        gen_cell_cb_init( f, cell, name_array, a.get_type, nil, a.get_identifier, indent + 1 )
    33733296      end
     
    33753298    @var.each{ |v|
    33763299      next if v.is_omit?
    3377       next if v.get_size_is == nil   # size_is 指定がある場合 attribute の一部として出力
     3300      next if v.get_size_is == nil   # size_is 指定がある場合 attribute の一部として出力
    33783301
    33793302      if v.get_initializer && $ram_initializer == false then
    33803303        gen_cell_cb_init( f, cell, name_array, v.get_type, v.get_initializer, v.get_identifier, indent + 1 )
    33813304      else
    3382         # 初期値未指定 または RAM initializer 使用
     3305        # 初期値未指定 または RAM initializer 使用
    33833306        gen_cell_cb_init( f, cell, name_array, v.get_type, nil, v.get_identifier, indent + 1 )
    33843307      end
     
    33863309  end
    33873310
    3388   #=== var の初期化データを出力
     3311  #=== var の初期化データを出力
    33893312  def gen_cell_cb_var( cell, indent, f, name_array )
    33903313    jl = cell.get_join_list
     
    33963319
    33973320        next if v.is_omit?
    3398         next if v.get_size_is      # size_is 指定がある場合 attribute の一部として出力
     3321        next if v.get_size_is      # size_is 指定がある場合 attribute の一部として出力
    33993322
    34003323        if v.get_initializer && $ram_initializer == false then
    34013324          gen_cell_cb_init( f, cell, name_array, v.get_type, v.get_initializer, v.get_identifier, indent + 1 )
    34023325        else
    3403           # 初期値未指定 または RAM initializer 使用
     3326          # 初期値未指定 または RAM initializer 使用
    34043327          gen_cell_cb_init( f, cell, name_array, v.get_type, nil, v.get_identifier, indent + 1 )
    34053328        end
     
    34133336  end
    34143337
    3415   #=== 呼び口の初期化コードの生成
     3338  #=== 呼び口の初期化コードの生成
    34163339  def gen_cell_cb_call_port( cell, indent, f, name_array )
    34173340    jl = cell.get_join_list
     
    34243347        next if p.get_port_type != :CALL
    34253348        next if p.is_omit?
    3426         next if p.is_cell_unique?        # 最適化(単一セルで呼び口マクロに埋め込まれる)
     3349        next if p.is_cell_unique?        # 最適化(単一セルで呼び口マクロに埋め込まれる)
    34273350
    34283351        j = jl.get_item( p.get_name )
     
    34313354        # debug
    34323355        if j == nil then
    3433           # optional 呼び口
     3356          # optional 呼び口
    34343357          # cdl_error( "H1003 internal error: cell \'$1\' port \'$2\': initializer not found\n" , cell.get_name, p.get_name )
    34353358          # exit( 1 )
    34363359          f.printf( "%-40s /* #_CCP5_# */\n",  "0," )
    34373360          if p.get_array_size == "[]" then
    3438             # 添数省略の呼び口é
    3439 åˆ—
     3361            # 添数省略の呼び口配列
    34403362            print_indent( f, indent + 1 )
    34413363            f.printf( "%-40s /* %s #_CCP6_# */\n", "0,", "length of #{p.get_name} (n_#{p.get_name})" )
     
    34463368        am = j.get_array_member2
    34473369        if am then
    3448           # 呼び口é
    3449 åˆ—の場合
     3370          # 呼び口配列の場合
    34503371          f.printf( "%-40s /* #_CCP3_# */\n",  "#{cell.get_global_name}_#{j.get_name}," )
    34513372          if p.get_array_size == "[]" then
    3452             # 添数省略の呼び口é
    3453 åˆ—
     3373            # 添数省略の呼び口配列
    34543374            print_indent( f, indent + 1 )
    34553375            f.printf( "%-40s /* %s #_CCP4_# */\n", "#{am.length},", "length of #{p.get_name} (n_#{p.get_name})" )
    34563376          end
    34573377        else
    3458           # 同一セルタイプの結合の場合、VDES 型へのキャストがå¿
    3459 è¦
     3378          # 同一セルタイプの結合の場合、VDES 型へのキャストが必要
    34603379          #print "CCP0/CCP1 #{p.get_name}, #{j.get_rhs_cell.get_celltype.get_name}, #{@name}\n"
    34613380          if j.get_rhs_cell.get_celltype == self then
     
    34673386
    34683387          if j.get_rhs_subscript then
    3469             # 受け口é
    3470 åˆ—の場合
     3388            # 受け口配列の場合
    34713389            subscript = j.get_rhs_subscript
    34723390            f.printf( "%-40s /* %s #_CCP0_# */\n",
     
    34753393                      p.get_name )
    34763394          else
    3477             # 呼び口é
    3478 åˆ—でも、受け口é
    3479 åˆ—でもない
     3395            # 呼び口配列でも、受け口配列でもない
    34803396            if ! p.is_skelton_useless? then
    34813397              f.printf( "%-40s /* %s #_CCP1_# */\n",
     
    34833399                        p.get_name )
    34843400            else
    3485               # スケルトン不要最適化(CB (INIB) へのポインタを埋め込む)
    3486               c = j.get_rhs_cell                    # 呼びå
    3487 ˆã‚»ãƒ«
    3488               ct = c.get_celltype                   # 呼びå
    3489 ˆã‚»ãƒ«ã‚¿ã‚¤ãƒ—
     3401              # スケルトン不要最適化(CB (INIB) へのポインタを埋め込む)
     3402              c = j.get_rhs_cell                    # 呼び先セル
     3403              ct = c.get_celltype                   # 呼び先セルタイプ
    34903404              if ct.has_INIB? || ct.has_CB? then
    3491                 name_array = ct.get_name_array( c )   # 呼びå
    3492 ˆã‚»ãƒ«ã‚¿ã‚¤ãƒ—で name_array を得る
     3405                name_array = ct.get_name_array( c )   # 呼び先セルタイプで name_array を得る
    34933406                f.printf( "%-40s /* %s #_CCP2_# */\n", "#{name_array[7]},", p.get_name )
    34943407              else
    3495                 # 呼びå
    3496 ˆã¯ CB も INIB も持たない(NULL に初期化)
     3408                # 呼び先は CB も INIB も持たない(NULL に初期化)
    34973409                f.printf( "%-40s /* %s #_CCP2_# */\n", "0,", p.get_name )
    34983410              end
     
    35053417  end
    35063418
    3507   #=== 受け口の初期化コードの生成
     3419  #=== 受け口の初期化コードの生成
    35083420  def gen_cell_cb_entry_port( cell, indent, f, name_array )
    35093421    jl = cell.get_join_list
     
    35143426      f.print "/* entry port #_EP_# */ \n"
    35153427      @port.each{ |p|
    3516         # next if p.is_omit?  # 受け口é
    3517 åˆ—の個数は省略しない
     3428        # next if p.is_omit?  # 受け口配列の個数は省略しない
    35183429        if p.get_port_type == :ENTRY && p.get_array_size == "[]"
    35193430          print_indent( f, indent + 1 )
     
    35243435  end
    35253436
    3526   #=== セルの attribute の初期値を出力
     3437  #=== セルの attribute の初期値を出力
    35273438  #
    3528   #f_get_str:: true の場合、文字列を返す、false の場合、ファイル f に出力する.
    3529   # 文字列を返すとき、末尾に ',' は含まれない.
    3530   # ファイルへ出力するとき、末尾に ',' が出力される.構造体要素、é
    3531 åˆ—要素の初期値を出力すると ',' が二重に出力される.
    3532   # ただし現状では、ファイルへ出力することはない
     3439  #f_get_str:: true の場合、文字列を返す、false の場合、ファイル f に出力する.
     3440  # 文字列を返すとき、末尾に ',' は含まれない.
     3441  # ファイルへ出力するとき、末尾に ',' が出力される.構造体要素、配列要素の初期値を出力すると ',' が二重に出力される.
     3442  # ただし現状では、ファイルへ出力することはない
    35333443  #
    35343444  def gen_cell_cb_init( f, cell, name_array, type, init, identifier, indent, f_get_str = false )
     
    35443454
    35453455      if f_get_str then
    3546         # 初期値未指定
     3456        # 初期値未指定
    35473457        if type.kind_of?( BoolType ) then
    35483458          str = "false"   # formerly tecs_false
     
    35683478        return str
    35693479      else
    3570         # 初期値未指定
     3480        # 初期値未指定
    35713481        if type.kind_of?( BoolType ) then
    35723482          f.print "    " * indent
     
    36023512    end   
    36033513
    3604     # このメソッドは Celltype のものであるå¿
    3605 è¦ã¯ç„¡ã„(上に続くのでここに置く)
    3606     # 初期値指定あり
     3514    # このメソッドは Celltype のものである必要は無い(上に続くのでここに置く)
     3515    # 初期値指定あり
    36073516    if type.kind_of?( BoolType ) then
    36083517      if init.instance_of?( C_EXP ) then
     
    36703579
    36713580      len.times {
    3672         next if ! init[i]        # mikan この処置は適切?
     3581        next if ! init[i]        # mikan この処置は適切?
    36733582        if f_get_str then
    36743583          str += gen_cell_cb_init( f, cell, name_array, at, init[i], "#{identifier}[#{i}]", indent + 1, f_get_str )
     
    37523661  end
    37533662
    3754   #== 関数テーブルの外部参ç
    3755 §
     3663  #== 関数テーブルの外部参照
    37563664  def gen_cell_extern_mt fs
    37573665    fs.each{ |r, f|
     
    37683676  end
    37693677
    3770   #=== 受け口ディスクリプタの定義を生成
     3678  #=== 受け口ディスクリプタの定義を生成
    37713679  def gen_cell_ep_des fs
    37723680    if @n_cell_gen >0 then
     
    37893697          next if p.get_port_type != :ENTRY
    37903698          next if p.is_omit?
    3791           if p.is_skelton_useless?       # 受け口最適化n ep_opt
     3699          if p.is_skelton_useless?       # 受け口最適化n ep_opt
    37923700            f.print( "/* #{p.get_name} : omitted by entry port optimize */\n" )
    37933701            next
     
    38003708
    38013709          if len != nil then
    3802             # 受け口é
    3803 åˆ—の場合
     3710            # 受け口配列の場合
    38043711            i = 0
    38053712            while i < len
     
    38823789    return if @b_reuse && ! $generate_all_template
    38833790    if ! ( @plugin && @plugin.gen_ep_func? ) then
    3884       return if $generate_no_template     # $generate_all_template より優å
    3885 ˆã•ã‚Œã‚‹
    3886 
    3887       # 参考として出力するテンプレートファイルであることを示すために "_templ" を付加する
     3791      return if $generate_no_template     # $generate_all_template より優先される
     3792
     3793      # 参考として出力するテンプレートファイルであることを示すために "_templ" を付加する
    38883794      fname = "#{$gen}/#{@global_name}_templ.#{$c_suffix}"
    38893795    else
    3890       # Plugin により生成されたセルタイプについては、原則的にテンプレートではなく、
    3891       # 修正不要なセルタイプの実è£
    3892 ã‚³ãƒ¼ãƒ‰ã‚’生成する.
    3893       # このため、ファイル名に _temp を付加しない
     3796      # Plugin により生成されたセルタイプについては、原則的にテンプレートではなく、
     3797      # 修正不要なセルタイプの実装コードを生成する.
     3798      # このため、ファイル名に _temp を付加しない
    38943799      fname = "#{$gen}/#{@global_name}.#{$c_suffix}"
    38953800    end
     
    39063811    gen_template_attr_access f
    39073812    gen_template_cp_fun f
    3908     # gen_template_types f     # 0805503 追加してみたが、やっぱりやめる
     3813    # gen_template_types f     # 0805503 追加してみたが、やっぱりやめる
    39093814    f.print( " *\n * #[</PREAMBLE>]# */\n\n" )
    39103815    f.printf TECSMsg.get( :PAC_comment ), "#_PAC_#"
     
    39123817    gen_template_private_header f
    39133818    if ( @plugin ) then
    3914       # このメソッドの引数は plugin.rb の説明を見よ
     3819      # このメソッドの引数は plugin.rb の説明を見よ
    39153820      @plugin.gen_preamble( f, @singleton, @name, @global_name )
    39163821    end
     
    39213826
    39223827    if ( @plugin ) then
    3923       # このメソッドの引数は plugin.rb の説明を見よ
     3828      # このメソッドの引数は plugin.rb の説明を見よ
    39243829      @plugin.gen_postamble( f, @singleton, @name, @global_name )
    39253830    end
     
    40753980      next if p.get_port_type != :ENTRY
    40763981      next if p.is_omit?
    4077       next if b_inline && ! p.is_inline?  # inline ポート
    4078       next if ! b_inline && p.is_inline?  # 非 inline ポート
     3982      next if b_inline && ! p.is_inline?  # inline ポート
     3983      next if ! b_inline && p.is_inline?  # 非 inline ポート
    40793984
    40803985      inline_prefix = ""
     
    41334038          len = items.length
    41344039        else
    4135           # ここで nil になるのは、引数なしの時に void がなかった場合
     4040          # ここで nil になるのは、引数なしの時に void がなかった場合
    41364041          items = []
    41374042          len = 0
     
    41534058
    41544059        if ( @plugin && @plugin.gen_ep_func? ) then
    4155           # このメソッドの引数は plugin.rb の説明を見よ
     4060          # このメソッドの引数は plugin.rb の説明を見よ
    41564061          @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 )
    41574062
     
    42004105    if ! ( @plugin && @plugin.gen_ep_func? ) then
    42014106      return if @b_reuse && ! $generate_all_template
    4202       return if $generate_no_template     # $generate_all_template より優å
    4203 ˆã•ã‚Œã‚‹
    4204 
    4205       # 参考として出力するテンプレートファイルであることを示すために "_templ" を付加する
     4107      return if $generate_no_template     # $generate_all_template より優先される
     4108
     4109      # 参考として出力するテンプレートファイルであることを示すために "_templ" を付加する
    42064110      fname = "#{$gen}/#{@global_name}_inline_templ.#{$h_suffix}"
    42074111    else
    4208       # Plugin により生成されたセルタイプについては、原則的にテンプレートではなく、
    4209       # 修正不要なセルタイプの実è£
    4210 ã‚³ãƒ¼ãƒ‰ã‚’生成する.
    4211       # このため、ファイル名に _temp を付加しない
     4112      # Plugin により生成されたセルタイプについては、原則的にテンプレートではなく、
     4113      # 修正不要なセルタイプの実装コードを生成する.
     4114      # このため、ファイル名に _temp を付加しない
    42124115      fname = "#{$gen}/#{@global_name}_inline.#{$h_suffix}"
    42134116    end
     
    42324135
    42334136    if ( @plugin ) then
    4234       # このメソッドの引数は plugin.rb の説明を見よ
     4137      # このメソッドの引数は plugin.rb の説明を見よ
    42354138      @plugin.gen_postamble( f, @singleton, @name, @global_name )
    42364139    end
     
    42494152      if fa.get_name == :write then
    42504153
    4251         # 前後の " を取り除く
     4154        # 前後の " を取り除く
    42524155        # file_name = fa.get_file_name.sub( /^\"(.*)\"$/, "\\1" )
    42534156        file_name = CDLString.remove_dquote fa.get_file_name
    42544157        format = CDLString.remove_dquote fa.get_format
    4255         # format    = fa.get_format.sub( /^\"(.*)/, "\\1" )        # 前の " を取り除く
    4256         # format    = format.sub( /(.*)\"\z/, "\\1" )              # 後の " を取り除く
     4158        # format    = fa.get_format.sub( /^\"(.*)/, "\\1" )        # 前の " を取り除く
     4159        # format    = format.sub( /(.*)\"\z/, "\\1" )              # 後の " を取り除く
    42574160        format    = format.gsub( /\\\n/, "\n" )                  # \\\n => \n
    42584161
    42594162
    4260         # mikan 以下は subst_name で置換するように変更すべき
    4261         file_name = file_name.gsub( /(^|[^\$])\$ct\$/, "\\1#{@name}" )   # $ct$ をセルタイプ名に置換
    4262         file_name = file_name.gsub( /(^|[^\$])\$ct_global\$/, "\\1#{@global_name}" )   # $ct$ をセルタイプ名に置換
    4263         format    = format.gsub( /(^|[^\$])\$ct\$/, "\\1#{@name}" )   # $ct$ をセルタイプ名に置換
    4264         format    = format.gsub( /(^|[^\$])\$ct_global\$/, "\\1#{@global_name}" )   # $ct$ をセルタイプ名に置換
    4265         format    = format.gsub( /\$\$/, "\$" )                # $$ を $ に置換
     4163        # mikan 以下は subst_name で置換するように変更すべき
     4164        file_name = file_name.gsub( /(^|[^\$])\$ct\$/, "\\1#{@name}" )   # $ct$ をセルタイプ名に置換
     4165        file_name = file_name.gsub( /(^|[^\$])\$ct_global\$/, "\\1#{@global_name}" )   # $ct$ をセルタイプ名に置換
     4166        format    = format.gsub( /(^|[^\$])\$ct\$/, "\\1#{@name}" )   # $ct$ をセルタイプ名に置換
     4167        format    = format.gsub( /(^|[^\$])\$ct_global\$/, "\\1#{@global_name}" )   # $ct$ をセルタイプ名に置換
     4168        format    = format.gsub( /\$\$/, "\$" )                # $$ を $ に置換
    42664169
    42674170        if file_name[0] != ?/ then
     
    42754178            puts( format )
    42764179          end
    4277           # format 中の \n, \r, \t, \f と \" などを置換
     4180          # format 中の \n, \r, \t, \f と \" などを置換
    42784181          fmt = CDLString.escape format
    42794182          cfg_file.print( fmt )
     
    42924195    @ordered_cell_list.each{ |c|
    42934196
    4294       # cell のプロトタイプ宣言なら無視
     4197      # cell のプロトタイプ宣言なら無視
    42954198      next if ! c.is_generate?
    42964199
     
    43014204        if fa.get_name == :write then
    43024205
    4303           # 前後の " を取り除く
     4206          # 前後の " を取り除く
    43044207          # file_name = fa.get_file_name.sub( /^\"(.*)\"$/, "\\1" )
    43054208          file_name = CDLString.remove_dquote fa.get_file_name
    43064209          file_name = subst_name( file_name, name_array )
    4307           # format    = fa.get_format.sub( /^\"(.*)\"$/, "\\1" )        # 前後の "" を取り除く
     4210          # format    = fa.get_format.sub( /^\"(.*)\"$/, "\\1" )        # 前後の "" を取り除く
    43084211          format    = CDLString.remove_dquote fa.get_format
    4309           # format    = fa.get_format.sub( /^\"(.*)/, "\\1" )        # 前の " を取り除く
    4310           # format    = format.sub( /(.*)\"\z/, "\\1" )              # 後の " を取り除く
     4212          # format    = fa.get_format.sub( /^\"(.*)/, "\\1" )        # 前の " を取り除く
     4213          # format    = format.sub( /(.*)\"\z/, "\\1" )              # 後の " を取り除く
    43114214          format    = format.gsub( /\\\n/, "\n" )                  # \\\n => \n
    43124215
     
    43194222          end
    43204223
    4321           na = []     # シンボルを attribute の値に置き換えた後の引数
     4224          na = []     # シンボルを attribute の値に置き換えた後の引数
    43224225          if arg_list then
    43234226            arg_list.each { |a|
    43244227              case a[0]
    4325               when :STRING_LITERAL   # 文字列定数
    4326                 # s = a[1].sub( /^\"(.*)\"$/, "\\1" )            # 前後の "" を取り除く
     4228              when :STRING_LITERAL   # 文字列定数
     4229                # s = a[1].sub( /^\"(.*)\"$/, "\\1" )            # 前後の "" を取り除く
    43274230                s = CDLString.remove_dquote a[1]
    43284231                s = subst_name( s, name_array )
     
    43314234                na << s
    43324235              when :IDENTIFIER
    4333                 param_name = a[1]    # 識別子(属性の名前)
     4236                param_name = a[1]    # 識別子(属性の名前)
    43344237                attr = self.find( param_name )
    4335                 init = attr.get_initializer      # celltype で指定された初期値
    4336 
    4337                 # cell の join のリストから名前を探す
     4238                init = attr.get_initializer      # celltype で指定された初期値
     4239
     4240                # cell の join のリストから名前を探す
    43384241                j = c.get_join_list.get_item( param_name )
    4339                 if j then    # param_name の cell のジョインがあるか
    4340                   init = j.get_rhs                    # cell で指定された初期値を優å
    4341 ˆ
     4242                if j then    # param_name の cell のジョインがあるか
     4243                  init = j.get_rhs                    # cell で指定された初期値を優先
    43424244                end
    43434245
     
    43454247                                      # file,cell, name_array, type,          init, identifier,       indent, f_get_str
    43464248
    4347                 # str = str.sub( /^\"(.*)\"$/, "\\1" )            # 前後の "" を取り除く mikan ここで置換でよい?
     4249                # str = str.sub( /^\"(.*)\"$/, "\\1" )            # 前後の "" を取り除く mikan ここで置換でよい?
    43484250                str = CDLString.remove_dquote str
    43494251                na << str
     
    43634265            end
    43644266
    4365             # format 中の \n, \r, \t, \f と \" などを置換
     4267            # format 中の \n, \r, \t, \f と \" などを置換
    43664268            fmt = CDLString.escape format
    43674269            cfg_file.printf( fmt, *na )
     
    43874289    return if $generate_no_template
    43884290
    4389     # Makefile.templ の生成(追記)
     4291    # Makefile.templ の生成(追記)
    43904292
    43914293    f = AppFile.open( "#{$gen}/Makefile.templ" )
     
    43954297 
    43964298EOT
    4397 # この生成規則は2点で意味がない
    4398 ãƒ»$(GEN_DIR) に .o を生成するルールがない
    4399 ãƒ»ãƒ†ãƒ³ãƒ—レートコードをそのままビルドするのは紛らわしい
     4299# この生成規則は2点で意味がない
     4300・$(GEN_DIR) に .o を生成するルールがない
     4301・テンプレートコードをそのままビルドするのは紛らわしい
    44004302# # Celltype: #{@name}
    44014303# $(GEN_DIR)/#{@global_name}_tecsgen.o : $(GEN_DIR)/#{@global_name}_tecsgen.#{$c_suffix}
     
    44144316    headers = [ "$(GEN_DIR)/#{@global_name}_tecsgen.#{$h_suffix}", "$(GEN_DIR)/#{@global_name}_factory.#{$h_suffix}", "$(GEN_DIR)/global_tecsgen.#{$h_suffix}" ]
    44154317
    4416     # inline 受け口を持つか?
     4318    # inline 受け口を持つか?
    44174319    if @n_entry_port_inline > 0 then
    44184320      headers << "#{@global_name}_inline.#{$h_suffix}"
    44194321    end
    44204322
    4421     # 呼び口または受け口のシグニチャのヘッダ
     4323    # 呼び口または受け口のシグニチャのヘッダ
    44224324    @port.each { |p|
    44234325      next if p.is_omit?
     
    44444346  end
    44454347
    4446   #=== decl 用の dealloc コードを生成
    4447   #b_reset:: Bool:  リセット用の dealloc コードの生成 (NULL ポインタの場合 dealloc しない)
    4448   # mikan string 修飾されたポインタのå
    4449 ˆã«ãƒã‚¤ãƒ³ã‚¿ãŒæ¥ãªã„と仮定。ポインタ型を持つ構造体の可能性を排除していない
    4450   # このメソッドでは、行を出力する直前に " \\\n" を出力し、行末で改行文字を出力しない
     4348  #=== decl 用の dealloc コードを生成
     4349  #b_reset:: Bool:  リセット用の dealloc コードの生成 (NULL ポインタの場合 dealloc しない)
     4350  # mikan string 修飾されたポインタの先にポインタが来ないと仮定。ポインタ型を持つ構造体の可能性を排除していない
     4351  # このメソッドでは、行を出力する直前に " \\\n" を出力し、行末で改行文字を出力しない
    44514352  def gen_dealloc_code_for_type( f, type, dealloc_func_name, pre, name, post, level, b_reset, count_str = nil )
    44524353    type = type.get_original_type
     
    44774378        post2 = ""
    44784379        type2 = md.get_type.get_original_type
    4479         if type2.kind_of? PtrType then   # mikan typedef された型
     4380        if type2.kind_of? PtrType then   # mikan typedef された型
    44804381          if type2.get_count then
    44814382            count_str = type2.get_count.to_str( members_decl, pre2, post2 )
     
    45504451    end
    45514452
    4552     # 呼び口の結合å
    4553 ˆã®ã‚»ãƒ«ã‚¿ã‚¤ãƒ—のヘッダ(最適化の場合のみ)
    4554     # 結合å
    4555 ˆã®å—け口が inline の場合、inline ヘッダも
     4453    # 呼び口の結合先のセルタイプのヘッダ(最適化の場合のみ)
     4454    # 結合先の受け口が inline の場合、inline ヘッダも
    45564455    @port.each { |p|
    45574456      next if p.get_port_type != :CALL
     
    45594458
    45604459      if p.is_skelton_useless? || p.is_cell_unique? || p.is_VMT_useless? then
    4561         # 最適化コード (optimize) # スケルトン不要など
     4460        # 最適化コード (optimize) # スケルトン不要など
    45624461        p2 = p.get_real_callee_port
    45634462        if p2 then
     
    45694468          headers += ct.get_depend_header_list_( celltype_list )
    45704469        #else
    4571         #  optional で未結合 
     4470        #  optional で未結合 
    45724471        end
    45734472      end
     
    45774476
    45784477
    4579   #=== $id$, $ct$, $cb$, $idx$ 置換
     4478  #=== $id$, $ct$, $cb$, $idx$ 置換
    45804479  #
    4581   #  str に以下の置換を行う
    4582   #-   $ct$ ⇒ セルタイプ名(ct)
    4583   #-   $cell$ ⇒ セル名(cell)   cell が nil ならば3つの置換は行われない
    4584   #-   $cb$ ⇒ CB の C 言語名(cb)
    4585   #-   $cbp$ ⇒ CB へのポインタ(cbp)
    4586   #-   $cb_proto$ ⇒ CB の C 言語名プロトタイプ宣言用(cb_proto)
    4587   #-   $id$ ⇒ ct_cell
    4588   #-   $idx$ ⇒ idx
    4589   #-   $ID$ ⇒ id (整数の番号)
    4590   #-   $ct_global$ ⇒ セルタイプ名(ct)
    4591   #-   $cell_global$ ⇒ セル名(cell)   cell が nil ならば3つの置換は行われない
    4592   #-   $$   â‡’ $
     4480  #  str に以下の置換を行う
     4481  #-   $ct$ ⇒ セルタイプ名(ct)
     4482  #-   $cell$ ⇒ セル名(cell)   cell が nil ならば3つの置換は行われない
     4483  #-   $cb$ ⇒ CB の C 言語名(cb)
     4484  #-   $cbp$ ⇒ CB へのポインタ(cbp)
     4485  #-   $cb_proto$ ⇒ CB の C 言語名プロトタイプ宣言用(cb_proto)
     4486  #-   $id$ ct_cell
     4487  #-   $idx$ idx
     4488  #-   $ID$ ⇒ id (整数の番号)
     4489  #-   $ct_global$ ⇒ セルタイプ名(ct)
     4490  #-   $cell_global$ ⇒ セル名(cell)   cell が nil ならば3つの置換は行われない
     4491  #-   $$    $
    45934492  def subst_name( str, name_array )
    45944493    ct   = name_array[0]    # celltype name
    45954494    cell = name_array[1]    # cell name
    45964495    cb   = name_array[2]    # cell CB name
    4597     cb_init = name_array[3] # cell CB INIT, これは置換に使われない
     4496    cb_init = name_array[3] # cell CB INIT, これは置換に使われない
    45984497    cb_proto = name_array[4] # cell CB name for prototype
    45994498    id   = name_array[6]    # cell ID
     
    46154514      str = str.gsub( /(^|[^\$])\$cell_global\$/, "\\1#{cell_global}" )
    46164515    end
    4617     str = str.gsub( /\$\$/, "\$" )                       # $$ を $ に置換
     4516    str = str.gsub( /\$\$/, "\$" )                       # $$ を $ に置換
    46184517
    46194518    return str
     
    46224521end
    46234522
    4624 # Appendable File(追記可能ファイル)
     4523# Appendable File(追記可能ファイル)
    46254524class AppFile
    4626   # 開いたファイルのリスト
     4525  # 開いたファイルのリスト
    46274526  @@file_name_list = {}
    46284527
     
    46414540    end
    46424541
    4643     # 既に開いているか?
     4542    # 既に開いているか?
    46444543    if @@file_name_list[ name ] then
    46454544#2.0
    46464545      mode = "a" + mode
    4647       # 追記モードで開く
     4546      # 追記モードで開く
    46484547      file = File.open( real_name, mode )
    46494548    else
    46504549#2.0
    46514550      mode = "w" + mode
    4652       # 新規モードで開く(既にあれば、サイズを0にする)
     4551      # 新規モードで開く(既にあれば、サイズを0にする)
    46534552      file = File.open( real_name, mode )
    46544553      @@file_name_list[ name ] = true
    46554554    end
    4656     # File クラスのオブジェクトを返す
     4555    # File クラスのオブジェクトを返す
    46574556    return file
    46584557  end
Note: See TracChangeset for help on using the changeset viewer.