Ignore:
Timestamp:
Aug 3, 2017, 10:46:41 PM (7 years ago)
Author:
coas-nagasima
Message:

プロパティの文字コードにUTF-8を追加、キーワードを削除

Location:
asp3_gr_sakura/trunk/tecsgen/tecslib
Files:
67 edited

Legend:

Unmodified
Added
Removed
  • asp3_gr_sakura/trunk/tecsgen/tecslib/core/C_parser.tab.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    102102    comment = false
    103103
    104     # euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
     104    # euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
    105105    TECS_LANG::set_kcode_binary
    106106
    107     # 800U, 0xffLL など (整数リテラルにå
    108 ±é€šã®ä¿®é£¾å­)
     107    # 800U, 0xffLL など (整数リテラルに共通の修飾子)
    109108    integer_qualifier = "([Uu][Ll][Ll]|[Uu][Ll]|[Uu]|[Ll][Ll]|[Ll])?"
    110109
     
    121120          if comment
    122121            case line
    123             # コメント終了
     122            # コメント終了
    124123            when /\A\*\//
    125124              comment = false
     
    129128          else
    130129            case line
    131             # 空白、プリプロセスディレクティブ
     130            # 空白、プリプロセスディレクティブ
    132131            when /\A\s+/
    133132              ;
    134             # 識別子
     133            # 識別子
    135134            when /\A[a-zA-Z_]\w*/
    136135              word = $&
    137136              @q << [RESERVED[word] || :IDENTIFIER, Token.new(word.intern, file, lineno, col)]
    138             # 16 進数定数
     137            # 16 進数定数
    139138            when /\A0x[0-9A-Fa-f]+#{integer_qualifier}/
    140139              @q << [:HEX_CONSTANT, Token.new($&, file, lineno, col)]
    141             # 8 進数定数
     140            # 8 進数定数
    142141            when /\A0[0-7]+#{integer_qualifier}/
    143142              @q << [:OCTAL_CONSTANT, Token.new($&, file, lineno, col)]
    144             # 浮動小数定数
     143            # 浮動小数定数
    145144            when /\A[0-9]+\.([0-9]*)?([Ee][+-]?[0-9]+)?/
    146145              @q << [:FLOATING_CONSTANT, Token.new($&, file, lineno, col)]
    147             # 整数定数
     146            # 整数定数
    148147            when /\A\d+#{integer_qualifier}/
    149148            # when /\A\d+/
    150149              @q << [:INTEGER_CONSTANT, Token.new($&.to_i, file, lineno, col)]
    151             # 文字
     150            # 文字
    152151            when /\A'(?:[^'\\]|\\.)'/
    153152              @q << [:CHARACTER_LITERAL, Token.new($&, file, lineno, col)]
    154             # 文字列
    155 #              "#include  #include #include \"../systask/logtask.cfg\"       æœ€å¾Œã® " 忘れ)で無限ループ
     153            # 文字列
     154#              "#include  #include #include \"../systask/logtask.cfg\"       最後の " 忘れ)で無限ループ
    156155#            when /\A"(?:[^"\\]+|\\.)*"/
    157             when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
     156            when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
    158157              @q << [:STRING_LITERAL, Token.new($&, file, lineno, col)]
    159             # 行コメント
     158            # 行コメント
    160159            when /\A\/\/.*$/
    161               # 読み飛ばすだけ
    162             # コメント開始
     160              # 読み飛ばすだけ
     161            # コメント開始
    163162            when /\A\/\*/
    164163              comment = true
     
    189188    }
    190189
    191     # 終了の印
     190    # 終了の印
    192191    @q << nil
    193192
     
    216215      end
    217216
    218       # TYPE_NAME トークンへ置き換え
     217      # TYPE_NAME トークンへ置き換え
    219218      if @b_no_type_name == false
    220219        if token[0] == :IDENTIFIER && Namespace.is_typename?( token[1].val ) then
     
    223222      end
    224223
    225       if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生)
     224      if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生)
    226225        locale = @@current_locale[@@generator_nest]
    227226        if token then
     
    252251  @@n_warning = 0
    253252
    254   # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でエラー発生は不適切)
     253  # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でエラー発生は不適切)
    255254  def self.error( msg )
    256255    @@n_error += 1
     
    264263  end
    265264
    266   # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でウォーニング発生は不適切)
     265  # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でウォーニング発生は不適切)
    267266  def self.warning( msg )
    268267    @@n_warning += 1
     
    16761675module_eval(<<'.,.,', 'C_parser.y.rb', 237)
    16771676  def _reduce_70(val, _values, result)
    1678                         result = CIntType.new( -3 )    # storage class は無視
     1677                        result = CIntType.new( -3 )    # storage class は無視
    16791678               
    16801679    result
     
    16951694module_eval(<<'.,.,', 'C_parser.y.rb', 247)
    16961695  def _reduce_73(val, _values, result)
    1697                         result = val[1]                # storage class は無視
     1696                        result = val[1]                # storage class は無視
    16981697               
    16991698    result
  • asp3_gr_sakura/trunk/tecsgen/tecslib/core/C_parser.y.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: C_parser.y.rb 2562 2016-03-21 11:48:59Z okuma-top $
     37#   $Id$
    5338#++
    5439
    5540class C_parser
    5641rule
    57 # トップレベルの構文要素は C_parser
     42# トップレベルの構文要素は C_parser
    5843all: C_parser
    5944
    6045# Expr
    61 ##########################  式  ##########################
    62 # K&Rの文法(プログラミング言語C 第2版 付録)と一部異なる
    63 # argument_expression_list(関数引数), assignment_expression(代å
    64 ¥)がない
    65 # 式の result は、すべてé
    66 åˆ—で第一要素が識別シンボル、第二要素以下が引数
     46##########################  式  ##########################
     47# K&Rの文法(プログラミング言語C 第2版 付録)と一部異なる
     48# argument_expression_list(関数引数), assignment_expression(代入)がない
     49# 式の result は、すべて配列で第一要素が識別シンボル、第二要素以下が引数
    6750
    6851primary_expression
    6952        : namespace_identifier
    7053                { result = [ :IDENTIFIER, val[0] ] }     #1ok
    71 #        : IDENTIFIER   # mikan namespace への対応
     54#        : IDENTIFIER   # mikan namespace への対応
    7255#               { result = [ :IDENTIFIER, val[0] ] }
    7356#        | TRUE
     
    9679                { result << val[1] }
    9780
    98 # 関数呼び出しと後置インクリメント、デクリメント演算子がない
     81# 関数呼び出しと後置インクリメント、デクリメント演算子がない
    9982postfix_expression
    10083        : primary_expression
     
    10790        | postfix_expression '->' IDENTIFIER
    10891                { result = [ :OP_REF, val[0], val[2] ] }
    109         | postfix_expression '++'       { result = val[0] }   # ++, -- は無視する
     92        | postfix_expression '++'       { result = val[0] }   # ++, -- は無視する
    11093        | postfix_expression '--'       { result = val[0] }
    11194
     
    11699
    117100
    118 # 前置インクリメント、デクリメント演算子がない
     101# 前置インクリメント、デクリメント演算子がない
    119102unary_expression
    120103        : postfix_expression
     
    125108        | SIZEOF '(' type_name ')'
    126109                { result = [ :OP_SIZEOF_TYPE, val[1] ] }
    127                 | '++' unary_expression                 { result = val[1] }   # ++, -- は無視する
     110                | '++' unary_expression                 { result = val[1] }   # ++, -- は無視する
    128111                | '--' unary_expression                 { result = val[1] }
    129112
     
    213196
    214197
    215 # コンマ演算子が使えない
     198# コンマ演算子が使えない
    216199expression
    217200        : conditional_expression
     
    238221
    239222# Types
    240 ##########################  宣言  ##########################
    241 # 宣言もK&Rと一部異なる
    242 
    243 # declarationはセルの属性で使われる
    244 # K&Rとの違い: storage classが指定できない、型が省略できない
     223##########################  宣言  ##########################
     224# 宣言もK&Rと一部異なる
     225
     226# declarationはセルの属性で使われる
     227# K&Rとの違い: storage classが指定できない、型が省略できない
    245228declaration
    246229        : declaration_specifiers init_declarator_list ';'
    247230#        : type_specifier_qualifier_list init_declarator_list ';'
    248231
    249 # declaration_specifiersは関数のパラメータで使われるが、
    250 # type_specifier_qualifier_listで十分かもしれない
     232# declaration_specifiersは関数のパラメータで使われるが、
     233# type_specifier_qualifier_listで十分かもしれない
    251234
    252235declaration_specifiers
    253236        : storage_class
    254237                {
    255                         result = CIntType.new( -3 )    # storage class は無視
     238                        result = CIntType.new( -3 )    # storage class は無視
    256239                }
    257240        | type_specifier
     
    263246        | storage_class declaration_specifiers
    264247                {
    265                         result = val[1]                # storage class は無視
     248                        result = val[1]                # storage class は無視
    266249                }
    267250        | type_specifier declaration_specifiers
     
    292275        | DOUBLE        { set_no_type_name true; result = CFloatType.new(-64) }
    293276        | BOOL  { set_no_type_name true; result = CBoolType.new }
    294         | struct_specifier      { set_no_type_name true; result = val[0] } # set_no_type_name true は struct_tag でも呼ばれる
    295         | union_specifier       { set_no_type_name true; result = CVoidType.new }  # void が宣言されたとする
    296         | enum_specifier        { set_no_type_name true; result = CVoidType.new }  # void が宣言されたとする
     277        | struct_specifier      { set_no_type_name true; result = val[0] } # set_no_type_name true は struct_tag でも呼ばれる
     278        | union_specifier       { set_no_type_name true; result = CVoidType.new }  # void が宣言されたとする
     279        | enum_specifier        { set_no_type_name true; result = CVoidType.new }  # void が宣言されたとする
    297280        | TYPE_NAME     { set_no_type_name true; result = CDefinedType.new( val[0].val ) }
    298281
     
    314297                }
    315298
    316 # mikan K&Rのstruct_or_union_specifierに相当するが、unionは使えない, bit field にも対応しない
     299# mikan K&Rのstruct_or_union_specifierに相当するが、unionは使えない, bit field にも対応しない
    317300struct_specifier                # mikan
    318301        : STRUCT struct_tag '{'
     
    333316                        result = val[1]
    334317                }
    335         | STRUCT struct_tag   # mikan struct_tag は namespace 対応がå¿
    336 è¦
     318        | STRUCT struct_tag   # mikan struct_tag は namespace 対応が必要
    337319                {
    338320                        StructType.set_define( false )
     
    352334                }
    353335
    354 # ポインタ修飾子を追加
     336# ポインタ修飾子を追加
    355337struct_declaration
    356338        : declaration_specifiers struct_declarator_list ';'
     
    365347                        result = val[1]
    366348                }
    367         | union_specifier ';'                       # 無名
    368         | struct_specifier ';'                       # 無名
    369 
    370 
    371 
    372 # K&Rのspecifier_qualifier_listと同じ
    373 # 名前がまぎらわしかったのでtype_を付けた
     349        | union_specifier ';'                       # 無名
     350        | struct_specifier ';'                       # 無名
     351
     352
     353
     354# K&Rのspecifier_qualifier_listと同じ
     355# 名前がまぎらわしかったのでtype_を付けた
    374356type_specifier_qualifier_list
    375357        : type_specifier
     
    395377                { result << val[2] }
    396378
    397 # ビットフィールドは使えない
     379# ビットフィールドは使えない
    398380struct_declarator
    399381        : declarator
     
    404386        : UNION union_tag '{' union_declaration_list '}'
    405387        | UNION '{' union_declaration_list '}'
    406         | UNION union_tag   # mikan struct_tag は namespace 対応がå¿
    407 è¦
     388        | UNION union_tag   # mikan struct_tag は namespace 対応が必要
    408389
    409390union_declaration_list
     
    416397union_declaration
    417398        : declaration_specifiers union_declarator_list ';'
    418                 | union_specifier ';'                       # 無名
    419                 | struct_specifier ';'                      # 無名
     399                | union_specifier ';'                       # 無名
     400                | struct_specifier ';'                      # 無名
    420401
    421402union_declarator_list
     
    423404        | union_declarator_list ',' union_declarator
    424405
    425 # ビットフィールドは使えない
     406# ビットフィールドは使えない
    426407union_declarator
    427408        : declarator
     
    429410
    430411
    431 # enumの種類を追加
     412# enumの種類を追加
    432413enum_specifier          # mikan
    433414        : enum_type            '{' enumerator_list '}'
     
    462443                }
    463444        | direct_declarator
    464         | pointer TYPE_NAME     # 関数ポインタの typedef が二重定義の場合
     445        | pointer TYPE_NAME     # 関数ポインタの typedef が二重定義の場合
    465446                {
    466447                        result = Decl.new( val[1].val )
     
    490471                }
    491472
    492 #        | direct_declarator '(' identifier_list ')'  # これは何のためにå¿
    493 è¦ï¼Ÿ 060211
     473#        | direct_declarator '(' identifier_list ')'  # これは何のために必要? 060211
    494474        | direct_declarator '(' ')'
    495475                {
     
    524504        : parameter_list
    525505        | parameter_list ',' '.' '.' '.'
    526                 # mikan 可変長パラメータ,  ... の間のスペースが許される(手抜き)
     506                # mikan 可変長パラメータ,  ... の間のスペースが許される(手抜き)
    527507
    528508parameter_list
     
    532512#               {
    533513#                       val[0].add_param( val[2] )
    534 #                       # result = val[0] 不要
     514#                       # result = val[0] 不要
    535515#               }
    536516
    537517
    538 # パラメータ修飾子を追加
     518# パラメータ修飾子を追加
    539519parameter_declaration
    540520        : declaration_specifiers declarator
     
    545525#               }
    546526
    547         # 以下はエラーとする
    548 #        | declaration_specifiers       # 仮引数なしは、とりあえず扱わない 060210
     527        # 以下はエラーとする
     528#        | declaration_specifiers       # 仮引数なしは、とりあえず扱わない 060210
    549529#               {
    550530#                       unless val[0].kind_of?( VoidType ) then
     
    553533#                       result = nil
    554534#               }
    555         | declaration_specifiers abstract_declarator    # 仮引数なし
    556         | declaration_specifiers                                                # 仮引数なし
    557 
    558 
    559 #identifier_list       # 060211  不用になった
     535        | declaration_specifiers abstract_declarator    # 仮引数なし
     536        | declaration_specifiers                                                # 仮引数なし
     537
     538
     539#identifier_list       # 060211  不用になった
    560540#        : IDENTIFIER
    561541#        | identifier_list ',' IDENTIFIER
     
    587567        | direct_abstract_declarator '(' parameter_type_list ')'
    588568
    589 # assignment_expressionをconstant_expressionに変更
     569# assignment_expressionをconstant_expressionに変更
    590570initializer                     # mikan
    591571        : constant_expression
     
    610590
    611591
    612 ##########################  ここからはCDL独自  ##########################
    613 
    614 #トップレベルの構文規則
     592##########################  ここからはCDL独自  ##########################
     593
     594#トップレベルの構文規則
    615595C_parser
    616596        :
     
    628608        | declaration
    629609        | ';'
    630         | error   # エラー回復ポイント
     610        | error   # エラー回復ポイント
    631611
    632612typedef
     
    826806    comment = false
    827807
    828     # euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
     808    # euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
    829809    TECS_LANG::set_kcode_binary
    830810
    831     # 800U, 0xffLL など (整数リテラルにå
    832 ±é€šã®ä¿®é£¾å­)
     811    # 800U, 0xffLL など (整数リテラルに共通の修飾子)
    833812    integer_qualifier = "([Uu][Ll][Ll]|[Uu][Ll]|[Uu]|[Ll][Ll]|[Ll])?"
    834813
     
    845824          if comment
    846825            case line
    847             # コメント終了
     826            # コメント終了
    848827            when /\A\*\//
    849828              comment = false
     
    853832          else
    854833            case line
    855             # 空白、プリプロセスディレクティブ
     834            # 空白、プリプロセスディレクティブ
    856835            when /\A\s+/
    857836              ;
    858             # 識別子
     837            # 識別子
    859838            when /\A[a-zA-Z_]\w*/
    860839              word = $&
    861840              @q << [RESERVED[word] || :IDENTIFIER, Token.new(word.intern, file, lineno, col)]
    862             # 16 進数定数
     841            # 16 進数定数
    863842            when /\A0x[0-9A-Fa-f]+#{integer_qualifier}/
    864843              @q << [:HEX_CONSTANT, Token.new($&, file, lineno, col)]
    865             # 8 進数定数
     844            # 8 進数定数
    866845            when /\A0[0-7]+#{integer_qualifier}/
    867846              @q << [:OCTAL_CONSTANT, Token.new($&, file, lineno, col)]
    868             # 浮動小数定数
     847            # 浮動小数定数
    869848            when /\A[0-9]+\.([0-9]*)?([Ee][+-]?[0-9]+)?/
    870849              @q << [:FLOATING_CONSTANT, Token.new($&, file, lineno, col)]
    871             # 整数定数
     850            # 整数定数
    872851            when /\A\d+#{integer_qualifier}/
    873852            # when /\A\d+/
    874853              @q << [:INTEGER_CONSTANT, Token.new($&.to_i, file, lineno, col)]
    875             # 文字
     854            # 文字
    876855            when /\A'(?:[^'\\]|\\.)'/
    877856              @q << [:CHARACTER_LITERAL, Token.new($&, file, lineno, col)]
    878             # 文字列
    879 #              "#include  #include #include \"../systask/logtask.cfg\"       æœ€å¾Œã® " 忘れ)で無限ループ
     857            # 文字列
     858#              "#include  #include #include \"../systask/logtask.cfg\"       最後の " 忘れ)で無限ループ
    880859#            when /\A"(?:[^"\\]+|\\.)*"/
    881             when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
     860            when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
    882861              @q << [:STRING_LITERAL, Token.new($&, file, lineno, col)]
    883             # 行コメント
     862            # 行コメント
    884863            when /\A\/\/.*$/
    885               # 読み飛ばすだけ
    886             # コメント開始
     864              # 読み飛ばすだけ
     865            # コメント開始
    887866            when /\A\/\*/
    888867              comment = true
     
    913892    }
    914893
    915     # 終了の印
     894    # 終了の印
    916895    @q << nil
    917896
     
    940919      end
    941920
    942       # TYPE_NAME トークンへ置き換え
     921      # TYPE_NAME トークンへ置き換え
    943922      if @b_no_type_name == false
    944923        if token[0] == :IDENTIFIER && Namespace.is_typename?( token[1].val ) then
     
    947926      end
    948927
    949       if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生)
     928      if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生)
    950929        locale = @@current_locale[@@generator_nest]
    951930        if token then
     
    976955  @@n_warning = 0
    977956
    978   # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でエラー発生は不適切)
     957  # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でエラー発生は不適切)
    979958  def self.error( msg )
    980959    @@n_error += 1
     
    988967  end
    989968
    990   # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でウォーニング発生は不適切)
     969  # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でウォーニング発生は不適切)
    991970  def self.warning( msg )
    992971    @@n_warning += 1
  • asp3_gr_sakura/trunk/tecsgen/tecslib/core/bnf.tab.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    9494  }
    9595
    96   # 指定子 '[]' å†
    97 ã§ã®ã¿ä½¿ç”¨ã§ãã‚‹ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰
     96  # 指定子 '[]' 内でのみ使用できるキーワード
    9897  RESERVED2 = {
    9998    # specifier
     
    112111    # port (entry)
    113112    'inline' => :INLINE,
    114     'ref_desc' => :REF_DESC,   # call も可
     113    'ref_desc' => :REF_DESC,   # call も可
    115114
    116115    # port (call)
     
    156155  }
    157156
    158   # 再帰的なパーサのためのスタック
     157  # 再帰的なパーサのためのスタック
    159158  @@generator_nest = -1
    160159  @@generator_stack = []
    161160  @@current_locale = []
    162161
    163   # import_C 中である
     162  # import_C 中である
    164163  @@import_C = false
    165164
    166   # すべての構文解析が完了した
     165  # すべての構文解析が完了した
    167166  @@b_end_all_parse = false
    168167
    169168  def self.parse( file_name, plugin = nil, b_reuse = false )
    170     # パーサインスタンスを生成(別パーサで読み込む)
     169    # パーサインスタンスを生成(別パーサで読み込む)
    171170    parser = Generator.new
    172171
    173     # plugin から import されている場合の plugin 設定
     172    # plugin から import されている場合の plugin 設定
    174173    parser.set_plugin plugin
    175174
    176     # reuse フラグを設定
     175    # reuse フラグを設定
    177176    parser.set_reuse b_reuse
    178177
    179     # cdl をパース
     178    # cdl をパース
    180179    parser.parse( [file_name] )
    181180
    182     # 終期化 パーサスタックを戻す
     181    # 終期化 パーサスタックを戻す
    183182    parser.finalize
    184183  end
     
    200199  def self.get_plugin
    201200    if @@generator_stack[@@generator_nest] then
    202       # tecsgen 引数の cdl が import される場合は nil
     201      # tecsgen 引数の cdl が import される場合は nil
    203202      return @@generator_stack[@@generator_nest].get_plugin
    204203    else
     
    217216  def self.is_reuse?
    218217    if @@generator_stack[@@generator_nest] then
    219       # tecsgen 引数の cdl が import される場合は nil
     218      # tecsgen 引数の cdl が import される場合は nil
    220219      return @@generator_stack[@@generator_nest].is_reuse?
    221220    else
     
    247246      b_in_string = false
    248247
    249       # euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
     248      # euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
    250249      TECS_LANG::set_kcode_binary
    251250
     
    257256          TECSIO.foreach(file) {|line|
    258257            col = 1
    259 #            line.rstrip!         æ”¹è¡Œå«ã‚€æ–‡å­—列を扱うようになったので、ここで空白を取り除けなくなった
     258#            line.rstrip!         改行含む文字列を扱うようになったので、ここで空白を取り除けなくなった
    260259
    261260            until line.empty?
     
    263262              if b_in_comment
    264263                case line
    265                   # コメント終了
     264                  # コメント終了
    266265                when /\A\*\//
    267266                  b_in_comment = false
    268267                when /\A./
    269268                  ;
    270                 when /\s+/     # line.rstrip! を止めたため \n などの空白文字とまっちするルールがå¿
    271 è¦ã«ãªã£ãŸ
     269                when /\s+/     # line.rstrip! を止めたため \n などの空白文字とまっちするルールが必要になった
    272270                  ;
    273271                end
     
    277275                  @q <<  [:STRING_LITERAL, Token.new(string, file, lineno, col)]
    278276                  b_in_string = false
    279                 elsif line =~ /\A.*\\\n/     # 改行 \n は '.' にマッチしない
     277                elsif line =~ /\A.*\\\n/     # 改行 \n は '.' にマッチしない
    280278                  string += $&
    281                 elsif line =~ /\A.*\n/     # 改行 \n は '.' にマッチしない
     279                elsif line =~ /\A.*\n/     # 改行 \n は '.' にマッチしない
    282280                  string += line
    283                   # この位置では error メソッドは使えない (token 読出し前)
     281                  # この位置では error メソッドは使えない (token 読出し前)
    284282                  puts "error: #{file} line #{lineno}: string literal has newline without escape"
    285283                  @@n_error += 1
     
    287285              else
    288286                case line
    289                 # 空白、プリプロセスディレクティブ
     287                # 空白、プリプロセスディレクティブ
    290288                when /\A\s+/
    291289                  ;
    292                 # 識別子
     290                # 識別子
    293291                when /\A[a-zA-Z_]\w*/
    294292                  word = $&
    295293                  @q << [RESERVED[word] || :IDENTIFIER, Token.new(word.intern, file, lineno, col)]
    296                 # 16 進数定数
     294                # 16 進数定数
    297295                when /\A0x[0-9A-Fa-f]+/
    298296                  @q << [:HEX_CONSTANT, Token.new($&, file, lineno, col)]
    299                 # 8 進数定数
     297                # 8 進数定数
    300298                when /\A0[0-7]+/
    301299                  @q << [:OCTAL_CONSTANT, Token.new($&, file, lineno, col)]
    302                 # 浮動小数定数
     300                # 浮動小数定数
    303301                when /\A[0-9]+\.([0-9]*)?([Ee][+-]?[0-9]+)?/
    304302                  @q << [:FLOATING_CONSTANT, Token.new($&, file, lineno, col)]
    305                 # 整数定数
     303                # 整数定数
    306304                when /\A\d+/
    307305                  @q << [:INTEGER_CONSTANT, Token.new($&.to_i, file, lineno, col)]
    308                 # 文字定数
     306                # 文字定数
    309307                when /\A'(?:[^'\\]|\\.)'/
    310308                  @q << [:CHARACTER_LITERAL, Token.new($&, file, lineno, col)]
    311                 # 文字列
    312 #                "#include  #include #include \"../systask/logtask.cfg\"       æœ€å¾Œã® " 忘れ)で無限ループ
     309                # 文字列
     310#                "#include  #include #include \"../systask/logtask.cfg\"       最後の " 忘れ)で無限ループ
    313311#                when /\A"(?:[^"\\]+|\\.)*"/
    314                 when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
     312                when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
    315313                  @q << [:STRING_LITERAL, Token.new($&, file, lineno, col)]
    316                 # 文字列 (改行あり)
     314                # 文字列 (改行あり)
    317315                when /\A"(?:[^"\\]|\\.)*\\\n$/
    318316                  string = $&
    319317                  b_in_string = true
    320                 # 文字列 (改行あり, escape なし)
     318                # 文字列 (改行あり, escape なし)
    321319                when /\A("(?:[^"\\]|\e\.)*)\n$/
    322320                  string = $1 + "\\\n"
    323321                  b_in_string = true
    324                   # この位置では error メソッドは使えない (token 読出し前) # mikan cdl_error ではない
     322                  # この位置では error メソッドは使えない (token 読出し前) # mikan cdl_error ではない
    325323                  puts "error: #{file} line #{lineno}: string literal has newline without escape"
    326324                  @@n_error += 1
    327                 # 山括弧で囲まれた文字列
     325                # 山括弧で囲まれた文字列
    328326                when /\A<[0-9A-Za-z_\. \/]+>/   # AB: angle bracke
    329327                  @q << [:AB_STRING_LITERAL, Token.new($&, file, lineno, col)]
    330                 # 行コメント
     328                # 行コメント
    331329                when /\A\/\/.*$/
    332                   # 読み飛ばすだけ
    333                 # コメント開始
     330                  # 読み飛ばすだけ
     331                # コメント開始
    334332                when /\A\/\*/
    335333                  b_in_comment = true
    336                 # '>>', '<<' など
     334                # '>>', '<<' など
    337335                when /\A>>/, /\A<</, /\A==/, /\A!=/, /\A\&\&/, /\A\|\|/
    338336                  @q << [$&, Token.new($&, file, lineno, col)]
    339337                when /\A::/, /\A=>/, /\A<=/, /\A>=/
    340338                  @q << [$&, Token.new($&, file, lineno, col)]
    341                 # '(', ')' など一文字の記号、または未知の記号
     339                # '(', ')' など一文字の記号、または未知の記号
    342340                when /\A./
    343341                  @q << [$&, Token.new($&, file, lineno, col)]
     
    363361      }
    364362
    365       # 終了の印
     363      # 終了の印
    366364      @q << nil
    367365
     
    383381
    384382      if token[0] == :IDENTIFIER then
    385         # TYPE_NAME トークンへ置換え
     383        # TYPE_NAME トークンへ置換え
    386384        if Namespace.is_typename?( token[1].val ) then
    387385          token[0] = :TYPE_NAME
    388386        elsif @in_specifier && RESERVED2[ token[1].val.to_s ] then
    389           # 指定子キーワード( '[', ']' å†
    390 ã§ã®ã¿æœ‰åŠ¹)
     387          # 指定子キーワード( '[', ']' 内でのみ有効)
    391388          token[0] = RESERVED2[ token[1].val.to_s ]
    392389        end
    393390      end
    394391
    395       if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生)
     392      if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生)
    396393        locale = @@current_locale[@@generator_nest]
    397394        if token then
     
    424421  @@n_warning = 0
    425422
    426   # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でエラー発生は不適切)
     423  # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でエラー発生は不適切)
    427424  def self.error( msg, *arg )
    428425    locale = nil
     
    434431
    435432    msg = TECSMsg.get_error_message( msg )
    436     # $1, $2, ... を arg で置換
     433    # $1, $2, ... を arg で置換
    437434    count = 1
    438435    arg.each{ |a|
     
    442439    }
    443440
    444     # import_C の中でのエラー?
     441    # import_C の中でのエラー?
    445442    if @@import_C then
    446443      C_parser.error( msg )
    447444    else
    448445
    449       # Node の記憶する 位置 (locale) を使用した場合、変更以前に比べ、
    450       # 問題発生箇所と異なる位置にエラーが出るため、構文解析中のエラー
    451       # は、解析中の位置を出力する.(new_XXX で owner が子要素のチェッ
    452       # クをすると owner の行番号が出てしまう点で、ずれが生じている)
     446      # Node の記憶する 位置 (locale) を使用した場合、変更以前に比べ、
     447      # 問題発生箇所と異なる位置にエラーが出るため、構文解析中のエラー
     448      # は、解析中の位置を出力する.(new_XXX で owner が子要素のチェッ
     449      # クをすると owner の行番号が出てしまう点で、ずれが生じている)
    453450
    454451      if @@b_end_all_parse == false || locale == nil then
     
    463460  end
    464461
    465   # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でウォーニング発生は不適切)
     462  # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でウォーニング発生は不適切)
    466463  def self.warning( msg, *arg )
    467464    locale = nil
     
    473470
    474471    msg = TECSMsg.get_warning_message( msg )
    475     # $1, $2, ... を arg で置換
     472    # $1, $2, ... を arg で置換
    476473    count = 1
    477474    arg.each{ |a|
     
    481478    }
    482479
    483     # import_C の中でのウォーニング?
     480    # import_C の中でのウォーニング?
    484481    if @@import_C then
    485482      C_parser.warning( msg )
     
    508505  end
    509506
    510   #===  '[' specifier 始め
     507  #===  '[' specifier 始め
    511508  def set_in_specifier
    512509    # p "set_in_specifier"
     
    514511  end
    515512
    516   #=== ']' specifier 終わり
     513  #=== ']' specifier 終わり
    517514  def unset_in_specifier
    518515    # p "unset_in_specifier"
     
    520517  end
    521518
    522   # statement_specifier は構文解釈途中で参ç
    523 §ã—たいため
     519  # statement_specifier は構文解釈途中で参照したいため
    524520  @@statement_specifier_stack = []
    525521  def self.add_statement_specifier( ss )
     
    538534  end
    539535
    540   #=== すべての構文解析が完了したことを報告
     536  #=== すべての構文解析が完了したことを報告
    541537  def self.end_all_parse
    542538    @@b_end_all_parse = true
     
    22642260module_eval(<<'.,.,', 'bnf.y.rb', 76)
    22652261  def _reduce_13(val, _values, result)
    2266                         # 連接した文字列を1つの文字列にまとめる
     2262                        # 連接した文字列を1つの文字列にまとめる
    22672263                        str = "\"" + val[0].val.gsub( /\"(.*)\"/, "\\1" ) + val[1].val.gsub( /\"(.*)\"/, "\\1" ) + "\""
    22682264                        result = Token.new( str, val[0].file, val[0].lineno, val[0].col )
     
    31593155  def _reduce_153(val, _values, result)
    31603156                        val[0].add_param( val[2] )
    3161                         # result = val[0] 不要
     3157                        # result = val[0] 不要
    31623158               
    31633159    result
     
    33143310                                result = val[1]
    33153311                        else
    3316                                 # エラー:仮で val[0] を返す
     3312                                # エラー:仮で val[0] を返す
    33173313                                result = val[0]
    33183314                        end
     
    34583454                        obj = val[3]
    34593455                        if obj.kind_of?( Cell ) || obj.kind_of?( Signature ) || obj.kind_of?( Celltype ) || obj.kind_of?( CompositeCelltype )then
    3460                                 # cell, signature 以外は、指定子を置けない
     3456                                # cell, signature 以外は、指定子を置けない
    34613457                        else
    3462               Generator.get_statement_specifier   # クリア
     3458              Generator.get_statement_specifier   # クリア
    34633459              Generator.error( "G1009 unexpected specifier"  )
    34643460                        end
     
    38313827                                val[1].check
    38323828                        else
    3833                                 # mikan 関数のé
    3834 åˆ—も以下のメッセージになる
     3829                                # mikan 関数の配列も以下のメッセージになる
    38353830                                Generator.error( "G1010 Not function"  )
    38363831                                result = nil
     
    38873882  def _reduce_264(val, _values, result)
    38883883                        if val[3].kind_of? Port then
    3889                                 val[3].set_specifier val[1]  # 設定順序あり
     3884                                val[3].set_specifier val[1]  # 設定順序あり
    38903885                                Celltype.new_port( val[3] )
    38913886                        else
    3892                                 # Port 以外では指定子はエラー
     3887                                # Port 以外では指定子はエラー
    38933888                                Generator.error( "G1012 $1 : cannot put specifier here" , val[1] )
    38943889                        end
     
    40954090  def _reduce_297(val, _values, result)
    40964091                        val[3].each{ |i|       # i:Decl
    4097                                 i.set_kind( :ATTRIBUTE )   # 設定順序あり
     4092                                i.set_kind( :ATTRIBUTE )   # 設定順序あり
    40984093                                i.set_specifier_list( [val[1]] )
    40994094                                i.check
     
    41774172  def _reduce_308(val, _values, result)
    41784173                        val[3].each{ |i|       # i:Decl
    4179                                 i.set_kind( :VAR )   # 設定順序あり
     4174                                i.set_kind( :VAR )   # 設定順序あり
    41804175                                i.set_specifier_list( [val[1]] )
    41814176                                i.check
     
    44584453  def _reduce_353(val, _values, result)
    44594454                        if val[0].kind_of?( Port ) then
    4460                                 CompositeCelltype.new_port( val[0] )   # é
    4461 å»¶ã—て登録
     4455                                CompositeCelltype.new_port( val[0] )   # 遅延して登録
    44624456                        end
    44634457               
     
    44694463  def _reduce_354(val, _values, result)
    44704464                        if val[3].kind_of?( Port ) then
    4471                                 # port 以外 val[3] に有効な値がå
    4472 ¥ã£ã¦ã„ないので、以下のメソッドを適用できない
    4473                                 # 現状 port, cell 以外は指定子を受け付けない
    4474                                 # (しかし将来他の文も指定子を受け付ける可能性があるので、この位置に記述する)
     4465                                # port 以外 val[3] に有効な値が入っていないので、以下のメソッドを適用できない
     4466                                # 現状 port, cell 以外は指定子を受け付けない
     4467                                # (しかし将来他の文も指定子を受け付ける可能性があるので、この位置に記述する)
    44754468                                val[3].set_specifier( Generator.get_statement_specifier )
    4476                                 CompositeCelltype.new_port( val[3] )   # é
    4477 å»¶ã—て登録 (set_specifier 後)
     4469                                CompositeCelltype.new_port( val[3] )   # 遅延して登録 (set_specifier 後)
    44784470                        elsif val[3].kind_of?( Cell ) then
    4479                                 # Cell.end_of_parse にて設定
     4471                                # Cell.end_of_parse にて設定
    44804472                        else
    4481               Generator.get_statement_specifier   # クリア
     4473              Generator.get_statement_specifier   # クリア
    44824474              Generator.error( "G1013 unexpected specifier"  )
    44834475                        end
     
    47564748                        if obj.kind_of?( Cell ) then
    47574749                        else
    4758               Generator.get_statement_specifier   # クリア
     4750              Generator.get_statement_specifier   # クリア
    47594751              Generator.error( "G9999 unexpected specifier"  )
    47604752                        end
     
    48544846
    48554847
    4856 # ファイル => INCLUDE("header")のé
    4857 åˆ—
     4848# ファイル => INCLUDE("header")の配列
    48584849Include = Hash.new {|hash, key| hash[key] = []}
    48594850
     
    49094900
    49104901#= TECSIO
    4911 #  Ruby2.0(1.9) 対応に伴い導å
    4912 ¥ã—たクラス
    4913 #  SJIS 以外では、ASCII-8BIT としてå
    4914 ¥åŠ›ã™ã‚‹
     4902#  Ruby2.0(1.9) 対応に伴い導入したクラス
     4903#  SJIS 以外では、ASCII-8BIT として入力する
    49154904class TECSIO
    4916   def self.foreach(file) # ブロック引数 { |line| }
    4917     pr = Proc.new   # このメソッドのブロック引数を pr に代å
    4918 ¥
     4905  def self.foreach(file) # ブロック引数 { |line| }
     4906    pr = Proc.new   # このメソッドのブロック引数を pr に代入
    49194907    if $b_no_kcode then
    49204908          msg = "E".encode $Ruby19_File_Encode
    49214909      if( $Ruby19_File_Encode == "Shift_JIS" )
    49224910
    4923         # Shift JIS は、いったん Windows-31J として読み込ませ、Shift_JIS に変換させる.
    4924         # コメント等に含まれる SJIS に不適切な文字コードは '?' または REPLACEMENT CHARACTER に変換される.
    4925         # EUC や UTF-8 で記述された CDL が混在していても、Ruby 例外が発生することなく処理を進めることができる.
    4926         # 文字コード指定が SJIS であって、文字列リテラルの中に、文字コードがSJIS 以外の非 ASCII が含まれている場合、
    4927         # Ruby 1.8 の tecsgen では文字コード指定に影響なく処理されたものが、Ruby 1.9 以降では '?' に置き換わる可能性がある.
     4911        # Shift JIS は、いったん Windows-31J として読み込ませ、Shift_JIS に変換させる.
     4912        # コメント等に含まれる SJIS に不適切な文字コードは '?' または REPLACEMENT CHARACTER に変換される.
     4913        # EUC や UTF-8 で記述された CDL が混在していても、Ruby 例外が発生することなく処理を進めることができる.
     4914        # 文字コード指定が SJIS であって、文字列リテラルの中に、文字コードがSJIS 以外の非 ASCII が含まれている場合、
     4915        # Ruby 1.8 の tecsgen では文字コード指定に影響なく処理されたものが、Ruby 1.9 以降では '?' に置き換わる可能性がある.
    49284916
    49294917        mode = "r:Windows-31J"
     
    49494937  end
    49504938
    4951   #=== 文字コードが相違する場合一致させる
    4952   # msg と str の文字コードが相違する場合、str を msg の文字コードに変換する
    4953   # 変換不可の文字コードは '?' (utf-8 の場合 U+FFFD (REPLACEMENT CHARACTER )) に変換
     4939  #=== 文字コードが相違する場合一致させる
     4940  # msg と str の文字コードが相違する場合、str を msg の文字コードに変換する
     4941  # 変換不可の文字コードは '?' (utf-8 の場合 U+FFFD (REPLACEMENT CHARACTER )) に変換
    49544942  #
    4955   # このメソッドは、エラーメッセージ出力でも使用されていることに注意.
     4943  # このメソッドは、エラーメッセージ出力でも使用されていることに注意.
    49564944  #
    49574945  #msg_enc::Encode | String
    49584946  def self.str_code_convert( msg, str )
    49594947    if $b_no_kcode == false then
    4960       return str                          # Ruby V1.8 まで
     4948      return str                          # Ruby V1.8 まで
    49614949    end
    49624950    if msg.encoding != str.encoding then
    4963       option = { :invalid => :replace, :undef => :replace }   # 例外を発生させず、'?' に変換する(utf-8 は 0xfffd)
     4951      option = { :invalid => :replace, :undef => :replace }   # 例外を発生させず、'?' に変換する(utf-8 は 0xfffd)
    49644952      # return str.encode( msg.encoding, option )
    49654953      str = str.encode( "utf-8", option )
  • asp3_gr_sakura/trunk/tecsgen/tecslib/core/bnf.y.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    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: bnf.y.rb 2562 2016-03-21 11:48:59Z okuma-top $
     37#   $Id$
    5338#++
    5439
    5540class Generator
    5641rule
    57 # トップレベルの構文要素はcomponent_description
     42# トップレベルの構文要素はcomponent_description
    5843all: component_description
    5944
    6045# Expr
    61 ##########################  式  ##########################
    62 # K&Rの文法(プログラミング言語C 第2版 付録)と一部異なる
    63 # argument_expression_list(関数引数), assignment_expression(代å
    64 ¥)がない
    65 # 式の result は、すべてé
    66 åˆ—で第一要素が識別シンボル、第二要素以下が引数
     46##########################  式  ##########################
     47# K&Rの文法(プログラミング言語C 第2版 付録)と一部異なる
     48# argument_expression_list(関数引数), assignment_expression(代入)がない
     49# 式の result は、すべて配列で第一要素が識別シンボル、第二要素以下が引数
    6750
    6851primary_expression
     
    9275        | string_literal_list STRING_LITERAL
    9376                {
    94                         # 連接した文字列を1つの文字列にまとめる
     77                        # 連接した文字列を1つの文字列にまとめる
    9578                        str = "\"" + val[0].val.gsub( /\"(.*)\"/, "\\1" ) + val[1].val.gsub( /\"(.*)\"/, "\\1" ) + "\""
    9679                        result = Token.new( str, val[0].file, val[0].lineno, val[0].col )
    9780                }
    9881
    99 # 関数呼び出しと後置インクリメント、デクリメント演算子がない
     82# 関数呼び出しと後置インクリメント、デクリメント演算子がない
    10083postfix_expression
    10184        : primary_expression
     
    10790                { result = [ :OP_REF, val[0], val[2] ] }
    10891
    109 # 前置インクリメント、デクリメント演算子がない
     92# 前置インクリメント、デクリメント演算子がない
    11093unary_expression
    11194        : postfix_expression
     
    202185
    203186
    204 # コンマ演算子が使えない
     187# コンマ演算子が使えない
    205188expression
    206189        : conditional_expression
     
    227210
    228211# Types
    229 ##########################  宣言  ##########################
    230 # 宣言もK&Rと一部異なる
    231 
    232 # declarationはセルの属性で使われる
    233 # K&Rとの違い: storage classが指定できない、型が省略できない
     212##########################  宣言  ##########################
     213# 宣言もK&Rと一部異なる
     214
     215# declarationはセルの属性で使われる
     216# K&Rとの違い: storage classが指定できない、型が省略できない
    234217declaration
    235218        : type_specifier_qualifier_list init_declarator_list ';'
     
    241224                }
    242225
    243 # declaration_specifiersは関数のパラメータで使われるが、
    244 # type_specifier_qualifier_listで十分かもしれない
     226# declaration_specifiersは関数のパラメータで使われるが、
     227# type_specifier_qualifier_listで十分かもしれない
    245228# Oyama
    246 # const, volatile は単独で型にならないので変形
    247 # const と volatile が同å±
    248 ã™ã‚‹ã“とはないので、繰返し指定できないようにした
    249 # type_specifier も繰返し指定できるå¿
    250 è¦ã¯ãªã„ (singed など単独で型にはならない)
     229# const, volatile は単独で型にならないので変形
     230# const と volatile が同居することはないので、繰返し指定できないようにした
     231# type_specifier も繰返し指定できる必要はない (singed など単独で型にはならない)
    251232declaration_specifiers
    252233        : type_specifier
     
    268249                { val[0].set_initializer( val[2] ) }
    269250
    270 # INT8から下はK&Rにない
     251# INT8から下はK&Rにない
    271252# Oyama
    272 # signed, unsigned は単独で型にならないので、構文要素として分離
     253# signed, unsigned は単独で型にならないので、構文要素として分離
    273254type_specifier
    274255        : VOID  { result = VoidType.new }
     
    278259        | enum_specifier
    279260        | TYPE_NAME     { result = DefinedType.new( val[0].val ) }
    280 #        | IDENTIFIER   { result = DefinedType.new( val[0].val ) }   # reduce/reduce conflict が起こってしまう
     261#        | IDENTIFIER   { result = DefinedType.new( val[0].val ) }   # reduce/reduce conflict が起こってしまう
    281262        | sign_int_type
    282263        | char_type
     
    373354                }
    374355
    375 sign    # TECS では signed, unsigned 単独では型にできない
     356sign    # TECS では signed, unsigned 単独では型にできない
    376357        : SIGNED        { result = :SIGNED }
    377358        | UNSIGNED      { result = :UNSIGNED }
    378359
    379 # result[0] :CHAR などのトークン、result[1] :CONST, :VOLATILE など
     360# result[0] :CHAR などのトークン、result[1] :CONST, :VOLATILE など
    380361sign_int_type
    381362        : sign int_type
     
    386367        | int_type
    387368
    388 # K&Rのstruct_or_union_specifierに相当するが、unionは使えない
     369# K&Rのstruct_or_union_specifierに相当するが、unionは使えない
    389370struct_specifier                # mikan
    390371        : STRUCT struct_tag '{'
     
    405386                        result = val[1]
    406387                }
    407         | STRUCT struct_tag   # mikan struct_tag は namespace 対応がå¿
    408 è¦
     388        | STRUCT struct_tag   # mikan struct_tag は namespace 対応が必要
    409389                {
    410390                        StructType.set_define( false )
     
    421401                { result = StructType.new( val[0].val ) }
    422402
    423 # ポインタ修飾子を追加
     403# ポインタ修飾子を追加
    424404struct_declaration
    425405        :                                type_specifier_qualifier_list struct_declarator_list ';'
     
    456436
    457437
    458 # K&Rのspecifier_qualifier_listと同じ
    459 # 名前がまぎらわしかったのでtype_を付けた
     438# K&Rのspecifier_qualifier_listと同じ
     439# 名前がまぎらわしかったのでtype_を付けた
    460440type_specifier_qualifier_list
    461 # Oyama type_specifier を繰り返して指定することはなくなった (sign_int_type としたため)
     441# Oyama type_specifier を繰り返して指定することはなくなった (sign_int_type としたため)
    462442#        : type_specifier type_specifier_qualifier_list
    463443        : type_specifier
     
    467447                        result = val[1]
    468448                }
    469 # mikan Oyama type_qualifier だけでは型指定にならない : 構文エラーとするより、意味エラーとした方が親切
     449# mikan Oyama type_qualifier だけでは型指定にならない : 構文エラーとするより、意味エラーとした方が親切
    470450#        | type_qualifier
    471451
     
    477457                { result << val[2] }
    478458
    479 # ビットフィールドは使えない
     459# ビットフィールドは使えない
    480460struct_declarator
    481461        : declarator
    482462
    483 # enumの種類を追加
     463# enumの種類を追加
    484464enum_specifier          # mikan
    485465        : enum_type            '{' enumerator_list '}'
     
    535515                        result = val[0]
    536516                }
    537 #        | direct_declarator '(' identifier_list ')'  # これは何のためにå¿
    538 è¦ï¼Ÿ 060211
     517#        | direct_declarator '(' identifier_list ')'  # これは何のために必要? 060211
    539518        | direct_declarator '(' ')'
    540519                {
     
    569548        : parameter_list
    570549        | parameter_list ',' '...'
    571                 # mikan 可変長パラメータ
     550                # mikan 可変長パラメータ
    572551
    573552parameter_list
     
    577556                {
    578557                        val[0].add_param( val[2] )
    579                         # result = val[0] 不要
    580                 }
    581 
    582 
    583 # パラメータ修飾子を追加
     558                        # result = val[0] 不要
     559                }
     560
     561
     562# パラメータ修飾子を追加
    584563parameter_declaration
    585564#        : spec_L parameter_specifier_list spec_R declaration_specifiers declarator
     
    592571                }
    593572
    594         # 以下はエラーとする
    595         | declaration_specifiers declarator # parameter_specifier なしは扱わない
     573        # 以下はエラーとする
     574        | declaration_specifiers declarator # parameter_specifier なしは扱わない
    596575                {
    597576                        Generator.error( "G1001 need specifier for \'$1\'" , val[1].get_name )
    598577                        result = nil
    599578                }
    600         | declaration_specifiers        # 仮引数なしは、とりあえず扱わない 060210
     579        | declaration_specifiers        # 仮引数なしは、とりあえず扱わない 060210
    601580                {
    602581                        unless val[0].instance_of?( VoidType ) then
     
    605584                        result = nil
    606585                }
    607 #        | '[' parameter_specifier_list ']' declaration_specifiers # 同 060210
    608         | parameter_specifier_list_bracket declaration_specifiers # 同 060210
     586#        | '[' parameter_specifier_list ']' declaration_specifiers # 060210
     587        | parameter_specifier_list_bracket declaration_specifiers # 060210
    609588                {
    610589                        unless val[1].instance_of?( VoidType ) then
     
    647626                                result = val[1]
    648627                        else
    649                                 # エラー:仮で val[0] を返す
     628                                # エラー:仮で val[0] を返す
    650629                                result = val[0]
    651630                        end
    652631                }
    653                 # mikan abstract_declarator が pointer 以外ではうまく動かない、とりあえず '*' CAST のみ救った
     632                # mikan abstract_declarator が pointer 以外ではうまく動かない、とりあえず '*' CAST のみ救った
    654633
    655634abstract_declarator             # mikan
     
    660639direct_abstract_declarator
    661640        : '(' abstract_declarator ')'
    662                 { result = val[1] }  # 関数ポインタ型を救う
     641                { result = val[1] }  # 関数ポインタ型を救う
    663642        | '[' ']'
    664643                {
     
    699678                }
    700679
    701 # assignment_expressionをconstant_expressionに変更
     680# assignment_expressionをconstant_expressionに変更
    702681initializer                     # mikan
    703682        : constant_expression
     
    723702
    724703
    725 ##########################  ここからはCDL独自  ##########################
    726 
    727 #トップレベルの構文規則
    728 #コンポーネント記述
     704##########################  ここからはCDL独自  ##########################
     705
     706#トップレベルの構文規則
     707#コンポーネント記述
    729708component_description
    730709        : component_description specified_statement
     
    738717                        obj = val[3]
    739718                        if obj.kind_of?( Cell ) || obj.kind_of?( Signature ) || obj.kind_of?( Celltype ) || obj.kind_of?( CompositeCelltype )then
    740                                 # cell, signature 以外は、指定子を置けない
     719                                # cell, signature 以外は、指定子を置けない
    741720                        else
    742               Generator.get_statement_specifier   # クリア
     721              Generator.get_statement_specifier   # クリア
    743722              Generator.error( "G1009 unexpected specifier"  )
    744723                        end
    745724                }
    746                 # これと同じ記述が composite_celltype にもある
     725                # これと同じ記述が composite_celltype にもある
    747726
    748727statement
     
    760739        | import_C
    761740        | signature_plugin
    762         | error   # エラー回復ポイント
     741        | error   # エラー回復ポイント
    763742
    764743       
     
    799778        | IDENTIFIER '[' constant_expression ']' '.' IDENTIFIER '.' IDENTIFIER '=' initializer
    800779                {  result = [ :NORMAL_ALLOC, val[0], val[2], val[5], val[7], val[9] ] }
    801 # mikan 将来的な拡張 ('*' でまとめて指定可能とする)
     780# mikan 将来的な拡張 ('*' でまとめて指定可能とする)
    802781#        | IDENTIFIER '.' IDENTIFIER '.' '*'        '=' initializer
    803782#               {  result = [ val[0], val[ ], val[ ], val[ ] ] }
     
    824803
    825804const_statement
    826         : declaration   # 定数定義
     805        : declaration   # 定数定義
    827806                {
    828807                        val[0].each { |decl|
     
    879858                        }
    880859                }
    881                 # mikan   typedef_specifier 未処置
     860                # mikan   typedef_specifier 未処置
    882861
    883862
     
    899878        : IDENTIFIER
    900879                {result = Namespace.new(val[0].val)}
    901                 # namespace インスタンスに statement を記憶させるためここで生成
     880                # namespace インスタンスに statement を記憶させるためここで生成
    902881
    903882statement_list
     
    911890                { result = val[0].append!( val[2].val ) }
    912891
    913 #シグニチャ
     892#シグニチャ
    914893signature
    915894        : SIGNATURE signature_name '{' function_head_list '}' ';'
     
    920899                {result = Signature.new( val[0].val ) }
    921900
    922 function_head_list     # result:  function_head のé
    923 åˆ—
     901function_head_list     # result:  function_head の配列
    924902#        : function_head
    925903#               { result = NamedList.new( val[0], "function" ) }
     
    938916                                val[1].check
    939917                        else
    940                                 # mikan 関数のé
    941 åˆ—も以下のメッセージになる
     918                                # mikan 関数の配列も以下のメッセージになる
    942919                                Generator.error( "G1010 Not function"  )
    943920                                result = nil
     
    955932
    956933
    957 #セルタイプ
     934#セルタイプ
    958935celltype
    959936        : CELLTYPE celltype_name '{' celltype_statement_list '}' ';'
     
    981958                {
    982959                        if val[3].kind_of? Port then
    983                                 val[3].set_specifier val[1]  # 設定順序あり
     960                                val[3].set_specifier val[1]  # 設定順序あり
    984961                                Celltype.new_port( val[3] )
    985962                        else
    986                                 # Port 以外では指定子はエラー
     963                                # Port 以外では指定子はエラー
    987964                                Generator.error( "G1012 $1 : cannot put specifier here" , val[1] )
    988965                        end
     
    995972        | require
    996973        | factory
    997 #        | error       # エラー回復ポイント  (#513 無限ループに陥るケースがあるので、ここでのエラー回復は取りやめ)
     974#        | error       # エラー回復ポイント  (#513 無限ループに陥るケースがあるので、ここでのエラー回復は取りやめ)
    998975
    999976celltype_statement_specifier_list
     
    1012989
    1013990alloc_list2
    1014         : alloc2                        { result = [ val[0] ] }    # 受け口のアロケータ指定
    1015         | alloc                         { result = [ val[0] ] }    # å†
    1016 éƒ¨ã‚»ãƒ«ã®ã‚¢ãƒ­ã‚±ãƒ¼ã‚¿æŒ‡å®š
     991        : alloc2                        { result = [ val[0] ] }    # 受け口のアロケータ指定
     992        | alloc                         { result = [ val[0] ] }    # 内部セルのアロケータ指定
    1017993        | alloc_list2 ',' alloc2        { result << val[2] }
    1018994        | alloc_list2 ',' alloc         { result << val[2] }
    1019995
    1020996alloc2
    1021         : IDENTIFIER '.' IDENTIFIER '=' initializer    # å†
    1022 éƒ¨ã‚¢ãƒ­ã‚±ãƒ¼ã‚¿ (デバドラ向きアロケータ)指定
     997        : IDENTIFIER '.' IDENTIFIER '=' initializer    # 内部アロケータ (デバドラ向きアロケータ)指定
    1023998                {  result = [ :INTERNAL_ALLOC, val[0].val, val[2].val, val[4] ] }
    1024         | IDENTIFIER '.' IDENTIFIER '<=' initializer   # 多段リレーモデル向きアロケータ指定
     999        | IDENTIFIER '.' IDENTIFIER '<=' initializer   # 多段リレーモデル向きアロケータ指定
    10251000                {  result = [ :RELAY_ALLOC, val[0].val, val[2].val, val[4] ] }
    10261001
    10271002
    1028 #呼び口、受け口
     1003#呼び口、受け口
    10291004port
    10301005        : port_type namespace_signature_name port_name ';'
     
    10521027
    10531028
    1054 #属性
     1029#属性
    10551030attribute
    10561031        : ATTRIBUTE '{' attribute_declaration_list '}' ';'
     
    10761051                {
    10771052                        val[3].each{ |i|       # i:Decl
    1078                                 i.set_kind( :ATTRIBUTE )   # 設定順序あり
     1053                                i.set_kind( :ATTRIBUTE )   # 設定順序あり
    10791054                                i.set_specifier_list( [val[1]] )
    10801055                                i.check
     
    10951070        : STRING_LITERAL
    10961071
    1097 #å†
    1098 éƒ¨å¤‰æ•°
     1072#内部変数
    10991073var
    11001074        : VAR '{' var_declaration_list '}' ';'
     
    11181092                {
    11191093                        val[3].each{ |i|       # i:Decl
    1120                                 i.set_kind( :VAR )   # 設定順序あり
     1094                                i.set_kind( :VAR )   # 設定順序あり
    11211095                                i.set_specifier_list( [val[1]] )
    11221096                                i.check
     
    11281102        : SIZE_IS  '(' expression ')'   { result = [:SIZE_IS,val[2]] }
    11291103
    1130 # リクワイア
     1104# リクワイア
    11311105require
    11321106        : REQUIRE namespace_identifier '.' IDENTIFIER';'                            # mikan namespace #1
     
    11391113                }
    11401114
    1141 #ファクトリ
     1115#ファクトリ
    11421116factory
    11431117        : factory_head '{' factory_function_list '}' ';'
     
    11481122
    11491123factory_function_list
    1150         :                                         # 空
     1124        :                                         #
    11511125        | factory_function_list factory_function
    11521126
     
    11601134        : IDENTIFIER
    11611135
    1162 arg_list     # factory の write 関数の第三引数以降
     1136arg_list     # factory の write 関数の第三引数以降
    11631137        : IDENTIFIER
    11641138                { result = [ [ :IDENTIFIER, val[0].val ] ] }
     
    11701144                { result << [ :STRING_LITERAL, val[2].val ] }
    11711145
    1172 #セル生成
     1146#セル生成
    11731147cell
    11741148        : CELL namespace_celltype_name cell_name '{'
     
    11761150          join_list '}' ';'
    11771151                { result = Cell.end_of_parse true }
    1178         | CELL namespace_celltype_name cell_name ';'   # oyama プロトタイプ宣言
     1152        | CELL namespace_celltype_name cell_name ';'   # oyama プロトタイプ宣言
    11791153                        { result = Cell.end_of_parse false }
    11801154
     
    11881162
    11891163join_list
    1190         :   # 空行  061007
     1164        :   # 空行  061007
    11911165        | join_list specified_join
    11921166        | join_list reverse_join
     
    12311205                        Cell.new_join( result, true )
    12321206                }
    1233         | cae_name '=' initializer ';'     # 初期化子: '{', '}' も可
     1207        | cae_name '=' initializer ';'     # 初期化子: '{', '}' も可
    12341208                {
    12351209                        result = Join.new( val[0].val, nil, val[2] )
     
    12751249        : constant_expression
    12761250
    1277 #複合種
     1251#複合種
    12781252composite_celltype
    12791253        : COMPOSITE composite_celltype_name '{' composite_celltype_statement_list '}' ';'
     
    12951269                {
    12961270                        if val[0].kind_of?( Port ) then
    1297                                 CompositeCelltype.new_port( val[0] )   # é
    1298 å»¶ã—て登録
     1271                                CompositeCelltype.new_port( val[0] )   # 遅延して登録
    12991272                        end
    13001273                }
     
    13021275                {
    13031276                        if val[3].kind_of?( Port ) then
    1304                                 # port 以外 val[3] に有効な値がå
    1305 ¥ã£ã¦ã„ないので、以下のメソッドを適用できない
    1306                                 # 現状 port, cell 以外は指定子を受け付けない
    1307                                 # (しかし将来他の文も指定子を受け付ける可能性があるので、この位置に記述する)
     1277                                # port 以外 val[3] に有効な値が入っていないので、以下のメソッドを適用できない
     1278                                # 現状 port, cell 以外は指定子を受け付けない
     1279                                # (しかし将来他の文も指定子を受け付ける可能性があるので、この位置に記述する)
    13081280                                val[3].set_specifier( Generator.get_statement_specifier )
    1309                                 CompositeCelltype.new_port( val[3] )   # é
    1310 å»¶ã—て登録 (set_specifier 後)
     1281                                CompositeCelltype.new_port( val[3] )   # 遅延して登録 (set_specifier 後)
    13111282                        elsif val[3].kind_of?( Cell ) then
    1312                                 # Cell.end_of_parse にて設定
     1283                                # Cell.end_of_parse にて設定
    13131284                        else
    1314               Generator.get_statement_specifier   # クリア
     1285              Generator.get_statement_specifier   # クリア
    13151286              Generator.error( "G1013 unexpected specifier"  )
    13161287                        end
     
    13221293        | internal_cell
    13231294        | export_join
    1324 #        | error       # エラー回復ポイント  (#513 無限ループに陥るケースがあるので、ここでのエラー回復は取りやめ)
     1295#        | error       # エラー回復ポイント  (#513 無限ループに陥るケースがあるので、ここでのエラー回復は取りやめ)
    13251296
    13261297composite_celltype_statement_specifier_list
     
    13451316                }
    13461317
    1347 #属性
     1318#属性
    13481319composite_attribute
    13491320        : ATTRIBUTE '{' composite_attribute_declaration_list '}' ';'
     
    13761347
    13771348internal_join_list
    1378         :   # 空行  061007
     1349        :   # 空行  061007
    13791350        | internal_join_list specified_join
    13801351        | internal_join_list external_join
    13811352
    1382 external_join  # cell å†
    1383 ã«è¨˜è¿°ã™ã‚‹å‘¼ã³å£ã®å¤–部結合
     1353external_join  # cell 内に記述する呼び口の外部結合
    13841354        : internal_cell_elem_name '=>' COMPOSITE '.' export_name ';'
    13851355                {       Cell.external_join( val[0].val, val[4].val, true )      }
    13861356        | internal_cell_elem_name '=>' export_name ';'
    13871357                {       Cell.external_join( val[0].val, val[2].val, false )     }
    1388         # 以前の文法では、呼び口側も cell の外に記述していた
    1389         # その時の実è£
    1390 ã‚’
    1391 
    1392 export_join    # cell 外に記述する受け口の外部結合
     1358        # 以前の文法では、呼び口側も cell の外に記述していた
     1359        # その時の実装を
     1360
     1361export_join    # cell 外に記述する受け口の外部結合
    13931362        : export_name '=>' internal_ref_cell_name '.' internal_cell_elem_name ';'
    13941363                {
     
    14111380        : IDENTIFIER
    14121381
    1413 # リージョン
     1382# リージョン
    14141383region
    14151384        : spec_L region_specifier_list spec_R REGION region_name '{'  region_statement '}' ';'
     
    14261395        : IN_THROUGH '(' plugin_name ',' plugin_arg ')'
    14271396                { Region.new_in_through( val[2].val, val[4].val ) }
    1428         | IN_THROUGH '(' ')'   # in 許可
     1397        | IN_THROUGH '(' ')'   # in 許可
    14291398                { Region.new_in_through }
    14301399        | OUT_THROUGH '(' plugin_name ',' plugin_arg ')'
    14311400                { Region.new_out_through( val[2].val, val[4].val ) }
    1432         | OUT_THROUGH '(' ')'  # out 許可
     1401        | OUT_THROUGH '(' ')'  # out 許可
    14331402                { Region.new_out_through() }
    14341403        | TO_THROUGH '(' namespace_region_name ',' plugin_name ',' plugin_arg ')'
    14351404                { Region.new_to_through( val[2], val[4].val, val[6].val ) }
    1436         | TO_THROUGH '('namespace_region_name ')'  # to 許可
     1405        | TO_THROUGH '('namespace_region_name ')'  # to 許可
    14371406                { Region.new_to_through( val[2], nil, nil ) }
    14381407        | NODE
     
    14611430                        if obj.kind_of?( Cell ) then
    14621431                        else
    1463               Generator.get_statement_specifier   # クリア
     1432              Generator.get_statement_specifier   # クリア
    14641433              Generator.error( "G9999 unexpected specifier"  )
    14651434                        end
     
    14801449namespace_region_name
    14811450         : :IDENTIFIER
    1482                 { result = [ val[0].val ] }  # mikan é
    1483 åˆ—であるå¿
    1484 è¦ã¯ãªã„
     1451                { result = [ val[0].val ] }  # mikan 配列である必要はない
    14851452#        : namespace_identifier
    14861453
    1487 # 指定子の括弧 (in, out などのキーワード切り替えのため分離)
     1454# 指定子の括弧 (in, out などのキーワード切り替えのため分離)
    14881455spec_L
    14891456        : '['  { set_in_specifier }
     
    16201587  }
    16211588
    1622   # 指定子 '[]' å†
    1623 ã§ã®ã¿ä½¿ç”¨ã§ãã‚‹ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰
     1589  # 指定子 '[]' 内でのみ使用できるキーワード
    16241590  RESERVED2 = {
    16251591    # specifier
     
    16381604    # port (entry)
    16391605    'inline' => :INLINE,
    1640     'ref_desc' => :REF_DESC,   # call も可
     1606    'ref_desc' => :REF_DESC,   # call も可
    16411607
    16421608    # port (call)
     
    16821648  }
    16831649
    1684   # 再帰的なパーサのためのスタック
     1650  # 再帰的なパーサのためのスタック
    16851651  @@generator_nest = -1
    16861652  @@generator_stack = []
    16871653  @@current_locale = []
    16881654
    1689   # import_C 中である
     1655  # import_C 中である
    16901656  @@import_C = false
    16911657
    1692   # すべての構文解析が完了した
     1658  # すべての構文解析が完了した
    16931659  @@b_end_all_parse = false
    16941660
    16951661  def self.parse( file_name, plugin = nil, b_reuse = false )
    1696     # パーサインスタンスを生成(別パーサで読み込む)
     1662    # パーサインスタンスを生成(別パーサで読み込む)
    16971663    parser = Generator.new
    16981664
    1699     # plugin から import されている場合の plugin 設定
     1665    # plugin から import されている場合の plugin 設定
    17001666    parser.set_plugin plugin
    17011667
    1702     # reuse フラグを設定
     1668    # reuse フラグを設定
    17031669    parser.set_reuse b_reuse
    17041670
    1705     # cdl をパース
     1671    # cdl をパース
    17061672    parser.parse( [file_name] )
    17071673
    1708     # 終期化 パーサスタックを戻す
     1674    # 終期化 パーサスタックを戻す
    17091675    parser.finalize
    17101676  end
     
    17261692  def self.get_plugin
    17271693    if @@generator_stack[@@generator_nest] then
    1728       # tecsgen 引数の cdl が import される場合は nil
     1694      # tecsgen 引数の cdl が import される場合は nil
    17291695      return @@generator_stack[@@generator_nest].get_plugin
    17301696    else
     
    17431709  def self.is_reuse?
    17441710    if @@generator_stack[@@generator_nest] then
    1745       # tecsgen 引数の cdl が import される場合は nil
     1711      # tecsgen 引数の cdl が import される場合は nil
    17461712      return @@generator_stack[@@generator_nest].is_reuse?
    17471713    else
     
    17731739      b_in_string = false
    17741740
    1775       # euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
     1741      # euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
    17761742      TECS_LANG::set_kcode_binary
    17771743
     
    17831749          TECSIO.foreach(file) {|line|
    17841750            col = 1
    1785 #            line.rstrip!         æ”¹è¡Œå«ã‚€æ–‡å­—列を扱うようになったので、ここで空白を取り除けなくなった
     1751#            line.rstrip!         改行含む文字列を扱うようになったので、ここで空白を取り除けなくなった
    17861752
    17871753            until line.empty?
     
    17891755              if b_in_comment
    17901756                case line
    1791                   # コメント終了
     1757                  # コメント終了
    17921758                when /\A\*\//
    17931759                  b_in_comment = false
    17941760                when /\A./
    17951761                  ;
    1796                 when /\s+/     # line.rstrip! を止めたため \n などの空白文字とまっちするルールがå¿
    1797 è¦ã«ãªã£ãŸ
     1762                when /\s+/     # line.rstrip! を止めたため \n などの空白文字とまっちするルールが必要になった
    17981763                  ;
    17991764                end
     
    18031768                  @q <<  [:STRING_LITERAL, Token.new(string, file, lineno, col)]
    18041769                  b_in_string = false
    1805                 elsif line =~ /\A.*\\\n/     # 改行 \n は '.' にマッチしない
     1770                elsif line =~ /\A.*\\\n/     # 改行 \n は '.' にマッチしない
    18061771                  string += $&
    1807                 elsif line =~ /\A.*\n/     # 改行 \n は '.' にマッチしない
     1772                elsif line =~ /\A.*\n/     # 改行 \n は '.' にマッチしない
    18081773                  string += line
    1809                   # この位置では error メソッドは使えない (token 読出し前)
     1774                  # この位置では error メソッドは使えない (token 読出し前)
    18101775                  puts "error: #{file} line #{lineno}: string literal has newline without escape"
    18111776                  @@n_error += 1
     
    18131778              else
    18141779                case line
    1815                 # 空白、プリプロセスディレクティブ
     1780                # 空白、プリプロセスディレクティブ
    18161781                when /\A\s+/
    18171782                  ;
    1818                 # 識別子
     1783                # 識別子
    18191784                when /\A[a-zA-Z_]\w*/
    18201785                  word = $&
    18211786                  @q << [RESERVED[word] || :IDENTIFIER, Token.new(word.intern, file, lineno, col)]
    1822                 # 16 進数定数
     1787                # 16 進数定数
    18231788                when /\A0x[0-9A-Fa-f]+/
    18241789                  @q << [:HEX_CONSTANT, Token.new($&, file, lineno, col)]
    1825                 # 8 進数定数
     1790                # 8 進数定数
    18261791                when /\A0[0-7]+/
    18271792                  @q << [:OCTAL_CONSTANT, Token.new($&, file, lineno, col)]
    1828                 # 浮動小数定数
     1793                # 浮動小数定数
    18291794                when /\A[0-9]+\.([0-9]*)?([Ee][+-]?[0-9]+)?/
    18301795                  @q << [:FLOATING_CONSTANT, Token.new($&, file, lineno, col)]
    1831                 # 整数定数
     1796                # 整数定数
    18321797                when /\A\d+/
    18331798                  @q << [:INTEGER_CONSTANT, Token.new($&.to_i, file, lineno, col)]
    1834                 # 文字定数
     1799                # 文字定数
    18351800                when /\A'(?:[^'\\]|\\.)'/
    18361801                  @q << [:CHARACTER_LITERAL, Token.new($&, file, lineno, col)]
    1837                 # 文字列
    1838 #                "#include  #include #include \"../systask/logtask.cfg\"       æœ€å¾Œã® " 忘れ)で無限ループ
     1802                # 文字列
     1803#                "#include  #include #include \"../systask/logtask.cfg\"       最後の " 忘れ)で無限ループ
    18391804#                when /\A"(?:[^"\\]+|\\.)*"/
    1840                 when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
     1805                when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
    18411806                  @q << [:STRING_LITERAL, Token.new($&, file, lineno, col)]
    1842                 # 文字列 (改行あり)
     1807                # 文字列 (改行あり)
    18431808                when /\A"(?:[^"\\]|\\.)*\\\n$/
    18441809                  string = $&
    18451810                  b_in_string = true
    1846                 # 文字列 (改行あり, escape なし)
     1811                # 文字列 (改行あり, escape なし)
    18471812                when /\A("(?:[^"\\]|\e\.)*)\n$/
    18481813                  string = $1 + "\\\n"
    18491814                  b_in_string = true
    1850                   # この位置では error メソッドは使えない (token 読出し前) # mikan cdl_error ではない
     1815                  # この位置では error メソッドは使えない (token 読出し前) # mikan cdl_error ではない
    18511816                  puts "error: #{file} line #{lineno}: string literal has newline without escape"
    18521817                  @@n_error += 1
    1853                 # 山括弧で囲まれた文字列
     1818                # 山括弧で囲まれた文字列
    18541819                when /\A<[0-9A-Za-z_\. \/]+>/   # AB: angle bracke
    18551820                  @q << [:AB_STRING_LITERAL, Token.new($&, file, lineno, col)]
    1856                 # 行コメント
     1821                # 行コメント
    18571822                when /\A\/\/.*$/
    1858                   # 読み飛ばすだけ
    1859                 # コメント開始
     1823                  # 読み飛ばすだけ
     1824                # コメント開始
    18601825                when /\A\/\*/
    18611826                  b_in_comment = true
    1862                 # '>>', '<<' など
     1827                # '>>', '<<' など
    18631828                when /\A>>/, /\A<</, /\A==/, /\A!=/, /\A\&\&/, /\A\|\|/
    18641829                  @q << [$&, Token.new($&, file, lineno, col)]
    18651830                when /\A::/, /\A=>/, /\A<=/, /\A>=/
    18661831                  @q << [$&, Token.new($&, file, lineno, col)]
    1867                 # '(', ')' など一文字の記号、または未知の記号
     1832                # '(', ')' など一文字の記号、または未知の記号
    18681833                when /\A./
    18691834                  @q << [$&, Token.new($&, file, lineno, col)]
     
    18891854      }
    18901855
    1891       # 終了の印
     1856      # 終了の印
    18921857      @q << nil
    18931858
     
    19091874
    19101875      if token[0] == :IDENTIFIER then
    1911         # TYPE_NAME トークンへ置換え
     1876        # TYPE_NAME トークンへ置換え
    19121877        if Namespace.is_typename?( token[1].val ) then
    19131878          token[0] = :TYPE_NAME
    19141879        elsif @in_specifier && RESERVED2[ token[1].val.to_s ] then
    1915           # 指定子キーワード( '[', ']' å†
    1916 ã§ã®ã¿æœ‰åŠ¹)
     1880          # 指定子キーワード( '[', ']' 内でのみ有効)
    19171881          token[0] = RESERVED2[ token[1].val.to_s ]
    19181882        end
    19191883      end
    19201884
    1921       if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生)
     1885      if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生)
    19221886        locale = @@current_locale[@@generator_nest]
    19231887        if token then
     
    19501914  @@n_warning = 0
    19511915
    1952   # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でエラー発生は不適切)
     1916  # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でエラー発生は不適切)
    19531917  def self.error( msg, *arg )
    19541918    locale = nil
     
    19601924
    19611925    msg = TECSMsg.get_error_message( msg )
    1962     # $1, $2, ... を arg で置換
     1926    # $1, $2, ... を arg で置換
    19631927    count = 1
    19641928    arg.each{ |a|
     
    19681932    }
    19691933
    1970     # import_C の中でのエラー?
     1934    # import_C の中でのエラー?
    19711935    if @@import_C then
    19721936      C_parser.error( msg )
    19731937    else
    19741938
    1975       # Node の記憶する 位置 (locale) を使用した場合、変更以前に比べ、
    1976       # 問題発生箇所と異なる位置にエラーが出るため、構文解析中のエラー
    1977       # は、解析中の位置を出力する.(new_XXX で owner が子要素のチェッ
    1978       # クをすると owner の行番号が出てしまう点で、ずれが生じている)
     1939      # Node の記憶する 位置 (locale) を使用した場合、変更以前に比べ、
     1940      # 問題発生箇所と異なる位置にエラーが出るため、構文解析中のエラー
     1941      # は、解析中の位置を出力する.(new_XXX で owner が子要素のチェッ
     1942      # クをすると owner の行番号が出てしまう点で、ずれが生じている)
    19791943
    19801944      if @@b_end_all_parse == false || locale == nil then
     
    19891953  end
    19901954
    1991   # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でウォーニング発生は不適切)
     1955  # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でウォーニング発生は不適切)
    19921956  def self.warning( msg, *arg )
    19931957    locale = nil
     
    19991963
    20001964    msg = TECSMsg.get_warning_message( msg )
    2001     # $1, $2, ... を arg で置換
     1965    # $1, $2, ... を arg で置換
    20021966    count = 1
    20031967    arg.each{ |a|
     
    20071971    }
    20081972
    2009     # import_C の中でのウォーニング?
     1973    # import_C の中でのウォーニング?
    20101974    if @@import_C then
    20111975      C_parser.warning( msg )
     
    20341998  end
    20351999
    2036   #===  '[' specifier 始め
     2000  #===  '[' specifier 始め
    20372001  def set_in_specifier
    20382002    # p "set_in_specifier"
     
    20402004  end
    20412005
    2042   #=== ']' specifier 終わり
     2006  #=== ']' specifier 終わり
    20432007  def unset_in_specifier
    20442008    # p "unset_in_specifier"
     
    20462010  end
    20472011
    2048   # statement_specifier は構文解釈途中で参ç
    2049 §ã—たいため
     2012  # statement_specifier は構文解釈途中で参照したいため
    20502013  @@statement_specifier_stack = []
    20512014  def self.add_statement_specifier( ss )
     
    20642027  end
    20652028
    2066   #=== すべての構文解析が完了したことを報告
     2029  #=== すべての構文解析が完了したことを報告
    20672030  def self.end_all_parse
    20682031    @@b_end_all_parse = true
     
    20722035
    20732036
    2074 # ファイル => INCLUDE("header")のé
    2075 åˆ—
     2037# ファイル => INCLUDE("header")の配列
    20762038Include = Hash.new {|hash, key| hash[key] = []}
    20772039
     
    21272089
    21282090#= TECSIO
    2129 #  Ruby2.0(1.9) 対応に伴い導å
    2130 ¥ã—たクラス
    2131 #  SJIS 以外では、ASCII-8BIT としてå
    2132 ¥åŠ›ã™ã‚‹
     2091#  Ruby2.0(1.9) 対応に伴い導入したクラス
     2092#  SJIS 以外では、ASCII-8BIT として入力する
    21332093class TECSIO
    2134   def self.foreach(file) # ブロック引数 { |line| }
    2135     pr = Proc.new   # このメソッドのブロック引数を pr に代å
    2136 ¥
     2094  def self.foreach(file) # ブロック引数 { |line| }
     2095    pr = Proc.new   # このメソッドのブロック引数を pr に代入
    21372096    if $b_no_kcode then
    21382097          msg = "E".encode $Ruby19_File_Encode
    21392098      if( $Ruby19_File_Encode == "Shift_JIS" )
    21402099
    2141         # Shift JIS は、いったん Windows-31J として読み込ませ、Shift_JIS に変換させる.
    2142         # コメント等に含まれる SJIS に不適切な文字コードは '?' または REPLACEMENT CHARACTER に変換される.
    2143         # EUC や UTF-8 で記述された CDL が混在していても、Ruby 例外が発生することなく処理を進めることができる.
    2144         # 文字コード指定が SJIS であって、文字列リテラルの中に、文字コードがSJIS 以外の非 ASCII が含まれている場合、
    2145         # Ruby 1.8 の tecsgen では文字コード指定に影響なく処理されたものが、Ruby 1.9 以降では '?' に置き換わる可能性がある.
     2100        # Shift JIS は、いったん Windows-31J として読み込ませ、Shift_JIS に変換させる.
     2101        # コメント等に含まれる SJIS に不適切な文字コードは '?' または REPLACEMENT CHARACTER に変換される.
     2102        # EUC や UTF-8 で記述された CDL が混在していても、Ruby 例外が発生することなく処理を進めることができる.
     2103        # 文字コード指定が SJIS であって、文字列リテラルの中に、文字コードがSJIS 以外の非 ASCII が含まれている場合、
     2104        # Ruby 1.8 の tecsgen では文字コード指定に影響なく処理されたものが、Ruby 1.9 以降では '?' に置き換わる可能性がある.
    21462105
    21472106        mode = "r:Windows-31J"
     
    21672126  end
    21682127
    2169   #=== 文字コードが相違する場合一致させる
    2170   # msg と str の文字コードが相違する場合、str を msg の文字コードに変換する
    2171   # 変換不可の文字コードは '?' (utf-8 の場合 U+FFFD (REPLACEMENT CHARACTER )) に変換
     2128  #=== 文字コードが相違する場合一致させる
     2129  # msg と str の文字コードが相違する場合、str を msg の文字コードに変換する
     2130  # 変換不可の文字コードは '?' (utf-8 の場合 U+FFFD (REPLACEMENT CHARACTER )) に変換
    21722131  #
    2173   # このメソッドは、エラーメッセージ出力でも使用されていることに注意.
     2132  # このメソッドは、エラーメッセージ出力でも使用されていることに注意.
    21742133  #
    21752134  #msg_enc::Encode | String
    21762135  def self.str_code_convert( msg, str )
    21772136    if $b_no_kcode == false then
    2178       return str                          # Ruby V1.8 まで
     2137      return str                          # Ruby V1.8 まで
    21792138    end
    21802139    if msg.encoding != str.encoding then
    2181       option = { :invalid => :replace, :undef => :replace }   # 例外を発生させず、'?' に変換する(utf-8 は 0xfffd)
     2140      option = { :invalid => :replace, :undef => :replace }   # 例外を発生させず、'?' に変換する(utf-8 は 0xfffd)
    21822141      # return str.encode( msg.encoding, option )
    21832142      str = str.encode( "utf-8", option )
  • asp3_gr_sakura/trunk/tecsgen/tecslib/core/componentobj.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    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: componentobj.rb 2569 2016-03-27 12:58:00Z okuma-top $
     37#   $Id$
    5338#++
    5439
    5540# STAGE:
    56 # このメンテナンス状況はよろしくない
    57 #  B    bnf.y.rb から呼出される
    58 #  P    parse 段階で呼出される(bnf.y.rb から直接呼出されるわけではないが、構文木生成を行う)
    59 #  S    P の中から呼出されるが、構文木生成するわけではなく意味チェックする
    60 #  G    コード生成(この段階で、構文木は完å
    61 ¨ã§ã‚る.不完å
    62 ¨ãªã‚‰ã‚¨ãƒ©ãƒ¼ã§æ‰“ちきられている)
    63 #                                                   factory の第一引数 "format" の後ろの引数
    64 
    65 # mikan 以下は ruby の mix in で実現できるかもしれない
    66 # Nestable を継承した場合、クラス変数は Nestable のものがå
    67 ±æœ‰ã•ã‚Œã‚‹ï¼ˆåˆ¥ã«ã—たかった)
     41# このメンテナンス状況はよろしくない
     42#  B    bnf.y.rb から呼出される
     43#  P    parse 段階で呼出される(bnf.y.rb から直接呼出されるわけではないが、構文木生成を行う)
     44#  S    P の中から呼出されるが、構文木生成するわけではなく意味チェックする
     45#  G    コード生成(この段階で、構文木は完全である.不完全ならエラーで打ちきられている)
     46#                                                   factory の第一引数 "format" の後ろの引数
     47
     48# mikan 以下は ruby の mix in で実現できるかもしれない
     49# Nestable を継承した場合、クラス変数は Nestable のものが共有される(別にしたかった)
    6850# class Nestable
    6951#   @@nest_stack_index = -1
     
    9072#  @name:: Symbol
    9173#  @global_name:: Symbol
    92 #  @function_head_list:: NamedList : FuncHead のインスタンスが要素
    93 #  @func_name_to_id::  {String}  :  関数名を添字とするé
    94 åˆ—で id を記憶する.id は signature の出現順番 (1から始まる)
    95 #  @context:: string : コンテキスト名
    96 #  @b_callback:: bool: callback : コールバック用のシグニチャ
    97 #  @b_deviate:: bool: deviate : 逸脱(pointer level mismatch を出さない)
    98 #  @b_checked_as_allocator_signature:: bool:  アロケータシグニチャとしてチェック済み
    99 #  @b_empty:: Bool: 空(関数が一つもない状æ
    100 ‹)
     74#  @function_head_list:: NamedList : FuncHead のインスタンスが要素
     75#  @func_name_to_id::  {String}  :  関数名を添字とする配列で id を記憶する.id は signature の出現順番 (1から始まる)
     76#  @context:: string : コンテキスト名
     77#  @b_callback:: bool: callback : コールバック用のシグニチャ
     78#  @b_deviate:: bool: deviate : 逸脱(pointer level mismatch を出さない)
     79#  @b_checked_as_allocator_signature:: bool:  アロケータシグニチャとしてチェック済み
     80#  @b_empty:: Bool: 空(関数が一つもない状態)
    10181
    10282  @@nest_stack_index = -1
     
    11999
    120100  # STAGE: P
    121   # このメソッドは parse 中のみ呼び出される
     101  # このメソッドは parse 中のみ呼び出される
    122102  def self.get_current
    123103    @@current_object
     
    130110    @name = name
    131111    Namespace.new_signature( self )
    132     set_namespace_path # @NamespacePath の設定
     112    set_namespace_path # @NamespacePath の設定
    133113    if "#{Namespace.get_global_name}" == "" then
    134114      @global_name = @name
     
    152132    @function_head_list = function_head_list
    153133
    154     # id を割付ける
     134    # id を割付ける
    155135    id = 1
    156136    function_head_list.get_items.each{ |f|
     
    166146  end
    167147
    168   #=== Signature# signature の指定子を設定
     148  #=== Signature# signature の指定子を設定
    169149  # STAGE: B
    170150  #spec_list::      [ [ :CONTEXT,  String ], ... ]
    171151  #                     s[0]        s[1]
    172152  def set_specifier_list( spec_list )
    173     return if spec_list == nil  # 空ならば何もしない
     153    return if spec_list == nil  # 空ならば何もしない
    174154
    175155    spec_list.each { |s|
     
    216196  end
    217197
    218   #=== Signature# 関数名から signature å†
    219 ã® id を得る
     198  #=== Signature# 関数名から signature 内の id を得る
    220199  def get_id_from_func_name func_name
    221200    @func_name_to_id[ func_name ]
    222201  end
    223202
    224   #=== Signature# context を得る
    225   # context 文字列を返す "task", "non-task", "any"
    226   # 未指定時のデフォルトとして task を返す
     203  #=== Signature# context を得る
     204  # context 文字列を返す "task", "non-task", "any"
     205  # 未指定時のデフォルトとして task を返す
    227206  def get_context
    228207    if @context then
     
    233212  end
    234213
    235   #=== Signature# signaure のすべての関数のすべてのパラメータをたどる
    236   #block:: ブロックを引数に取る
    237   # ブロックは2つの引数を受け取る  Decl, ParamDecl     ( Decl: 関数ヘッダ )
    238   # Port クラスにも each_param がある(同じ働き)
    239   def each_param # ブロック引数 { |func_decl, param_decl| }
    240     fha = get_function_head_array                       # 呼び口または受け口のシグニチャの関数é
    241 åˆ—
    242     return if fha == nil                                # nil なら文法エラーで有効値が設定されなかった
    243 
    244     pr = Proc.new   # このメソッドのブロック引数を pr に代å
    245 ¥
    246     fha.each{ |fh|  # fh: FuncHead                      # 関数é
    247 åˆ—中の各関数頭部
    248       fd = fh.get_declarator                            # fd: Decl  (関数頭部からDeclarotorを得る)
    249       if fd.is_function? then                           # fd が関数でなければ、すでにエラー
    250         fd.get_type.get_paramlist.get_items.each{ |par| # すべてのパラメータについて
     214  #=== Signature# signaure のすべての関数のすべてのパラメータをたどる
     215  #block:: ブロックを引数に取る
     216  # ブロックは2つの引数を受け取る  Decl, ParamDecl     ( Decl: 関数ヘッダ )
     217  # Port クラスにも each_param がある(同じ働き)
     218  def each_param # ブロック引数 { |func_decl, param_decl| }
     219    fha = get_function_head_array                       # 呼び口または受け口のシグニチャの関数配列
     220    return if fha == nil                                # nil なら文法エラーで有効値が設定されなかった
     221
     222    pr = Proc.new   # このメソッドのブロック引数を pr に代入
     223    fha.each{ |fh|  # fh: FuncHead                      # 関数配列中の各関数頭部
     224      fd = fh.get_declarator                            # fd: Decl  (関数頭部からDeclarotorを得る)
     225      if fd.is_function? then                           # fd が関数でなければ、すでにエラー
     226        fd.get_type.get_paramlist.get_items.each{ |par| # すべてのパラメータについて
    251227          pr.call( fd, par )
    252228        }
     
    255231  end
    256232
    257   #=== Signature# 正当なアロケータ シグニチャかテストする
    258   # alloc, dealloc 関数を持つかどうか、第一引き数がそれぞれ、整数、ポインタ、第二引き数が、ポインタへのポインタ、なし
     233  #=== Signature# 正当なアロケータ シグニチャかテストする
     234  # alloc, dealloc 関数を持つかどうか、第一引き数がそれぞれ、整数、ポインタ、第二引き数が、ポインタへのポインタ、なし
    259235  def is_allocator?
    260236
    261     # 一回だけチェックする
     237    # 一回だけチェックする
    262238    if @b_checked_as_allocator_signature == true then
    263239      return true
     
    265241    @b_checked_as_allocator_signature = true
    266242
    267     fha = get_function_head_array                       # 呼び口または受け口のシグニチャの関数é
    268 åˆ—
    269     if fha == nil then                                  # nil なら文法エラーで有効値が設定されなかった
     243    fha = get_function_head_array                       # 呼び口または受け口のシグニチャの関数配列
     244    if fha == nil then                                  # nil なら文法エラーで有効値が設定されなかった
    270245      return false
    271246    end
    272247
    273248    found_alloc = false; found_dealloc = false
    274     fha.each{ |fh|  # fh: FuncHead                      # 関数é
    275 åˆ—中の各関数頭部
    276       fd = fh.get_declarator                            # fd: Decl  (関数頭部からDeclarotorを得る)
    277       if fd.is_function? then                           # fd が関数でなければ、すでにエラー
     249    fha.each{ |fh|  # fh: FuncHead                      # 関数配列中の各関数頭部
     250      fd = fh.get_declarator                            # fd: Decl  (関数頭部からDeclarotorを得る)
     251      if fd.is_function? then                           # fd が関数でなければ、すでにエラー
    278252        func_name = fd.get_name.to_sym
    279253        if func_name == :alloc then
     
    284258                ! params[0].get_type.get_original_type.kind_of?( IntType ) ||
    285259                params[0].get_direction != :IN then
    286               # 第一引数が int 型でない
     260              # 第一引数が int 型でない
    287261              if ! params[0].instance_of?( ParamDecl ) ||
    288262                  ! params[0].get_type.kind_of?( PtrType ) ||
     
    290264                  params[0].get_type.get_type.get_type.kind_of?( PtrType ) ||
    291265                  params[0].get_direction != :OUT then
    292                 # 第一引数がポインタ型でもない
     266                # 第一引数がポインタ型でもない
    293267                cdl_error3( @locale, "S1003 $1: \'alloc\' 1st parameter neither [in] integer type nor [out] double pointer type", @name )
    294268              end
     
    298272                params[1].get_type.get_type.get_type.kind_of?( PtrType ) ||
    299273                params[0].get_direction != :IN then
    300               # (第一引数が整数で) 第二引数がポインタでない
     274              # (第一引数が整数で) 第二引数がポインタでない
    301275              cdl_error3( @locale, "S1004 $1: \'alloc\' 2nd parameter not [in] double pointer" , @name )
    302276            end
     
    313287                params[0].get_direction != :IN then
    314288              cdl_error3( @locale, "S1006 $1: \'dealloc\' 1st parameter not [in] pointer type" , @name )
    315 #            elsif params[1] != nil then    # 第二引き数はチェックしない
     289#            elsif params[1] != nil then    # 第二引き数はチェックしない
    316290#              cdl_error3( @locale, "S1007 Error message is changed to empty" )
    317291#                 cdl_error3( @locale, "S1007 $1: \'dealloc\' cannot has 2nd parameter" , @name )
     
    335309  end
    336310
    337   #== Signature# 引数で参ç
    338 §ã•ã‚Œã¦ã„ã‚‹ Descriptor 型のリストを作成する
    339   #RETURN:: Hash { Signature => ParamDecl }:  複数の ParamDecl から参ç
    340 §ã•ã‚Œã¦ã„る場合、最後のものしか返さない
     311  #== Signature# 引数で参照されている Descriptor 型のリストを作成する
     312  #RETURN:: Hash { Signature => ParamDecl }:  複数の ParamDecl から参照されている場合、最後のものしか返さない
    341313  def get_descriptor_list
    342314    desc_list = { }
    343315    # p "has_desc #{@name}"
    344     fha = get_function_head_array                       # 呼び口または受け口のシグニチャの関数é
    345 åˆ—
    346     if fha == nil then                                  # nil の場合、自己参ç
    347 §ã«ã‚ˆã‚‹ã‚±ãƒ¼ã‚¹ã¨ä»®å®š
     316    fha = get_function_head_array                       # 呼び口または受け口のシグニチャの関数配列
     317    if fha == nil then                                  # nil の場合、自己参照によるケースと仮定
    348318      return desc_list
    349319    end
    350320    fha.each{ |fh|
    351       fd = fh.get_declarator                            # fd: Decl  (関数頭部からDeclarotorを得る)
    352       if fd.is_function? then                           # fd が関数でなければ、すでにエラー
     321      fd = fh.get_declarator                            # fd: Decl  (関数頭部からDeclarotorを得る)
     322      if fd.is_function? then                           # fd が関数でなければ、すでにエラー
    353323        params = fd.get_type.get_paramlist.get_items
    354324        if params then
     
    369339  end
    370340
    371   #=== Signature# 引数に Descriptor があるか?
     341  #=== Signature# 引数に Descriptor があるか?
    372342  def has_descriptor?
    373343    # p "has_desc #{@name}"
    374     fha = get_function_head_array                       # 呼び口または受け口のシグニチャの関数é
    375 åˆ—
    376     if fha == nil then                                  # nil の場合、自己参ç
    377 §ã«ã‚ˆã‚‹ã‚±ãƒ¼ã‚¹ã¨ä»®å®š
     344    fha = get_function_head_array                       # 呼び口または受け口のシグニチャの関数配列
     345    if fha == nil then                                  # nil の場合、自己参照によるケースと仮定
    378346      return true
    379347    end
    380348    fha.each{ |fh|
    381       fd = fh.get_declarator                            # fd: Decl  (関数頭部からDeclarotorを得る)
    382       if fd.is_function? then                           # fd が関数でなければ、すでにエラー
     349      fd = fh.get_declarator                            # fd: Decl  (関数頭部からDeclarotorを得る)
     350      if fd.is_function? then                           # fd が関数でなければ、すでにエラー
    383351        params = fd.get_type.get_paramlist.get_items
    384352        if params then
     
    399367  end
    400368
    401   #=== Signature# コールバックか?
    402   # 指定子 callback が指定されていれば true
     369  #=== Signature# コールバックか?
     370  # 指定子 callback が指定されていれば true
    403371  def is_callback?
    404372    @b_callback
    405373  end
    406374
    407   #=== Signature# 逸脱か?
    408   # 指定子 deviate が指定されていれば true
     375  #=== Signature# 逸脱か?
     376  # 指定子 deviate が指定されていれば true
    409377  def is_deviate?
    410378    @b_deviate
    411379  end
    412380
    413   #=== Signature# 空か?
     381  #=== Signature# 空か?
    414382  def is_empty?
    415383    @b_empty
    416384  end
    417385
    418   #=== Signature# Push Pop Allocator がå¿
    419 è¦ã‹ï¼Ÿ
    420   # Transparent RPC の場合 oneway かつ in のé
    421 åˆ—(size_is, count_is, string のいずれかで修飾)がある
     386  #=== Signature# Push Pop Allocator が必要か?
     387  # Transparent RPC の場合 oneway かつ in の配列(size_is, count_is, string のいずれかで修飾)がある
    422388  def need_PPAllocator?( b_opaque = false )
    423     fha = get_function_head_array                       # 呼び口または受け口のシグニチャの関数é
    424 åˆ—
     389    fha = get_function_head_array                       # 呼び口または受け口のシグニチャの関数配列
    425390    fha.each{ |fh|
    426391      fd = fh.get_declarator
     
    457422# @factory_list::   Factory[]
    458423# @ct_factory_list::    Factory[] :    celltype factory
    459 # @cell_list:: Cell[] : 定義のみ (V1.0.0.2 以降)
     424# @cell_list:: Cell[] : 定義のみ (V1.0.0.2 以降)
    460425# @singleton:: bool
    461426# @idx_is_id:: bool
    462427# @idx_is_id_act:: bool: actual value
    463428# @active:: bool
    464 # @b_reuse:: bool :  reuse 指定されて import された(template 不要)
    465 # @generate:: [ Symbol, String, Plugin ]  = [ PluginName, option, Plugin ] Plugin は生成後に追加される
     429# @b_reuse:: bool :  reuse 指定されて import された(template 不要)
     430# @generate:: [ Symbol, String, Plugin ]  = [ PluginName, option, Plugin ] Plugin は生成後に追加される
    466431#
    467432# @n_attribute_ro:: int >= 0    none specified
     
    470435# @n_var:: int >= 0
    471436# @n_var_size_is:: int >= 0     # of [size_is] specified vars # mikan count_is
    472 # @n_var_omit:: int >= 0        # of [omit] specified vars # mikan var の omit は有?
     437# @n_var_omit:: int >= 0        # of [omit] specified vars # mikan var の omit は有?
    473438# @n_var_init:: int >= 0        # of vars with initializer
    474439# @n_call_port:: int >= 0
    475440# @n_call_port_array:: int >= 0
    476 # @n_call_port_omitted_in_CB:: int >= 0   æœ€é©åŒ–で省略される呼び口
     441# @n_call_port_omitted_in_CB:: int >= 0   最適化で省略される呼び口
    477442# @n_entry_port:: int >= 0
    478443# @n_entry_port_array:: int >= 0
    479444# @n_entry_port_inline:: int >= 0
    480 # @n_cell_gen:: int >= 0  生成するセルの数.コード生成の頭で算出する.意味解析段階では参ç
    481 §ä¸å¯
    482 # @id_base:: Integer : cell の ID の最小値(最大値は @id_base + @n_cell)
     445# @n_cell_gen:: int >= 0  生成するセルの数.コード生成の頭で算出する.意味解析段階では参照不可
     446# @id_base:: Integer : cell の ID の最小値(最大値は @id_base + @n_cell)
    483447#
    484 # @b_cp_optimized:: bool : 呼び口最適化実施
    485 # @plugin:: PluginObject      このセルタイプがプラグインにより生成された CDL から生成された場合に有効。
    486 #                              generate の指定は @generate にプラグインが保持される
     448# @b_cp_optimized:: bool : 呼び口最適化実施
     449# @plugin:: PluginObject      このセルタイプがプラグインにより生成された CDL から生成された場合に有効。
     450#                              generate の指定は @generate にプラグインが保持される
    487451#
    488 # @included_header:: Hash :  include されたヘッダファイル
    489 # @domain_roots::Hash { DomainTypeName(Symbol) => [ Region ] }  ドメインタイプ名と Region のé
    490 åˆ— (optimize.rb で設定)
    491 #                                               ãƒ«ãƒ¼ãƒˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã¯ãƒ‰ãƒ¡ã‚¤ãƒ³åãŒã€€nil
     452# @included_header:: Hash :  include されたヘッダファイル
     453# @domain_roots::Hash { DomainTypeName(Symbol) => [ Region ] }  ドメインタイプ名と Region の配列 (optimize.rb で設定)
     454#                                               ルートリージョンはドメイン名が nil
    492455
    493456  include PluginModule
     
    553516
    554517    @plugin = Generator.get_plugin
    555       # plugin の場合 PluginObject が返される
    556     # å
    557 ƒã® Generator から呼出された Generator の中でパースおよび意味チェックされている
     518      # plugin の場合 PluginObject が返される
     519    # 元の Generator から呼出された Generator の中でパースおよび意味チェックされている
    558520
    559521    # if @plugin then
    560     #  # plugin 生成されるセルタイプは再利用ではない   #833 不å
    561 ·åˆä¿®æ­£
     522    #  # plugin 生成されるセルタイプは再利用ではない   #833 不具合修正
    562523    #  @b_reuse = false
    563524    # else
     
    573534
    574535    Namespace.new_celltype( self )
    575     set_namespace_path # @NamespacePath の設定
     536    set_namespace_path # @NamespacePath の設定
    576537    set_specifier_list( Generator.get_statement_specifier )
    577538
     
    589550  end
    590551
    591   #== Celltype#ドメインルートを返す
    592   # @domain_roots の説明を参ç
    593 §
     552  #== Celltype#ドメインルートを返す
     553  # @domain_roots の説明を参照
    594554  def get_domain_roots
    595555    @domain_roots
     
    598558  # Celltype# end_of_parse
    599559  def end_of_parse
    600     # 属性・変数のチェック
     560    # 属性・変数のチェック
    601561    check_attribute
    602562
    603     # アロケータ呼び口をå†
    604 éƒ¨ç”Ÿæˆ
     563    # アロケータ呼び口を内部生成
    605564    generate_allocator_port
    606565
    607     # リレーアロケータ、å†
    608 éƒ¨ã‚¢ãƒ­ã‚±ãƒ¼ã‚¿ã®è¨­å®š
     566    # リレーアロケータ、内部アロケータの設定
    609567    @port.each { |p|
    610568      p.set_allocator_instance
     
    666624      end
    667625      if a.get_initializer then
    668         # 登録後にチェックしても問題ない(attr を参ç
    669 §ã§ããªã„ので、自己参ç
    670 §ã—ない)
     626        # 登録後にチェックしても問題ない(attr を参照できないので、自己参照しない)
    671627        a.get_type.check_init( @locale, a.get_identifier, a.get_initializer, :ATTRIBUTE )
    672628      end
     
    674630  end
    675631
    676   #=== Celltype# celltype の attribute/var のチェック
     632  #=== Celltype# celltype の attribute/var のチェック
    677633  # STAGE:  S
    678634  #
    679   # このメソッドは celltype のパースが完了した時点で呼出される.
     635  # このメソッドは celltype のパースが完了した時点で呼出される.
    680636  def check_attribute
    681     # attribute の size_is 指定が妥当かチェック
     637    # attribute の size_is 指定が妥当かチェック
    682638    (@attribute+@var).each{ |a|
    683639      if a.get_size_is then
    684640        if ! a.get_type.kind_of?( PtrType ) then
    685           # size_is がポインタ型以外に指定された
     641          # size_is がポインタ型以外に指定された
    686642          cdl_error( "S1011 $1: size_is specified for non-pointer type" , a.get_identifier )
    687643        else
    688644
    689           # 参ç
    690 §ã™ã‚‹å¤‰æ•°ãŒå­˜åœ¨ã—、計算可能な型かチェックする
    691           size = a.get_size_is.eval_const( @name_list )  # C_EXP の可能性あり
     645          # 参照する変数が存在し、計算可能な型かチェックする
     646          size = a.get_size_is.eval_const( @name_list )  # C_EXP の可能性あり
    692647          init = a.get_initializer
    693648          if init then
    694649            if ! init.instance_of?( Array ) then
    695               # 初期化子がé
    696 åˆ—ではない
     650              # 初期化子が配列ではない
    697651              cdl_error( "S1012 $1: unsuitable initializer, need array initializer" , a.get_identifier )
    698652            elsif size.kind_of?( Integer ) && size < init.length then
    699               # size_is 指定された個数よりも初期化子のé
    700 åˆ—要素が多い
     653              # size_is 指定された個数よりも初期化子の配列要素が多い
    701654              cdl_error( "S1013 $1: too many initializer, $2 for $3" , a.get_identifier, init.length, size )
    702             # elsif a.get_size_is.eval_const( nil ) == nil  # C_EXP の可能性あり
     655            # elsif a.get_size_is.eval_const( nil ) == nil  # C_EXP の可能性あり
    703656            end
    704657
     
    710663              ( a.get_initializer.instance_of?( Expression ) &&
    711664                a.get_initializer.eval_const2(@name_list).instance_of?( Array ) ) then
    712             # size_is 指定されていないポインタが Array で初期化されていたら、エラー
     665            # size_is 指定されていないポインタが Array で初期化されていたら、エラー
    713666            cdl_error( "S1159 $1: non-size_is pointer cannot be initialized with array initializer" , a.get_identifier )
    714667          end
     
    722675  end
    723676
    724   #=== Celltype# アロケータ呼び口を生成
    725   #    send, receive 引数のアロケータを呼出すための呼び口を生成
     677  #=== Celltype# アロケータ呼び口を生成
     678  #    send, receive 引数のアロケータを呼出すための呼び口を生成
    726679  def generate_allocator_port
    727680    @port.each { |port|
    728       # ポートのすべてのパラメータを辿る
     681      # ポートのすべてのパラメータを辿る
    729682      port.each_param { |port, fd, par|
    730         case par.get_direction                        # 引数の方向指定子 (in, out, inout, send, receive )
     683        case par.get_direction                        # 引数の方向指定子 (in, out, inout, send, receive )
    731684        when :SEND, :RECEIVE
    732685          if par.get_allocator then
    733             cp_name = :"#{port.get_name}_#{fd.get_name}_#{par.get_name}"     # アロケータ呼び口の名前
    734             #           ãƒãƒ¼ãƒˆå          関数名         ãƒ‘ラメータ名
    735             # alloc_sig_path = [ par.get_allocator.get_name ]  # mikan Namespace アロケータ呼び口のシグニチャ #1
     686            cp_name = :"#{port.get_name}_#{fd.get_name}_#{par.get_name}"     # アロケータ呼び口の名前
     687            #           ポート名          関数名         パラメータ名
     688            # alloc_sig_path = [ par.get_allocator.get_name ]  # mikan Namespace アロケータ呼び口のシグニチャ #1
    736689            alloc_sig_path = par.get_allocator.get_namespace_path
    737             array_size = port.get_array_size            # 呼び口または受け口é
    738 åˆ—のサイズ
    739             created_port = Port.new( cp_name, alloc_sig_path, :CALL, array_size ) # 呼び口を生成
     690            array_size = port.get_array_size            # 呼び口または受け口配列のサイズ
     691            created_port = Port.new( cp_name, alloc_sig_path, :CALL, array_size ) # 呼び口を生成
    740692            created_port.set_allocator_port( port, fd, par )
    741693            if port.is_optional? then
     
    745697              created_port.set_omit
    746698            end
    747             new_port( created_port )                    # セルタイプに新しい呼び口を追加
     699            new_port( created_port )                    # セルタイプに新しい呼び口を追加
    748700          # else
    749701          #  already error "not found or not signature" in class ParamDecl
     
    762714  end
    763715
    764   #=== Celltype# 新しいå†
    765 éƒ¨å¤‰æ•°
     716  #=== Celltype# 新しい内部変数
    766717  #var:: [Decl]
    767718  def new_var( var )
     
    776727      @name_list.add_item( i )
    777728
    778       # size_is 指定されたé
    779 åˆ—? mikan  count_is
     729      # size_is 指定された配列? mikan  count_is
    780730      if i.get_size_is then
    781731        @n_var_size_is += 1
     
    793743  end
    794744
    795   #=== Celltype# celltype の指定子を設定
     745  #=== Celltype# celltype の指定子を設定
    796746  def set_specifier_list( spec_list )
    797747    return if spec_list == nil
     
    822772
    823773  def new_require( ct_or_cell_nsp, ep_name, cp_name )
    824     # Require: set_owner するものがない
     774    # Require: set_owner するものがない
    825775    obj = Namespace.find( ct_or_cell_nsp )    #1
    826776    if obj.instance_of? Celltype then
    827       # Celltype 名で指定
     777      # Celltype 名で指定
    828778      ct = obj
    829779    elsif obj.instance_of? Cell then
    830       # Cell 名で指定
     780      # Cell 名で指定
    831781      ct = obj.get_celltype
    832782    elsif obj == nil then
     
    839789
    840790    if( ! ct.is_singleton? ) then
    841       # シングルトンではない
     791      # シングルトンではない
    842792      cdl_error( "S1018 $1 : not singleton cell" , obj.get_name )
    843793    end
    844794
    845     # 受け口を探す
     795    # 受け口を探す
    846796    obj2 = ct.find( ep_name )
    847797    if( ( ! obj2.instance_of? Port ) || obj2.get_port_type != :ENTRY ) then
     
    854804
    855805    if obj2.get_signature == nil then
    856       # signature が未定義:既にエラー
     806      # signature が未定義:既にエラー
    857807      return
    858808    end
     
    860810    require_call_port_prefix = :_require_call_port
    861811    if cp_name == nil then
    862       # 関数名重複チェック
     812      # 関数名重複チェック
    863813      @require.each{ |req|
    864814        unless req[0].to_s =~ /^#{require_call_port_prefix}/ then
    865           next     # 名前ありの require は関数名重複チェックしない
     815          next     # 名前ありの require は関数名重複チェックしない
    866816        end
    867817        port = req[2]
    868818        if port.get_signature == obj2.get_signature then
    869           # 同じ signature (すべて同じ関数名を持つ)個別に出すのではなく、まとめてエラーとする
     819          # 同じ signature (すべて同じ関数名を持つ)個別に出すのではなく、まとめてエラーとする
    870820          cdl_error( "S1021 $1 : require cannot have same signature with \'$2\'" , obj2.get_name, port.get_name )
    871821          next
    872822        end
    873823        port.get_signature.get_function_head_array.each{ |f|
    874           # mikan ここは、namedList からの検索にならないの?(効率が悪い)
     824          # mikan ここは、namedList からの検索にならないの?(効率が悪い)
    875825          obj2.get_signature.get_function_head_array.each{ |f2|
    876826            if( f.get_name == f2.get_name ) then
     
    888838      b_has_name = true
    889839    end
    890     # require を追加
     840    # require を追加
    891841    @require << [ cp_name, obj, obj2 ]  # [ lhs:cp_name, rhs:Celltype, rhs:Port ]
    892842
    893     # require port を追加 (呼び口として追加する。ただし require をセットしておく)
     843    # require port を追加 (呼び口として追加する。ただし require をセットしておく)
    894844    port = Port.new( cp_name, obj2.get_signature.get_namespace_path, :CALL )
    895845    port.set_require( b_has_name )
     
    913863  end
    914864
    915   #=== Celltype# セルタイププラグイン (generate 指定子)
     865  #=== Celltype# セルタイププラグイン (generate 指定子)
    916866  def celltype_plugin
    917867
     
    927877
    928878    begin
    929       eval( eval_str )     # plugin を生成
     879      eval( eval_str )     # plugin を生成
    930880      plugin_object.set_locale @locale
    931881      @generate[ 2 ] = plugin_object
     
    939889  end
    940890
    941   #=== Celltype# celltype に新しい cell を追加
     891  #=== Celltype# celltype に新しい cell を追加
    942892  #cell:: Cell
    943   # 新しいセルをセルタイプに追加.
    944   # セルの構文解釈の最後でこのメソドを呼出される.
    945   # シングルトンセルが同じ linkunit に複数ないかチェック
     893  # 新しいセルをセルタイプに追加.
     894  # セルの構文解釈の最後でこのメソドを呼出される.
     895  # シングルトンセルが同じ linkunit に複数ないかチェック
    946896  def new_cell( cell )
    947     # Celltype では Cell の set_owner しない
    948     # シングルトンで、プロトタイプ宣言でない場合、コード生成対象リージョンの場合
     897    # Celltype では Cell の set_owner しない
     898    # シングルトンで、プロトタイプ宣言でない場合、コード生成対象リージョンの場合
    949899    if @singleton  then
    950900      @cell_list.each{ |c|
     
    960910  end
    961911
    962   #=== Celltype# セルタイプは INIB を持つか?
    963   # セルタイプが INIB を持つかどうかを判定する
    964   # $rom == false のとき:  INIB を持たない. (すべては CB に置かれる)
    965   # $rom == true のとき、INIB に置かれるものが一つでも存在すれば INIB を持つ
    966   #   INIB に置かれるものは
    967   #     attribute (omit のものは除く.現仕様では rw のものはない)
    968   #     size_is を伴う var
    969   #     å‘¼ã³å£ï¼ˆãŸã ã—、最適化で不要となるものは除く)
     912  #=== Celltype# セルタイプは INIB を持つか?
     913  # セルタイプが INIB を持つかどうかを判定する
     914  # $rom == false のとき:  INIB を持たない. (すべては CB に置かれる)
     915  # $rom == true のとき、INIB に置かれるものが一つでも存在すれば INIB を持つ
     916  #   INIB に置かれるものは
     917  #     attribute (omit のものは除く.現仕様では rw のものはない)
     918  #     size_is を伴う var
     919  #     呼び口(ただし、最適化で不要となるものは除く)
    970920  def has_INIB?
    971921#    print "name=#{@name} @n_attribute_ro=#{@n_attribute_ro}  @n_var_size_is=#{@n_var_size_is} @n_call_port=#{@n_call_port} @n_call_port_omitted_in_CB=#{@n_call_port_omitted_in_CB} @n_entry_port_array_ns=#{@n_entry_port_array_ns}\n"
     
    974924  end
    975925
    976   #=== Celltype# セルタイプは CB を持つか?
    977   # $rom == true のとき、いかのものが置かれる.それらの一つでも存在すれば CB を持つ
    978   #   size_is が指定されていない var
    979   #   rw 指定された attribute (現仕様では存在しない)
    980   # $rom == false のとき、いかのものが置かれる.それらの一つでも存在すれば CB を持つ
     926  #=== Celltype# セルタイプは CB を持つか?
     927  # $rom == true のとき、いかのものが置かれる.それらの一つでも存在すれば CB を持つ
     928  #   size_is が指定されていない var
     929  #   rw 指定された attribute (現仕様では存在しない)
     930  # $rom == false のとき、いかのものが置かれる.それらの一つでも存在すれば CB を持つ
    981931  #   attribute
    982932  #   var
    983   #   å‘¼ã³å£ï¼ˆãŸã ã—、最適化で不要となるものは除く)
     933  #   呼び口(ただし、最適化で不要となるものは除く)
    984934  def has_CB?
    985935    if $rom then
     
    991941  end
    992942
    993   #=== Celltype# SET_CB_INIB_POINTER, INITIALIZE_CB がå¿
    994 è¦ã‹
     943  #=== Celltype# SET_CB_INIB_POINTER, INITIALIZE_CB が必要か
    995944  def need_CB_initializer?
    996945    @n_var_init > 0 || has_CB?
    997946  end
    998947
    999   #=== Celltype# 逆require の結合を生成する
     948  #=== Celltype# 逆require の結合を生成する
    1000949  def create_reverse_require_join cell
    1001950    @port.each{ |p|
     
    1004953  end
    1005954
    1006   #=== Celltype# singleton セルを得る
    1007   #region:: Region   : singleton を探す Region
    1008   # 距離が最も近いものを返す
    1009   # mikan 本当は region の範囲の singleton を探すå¿
    1010 è¦ãŒã‚ã‚‹
     955  #=== Celltype# singleton セルを得る
     956  #region:: Region   : singleton を探す Region
     957  # 距離が最も近いものを返す
     958  # mikan 本当は region の範囲の singleton を探す必要がある
    1011959  def get_singleton_cell region
    1012960    cell = nil
    1013     dist = 999999999 # mikan 制限値(これは十分すぎるほどデカイが)
    1014     # require: celltype で指定
     961    dist = 999999999 # mikan 制限値(これは十分すぎるほどデカイが)
     962    # require: celltype で指定
    1015963    @cell_list.each{ |c|
    1016       # 到達可能で最も近いセルを探す(複数の singleton があるかもしれない)
     964      # 到達可能で最も近いセルを探す(複数の singleton があるかもしれない)
    1017965      d = region.distance( c.get_region )
    1018966      #debug
     
    1033981  end
    1034982
    1035   #=== Celltype# セルタイププラグインを得る
     983  #=== Celltype# セルタイププラグインを得る
    1036984  def get_celltype_plugin
    1037985    if @generate then
     
    10521000  end
    10531001
    1054   #=== Celltype# アクティブではないか
    1055   # このメソッドでは active の他に factory (singleton においては FACTORYを含む)がなければ inactive とする
     1002  #=== Celltype# アクティブではないか
     1003  # このメソッドでは active の他に factory (singleton においては FACTORYを含む)がなければ inactive とする
    10561004  def is_inactive?
    10571005    if @active == false && @factory_list.length == 0 &&
     
    10741022  end
    10751023
    1076   #=== Celltype# コード生成するå¿
    1077 è¦ãŒã‚るか判定
    1078   # セルの個数が 0 ならセルタイプコードは生成不要
     1024  #=== Celltype# コード生成する必要があるか判定
     1025  # セルの個数が 0 ならセルタイプコードは生成不要
    10791026  def need_generate?
    10801027    @n_cell_gen > 0
    10811028  end
    10821029
    1083   #=== Celltype# require 呼び口の結合を行う
     1030  #=== Celltype# require 呼び口の結合を行う
    10841031  # STAGE: S
    1085   # セルタイプの require 呼び口について、結合を行う
    1086   # セルが生成されないかチェックを行う
     1032  # セルタイプの require 呼び口について、結合を行う
     1033  # セルが生成されないかチェックを行う
    10871034  def set_require_join
    10881035    @require.each{ |req|
     
    11001047  end
    11011048
    1102   #=== Celltype# inline 受け口しかないか?
    1103   # 受け口が無い場合、すべての受け口が inline とはしない
     1049  #=== Celltype# inline 受け口しかないか?
     1050  # 受け口が無い場合、すべての受け口が inline とはしない
    11041051  def is_all_entry_inline?
    11051052    @n_entry_port == @n_entry_port_inline && @n_entry_port > 0
     
    11401087# @n_var:: int >= 0
    11411088# @n_var_size_is:: int >= 0     # of [size_is] specified cells # mikan count_is
    1142 # @n_var_omit:: int >= 0        # of [omit] specified  cells # mikan var の omit は有?
     1089# @n_var_omit:: int >= 0        # of [omit] specified  cells # mikan var の omit は有?
    11431090# @n_call_port:: int >= 0
    11441091# @n_call_port_array:: int >= 0
    1145 # @n_call_port_omitted_in_CB:: int >= 0   æœ€é©åŒ–で省略される呼び口
     1092# @n_call_port_omitted_in_CB:: int >= 0   最適化で省略される呼び口
    11461093# @n_entry_port:: int >= 0
    11471094# @n_entry_port_array:: int >= 0
    11481095    (indent+1).times { print "  " }
    11491096    puts "@n_entry_port_inline #{@n_entry_port_inline}"
    1150 # @n_cell:: int >= 0  コード生成の頭で算出する.意味解析段階では参ç
    1151 §ä¸å¯
    1152 # @id_base:: Integer : cell の ID の最小値(最大値は @id_base + @n_cell)
     1097# @n_cell:: int >= 0  コード生成の頭で算出する.意味解析段階では参照不可
     1098# @id_base:: Integer : cell の ID の最小値(最大値は @id_base + @n_cell)
    11531099
    11541100  end
     
    11561102
    11571103class Cell < NSBDNode # < Nestable
    1158 # @name:: Symbol : composite celltype のå†
    1159 å´ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã§ã¯å¤–のセル
    1160 # @global_name:: Symbol : C で使える名前(namespace を含む)
    1161 # @local_name:: str : cell celltype name { ... } の name
     1104# @name:: Symbol : composite celltype の内側のインスタンスでは外のセル
     1105# @global_name:: Symbol : C で使える名前(namespace を含む)
     1106# @local_name:: str : cell celltype name { ... } の name
    11621107# @celltype:: Celltype | CompositeCelltype
    11631108# @join_list:: NamedList
     
    11661111# @b_prototype:: bool:  prototype specified in current parsing cell. (@b_defined is used to determine whether definition done)
    11671112# @b_duplicate:: bool:  definition duplicate
    1168 # @b_checked::   bool:  set_definition_join が済んでいる場合 true
    1169 # @require_joined_list:: {cp_name=>true}:  set_require_join が済んでいる呼び口は true
     1113# @b_checked::   bool:  set_definition_join が済んでいる場合 true
     1114# @require_joined_list:: {cp_name=>true}:  set_require_join が済んでいる呼び口は true
    11701115# @f_ref:: refercenced from others
    1171 # @entry_array_max_subscript:: { @port=>Integer } : 受け口é
    1172 åˆ—のé
    1173 åˆ—添数の最大値(添数無し受け口é
    1174 åˆ—対応)
     1116# @entry_array_max_subscript:: { @port=>Integer } : 受け口配列の配列添数の最大値(添数無し受け口配列対応)
    11751117# @plugin::     Plugin: avialble if cell is generated by plugin generated cdl code.
    1176 # @referenced_port_list:: { Port => Integer } : 受け口の参ç
    1177 §æ•°
    1178 #                                               ã™ã¹ã¦ã®æ„å‘³è§£æž(through, composite展開)が終わった後に設定する
    1179 #                                               é€†require ポートに対して複数の結合がないかチェックする
    1180 # @generate:: [ Symbol, String, Plugin ]  = [ PluginName, option, Plugin ] Plugin は生成後に追加される
     1118# @referenced_port_list:: { Port => Integer } : 受け口の参照数
     1119#                                               すべての意味解析(through, composite展開)が終わった後に設定する
     1120#                                               逆require ポートに対して複数の結合がないかチェックする
     1121# @generate:: [ Symbol, String, Plugin ]  = [ PluginName, option, Plugin ] Plugin は生成後に追加される
    11811122#
    1182 # composite のためインスタンス変数
     1123# composite のためインスタンス変数
    11831124# @in_composite:: bool : true if in composite celltype
    11841125# @compositecelltypejoin_list:: NamedList : item= CompositeCelltypeJoin ( if @in_composite )
    11851126# @f_cloned:: bool : true if cloned (instantiate of composite consist cell)
    1186 # @my_clone:: Cell : Composite cell で in_composite = true の場合のみ有効(直前の clone を一時記憶)
    1187 # @cell_list:: Cell[local_name] : Composite cell で clone した後のリスト cell_list
    1188 # @cell_list2:: [ Cell ] : Composite cell で clone した後のリスト cell_list
    1189 #                          @cell_list2 は composite å†
    1190 ã§ã®å‡ºç¾é † 
     1127# @my_clone:: Cell : Composite cell で in_composite = true の場合のみ有効(直前の clone を一時記憶)
     1128# @cell_list:: Cell[local_name] : Composite cell で clone した後のリスト cell_list
     1129# @cell_list2:: [ Cell ] : Composite cell で clone した後のリスト cell_list
     1130#                          @cell_list2 は composite 内での出現順 
    11911131#
    1192 # region のためのインスタンス変数
    1193 # @region:: Region (属するregion)
     1132# region のためのインスタンス変数
     1133# @region:: Region (属するregion)
    11941134#
    1195 # allocator のためのインスタンス変数
     1135# allocator のためのインスタンス変数
    11961136# @alloc_list::  [ [ NORMAL_ALLOC, ep_name, func_name, param_name, expr ], ... ]
    1197 #   å—け口側のアロケータへの結合を記憶。以下のメソッドで追加される
    1198 #      set_specifier … cell 定義時にアロケータ指定されている場合
    1199 #      create_relay_allocator_join … リレーアロケータの場合
     1137#   受け口側のアロケータへの結合を記憶。以下のメソッドで追加される
     1138#      set_specifier … cell 定義時にアロケータ指定されている場合
     1139#      create_relay_allocator_join … リレーアロケータの場合
    12001140#
    1201 # ID のためのインスタンス変数(optimize.rb にて設定)
    1202 # @id:: Integer : コード生成直前に設定  (プロトタイプ宣言の場合は -1 のまま放置)
    1203 # @id_specified::Integer : 指定された id
     1141# ID のためのインスタンス変数(optimize.rb にて設定)
     1142# @id:: Integer : コード生成直前に設定  (プロトタイプ宣言の場合は -1 のまま放置)
     1143# @id_specified::Integer : 指定された id
    12041144# @restrict_list::{ entry_name => { func_name, [ region_name, ... ] } }
    12051145
    12061146=begin
    1207 # Cell クラスは、以下のものを扱う
    1208 # 1)普通のセル
    1209 # 2)composite セルタイプのセル
    1210 # 3)composite セルタイプのå†
    1211 å´ã®ã‚»ãƒ« (@in_composite)   # composite のå†
    1212 å´ã® composite セルタイプのセルもある
     1147# Cell クラスは、以下のものを扱う
     1148# 1)普通のセル
     1149# 2)composite セルタイプのセル
     1150# 3)composite セルタイプの内側のセル (@in_composite)   # composite の内側の composite セルタイプのセルもある
    12131151#
    1214 # 2) は CellOfComposite クラスとして分けたほうがよいかもしれない
    1215 #    expand (composite セルの展開) は CellOfComposite にのみå¿
    1216 è¦ãªãƒ¡ã‚½ãƒƒãƒ‰ã§ã‚ã‚‹
    1217 #    get_real_cell, get_real_port など @celltype.instance_of?( CompositeCelltype ) の判定がなくすっきりする
    1218 #    ただ、分離しても、メンテナンスすべき範囲が切り離されてしまい、忘れやすくなる問題とのトレードオフかも
     1152# 2) は CellOfComposite クラスとして分けたほうがよいかもしれない
     1153#    expand (composite セルの展開) は CellOfComposite にのみ必要なメソッドである
     1154#    get_real_cell, get_real_port など @celltype.instance_of?( CompositeCelltype ) の判定がなくすっきりする
     1155#    ただ、分離しても、メンテナンスすべき範囲が切り離されてしまい、忘れやすくなる問題とのトレードオフかも
    12191156#
    1220 # 3) は CellInCompoiste クラスとして分けたほうがよいかもしれない
    1221 #    @in_composite で判定している処理を切り離せる (上記 2) よりも分離は容易ではない)
    1222 #    clone_for_composite は CellInCompoiste にのみå¿
    1223 è¦ãªãƒ¡ã‚½ãƒƒãƒ‰ã§ã‚ã‚‹
    1224 #    ただし、clone 後に Cell, CellOfComposite に変化するå¿
    1225 è¦ãŒã‚るので、clone ではなく new する実è£
    1226 ã«å¤‰æ›´ã™ã‚‹å¿
    1227 è¦ãŒã‚ã‚‹
     1157# 3) は CellInCompoiste クラスとして分けたほうがよいかもしれない
     1158#    @in_composite で判定している処理を切り離せる (上記 2) よりも分離は容易ではない)
     1159#    clone_for_composite は CellInCompoiste にのみ必要なメソッドである
     1160#    ただし、clone 後に Cell, CellOfComposite に変化する必要があるので、clone ではなく new する実装に変更する必要がある
    12281161#
    12291162=end
     
    12351168  @@current_object = nil
    12361169
    1237   # 定義されたすべてのセル(出現順. namespace に影響されない)
    1238   @@cell_list = []     # composite のå†
    1239 éƒ¨ã®ã‚»ãƒ«ã‚’含まない
    1240   @@cell_list2 = []    # composite のå†
    1241 éƒ¨ã®ã‚»ãƒ«ã‚’含む (å
    1242 ƒã®ã‚»ãƒ«ã‚’含む)
    1243                        # 意味解析後 make_cell_list2 にて設定される
     1170  # 定義されたすべてのセル(出現順. namespace に影響されない)
     1171  @@cell_list = []     # composite の内部のセルを含まない
     1172  @@cell_list2 = []    # composite の内部のセルを含む (元のセルを含む)
     1173                       # 意味解析後 make_cell_list2 にて設定される
    12441174
    12451175  def self.push
     
    12581188
    12591189
    1260   # composite で clone されたもの(子孫まで含む)
    1261   # Join.change_rhs_port にて CompoisteCelltype å†
    1262 ã® Join の結合å
    1263 ˆã‚’変更する際に使用
     1190  # composite で clone されたもの(子孫まで含む)
     1191  # Join.change_rhs_port にて CompoisteCelltype 内の Join の結合先を変更する際に使用
    12641192  @@cloned_cell_list = {}
    1265   ### mikan BUG @@cloned_cell_list は composite の階層ごとに記憶していないため、同じ名前がå†
    1266 éƒ¨ã«ç¾ã‚Œã‚‹ã¨ã€ã†ã¾ãå‹•ä½œã—ない
    1267   # change_rhs_port の実è£
    1268 ã¯ã€ã“んな回りくどいことをするå¿
    1269 è¦ã¯ãªã‹ã£ãŸã€‚右辺に現れるセル名には、composite のセル名を前につなげるだけでよかった
     1193  ### mikan BUG @@cloned_cell_list は composite の階層ごとに記憶していないため、同じ名前が内部に現れると、うまく動作しない
     1194  # change_rhs_port の実装は、こんな回りくどいことをする必要はなかった。右辺に現れるセル名には、composite のセル名を前につなげるだけでよかった
    12701195
    12711196  def initialize( ct_path, in_composite = false )
     
    12731198    @region = Region.get_current
    12741199
    1275     # celltype のplugin/存在をチェック
     1200    # celltype のplugin/存在をチェック
    12761201    object = Namespace.find( ct_path )    #1
    12771202    if object == nil then
    1278       # mikan celltype の名前が不完å
    1279 ¨ "::ct1ct2" になる
     1203      # mikan celltype の名前が不完全 "::ct1ct2" になる
    12801204      cdl_error( "S1027 \'$1\' celltype not found" , ct_path.get_path_str )
    12811205    elsif ! object.instance_of?( Celltype ) && ! object.instance_of?( CompositeCelltype ) then
    1282       # mikan celltype の名前が不完å
    1283 ¨
     1206      # mikan celltype の名前が不完全
    12841207      cdl_error( "S1028 \'$1\' not celltype" , ct_path.get_path_str )
    12851208    else
     
    13291252    end
    13301253
    1331     # この時点ではプロトタイプか、定義か分らないが、自己参ç
    1332 §ã®ãŸã‚ã«ç™»éŒ²
    1333     # set_f_def で再度登録しなおす
    1334     # Celltype への登録は、end_of_parse で行う
     1254    # この時点ではプロトタイプか、定義か分らないが、自己参照のために登録
     1255    # set_f_def で再度登録しなおす
     1256    # Celltype への登録は、end_of_parse で行う
    13351257    if @in_composite then
    13361258      cell_prev = CompositeCelltype.find( name )
     
    13391261      end
    13401262    else
    1341       # cell_prev = Namespace.find( [ name ] )   # 親まで捜しにいく
     1263      # cell_prev = Namespace.find( [ name ] )   # 親まで捜しにいく
    13421264      cell_prev = Namespace.get_current.find( name )
    13431265      if cell_prev == nil then
    13441266        Namespace.new_cell( self )
    1345         set_namespace_path # @NamespacePath の設定
     1267        set_namespace_path # @NamespacePath の設定
    13461268      end
    13471269    end
     
    13501272      if ! cell_prev.instance_of?( Cell ) then
    13511273        cdl_error( "S1029 $1 mismatch with previous one" , name )
    1352         # celltype が一致しているか ?
     1274        # celltype が一致しているか ?
    13531275      elsif get_celltype != cell_prev.get_celltype then
    13541276        cdl_error( "S1030 $1: celltype mismatch with previous one" , name )
    13551277      else
    1356         # region が一致しているか?
     1278        # region が一致しているか?
    13571279        if ! cell_prev.get_region.equal? get_region then
    13581280          cdl_error( "S1031 $1 region \'$2\' mismatch  with previous one \'$3\'" , name, @region.get_name, cell_prev.get_region.get_name )
     
    13601282
    13611283        @@current_object = cell_prev
    1362         # この時点では、まだプロトタイプ宣言か定義か分らない
    1363         # 以前が定義であって、今回も定義の場合、重複エラーである
     1284        # この時点では、まだプロトタイプ宣言か定義か分らない
     1285        # 以前が定義であって、今回も定義の場合、重複エラーである
    13641286      end
    13651287    end
     
    13711293    dbgPrint "Cell new_cell: #{@global_name} #{@in_composite} #{self}\n"
    13721294
    1373     # å†
    1374 éƒ¨ã‚¢ãƒ­ã‚±ãƒ¼ã‚¿ã‚’ @alloc_list に追加
     1295    # 内部アロケータを @alloc_list に追加
    13751296    if @celltype.instance_of? CompositeCelltype then
    13761297      @celltype.get_internal_allocator_list.each{ |cell, cp_internal_name, port_name, fd_name, par_name, ext_alloc_ent|
    13771298        nsp = NamespacePath.new( @name, false )
    1378         rhs = Expression.new( [:OP_DOT, [:IDENTIFIER, nsp], Token.new( ext_alloc_ent.to_s.to_sym, nil, nil, nil ) ] )  #1 構文解析段階なので locale 不要
     1299        rhs = Expression.new( [:OP_DOT, [:IDENTIFIER, nsp], Token.new( ext_alloc_ent.to_s.to_sym, nil, nil, nil ) ] )  #1 構文解析段階なので locale 不要
    13791300
    13801301        @alloc_list << [:NORMAL_ALLOC,port_name,nil,fd_name,par_name,rhs]
     
    13841305  end
    13851306
    1386   #=== Cell# cell の定義
    1387   # 本体(join)の定義の直前に呼び出される
     1307  #=== Cell# cell の定義
     1308  # 本体(join)の定義の直前に呼び出される
    13881309  def self.new_def
    13891310    @@current_object.new_def
    13901311  end
    13911312
    1392   #=== Cell# cell の定義
    1393   # 本体(join)の定義の直前に呼び出される
    1394   # このメソッドは cell tCelltype Cell { };  '{', '}' の部分がある場合に呼出される
     1313  #=== Cell# cell の定義
     1314  # 本体(join)の定義の直前に呼び出される
     1315  # このメソッドは cell tCelltype Cell { };  '{', '}' の部分がある場合に呼出される
    13951316  def new_def
    13961317    set_specifier_list( Generator.get_statement_specifier )
    13971318
    1398     # prototype 指定子ないか
     1319    # prototype 指定子ないか
    13991320    if ! @b_prototype then
    1400       # 二重定義のチェック
     1321      # 二重定義のチェック
    14011322      if @b_defined == true then
    14021323        cdl_error( "S1032 $1: duplicate cell" , @name )
    14031324        dbgPrint "previous: #{@prev_locale[0]}: line #{@prev_locale[1]} '#{@name}' defined here\n"
    14041325
    1405         # セルの重複定義エラーの処置
    1406         # 前の定義は捨てる
     1326        # セルの重複定義エラーの処置
     1327        # 前の定義は捨てる
    14071328        @join_list = NamedList.new( nil, "in cell '#{@name}'" )
    14081329      end
     
    14171338  end
    14181339
    1419   #===  Cell# 新しい結合をチェック
     1340  #===  Cell# 新しい結合をチェック
    14201341  # STAGE:   P
    14211342  #
    1422   #join::  Join : 新しい結合
    1423   #b_regular:: bool : 通常の場所 (bnf.y.rb)からならば true, それ以外(allocator, require) では false
     1343  #join::  Join : 新しい結合
     1344  #b_regular:: bool : 通常の場所 (bnf.y.rb)からならば true, それ以外(allocator, require) では false
    14241345  def new_join( join, b_regular = false )
    14251346    join.set_owner self
    14261347
    1427     # composite の新文法対応.
    1428     # composite の中のセルで、attribute の定義である場合
    1429     # cell å†
    1430 ã® attr_ext = composite.attr; 構文を処理
     1348    # composite の新文法対応.
     1349    # composite の中のセルで、attribute の定義である場合
     1350    # cell 内の attr_ext = composite.attr; 構文を処理
    14311351    if @in_composite then
    14321352      if @celltype then
    1433         if @celltype.find(join.get_name).instance_of?( Decl ) then # mikan a::b で指定されていたものがエラーにならないかも
     1353        if @celltype.find(join.get_name).instance_of?( Decl ) then # mikan a::b で指定されていたものがエラーにならないかも
    14341354          rhs = join.get_rhs
    14351355          if rhs.instance_of? Expression then
    14361356            ele = rhs.get_elements
    1437             if( ele[0]==:IDENTIFIER )then    #  attr = attr_ext (右辺単é 
    1438 ï¼‰ã‹ï¼Ÿ #1
    1439               if( CompositeCelltype.has_attribute?(ele[1].get_name ) )then    # mikan a::b.ePort がエラーにならないかも
    1440                 ident = ele[1].get_name   # 右辺は attribute.
     1357            if( ele[0]==:IDENTIFIER )then    #  attr = attr_ext (右辺単項)か? #1
     1358              if( CompositeCelltype.has_attribute?(ele[1].get_name ) )then    # mikan a::b.ePort がエラーにならないかも
     1359                ident = ele[1].get_name   # 右辺は attribute.
    14411360              else
    1442                 # 右辺は attribute にないのであれば、定数のはず
    1443                 # 定数は下へ渡す (cell の join にする)
     1361                # 右辺は attribute にないのであれば、定数のはず
     1362                # 定数は下へ渡す (cell の join にする)
    14441363                ident = nil
    14451364              end
    14461365            else
    1447               if join.get_rhs.eval_const2(nil) == nil then   # 定数式ではないか?
    1448                 # 右辺が、単一のシンボルでない場合、現状は扱えない
     1366              if join.get_rhs.eval_const2(nil) == nil then   # 定数式ではないか?
     1367                # 右辺が、単一のシンボルでない場合、現状は扱えない
    14491368                cdl_error( "S1033 rhs expression is not supported. Only attribute is permitted on current version."  )
    14501369                return
    14511370              else
    1452                 # 定数は下へ渡す (cell の join にする)
     1371                # 定数は下へ渡す (cell の join にする)
    14531372                ident = nil
    14541373              end
     
    14561375
    14571376            if ident then
    1458               # attr = attr; のような参ç
    1459 §ã¯ã‚¨ãƒ©ãƒ¼ (a = composite.a とするå¿
    1460 è¦ãŒã‚ã‚‹)
     1377              # attr = attr; のような参照はエラー (a = composite.a とする必要がある)
    14611378              if @celltype.find( ident ) then
    14621379                cdl_error( "S1034 $1 : cannot refer to $2\'s attribute here. Use \'composite.$3\' to refer to composite celltype\'s" , ident, @celltype.get_name, ident )
     
    14641381            end
    14651382          elsif rhs.instance_of? Array then
    1466             if rhs[0] == :COMPOSITE then   # 右辺は composite.attr の形式
     1383            if rhs[0] == :COMPOSITE then   # 右辺は composite.attr の形式
    14671384              ident = rhs[1].to_sym
    14681385            else
    1469               ident = nil    # 右辺は { 10, -10 } の形式
     1386              ident = nil    # 右辺は { 10, -10 } の形式
    14701387            end
    14711388          else
    1472             ident = nil      # 右辺は C_EXP の形式
     1389            ident = nil      # 右辺は C_EXP の形式
    14731390          end
    14741391
    1475           # ident が見つかった(右辺は単一の ident)
     1392          # ident が見つかった(右辺は単一の ident)
    14761393          if ident then
    1477             # composite の旧文法の構文処理へ渡す.セル外の attr_ext = Cell.attr; 構文の処理に渡す
     1394            # composite の旧文法の構文処理へ渡す.セル外の attr_ext = Cell.attr; 構文の処理に渡す
    14781395            #                        export_name, internal_cell_name, internal_cell_elem_name
    1479             decl = CompositeCelltype.new_join( ident, @name, join.get_name, :ATTRIBUTE )  # mikan a::b.ePort がエラーにならないかも
     1396            decl = CompositeCelltype.new_join( ident, @name, join.get_name, :ATTRIBUTE )  # mikan a::b.ePort がエラーにならないかも
    14801397            if ! decl.instance_of? Decl then
    14811398              return
     
    14851402              return
    14861403            end
    1487             # 以下の旧文法実è£
    1488 ã«æ¸¡ã™ï¼Ž
    1489             # 旧文法では cell に初期値を与えることで、composite で属性の初期値を指定することができた
    1490             # attribute で指定された初期値を cell の属性として処理させる
     1404            # 以下の旧文法実装に渡す.
     1405            # 旧文法では cell に初期値を与えることで、composite で属性の初期値を指定することができた
     1406            # attribute で指定された初期値を cell の属性として処理させる
    14911407            join.change_rhs( ini )
    14921408          else
    1493             # ident がない.定数式
     1409            # ident がない.定数式
    14941410          end
    14951411        else
    1496           # celltype の属性として、この join の名前がない
    1497           # 以下の join.set_definition の中でエラーとなる
     1412          # celltype の属性として、この join の名前がない
     1413          # 以下の join.set_definition の中でエラーとなる
    14981414        end
    14991415      else
    1500         return    # celltype がない.すでにエラー
     1416        return    # celltype がない.すでにエラー
    15011417      end
    15021418    elsif join.get_rhs.instance_of? Array then
    15031419      rhs = join.get_rhs
    15041420      if rhs[0] == :COMPOSITE then
    1505         # composite の中でないのに attr = composite.attr が使われた
     1421        # composite の中でないのに attr = composite.attr が使われた
    15061422        cdl_error( "S1035 composite : cannot specify out of composite celltype definition"  )
    15071423        return
     
    15091425    end
    15101426
    1511     # 以下 composite 文法変更前からある処理
    1512 
    1513     # 既に左辺が同じ名前の初期化が存在するか?
    1514     j = @join_list.get_item( join.get_name )   # mikan NamespacePath がパスを持っている
    1515     if j.instance_of? Join then    # mikan ここでは j が Join or Nil 以外は、ないはず
     1427    # 以下 composite 文法変更前からある処理
     1428
     1429    # 既に左辺が同じ名前の初期化が存在するか?
     1430    j = @join_list.get_item( join.get_name )   # mikan NamespacePath がパスを持っている
     1431    if j.instance_of? Join then    # mikan ここでは j が Join or Nil 以外は、ないはず
    15161432
    15171433      # debug
    15181434      dbgPrint "add_array_member: #{@name} port: #{j.get_port_name} rhs: #{j.get_rhs}, #{join.get_port_name} #{join.get_rhs}\n"
    1519       # 呼び口é
    1520 åˆ—(であると仮定して)要素を追加
     1435      # 呼び口配列(であると仮定して)要素を追加
    15211436      j.add_array_member join
    15221437
     
    15261441    end
    15271442
    1528     # if get_owner then   # error S1030 発生時 get_owner が見つからなくて例外になる
     1443    # if get_owner then   # error S1030 発生時 get_owner が見つからなくて例外になる
    15291444    #   dbgPrint "Cell#new_join: #{get_owner.get_name}.#{@name}\n"
    15301445    # else
     
    15401455  end
    15411456
    1542   #=== Cell.新しい逆結合
     1457  #=== Cell.新しい逆結合
    15431458  def self.new_reverse_join( reverse_join )
    15441459    @@current_object.new_reverse_join( reverse_join )
    15451460  end
    15461461
    1547   #=== Cell#新しい逆結合
     1462  #=== Cell#新しい逆結合
    15481463  def new_reverse_join( reverse_join )
    15491464    dbgPrint( "new_reverse_join name=#{reverse_join.get_name}\n")
     
    15701485  end
    15711486
    1572   #=== Cell#逆結合から結合を生成
     1487  #=== Cell#逆結合から結合を生成
    15731488  # STAGE: S
    15741489  def create_reverse_join
     
    15801495#      @reverse_join_list.get_items.each{ |rj|
    15811496      @reverse_join_list.each{ |rj|
    1582         # 逆結合のæƒ
    1583 å ±ã‚’å¾—ã‚‹
     1497        # 逆結合の情報を得る
    15841498        ep_name = rj.get_name
    15851499        ep_subscript, cp_cell_nsp, cp_name, cp_subscript = rj.get_rhs_cell_and_port
    15861500
    1587         # 呼び口側のセルと、そのセルタイプ
     1501        # 呼び口側のセルと、そのセルタイプ
    15881502        cell = Namespace.find cp_cell_nsp
    15891503        if ! cell.instance_of? Cell then
     
    16161530  end
    16171531
    1618   #=== Cell# cell å†
    1619 ã«è¨˜è¿°ã™ã‚‹å‘¼ã³å£ã®å¤–部結合
    1620   # internal_cell_elem_name:: string : 呼び口名
    1621   # export_name:: string: composite の外部にå
    1622 ¬é–‹ã™ã‚‹å‘¼ã³å£å
    1623   #  呼び口を外部結合する.
    1624   #  このメソッドは、composite の中の cell でしか呼ばれない.
     1532  #=== Cell# cell 内に記述する呼び口の外部結合
     1533  # internal_cell_elem_name:: string : 呼び口名
     1534  # export_name:: string: composite の外部に公開する呼び口名
     1535  #  呼び口を外部結合する.
     1536  #  このメソッドは、composite の中の cell でしか呼ばれない.
    16251537  def external_join( internal_cell_elem_name, export_name, b_composite )
    16261538
    1627     # cCall => composite.cCall; ではないか?
     1539    # cCall => composite.cCall; ではないか?
    16281540    if( b_composite == false )then
    1629       # cCall => cCall; のような場合
     1541      # cCall => cCall; のような場合
    16301542      if @celltype.find( export_name ) then
    16311543        cdl_error( "S1036 $1 : cannot refer to $2\'s here. Use \'composite.$3\' to refer to composite celltype\'s" , export_name, @celltype.get_name, export_name )
    16321544      end
    16331545    end
    1634     # composite の旧文法における、cell 外の cCall = Cell.cCall; の構文処理に渡す
     1546    # composite の旧文法における、cell 外の cCall = Cell.cCall; の構文処理に渡す
    16351547    CompositeCelltype.new_join( export_name, @name,  internal_cell_elem_name, :CALL )
    16361548  end
     
    16441556
    16451557  def end_of_parse f_def
    1646     if @b_prototype then  # prototype 指定子あったか?
    1647       f_def = false       # プロトタイプ宣言とする
     1558    if @b_prototype then  # prototype 指定子あったか?
     1559      f_def = false       # プロトタイプ宣言とする
    16481560      @b_prototype = false
    16491561    end
    16501562    if f_def == false then
    1651       # cell tCelltype Cell; の形式の場合
    1652       # f_def == true の場合 new_def で、呼出される
     1563      # cell tCelltype Cell; の形式の場合
     1564      # f_def == true の場合 new_def で、呼出される
    16531565      set_specifier_list( Generator.get_statement_specifier )
    16541566    end
     
    16601572  end
    16611573
    1662   #=== Cell# プロトタイプ宣言(false)か定義(true)かを設定
    1663   #    このメソッドは構文解釈の最後に呼出される
     1574  #=== Cell# プロトタイプ宣言(false)か定義(true)かを設定
     1575  #    このメソッドは構文解釈の最後に呼出される
    16641576  #f_def::     bool     false if prototype, true if definition
    16651577  def set_f_def f_def
     
    16801592    @f_ref = true
    16811593
    1682     # composite のå†
    1683 éƒ¨ã‚»ãƒ«ã‚’参ç
    1684 §ã•ã‚ŒãŸã“とにする
    1685     # 今のところ問題ないが、未参ç
    1686 §ã§ã‚るべきものまで参ç
    1687 §ã•ã‚ŒãŸã“とになる
     1594    # composite の内部セルを参照されたことにする
     1595    # 今のところ問題ないが、未参照であるべきものまで参照されたことになる
    16881596    if @cell_list then
    16891597      @cell_list.each{ |cn,cell|
     
    16931601  end
    16941602
    1695   #=== Cell# cell の指定子を設定
     1603  #=== Cell# cell の指定子を設定
    16961604  # STAGE:  B
    16971605  #
    1698   #    bnf.y.rb の statement_specifiler_list
     1606  #    bnf.y.rb statement_specifiler_list
    16991607  #spec_list::      [ :ALLOCATOR, [ [ :NORMAL_ALLOC, ep_name, subscript, func_name, param_name, expr ], ... ] ]
    17001608  #                     s[0]      s[1]   a[0]        a[1]       a[2]        a[3]     a[4]       a[5]
    1701   #    セルに指定されたアロケータ指定子
    1702   #    a[1] の subscript はこのメソッドの中で Expression から Integer に評価される
    1703   #    受け口側に生成されるアロケータ呼び口の結合をå†
    1704 éƒ¨ç”Ÿæˆã™ã‚‹
    1705   #    呼び口側は Port の create_allocator_join にて生成
    1706   #    リレーアロケータの場合 create_relay_allocator_join にて生成す
     1609  #    セルに指定されたアロケータ指定子
     1610  #    a[1] の subscript はこのメソッドの中で Expression から Integer に評価される
     1611  #    受け口側に生成されるアロケータ呼び口の結合を内部生成する
     1612  #    呼び口側は Port の create_allocator_join にて生成
     1613  #    リレーアロケータの場合 create_relay_allocator_join にて生成す
    17071614  def set_specifier_list( spec_list )
    1708     return if spec_list == nil  # 空ならば何もしない
     1615    return if spec_list == nil  # 空ならば何もしない
    17091616
    17101617    dbgPrint( "set_spec_list: #{@name}\n" )
    1711     b_generate = false   # generate が指定された
     1618    b_generate = false   # generate が指定された
    17121619
    17131620    spec_list.each{ |s|
    17141621      case s[0]             # statement_specifier
    17151622      when :ALLOCATOR       # [allocator(ePort.func.param=allocCell.eA,ePort.func2.param=allocCell.eA)]
    1716         s[1].each { |a|     # alloc_list : allocator のå†
    1717 éƒ¨ã® ',' で区切られた部分のé
    1718 åˆ—
    1719           cp_name = :"#{a[0+1]}_#{a[2+1]}_#{a[3+1]}"    # アロケータ呼び口の名前:'=' の左辺を '.' に変えて '_' で連結
     1623        s[1].each { |a|     # alloc_list : allocator の内部の ',' で区切られた部分の配列
     1624          cp_name = :"#{a[0+1]}_#{a[2+1]}_#{a[3+1]}"    # アロケータ呼び口の名前:'=' の左辺を '.' に変えて '_' で連結
    17201625          # p "#{a[0]} #{a[0+1]} #{a[2+1]} #{a[3+1]} #{cp_name}"
    17211626          if a[1+1] then
     
    17251630            subscript = nil
    17261631          end
    1727           # アロケータ呼び口の結合を生成
    1728           join = Join.new( cp_name, subscript, a[4+1] )   # 構文解析段階なので locale 不要
     1632          # アロケータ呼び口の結合を生成
     1633          join = Join.new( cp_name, subscript, a[4+1] )   # 構文解析段階なので locale 不要
    17291634          dbgPrint( "new allocator join #{cp_name} #{subscript} #{a[4+1]}\n" )
    17301635          Cell.new_join( join )
     
    17721677  def get_allocator_list
    17731678
    1774     # 意味チェック(set_definition)されていない?
    1775     # relay アロケータの場合、セルの意味チェックが行われていないと、@alloc_list が完成しない
     1679    # 意味チェック(set_definition)されていない?
     1680    # relay アロケータの場合、セルの意味チェックが行われていないと、@alloc_list が完成しない
    17761681    if @b_checked == false then
    17771682      set_definition_join
     
    17841689  end
    17851690
    1786   #=== id 指定子の値を設定
    1787   # このメソッドは、プラグインで cell の生成順序を制御したい場合のために設けた
    1788   # 通常の id 指定子では使っていない
     1691  #=== id 指定子の値を設定
     1692  # このメソッドは、プラグインで cell の生成順序を制御したい場合のために設けた
     1693  # 通常の id 指定子では使っていない
    17891694  def set_specified_id id
    17901695    if Integer( id ) != id || id <= 0 then
     
    17971702  end
    17981703
    1799   #=== Cell# セルタイププラグイン (generate 指定子)
     1704  #=== Cell# セルタイププラグイン (generate 指定子)
    18001705  def cell_plugin
    18011706
     
    18111716
    18121717    begin
    1813       eval( eval_str )     # plugin を生成
     1718      eval( eval_str )     # plugin を生成
    18141719      plugin_object.set_locale @locale
    18151720      @generate[ 2 ] = plugin_object
     
    18271732  end
    18281733
    1829   #=== Cell# cell を composite セルタイプのセル用に clone する
    1830   #name::        string : 親 cell の名前  (cell tComposite cell1 での cell1)
    1831   #global_name:: string : 親 cell の global_name
    1832   #join_array::  Join[] : composite の cell の join で、この cell に対応するもの
    1833   #ct_name::     string : 親セルのセルタイプ名
    1834   #region::      Region : å
    1835 ƒã®ã‚»ãƒ«ãŒå±žã™ã‚‹ region
    1836   #このメソッドは CompositeCelltype の expand から呼出される
     1734  #=== Cell# cell を composite セルタイプのセル用に clone する
     1735  #name::        string : 親 cell の名前  (cell tComposite cell1 での cell1)
     1736  #global_name:: string : 親 cell の global_name
     1737  #join_array::  Join[] : composite の cell の join で、この cell に対応するもの
     1738  #ct_name::     string : 親セルのセルタイプ名
     1739  #region::      Region : 元のセルが属する region
     1740  #このメソッドは CompositeCelltype の expand から呼出される
    18371741  def clone_for_composite( name, global_name, namespacePath, join_array, ct_name, region, plugin, locale )
    18381742
     
    18431747    @@cloned_cell_list[ self ] = @my_clone
    18441748
    1845     # clone したセルのå†
    1846 éƒ¨ã«æŒã¤åå‰æƒ
    1847 å ±ã‚’調整する
     1749    # clone したセルの内部に持つ名前情報を調整する
    18481750
    18491751    @my_clone.set_cloned( name, global_name, namespacePath, join_array, ct_name, region, plugin, locale )
    18501752
    1851     # @celltype == nil は以前にセルタイプ未定義エラー
     1753    # @celltype == nil は以前にセルタイプ未定義エラー
    18521754    if @b_defined == true && @celltype != nil then
    18531755      if @celltype.instance_of?( Celltype ) then
    1854         # celltype に登録(コード生成の対象となる)
     1756        # celltype に登録(コード生成の対象となる)
    18551757        @celltype.new_cell( @my_clone )
    18561758      end
     
    18601762  end
    18611763
    1862   #=== Cell# clone されたセルのå†
    1863 éƒ¨ã«æŒã¤åå‰æƒ
    1864 å ±ã‚’調整する
    1865   #name::        string : 親 cell の名前  (cell tComposite cell1 での cell1)
    1866   #global_name:: string : 親 cell の global_name
    1867   #join_array::  Join[] : composite の cell の join で、この cell に対応するもの
    1868   #parent_ct_name:: string : 親セルのセルタイプ名(composite セルタイプ)
    1869   #  このメソッドはすぐ上の clone_for_composite から呼出され、clone されたセルを整える
     1764  #=== Cell# clone されたセルの内部に持つ名前情報を調整する
     1765  #name::        string : 親 cell の名前  (cell tComposite cell1 での cell1)
     1766  #global_name:: string : 親 cell の global_name
     1767  #join_array::  Join[] : composite の cell の join で、この cell に対応するもの
     1768  #parent_ct_name:: string : 親セルのセルタイプ名(composite セルタイプ)
     1769  #  このメソッドはすぐ上の clone_for_composite から呼出され、clone されたセルを整える
    18701770  def set_cloned( name, global_name, namespacePath, join_array, parent_ct_name, region, plugin, locale )
    18711771
     
    18841784    @f_cloned = true
    18851785
    1886     # Namespace.new_cell( self )  # mikan namespace 対応
    1887     region.new_cell( self )  # mikan  namespace に cell を置けないことを仮定
    1888 
    1889     # join_list : NamedList の clone を作る
     1786    # Namespace.new_cell( self )  # mikan namespace 対応
     1787    region.new_cell( self )  # mikan  namespace に cell を置けないことを仮定
     1788
     1789    # join_list : NamedList の clone を作る
    18901790    if @celltype then
    18911791      dbgPrint "set_cloned: #{@celltype.get_name} #{@name} #{region.get_name}\n"
     
    19001800    @cell_list2 = []
    19011801
    1902     # このセルのグローバル名を与える
    1903     # C_EXP の$id$ 置換はこのセルの名前になる
     1802    # このセルのグローバル名を与える
     1803    # C_EXP の$id$ 置換はこのセルの名前になる
    19041804    join_array.each { |j|
    19051805      @join_list.change_item j
    19061806    }
    19071807
    1908     # clone しようとするセルが composit セルタイプ?
     1808    # clone しようとするセルが composit セルタイプ?
    19091809    if @celltype.instance_of?( CompositeCelltype ) then
    1910       # composite cell を再帰的に展開
     1810      # composite cell を再帰的に展開
    19111811      @cell_list, @cell_list2 = @celltype.expand( @name, @global_name, @NamespacePath, @join_list, @region, @plugin, @locale )
    19121812    end
     
    19141814  end
    19151815
    1916   #=== Cell# clone された cell の join_list の右辺の変更
    1917   #  呼び口の右辺の cell を他の clone された cell に置換え
     1816  #=== Cell# clone された cell の join_list の右辺の変更
     1817  #  呼び口の右辺の cell を他の clone された cell に置換え
    19181818  def change_rhs_port
    19191819
     
    19271827    if @celltype.instance_of?( CompositeCelltype ) then
    19281828
    1929       # å
    1930 ¥ã‚Œå­ã®ã‚»ãƒ«ã«ã¤ã„ても変更
     1829      # 入れ子のセルについても変更
    19311830      @cell_list.each{ |name,c|
    19321831        c.change_rhs_port
     
    19671866  end
    19681867
    1969   #=== Cell# 生成されるセルか?
    1970   # 最適化、コード生成中に、対象となる region に属する場合 true を返す
     1868  #=== Cell# 生成されるセルか?
     1869  # 最適化、コード生成中に、対象となる region に属する場合 true を返す
    19711870  def is_generate?
    19721871    if $generating_region == nil then
    1973       # 構文解釈、意味解析段階で呼ばれると例外発生
     1872      # 構文解釈、意味解析段階で呼ばれると例外発生
    19741873      raise "is_generate? called before optimizing"
    19751874    end
     
    19831882  end
    19841883
    1985   #=== Cell# composite å†
    1986 éƒ¨ã®è¤‡è£½ã•ã‚ŒãŸã‚»ãƒ«ã‹ï¼Ÿ
    1987   # composite 定義のå†
    1988 éƒ¨ã®ã‚»ãƒ« (@in_composite = true) ではない
     1884  #=== Cell# composite 内部の複製されたセルか?
     1885  # composite 定義の内部のセル (@in_composite = true) ではない
    19891886  def is_cloned?
    19901887    @f_cloned
    19911888  end
    19921889
    1993   #=== Cell# composite å†
    1994 éƒ¨ã®ã‚»ãƒ«ã‹ï¼Ÿ
     1890  #=== Cell# composite 内部のセルか?
    19951891  def is_in_composite?
    19961892    @in_composite
    19971893  end
    19981894
    1999   # composite cell の port に対応するå†
    2000 éƒ¨ã® cell の port の名前(リンク時にå¿
    2001 è¦ãªåå‰ï¼‰
     1895  # composite cell の port に対応する内部の cell の port の名前(リンク時に必要な名前)
    20021896  def get_real_global_name port_name
    20031897    if @celltype.instance_of?( CompositeCelltype ) then
     
    20271921  end
    20281922
    2029   #=== Cell# セルの受け口 port_name に対する実際のセル名、受け口名を '_' で連結
    2030   #    namespace 名 + '_' + セル名 + '_' + 受け口名   ï¼ˆã“のセルが composite ならば展開後のセル名、受け口名)
     1923  #=== Cell# セルの受け口 port_name に対する実際のセル名、受け口名を '_' で連結
     1924  #    namespace 名 + '_' + セル名 + '_' + 受け口名   (このセルが composite ならば展開後のセル名、受け口名)
    20311925  def get_real_global_port_name port_name
    20321926
    2033     # composite か?
     1927    # composite か?
    20341928    if @celltype.instance_of?( CompositeCelltype ) then
    20351929
     
    20421936      }
    20431937
    2044       # セルタイプå†
    2045 ã§ port_name の CompositeCelltypeJoin を探す(コード生成段階ではå¿
    2046 ãšè¦‹ã¤ã‹ã‚‹ï¼‰
     1938      # セルタイプ内で port_name の CompositeCelltypeJoin を探す(コード生成段階では必ず見つかる)
    20471939      cj = @celltype.find_export( port_name )
    20481940
     
    20501942      dbgPrint "   composite join name: #{cj.get_name}  cell: #{cj.get_cell_name}  cell elem: #{cj.get_cell_elem_name}\n"
    20511943
    2052       # composite のå†
    2053 éƒ¨ã®ã‚»ãƒ«ã«å¯¾ã—再帰的に get_real_global_port_name を適用
     1944      # composite の内部のセルに対し再帰的に get_real_global_port_name を適用
    20541945      name = @cell_list[ "#{cj.get_cell_name}" ].get_real_global_port_name( cj.get_cell_elem_name )
    20551946      return name
     
    20631954  end
    20641955
    2065   #=== Cell# PORT (celltype の定義) を得る
     1956  #=== Cell# PORT (celltype の定義) を得る
    20661957  def get_real_port( port_name )
    20671958
    2068     # composite か?
     1959    # composite か?
    20691960    if @celltype.instance_of?( CompositeCelltype ) then
    20701961
    2071       # セルタイプå†
    2072 ã§ port_name の CompositeCelltypeJoin を探す(コード生成段階ではå¿
    2073 ãšè¦‹ã¤ã‹ã‚‹ï¼‰
     1962      # セルタイプ内で port_name の CompositeCelltypeJoin を探す(コード生成段階では必ず見つかる)
    20741963      cj = @celltype.find_export( port_name )
    20751964
    2076       # composite のå†
    2077 éƒ¨ã®ã‚»ãƒ«ã«å¯¾ã—再帰的に get_real_port を適用
     1965      # composite の内部のセルに対し再帰的に get_real_port を適用
    20781966      port = @cell_list[ "#{cj.get_cell_name}" ].get_real_port( cj.get_cell_elem_name )
    20791967      return port
     
    20841972  end
    20851973
    2086   #=== Cell# cell を得る
    2087   #    composite でなければ自分自身を返す
     1974  #=== Cell# cell を得る
     1975  #    composite でなければ自分自身を返す
    20881976  def get_real_cell( port_name )
    20891977
    2090     # composite か?
     1978    # composite か?
    20911979    if @celltype.instance_of?( CompositeCelltype ) then
    20921980
    2093       # セルタイプå†
    2094 ã§ port_name の CompositeCelltypeJoin を探す(コード生成段階ではå¿
    2095 ãšè¦‹ã¤ã‹ã‚‹ï¼‰
     1981      # セルタイプ内で port_name の CompositeCelltypeJoin を探す(コード生成段階では必ず見つかる)
    20961982      cj = @celltype.find_export( port_name )
    20971983
    2098       # composite のå†
    2099 éƒ¨ã®ã‚»ãƒ«ã«å¯¾ã—再帰的に get_real_port を適用
     1984      # composite の内部のセルに対し再帰的に get_real_port を適用
    21001985      cell = @cell_list[ "#{cj.get_cell_name}" ].get_real_cell( cj.get_cell_elem_name )
    21011986      return cell
     
    21071992
    21081993
    2109   #=== Cell# 受け口のport の参ç
    2110 §ã‚«ã‚¦ãƒ³ãƒˆã‚’アップする
    2111   #port_name:: Symbol  : ポート名
     1994  #=== Cell# 受け口のport の参照カウントをアップする
     1995  #port_name:: Symbol  : ポート名
    21121996  def port_referenced port
    21131997    if @referenced_port_list[ port ] then
     
    21172001    end
    21182002
    2119     # composite か?
     2003    # composite か?
    21202004    if @celltype.instance_of?( CompositeCelltype ) then
    21212005
    2122       # セルタイプå†
    2123 ã§ port_name の CompositeCelltypeJoin を探す(コード生成段階ではå¿
    2124 ãšè¦‹ã¤ã‹ã‚‹ï¼‰
     2006      # セルタイプ内で port_name の CompositeCelltypeJoin を探す(コード生成段階では必ず見つかる)
    21252007      cj = @celltype.find_export( port.get_name )
    21262008
    21272009      dbgPrint " port_referenced: #{@celltype.get_name} #{@name} cj=#{cj&&(cj.get_name)||"nil"}\n"
    21282010
    2129       if cj then  # 既にエラー
    2130         # composite のå†
    2131 éƒ¨ã®ã‚»ãƒ«ã«å¯¾ã—再帰的に get_real_port を適用
     2011      if cj then  # 既にエラー
     2012        # composite の内部のセルに対し再帰的に get_real_port を適用
    21322013        cell = @cell_list[ "#{cj.get_cell_name}" ]
    21332014        if cell && cell.get_celltype then
     
    21812062  end
    21822063
    2183   #=== Cell# 受け口é
    2184 åˆ—の添数の最大値を設定
     2064  #=== Cell# 受け口配列の添数の最大値を設定
    21852065  def set_entry_port_max_subscript( port, num )
    21862066    dbgPrint( "set_entry_port_max_subscript: #{@name}.#{port.get_name}: #{num}\n" )
     
    21932073  end
    21942074
    2195   #=== Cell# composite のå†
    2196 å´ã‚»ãƒ«ã®å—け口é
    2197 åˆ—の添数の最大値を設定
     2075  #=== Cell# composite の内側セルの受け口配列の添数の最大値を設定
    21982076  def set_entry_inner_port_max_subscript( port, num )
    2199     if @cell_list == nil then   # mikan これって問題ない?
    2200       return    # プロトタイプ宣言しかされていなくて、å†
    2201 å´ã‚»ãƒ«ãŒå±•é–‹ã•ã‚Œã¦ã„ない
    2202     end
    2203 
    2204     # composite のå†
    2205 å´ã®ã‚»ãƒ«ã«ä¼æ’­
     2077    if @cell_list == nil then   # mikan これって問題ない?
     2078      return    # プロトタイプ宣言しかされていなくて、内側セルが展開されていない
     2079    end
     2080
     2081    # composite の内側のセルに伝播
    22062082    if @celltype.instance_of? CompositeCelltype then
    22072083      cj = @celltype.find_export port.get_name
     
    22172093  end
    22182094
    2219   #=== Cell# 受け口é
    2220 åˆ—の添数の最大値を返す
    2221   # 長さは +1 する
    2222   # 1つもない場合は -1 を返す
     2095  #=== Cell# 受け口配列の添数の最大値を返す
     2096  # 長さは +1 する
     2097  # 1つもない場合は -1 を返す
    22232098  def get_entry_port_max_subscript( port )
    22242099    subscript = @entry_array_max_subscript[port]
     
    22292104  end
    22302105
    2231   #=== Cell# リレーアロケータの結合を生成
     2106  #=== Cell# リレーアロケータの結合を生成
    22322107  # STAGE: S
    2233   # 呼び口側の結合をå
    2234 ƒã«å—け口側の結合を生成
     2108  # 呼び口側の結合を元に受け口側の結合を生成
    22352109  def create_relay_allocator_join
    22362110
    2237     # celltype がなければチェックしない(既にエラー)
     2111    # celltype がなければチェックしない(既にエラー)
    22382112    return if @celltype == nil
    22392113
    2240     # relay allocator を生成
     2114    # relay allocator を生成
    22412115    @celltype.get_port_list.each { |p|
    22422116      ail = p.get_allocator_instance
     
    22442118        dbgPrint "create_relay_allocator_join: #{@name}, #{p.get_name}\n"
    22452119        if p.get_array_size then
    2246           # mikan relay allocator が array に対応できてもよいのでは?
     2120          # mikan relay allocator が array に対応できてもよいのでは?
    22472121          cdl_error( "S1040 array not supported for relay allocator"  )
    22482122          next
     
    22522126          if ai2[0] == :RELAY_ALLOC then
    22532127            dbgPrint "create_relay_allocator_join: #{@name}, #{name}\n"
    2254             # 呼び口側の結合を取り出す
     2128            # 呼び口側の結合を取り出す
    22552129            ja = @join_list.get_item( :"#{ai2[3]}_#{ai2[4]}_#{ai2[5]}" )
    22562130            if ja == nil then
    2257               # 見つからない場合
     2131              # 見つからない場合
    22582132              found = false
    22592133             
    2260               # composite å†
    2261 ã§å¤–部に結合されているか
     2134              # composite 内で外部に結合されているか
    22622135              if @in_composite then
    22632136                @compositecelltypejoin_list.get_items.each { |cj|
     
    22762149                cdl_error( "S1041 \'$1_$2_$3\': not joined. cannot create internal join for relay allocator" , ai2[3], ai2[4], ai2[5] )
    22772150                print( "      In cell #{get_name}\n" )
    2278                 # join が未結合であることのエラーは二度でる (S1043)
     2151                # join が未結合であることのエラーは二度でる (S1043)
    22792152              end
    2280               next    # 打ち切る
     2153              next    # 打ち切る
    22812154            end
    22822155
    22832156            b_export = false
    2284             # composite å†
    2285 ã®ã‚»ãƒ«ã§ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã•ã‚Œã¦ã„るかチェック
    2286             #  mikan エクスポート側と、こちら側で、リレーå
    2287 ˆãŒä¸€è‡´ã™ã‚‹ã‹ãƒã‚§ãƒƒã‚¯ãŒå¿
    2288 è¦
     2157            # composite 内のセルでエクスポートされているかチェック
     2158            #  mikan エクスポート側と、こちら側で、リレー先が一致するかチェックが必要
    22892159            if @compositecelltypejoin_list then
    2290               # export されているか調べる
     2160              # export されているか調べる
    22912161              @compositecelltypejoin_list.get_items.each{ |cj|
    2292                 # 属性名と composite の export する名前は一致するか
     2162                # 属性名と composite の export する名前は一致するか
    22932163                if p.get_name == cj.get_cell_elem_name then
    22942164                  print "export : #{p.get_name}\n"
    2295                   b_export = true    # 属性は export されているので、とりあえず未初期化とはしない
     2165                  b_export = true    # 属性は export されているので、とりあえず未初期化とはしない
    22962166                  break
    22972167                end
     
    23002170            end
    23012171
    2302             # mikan é
    2303 åˆ—
     2172            # mikan 配列
    23042173            am = nil
    23052174            if am then
     
    23082177                subscript = ja2.get_subscript
    23092178                if b_export == false then
    2310                   # CompositeCelltype の場合、å†
    2311 å´ã®ã‚»ãƒ«ã§ç”Ÿæˆã•ã›ã‚‹
     2179                  # CompositeCelltype の場合、内側のセルで生成させる
    23122180                  join = Join.new( :"#{p.get_name}_#{ai2[1]}_#{ai2[2]}", subscript, rhs, @loacle )
    23132181                  # p ( "#{p.get_name}_#{ai2[1]}_#{ai2[2]}", subscript, rhs )
    23142182                  new_join( join )
    23152183                  join.set_definition( @celltype.find(join.get_name) )
    2316                   # mikan relay mismatch チェックができていない(下方を参ç
    2317 §ï¼‰
     2184                  # mikan relay mismatch チェックができていない(下方を参照)
    23182185                end
    23192186                @alloc_list << [ :NORMAL_ALLOC, p.get_name, subscript, ai2[1], ai2[2], rhs ]
     
    23212188            else
    23222189              if b_export == false then
    2323                 # CompositeCelltype の場合、å†
    2324 å´ã®ã‚»ãƒ«ã§ç”Ÿæˆã•ã›ã‚‹
     2190                # CompositeCelltype の場合、内側のセルで生成させる
    23252191                join = Join.new( :"#{p.get_name}_#{ai2[1]}_#{ai2[2]}", nil, ja.get_rhs, @locale )
    23262192                new_join( join )
     
    23322198                                      "#{p.get_name}_#{ai2[1]}_#{ai2[2]}",
    23332199                                      "#{ai2[3]}_#{ai2[4]}_#{ai2[5]}" )
    2334                     # 本当は composite の呼び口と受け口の間で行うべきだが、å†
    2335 éƒ¨ã§å¤šæ®µæŽ¥ç¶šã•ã‚Œã¦ã„る場合
     2200                    # 本当は composite の呼び口と受け口の間で行うべきだが、内部で多段接続されている場合
    23362201                  else
    23372202                    dbgPrint "relay success:  #{p.get_name}_#{ai2[1]}_#{ai2[2]}=>#{ai2[3]}_#{ai2[4]}_#{ai2[5]} #{jr.get_rhs_cell2.get_name}.#{jr.get_rhs_port2} \n"
     
    23482213  end
    23492214
    2350   #=== Cell# @@cell_list2 を作る
    2351   # @@cell_list2 は、出現順に composite å†
    2352 ã‚’含むセルのリスト
     2215  #=== Cell# @@cell_list2 を作る
     2216  # @@cell_list2 は、出現順に composite 内を含むセルのリスト
    23532217  def self.make_cell_list2
    23542218    @@cell_list.each{ |c|
     
    23582222  end
    23592223
    2360   #=== Cell# @@cell_list2 を得る
    2361   # composite å†
    2362 ã‚’含む (compositeも含む)
    2363   # 意味解析後に作成される
     2224  #=== Cell# @@cell_list2 を得る
     2225  # composite 内を含む (compositeも含む)
     2226  # 意味解析後に作成される
    23642227  def self.get_cell_list2
    23652228    @@cell_list2
    23662229  end
    23672230
    2368   #=== Cell# @@cell_list を得る
    2369   #composite の中を含まない
     2231  #=== Cell# @@cell_list を得る
     2232  #composite の中を含まない
    23702233  def self.get_cell_list
    23712234    @@cell_list
    23722235  end
    23732236
    2374   #=== Cell# reverse_join を生成する
     2237  #=== Cell# reverse_join を生成する
    23752238  def self.create_reverse_join
    23762239    @@cell_list.each{ |c|
     
    23842247  end
    23852248
    2386   #=== Cell# reverse_require_join を生成する
     2249  #=== Cell# reverse_require_join を生成する
    23872250  def self.create_reverse_require_join
    23882251    @@cell_list2.each{ |c|
     
    23902253      # if c.is_generate? then
    23912254        if ct then
    2392           # self への呼び口側の結合を生成
     2255          # self への呼び口側の結合を生成
    23932256          ct.create_reverse_require_join c
    23942257        end
     
    23972260  end
    23982261
    2399   #=== Cell# 受け口のport の参ç
    2400 §ã‚«ã‚¦ãƒ³ãƒˆã‚’設定する
    2401   # self は呼びå
    2402 ƒã®ã‚»ãƒ«
    2403   # 呼びå
    2404 ˆã‚»ãƒ«ã®å—け口の参ç
    2405 §ã‚«ã‚¦ãƒ³ãƒˆã‚’アップする
     2262  #=== Cell# 受け口のport の参照カウントを設定する
     2263  # self は呼び元のセル
     2264  # 呼び先セルの受け口の参照カウントをアップする
    24062265  def set_port_reference_count
    24072266    @join_list.get_items.each { |j|
    24082267      if j.get_definition.instance_of? Port then
    24092268        am = j.get_array_member2
    2410         if am then             # 呼び口é
    2411 åˆ—
     2269        if am then             # 呼び口配列
    24122270          am.each { |j2|
    2413             next if j2 == nil    # optional で一部が欠落しているケース
     2271            next if j2 == nil    # optional で一部が欠落しているケース
    24142272            cell = j2.get_rhs_cell2
    2415             next if cell == nil     # 右辺が見つからなかった.既にエラー
     2273            next if cell == nil     # 右辺が見つからなかった.既にエラー
    24162274            port = cell.get_celltype.find( j2.get_rhs_port2 )
    24172275            dbgPrint( "set_port_reference_count: #{@name}.#{j2.get_name} => #{cell.get_name}.#{port.get_name}\n")
     
    24202278        else
    24212279          cell = j.get_rhs_cell2
    2422           next if cell == nil     # 右辺が見つからなかった.既にエラー
     2280          next if cell == nil     # 右辺が見つからなかった.既にエラー
    24232281          port = cell.get_celltype.find( j.get_rhs_port2 )
    24242282          dbgPrint( "set_port_reference_count: #{@name}.#{j.get_name} => #{cell.get_name}.#{port.get_name}\n")
     
    24292287  end
    24302288
    2431   #=== Cell# 結合(Join)のチェック
    2432   #     Join は呼び口の結合または attribute の初期化
     2289  #=== Cell# 結合(Join)のチェック
     2290  #     Join は呼び口の結合または attribute の初期化
    24332291  #
    2434   #  mikan このメソッドは、以下の4つのチェックからなるが、分割したほうがより適切な長さのメソッドになる
    2435   #  ・リレーアロケータの生成 => create_relay_allocator_join
    2436   #  ・未結合の呼び口のチェック
    2437   #  ・ポインタ型がé
    2438 åˆ—で初期化される場合のチェック
    2439   #  ・未初期化の属性のチェック
     2292  #  mikan このメソッドは、以下の4つのチェックからなるが、分割したほうがより適切な長さのメソッドになる
     2293  #  ・リレーアロケータの生成 => create_relay_allocator_join
     2294  #  ・未結合の呼び口のチェック
     2295  #  ・ポインタ型が配列で初期化される場合のチェック
     2296  #  ・未初期化の属性のチェック
    24402297  def check_join
    24412298
    2442     # celltype がなければチェックしない(既にエラー)
     2299    # celltype がなければチェックしない(既にエラー)
    24432300    return if @celltype == nil
    24442301    return if @b_defined == false
    2445     return if @f_cloned == true    # å†
    2446 éƒ¨ã‚»ãƒ«ã«ã¤ã„ては、composite の定義時にチェックされている
     2302    return if @f_cloned == true    # 内部セルについては、composite の定義時にチェックされている
    24472303
    24482304    # debug
     
    24522308    # end
    24532309
    2454     # 未結合の呼び口のチェック
     2310    # 未結合の呼び口のチェック
    24552311    @celltype.get_port_list.each { |p|
    24562312
    2457       # 呼び口でなければ、チェックしない
     2313      # 呼び口でなければ、チェックしない
    24582314      next if p.get_port_type != :CALL
    24592315
     
    24612317      dbgPrint "check_join: #{@name} #{get_celltype.get_name} #{p.get_name}\n"
    24622318
    2463       # 結合リストの中から呼び口名に一致するものを取りだす
     2319      # 結合リストの中から呼び口名に一致するものを取りだす
    24642320      j = @join_list.get_item( p.get_name )
    24652321
    24662322      if j == nil then
    2467         # 未結合の呼び口
    2468 
    2469         # composite celltype のå†
    2470 éƒ¨ã®å ´åˆã€composite celltype が export する呼び口に結合されているか探す
     2323        # 未結合の呼び口
     2324
     2325        # composite celltype の内部の場合、composite celltype が export する呼び口に結合されているか探す
    24712326        found = false
    24722327        if @in_composite then
    2473           # composite celltype の export するものすべてから探す
    2474           # (export するものの右辺値から探すために get_item ではダメ)
     2328          # composite celltype の export するものすべてから探す
     2329          # (export するものの右辺値から探すために get_item ではダメ)
    24752330          @compositecelltypejoin_list.get_items.each{ |cj|
    2476             # 呼び口名と composite の export する名前は一致するか
     2331            # 呼び口名と composite の export する名前は一致するか
    24772332            if p.get_name == cj.get_cell_elem_name then
    24782333              found = true
     
    24812336        end
    24822337
    2483         # 呼び口é
    2484 åˆ—の場合 optional でå
    2485 ¨ã¦ã®è¦ç´ ãŒåˆæœŸåŒ–されない場合に、ここへ来る
     2338        # 呼び口配列の場合 optional で全ての要素が初期化されない場合に、ここへ来る
    24862339        if ! found && ! p.is_require? && ! p.is_optional? then
    24872340          if ! p.is_allocator_port? then
     
    24922345        end
    24932346      elsif p.get_array_size.kind_of? Integer then
    2494         # 添数あり呼び口é
    2495 åˆ—の場合、すべての添数要素が初期化されているかチェックする
     2347        # 添数あり呼び口配列の場合、すべての添数要素が初期化されているかチェックする
    24962348
    24972349        am = j.get_array_member2
    24982350        if( am )then
    2499           # join はé
    2500 åˆ—
    2501 
    2502           # 呼び口é
    2503 åˆ—定義でのé
    2504 åˆ—の大きさ
     2351          # join は配列
     2352
     2353          # 呼び口配列定義での配列の大きさ
    25052354          length = p.get_array_size
    25062355
    2507           # é
    2508 åˆ—の大きさが呼び口é
    2509 åˆ—定義と結合定義で一致するか?
     2356          # 配列の大きさが呼び口配列定義と結合定義で一致するか?
    25102357          if am.length != length then
    25112358            if ! p.is_optional? || am.length >= length then
    2512               # optional の場合、要素数が少なすぎるのは OK
     2359              # optional の場合、要素数が少なすぎるのは OK
    25132360              cdl_error( "S1044 $1: array initializer too many or few, $2 for $3" , p.get_name, am.length, length )
    25142361            end
    25152362
    2516             # am の要素に nil を追加しておく (#_CPA_# のコード生成時、このé
    2517 åˆ—要素数分生成)
     2363            # am の要素に nil を追加しておく (#_CPA_# のコード生成時、この配列要素数分生成)
    25182364            i = am.length
    25192365            while i < length
     
    25232369          end
    25242370
    2525 #          # é
    2526 åˆ—要素の抜けがないかチェック
    2527 #          if am.length < length then  # 満たない場合既にエラーだが要素のある範囲でチェック
     2371#          # 配列要素の抜けがないかチェック
     2372#          if am.length < length then  # 満たない場合既にエラーだが要素のある範囲でチェック
    25282373#            length = am.length
    25292374#          end
     
    25352380              end
    25362381            else
    2537               # 生成されないリージョンへの結合かチェック
     2382              # 生成されないリージョンへの結合かチェック
    25382383              if ! @in_composite then
    25392384                am[i].check_region2
     
    25442389
    25452390        # else
    2546         # join が非é
    2547 åˆ—であれば、既にエラー
     2391        # join が非配列であれば、既にエラー
    25482392        end
    25492393      elsif j.get_array_member then
    2550         # 添数なし呼び口é
    2551 åˆ—の場合
     2394        # 添数なし呼び口配列の場合
    25522395        am = j.get_array_member2
    25532396        length = am.length
     
    25622405        end
    25632406
    2564         # 生成されないリージョンへの結合かチェック
     2407        # 生成されないリージョンへの結合かチェック
    25652408        if ! @in_composite then
    25662409          am.each { |join|
     
    25712414        end
    25722415      else
    2573         # 呼び口[é
    2574 åˆ—」でない場合
    2575 
    2576         # 生成されないリージョンへの結合かチェック
     2416        # 呼び口[配列」でない場合
     2417
     2418        # 生成されないリージョンへの結合かチェック
    25772419        if ! @in_composite then
    25782420          j.check_region2
     
    25822424    }
    25832425
    2584     # ポインタ型がé
    2585 åˆ—で初期化される場合のチェック
     2426    # ポインタ型が配列で初期化される場合のチェック
    25862427    (@celltype.get_attribute_list+@celltype.get_var_list).each { |a|
    25872428      if a.get_size_is then
    25882429
    25892430        if a.instance_of? CompositeCelltypeJoin then
    2590           # 既にエラーになっている
     2431          # 既にエラーになっている
    25912432          # cdl_error( "S1047 size_is pointer cannot be exposed for composite attribute"  )
    25922433          next
     
    25982439          size = a.get_size_is.eval_const( @join_list, @celltype.get_name_list )
    25992440          a.get_type.set_scs( a.get_size_is, nil, nil, nil, false )
    2600           if( ! size.kind_of? Integer )then               # C_EXP の可能性あり
    2601             # mikan 多分ここでのエラー発生は不要、eval_const の中で変数が存在しない、型が不適切などのエラーになるはず
     2441          if( ! size.kind_of? Integer )then               # C_EXP の可能性あり
     2442            # mikan 多分ここでのエラー発生は不要、eval_const の中で変数が存在しない、型が不適切などのエラーになるはず
    26022443            cdl_error( "S1049 $1: size_is arg not constant" , a.get_name )
    26032444          else
     
    26152456              end
    26162457            else
    2617               # size_is 引数がセルで指定されていて、初期化子がセルタイプで指定されているケースのチェック
     2458              # size_is 引数がセルで指定されていて、初期化子がセルタイプで指定されているケースのチェック
    26182459              ini = a.get_initializer
    26192460              if ini.instance_of? Expression
     
    26302471      else
    26312472        if ! a.instance_of? CompositeCelltypeJoin then
    2632           # composite は size_is 指定できない
     2473          # composite は size_is 指定できない
    26332474          if a.get_type.kind_of?( PtrType ) then
    26342475            j = @join_list.get_item( a.get_identifier )
    26352476            if j && j.get_rhs.instance_of?( Array ) then
    2636               ## size_is 指定されていないポインタが Array で初期化されていたら、エラーとする
     2477              ## size_is 指定されていないポインタが Array で初期化されていたら、エラーとする
    26372478              cdl_error( "S1169 $1: non-size_is pointer cannot be initialized with array initializer" , a.get_identifier )
    26382479            end
     
    26422483    }
    26432484
    2644     # 未初期化の属性をチェック
     2485    # 未初期化の属性をチェック
    26452486    @celltype.get_attribute_list.each { |a|
    26462487      b_init = false
    26472488      # self.show_tree 1
    2648       if a.get_initializer then                               # セルタイプで初期化されている
     2489      if a.get_initializer then                               # セルタイプで初期化されている
    26492490        b_init = true
    2650         # @in_composite で export されている場合には、この初期値は使われない
    2651         # export されている、いないに関わらず、初期化されていることが保証される
    2652       elsif @join_list.get_item( a.get_name ) then            # セルで初期化されている
     2491        # @in_composite で export されている場合には、この初期値は使われない
     2492        # export されている、いないに関わらず、初期化されていることが保証される
     2493      elsif @join_list.get_item( a.get_name ) then            # セルで初期化されている
    26532494        b_init = true
    26542495      elsif @in_composite && @compositecelltypejoin_list then
    2655         # 属性が export されているか調べる。export されていれば未初期化とはしない
    2656         # mikan リニアサーチ
     2496        # 属性が export されているか調べる。export されていれば未初期化とはしない
     2497        # mikan リニアサーチ
    26572498        @compositecelltypejoin_list.get_items.each{ |cj|
    2658           # 属性名と composite の export する名前は一致するか
     2499          # 属性名と composite の export する名前は一致するか
    26592500          if a.get_name.to_sym == cj.get_cell_elem_name.to_sym then
    2660             b_init = true    # 属性は export されているので、とりあえず未初期化とはしない
     2501            b_init = true    # 属性は export されているので、とりあえず未初期化とはしない
    26612502          end
    26622503        }
    26632504        if b_init then
    2664           # size_is の引数がマッチするかチェックする
    2665           # å†
    2666 éƒ¨ã‚»ãƒ«ã® size_is をエクスポートする size_is とマッチするかチェックする
    2667           # å†
    2668 éƒ¨ã‚»ãƒ«ã¨ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã§åå‰ã‚’変えている可能性があるので、å†
    2669 éƒ¨ã‚»ãƒ«ã® size_is の名前を変換した上でチェックする
     2505          # size_is の引数がマッチするかチェックする
     2506          # 内部セルの size_is をエクスポートする size_is とマッチするかチェックする
     2507          # 内部セルとエクスポートで名前を変えている可能性があるので、内部セルの size_is の名前を変換した上でチェックする
    26702508          if a.get_size_is then
    26712509            ### p "attr: get_size_is"
     
    26732511            if cj.get_port_decl.instance_of? Decl then
    26742512              ### p "attr: get_size_is 2"
    2675               # cj_size_is は、外部å
    2676 ¬é–‹ã•ã‚Œã‚‹ attr の size_is
     2513              # cj_size_is は、外部公開される attr の size_is
    26772514              cj_size_is = cj.get_port_decl.get_size_is
    26782515              if cj_size_is == nil then
     
    26832520              remain = exprs
    26842521              inner_to_export = {}
    2685                           ### exprs に含まれる識別子を抜き出し、対応する export される名前を探す
     2522                          ### exprs に含まれる識別子を抜き出し、対応する export される名前を探す
    26862523              while remain != "" && remain != nil
    26872524                ### p "remain ", remain
    2688                 remain =~ /([^\w]*)([_A-Za-z][\w\d]*)/   # 変数名文字列を取り出す
     2525                remain =~ /([^\w]*)([_A-Za-z][\w\d]*)/   # 変数名文字列を取り出す
    26892526                                if $2 == nil then
    26902527                                                break
     
    26932530                remain = $'
    26942531                ### p exprs, $1, $2, $'
    2695                 # size_is に含まれる変数は、composite で export されているか
     2532                # size_is に含まれる変数は、composite で export されているか
    26962533                cj2 = nil
    26972534                @compositecelltypejoin_list.get_items.each{ |cj2t|
     
    27062543                if cj2.get_port_decl.instance_of? Decl then
    27072544                   decl2 = cj2.get_port_decl
    2708                    # å†
    2709 éƒ¨ã®åå‰ã¨å¤–部の名前の対応関係を記憶
     2545                   # 内部の名前と外部の名前の対応関係を記憶
    27102546                   inner_to_export[arg_name] = decl2.get_name
    2711                 # else cj2 は Port (既にエラー)
     2547                # else cj2 は Port (既にエラー)
    27122548                end
    27132549              end
    2714               # å†
    2715 éƒ¨ã®åå‰ã‚’外部の名前で置換
     2550              # 内部の名前を外部の名前で置換
    27162551              inner_to_export.each{ |arg_name, exp_name|
    27172552                ### p "changing #{arg_name}=>#{exp_name}"
    27182553                # exprs.gsub!( Regexp.new("#{arg_name}[^0-9A-Za-z_]"), exp_name.to_s )
    2719                 exprs.gsub!( Regexp.new("#{arg_name}(\\W)"), exp_name.to_s+"\\1" )  # 文字列末尾にないケース
    2720                 exprs.gsub!( Regexp.new("#{arg_name}\\Z"), exp_name.to_s )          # 文字列末尾にあるケース
     2554                exprs.gsub!( Regexp.new("#{arg_name}(\\W)"), exp_name.to_s+"\\1" )  # 文字列末尾にないケース
     2555                exprs.gsub!( Regexp.new("#{arg_name}\\Z"), exp_name.to_s )          # 文字列末尾にあるケース
    27212556              }
    27222557              ### p "changed: #{exprs} #{cj_size_is.to_s}"
     
    27242559                cdl_error( "S1172 \'$1\' size_is argument mismatch with exporting one \'$2\'", a.get_name, cj.get_name )
    27252560              end
    2726             # else cj は Port (既にエラー)
     2561            # else cj は Port (既にエラー)
    27272562            end
    27282563          end
     
    27372572  end
    27382573
    2739   #=== Cell# 逆 require をチェックする
    2740   # 逆 require 指定された受け口に複数の結合がないかチェックする
    2741   # composite のå†
    2742 éƒ¨ã‚»ãƒ« (f_cloned=true) もチェックする
     2574  #=== Cell# 逆 require をチェックする
     2575  # 逆 require 指定された受け口に複数の結合がないかチェックする
     2576  # composite の内部セル (f_cloned=true) もチェックする
    27432577  def check_reverse_require
    2744     # celltype がなければチェックしない(既にエラー)
     2578    # celltype がなければチェックしない(既にエラー)
    27452579    return if @celltype == nil
    27462580    return if @b_defined == false
    27472581
    27482582    # p "check reverse require   #{@name}"
    2749     # 逆require 指定された受け口に複数の結合がないかチェック
     2583    # 逆require 指定された受け口に複数の結合がないかチェック
    27502584    @referenced_port_list.each{ |port,count|
    27512585      # p port.class, count
     
    27572591  end
    27582592
    2759   #=== Cell# require 呼び口の結合を行う
     2593  #=== Cell# require 呼び口の結合を行う
    27602594  # STAGE: S
    2761   #cp_name:: Symbol           : 呼び口名
    2762   #cell_or_t:: Celltype|Cell  : celltype の require の右辺で指定されたセルタイプまたはセル
    2763   #port::  Port               : celltype の Port オブジェクト
     2595  #cp_name:: Symbol           : 呼び口名
     2596  #cell_or_t:: Celltype|Cell  : celltype の require の右辺で指定されたセルタイプまたはセル
     2597  #port::  Port               : celltype の Port オブジェクト
    27642598  def set_require_join( cp_name, cell_or_ct, port )
    27652599
    2766     # set_require_join は2度呼び出される
    2767     # 2度目は post コードを生成した後       #####  いったん見合わせ(重複エラーを見逃す)
     2600    # set_require_join は2度呼び出される
     2601    # 2度目は post コードを生成した後       #####  いったん見合わせ(重複エラーを見逃す)
    27682602    # if @require_joined_list[ cp_name ] then
    27692603    #   return
     
    27822616      end
    27832617    else
    2784       # require: cell で指定
     2618      # require: cell で指定
    27852619      cell = cell_or_ct
    27862620      if @region.distance( cell.get_region ) == nil then
     
    27922626      cdl_warning( "W1003 $1 : require call port overridden in $2" , cp_name, @name )
    27932627    else
    2794       # require の join を生成(呼び口の結合)
     2628      # require の join を生成(呼び口の結合)
    27952629#      rhs = Expression.new( [ :OP_DOT, [ :IDENTIFIER, Token.new( cell.get_name, nil, nil, nil ) ],
    27962630      nsp = NamespacePath.new( cell.get_name, false, cell.get_namespace )
     
    28052639  end
    28062640
    2807   #=== Cell# Join の definition の設定とチェック
     2641  #=== Cell# Join の definition の設定とチェック
    28082642  # STAGE: S
    28092643  def set_definition_join
    2810     return if @celltype == nil    # 既にエラー:打ち切る
    2811     return if @b_defined == false # プロトタイプ宣言のみ
    2812     return if @b_checked == true  # 既に設定(チェック)済み
     2644    return if @celltype == nil    # 既にエラー:打ち切る
     2645    return if @b_defined == false # プロトタイプ宣言のみ
     2646    return if @b_checked == true  # 既に設定(チェック)済み
    28132647
    28142648    dbgPrint "set_definition_join in #{@name}\n"
    28152649
    2816     # relay allocator をたどって再å
    2817 ¥ã—ないよう、å
    2818 ˆé ­ã§ @b_checked を true にする
     2650    # relay allocator をたどって再入しないよう、先頭で @b_checked を true にする
    28192651    @b_checked = true
    28202652
     
    28222654      check_restrict_list
    28232655     
    2824       # compoiste セルのクローンされたものは、set_definition 不要
    2825       # å
    2826 ƒã® join は既に definition されている
    2827       # å
    2828 ƒã®ã‚»ãƒ«ã«ãŠã„て、代å
    2829 ¥ãƒã‚§ãƒƒã‚¯ã•ã‚Œã¦ã„るので、二重にチェック(through適用)されてしまう
     2656      # compoiste セルのクローンされたものは、set_definition 不要
     2657      # 元の join は既に definition されている
     2658      # 元のセルにおいて、代入チェックされているので、二重にチェック(through適用)されてしまう
    28302659      @join_list.get_items.each{ |join|
    28312660        dbgPrint " set_definition_join: checking #{@name}.#{join.get_name}\n"
     
    28332662          port = @celltype.find(join.get_name)
    28342663          join.get_array_member2.each { |am|
    2835             if am == nil then   # 未結合の場合、エラーチェックは check_join
     2664            if am == nil then   # 未結合の場合、エラーチェックは check_join
    28362665              if port && ! port.is_optional? then
    2837                 # テスト用にエラーメッセージ出力
     2666                # テスト用にエラーメッセージ出力
    28382667                # cdl_error( "TEMPORAL set_definition_join: uninitialized array member"  )
    28392668              end
     
    28482677    end
    28492678
    2850     # リレー join は through プラグイン生成後にしかできない
    2851     # through 後に結合å
    2852 ˆãŒå
    2853 ¥ã‚Œæ›¿ãˆã‚‰ã‚Œã‚‹
     2679    # リレー join は through プラグイン生成後にしかできない
     2680    # through 後に結合先が入れ替えられる
    28542681    create_relay_allocator_join
    28552682
    2856     # composite セルの展開
     2683    # composite セルの展開
    28572684    if ! @in_composite && ! @f_cloned && @celltype.instance_of?( CompositeCelltype ) then
    2858       # composite セルタイプå†
    2859 ã® composite は展開しない
    2860       # compoiste セル展開中の composite は展開しない (CompositeCelltype::expand å†
    2861 ã§å†å¸°çš„に expnad)
     2685      # composite セルタイプ内の composite は展開しない
     2686      # compoiste セル展開中の composite は展開しない (CompositeCelltype::expand 内で再帰的に expnad)
    28622687      expand
    28632688    end
    28642689
    2865     # celltype に generate が指定されされているか
     2690    # celltype に generate が指定されされているか
    28662691    celltype_plugin = @celltype.get_celltype_plugin
    28672692    if celltype_plugin then
     
    28752700  end
    28762701
    2877   #=== Cell# composite セルの展開
    2878   # このセルが composite セルタイプ
     2702  #=== Cell# composite セルの展開
     2703  # このセルが composite セルタイプ
    28792704  def expand
    28802705
     
    28822707    dbgPrint "expanding #{@name} #{@celltype.get_name}\n"
    28832708
    2884     # 展開されたセルのリスト
     2709    # 展開されたセルのリスト
    28852710    @@cloned_cell_list = {}
    28862711
    2887     # composite celltype の cell を展開
     2712    # composite celltype の cell を展開
    28882713    @cell_list, @cell_list2 = @celltype.expand( @name, @global_name, @NamespacePath, @join_list, @region, @plugin, @locale )
    28892714
    2890     # プロトタイプが参ç
    2891 §ã•ã‚Œã¦ã„る場合、子も参ç
    2892 §ã•ã‚Œã¦ã„ることにする
     2715    # プロトタイプが参照されている場合、子も参照されていることにする
    28932716    if @f_ref then
    28942717      dbgPrint "expand: set_f_ref\n"
     
    28962719    end
    28972720
    2898     # 呼び口の右辺のセルを clone したものに変更
     2721    # 呼び口の右辺のセルを clone したものに変更
    28992722    self.change_rhs_port
    29002723
    2901     # プロトタイプ宣言で設定されていたものを反映する
     2724    # プロトタイプ宣言で設定されていたものを反映する
    29022725    @entry_array_max_subscript.each{ |port,name|
    29032726      set_entry_inner_port_max_subscript( port, name )
     
    29052728  end
    29062729
    2907   #=== Cell#restrict を追加
     2730  #=== Cell#restrict を追加
    29082731  def add_restrict( entry_name, func_name, region_name_list )
    29092732    if @restrict_list[ entry_name ] then
     
    29942817      puts "entry array #{port.get_name}: max subscript=#{num}"
    29952818    }
    2996     if @cell_list then   # ここで @cell_list が nil なのは Bug
     2819    if @cell_list then   # ここで @cell_list が nil なのは Bug
    29972820      (indent+1).times { print "  " }
    29982821      puts "cloned cell list:"
     
    30182841          subscript = ""
    30192842        end
    3020         # アロケータ呼び口の結合を生成
     2843        # アロケータ呼び口の結合を生成
    30212844        (indent+2).times { print "  " }
    30222845        puts "#{cp_name}#{subscript} = #{a[4+1]}"
     
    30422865# @real_singleton:: bool : has singleton cell in this composite celltype
    30432866# @real_active:: bool : has active cell in this composite celltype
    3044 # @name_list:: NamedList item: Decl (attribute), Port エクスポート定義
     2867# @name_list:: NamedList item: Decl (attribute), Port エクスポート定義
    30452868# @internal_allocator_list:: [ [cell, internal_cp_name, port_name, func_name, param_name, ext_alloc_ent], ... ]
    30462869
     
    30822905
    30832906    Namespace.new_compositecelltype( self )
    3084     set_namespace_path # @NamespacePath の設定
     2907    set_namespace_path # @NamespacePath の設定
    30852908
    30862909    @port_list = []
     
    30982921  def end_of_parse
    30992922
    3100     # singleton に関するチェック
     2923    # singleton に関するチェック
    31012924    if @b_singleton && @real_singleton == nil then
    31022925      cdl_warning( "W1004 $1 : specified singleton but has no singleton in this celltype" , @name )
     
    31072930    end
    31082931
    3109     # active に関するチェック
     2932    # active に関するチェック
    31102933    if @b_active && @real_active == nil then
    31112934      cdl_error( "S1054 $1 : specified active but has no active in this celltype" , @name )
     
    31142937    end
    31152938
    3116     # @allocator_instance を設定する
     2939    # @allocator_instance を設定する
    31172940    @name_list.get_items.each{ |n|
    31182941      if n.instance_of? Port then
     
    31212944    }
    31222945
    3123     # リレーアロケータの entry 側
     2946    # リレーアロケータの entry 側
    31242947    @port_list.each{ |p|
    31252948      if p.get_port_type == :ENTRY then
     
    31352958      end
    31362959    }
    3137     # mikan relay が正しく抜けているかチェックされていない
    3138 
    3139     # 意味解析
     2960    # mikan relay が正しく抜けているかチェックされていない
     2961
     2962    # 意味解析
    31402963    @cell_list.get_items.each{ |c|
    31412964      c.set_definition_join
    31422965    }
    31432966
    3144     # cell の未結合の呼び口がないかチェック
     2967    # cell の未結合の呼び口がないかチェック
    31452968    @cell_list.get_items.each{ |c|
    31462969      c.check_join
     
    31482971    }
    31492972
    3150     # 呼び口の結合について、export とå†
    3151 éƒ¨çµåˆã®ä¸¡æ–¹ãŒãªã„かチェック
    3152     # リレーアロケータ、å†
    3153 éƒ¨ã‚¢ãƒ­ã‚±ãƒ¼ã‚¿ã®è¨­å®š
     2973    # 呼び口の結合について、export と内部結合の両方がないかチェック
     2974    # リレーアロケータ、内部アロケータの設定
    31542975    @port_list.each{ |p|
    31552976      p.check_dup_init
    31562977    }
    31572978
    3158     # すべてのエクスポート定義に対応した呼び口、受け口、属性が存在するかチェック
     2979    # すべてのエクスポート定義に対応した呼び口、受け口、属性が存在するかチェック
    31592980    @name_list.get_items.each{ |n|
    31602981      if( @export_name_list.get_item( n.get_name ) == nil )then
     
    31632984    }
    31642985
    3165     # å†
    3166 éƒ¨ã‚¢ãƒ­ã‚±ãƒ¼ã‚¿ã‚’設定する
     2986    # 内部アロケータを設定する
    31672987    @internal_allocator_list.each{ |cell, cp_internal_name, port_name, fd_name, par_name, ext_alloc_ent|
    31682988      res = ext_alloc_ent.get_allocator_rhs_elements( :INTERNAL_ALLOC )
     
    31953015    cell.set_owner self  # Cell (in_omposite)
    31963016    @cell_list.add_item( cell )
    3197     if cell.get_celltype then    # nil ならば、すでにセルタイプなしエラー
     3017    if cell.get_celltype then    # nil ならば、すでにセルタイプなしエラー
    31983018      if cell.get_celltype.is_singleton? then
    31993019        @real_singleton = cell
     
    32133033  end
    32143034
    3215   #=== CompositeCelltype# CompositeCelltypeJoin を作成
     3035  #=== CompositeCelltype# CompositeCelltypeJoin を作成
    32163036  # STAGE: B
    3217   #export_name:: Symbol : 外部にå
    3218 ¬é–‹ã™ã‚‹åå‰
    3219   #internal_cell_name:: Symbol : å†
    3220 éƒ¨ã‚»ãƒ«å
    3221   #internal_cell_elem_name:: Symbol : å†
    3222 éƒ¨ã‚»ãƒ«ã®è¦ç´ åï¼ˆå‘¼ã³å£åã€å—け口名、属性名のいずれか)
    3223   #type::  :CALL, :ENTRY, :ATTRIBUTE のいずれか(構文要素としてあるべきもの)
    3224   #RETURN:: Decl | Port : エクスポート定義
    3225   # new_join は
    3226   #   cCall => composite.cCall;     (セルå†
    3227 )
    3228   #   attr = composite.attr;        (セルå†
    3229 )
    3230   #   composite.eEnt => cell2.eEnt; (セル外)
    3231   # の構文要素の出現に対して呼び出される
     3037  #export_name:: Symbol : 外部に公開する名前
     3038  #internal_cell_name:: Symbol : 内部セル名
     3039  #internal_cell_elem_name:: Symbol : 内部セルの要素名(呼び口名、受け口名、属性名のいずれか)
     3040  #type::  :CALL, :ENTRY, :ATTRIBUTE のいずれか(構文要素としてあるべきもの)
     3041  #RETURN:: Decl | Port : エクスポート定義
     3042  # new_join は
     3043  #   cCall => composite.cCall;     (セル内)
     3044  #   attr = composite.attr;        (セル内)
     3045  #   composite.eEnt => cell2.eEnt; (セル外)
     3046  # の構文要素の出現に対して呼び出される
    32323047  def new_join( export_name, internal_cell_name,
    32333048                 internal_cell_elem_name, type )
     
    32423057
    32433058    celltype = cell.get_celltype
    3244     return if celltype == nil   # celltype == nil ならすでにエラー
    3245 
    3246     # å†
    3247 éƒ¨ã‚»ãƒ«ã®ã‚»ãƒ«ã‚¿ã‚¤ãƒ—から対応要素を探す
    3248     # このメソッドは、構文上、呼び口、受け口、属性が記述できる箇所から呼出される
    3249     # 構文上の呼出し位置(記述位置)と、要素が対応したものかチェック
     3059    return if celltype == nil   # celltype == nil ならすでにエラー
     3060
     3061    # 内部セルのセルタイプから対応要素を探す
     3062    # このメソッドは、構文上、呼び口、受け口、属性が記述できる箇所から呼出される
     3063    # 構文上の呼出し位置(記述位置)と、要素が対応したものかチェック
    32503064    obj = celltype.find( internal_cell_elem_name )
    32513065    if obj.instance_of?( Decl ) then
     
    32553069      elsif type != :ATTRIBUTE then
    32563070        cdl_error( "S1059 \'$1\' : exporting attribute. write in cell or use \'=\' to export attribute" , export_name )
    3257         # return 次のエラーを避けるために処理続行し、付け加えてみる
     3071        # return 次のエラーを避けるために処理続行し、付け加えてみる
    32583072      end
    32593073    elsif obj.instance_of?( Port ) then
    32603074      if obj.get_port_type != type then
    32613075        cdl_error( "S1060 \'$1\' : port type mismatch. $2 type is allowed here." , export_name, type )
    3262         # return 次のエラーを避けるために処理続行し、付け加えてみる
     3076        # return 次のエラーを避けるために処理続行し、付け加えてみる
    32633077      end
    32643078    else
     
    32683082    end
    32693083
    3270     # エクスポート定義と一致するかどうかチェック
     3084    # エクスポート定義と一致するかどうかチェック
    32713085    obj2 = @name_list.get_item( export_name )
    32723086    if( obj2 == nil )then
     
    32843098        elsif obj.get_signature != obj2.get_signature then
    32853099          if obj.get_signature != nil && obj2.get_signature != nil then
    3286             # nil ならば既にエラーなので報告しない
     3100            # nil ならば既にエラーなので報告しない
    32873101            cdl_error( "S1066 $1 : signature \'$2\' mismatch with previous definition \'$3\'" , export_name, obj.get_signature.get_name, obj2.get_signature.get_name )
    32883102          end
     
    33093123    if obj.instance_of?( Decl ) then
    33103124      # attribute
    3311 #      # å†
    3312 éƒ¨ã‹ã‚‰å¤–部へ複数の結合がないかチェック
     3125#      # 内部から外部へ複数の結合がないかチェック
    33133126#      found = false
    33143127#      @attr_list.each{ |a|
     
    33233136    else
    33243137      # call/entry port
    3325 #      # å†
    3326 éƒ¨ã‹ã‚‰å¤–部へ複数の結合がないかチェック
     3138#      # 内部から外部へ複数の結合がないかチェック
    33273139#      found = false
    33283140#      @port_list.each{ |port|
     
    33373149    end
    33383150
    3339     # join を @export_name_list に登録(重複チェックとともに,後で行われる CompositeCelltypeJoin の clone に備える)
     3151    # join を @export_name_list に登録(重複チェックとともに,後で行われる CompositeCelltypeJoin の clone に備える)
    33403152    if obj.instance_of?( Decl ) && @export_name_list.get_item( export_name ) then
    3341       # 既に存在する。追加しない。新仕様では、@export_name_list に同じ名前が含まれることがある。
     3153      # 既に存在する。追加しない。新仕様では、@export_name_list に同じ名前が含まれることがある。
    33423154    elsif obj.instance_of?( Port ) && obj.get_port_type == :CALL && @export_name_list.get_item( export_name ) then
    3343       # 既に存在する。追加しない。新仕様では、@export_name_list に同じ名前が含まれることがある。
     3155      # 既に存在する。追加しない。新仕様では、@export_name_list に同じ名前が含まれることがある。
    33443156    else
    33453157      @export_name_list.add_item( join )
    33463158    end
    33473159
    3348     # export するポートに含まれる send/receive パラメータのアロケータ(allocator)呼び口をセルと結合
     3160    # export するポートに含まれる send/receive パラメータのアロケータ(allocator)呼び口をセルと結合
    33493161    if obj2.instance_of? Port then
    33503162      obj2.each_param{ |port, fd, par|
    3351         case par.get_direction                        # 引数の方向指定子 (in, out, inout, send, receive )
     3163        case par.get_direction                        # 引数の方向指定子 (in, out, inout, send, receive )
    33523164        when :SEND, :RECEIVE
    3353           cp_name = :"#{port.get_name}_#{fd.get_name}_#{par.get_name}"     # アロケータ呼び口の名前
    3354           #            ポート名         é–¢æ•°å         ãƒ‘ラメータ名
     3165          cp_name = :"#{port.get_name}_#{fd.get_name}_#{par.get_name}"     # アロケータ呼び口の名前
     3166          #            ポート名         関数名         パラメータ名
    33553167          cp_internal_name = :"#{internal_cell_elem_name}_#{fd.get_name}_#{par.get_name}"
    33563168
    3357           # リレーアロケータ or å†
    3358 éƒ¨ã‚¢ãƒ­ã‚±ãƒ¼ã‚¿æŒ‡å®šãŒãªã•ã‚Œã¦ã„る場合、アロケータ呼び口を追加しない
    3359           # この時点では get_allocator_instance では得られないため tmp を得る
     3169          # リレーアロケータ or 内部アロケータ指定がなされている場合、アロケータ呼び口を追加しない
     3170          # この時点では get_allocator_instance では得られないため tmp を得る
    33603171          if port.get_allocator_instance_tmp then
    33613172            found = false
     
    33653176
    33663177                if s[0] == :INTERNAL_ALLOC then
    3367                   # å†
    3368 éƒ¨ã‚¢ãƒ­ã‚±ãƒ¼ã‚¿ã®å ´åˆ    # mikan これはå†
    3369 éƒ¨ã®ã‚»ãƒ«ã«ç›´çµã™ã‚‹ã€‚外部のポートに改めるべき
     3178                  # 内部アロケータの場合    # mikan これは内部のセルに直結する。外部のポートに改めるべき
    33703179                  @internal_allocator_list << [ cell, cp_internal_name, port.get_name, fd.get_name, par.get_name, s[3] ]
    33713180                end
     
    33773186          end
    33783187
    3379           # 外部アロケータの場合
     3188          # 外部アロケータの場合
    33803189          new_join( cp_name, internal_cell_name, cp_internal_name, :CALL )
    33813190        end
     
    33833192    end
    33843193
    3385     # エクスポート定義を返す
     3194    # エクスポート定義を返す
    33863195    return obj2
    33873196  end
     
    34053214    @name_list.add_item port
    34063215
    3407     # export するポートに含まれる send/receive パラメータのアロケータ呼び口の export を生成してポートに追加
    3408     # この時点ではå†
    3409 éƒ¨ã‚¢ãƒ­ã‚±ãƒ¼ã‚¿ã‹ã©ã†ã‹åˆ¤æ–­ã§ããªã„ので、とりあえず生成しておく
     3216    # export するポートに含まれる send/receive パラメータのアロケータ呼び口の export を生成してポートに追加
     3217    # この時点では内部アロケータかどうか判断できないので、とりあえず生成しておく
    34103218    port.each_param { |port, fd, par|
    3411       case par.get_direction                        # 引数の方向指定子 (in, out, inout, send, receive )
     3219      case par.get_direction                        # 引数の方向指定子 (in, out, inout, send, receive )
    34123220      when :SEND, :RECEIVE
    3413         #### リレーアロケータ or å†
    3414 éƒ¨ã‚¢ãƒ­ã‚±ãƒ¼ã‚¿æŒ‡å®šãŒãªã•ã‚Œã¦ã„る場合、アロケータ呼び口を追加しない
    3415         # å†
    3416 éƒ¨ã‚¢ãƒ­ã‚±ãƒ¼ã‚¿æŒ‡å®šãŒãªã•ã‚Œã¦ã„る場合、アロケータ呼び口を追加しない
    3417         # この時点では get_allocator_instance では得られないため tmp を得る
     3221        #### リレーアロケータ or 内部アロケータ指定がなされている場合、アロケータ呼び口を追加しない
     3222        # 内部アロケータ指定がなされている場合、アロケータ呼び口を追加しない
     3223        # この時点では get_allocator_instance では得られないため tmp を得る
    34183224        if port.get_allocator_instance_tmp then
    34193225          found = false
     
    34303236
    34313237        if par.get_allocator then
    3432           cp_name = :"#{port.get_name}_#{fd.get_name}_#{par.get_name}"     # アロケータ呼び口の名前
    3433           #           ãƒãƒ¼ãƒˆå          関数名         ãƒ‘ラメータ名
    3434           alloc_sig_path = [ par.get_allocator.get_name ]  # mikan Namespace アロケータ呼び口のシグニチャ
    3435           array_size = port.get_array_size            # 呼び口または受け口é
    3436 åˆ—のサイズ
    3437           created_port = Port.new( cp_name, alloc_sig_path, :CALL, array_size ) # 呼び口を生成
     3238          cp_name = :"#{port.get_name}_#{fd.get_name}_#{par.get_name}"     # アロケータ呼び口の名前
     3239          #           ポート名          関数名         パラメータ名
     3240          alloc_sig_path = [ par.get_allocator.get_name ]  # mikan Namespace アロケータ呼び口のシグニチャ
     3241          array_size = port.get_array_size            # 呼び口または受け口配列のサイズ
     3242          created_port = Port.new( cp_name, alloc_sig_path, :CALL, array_size ) # 呼び口を生成
    34383243          created_port.set_allocator_port( port, fd, par )
    34393244          if port.is_omit? then
    34403245            created_port.set_omit
    34413246          end
    3442           new_port( created_port )           # セルタイプに新しい呼び口を追加
     3247          new_port( created_port )           # セルタイプに新しい呼び口を追加
    34433248        # else
    34443249        #   already error
     
    34573262    attribute.each { |a|
    34583263      a.set_owner self   # Decl (CompositeCelltype)
    3459       # V1.1.0.10 composite の attr の size_is は可となった
     3264      # V1.1.0.10 composite の attr の size_is は可となった
    34603265      # if a.get_size_is then
    34613266      #  cdl_error( "S1070 $1: size_is pointer cannot be exposed for composite attribute" , a.get_name )
     
    34683273  end
    34693274
    3470   #=== CompositeCelltype# 逆require の結合を生成する
     3275  #=== CompositeCelltype# 逆require の結合を生成する
    34713276  def create_reverse_require_join cell
    34723277    @name_list.get_items.each{ |n|
     
    34933298    return @name_list.get_item( name )
    34943299
    3495     # 従来仕様
     3300    # 従来仕様
    34963301#    cj = @export_name_list.get_item( name )
    34973302#p "#{name}, #{cj.get_port_decl}"
     
    35033308  end
    35043309
    3505   #=== CompositeCelltype# export する CompositeCelltypeJoin を得る
     3310  #=== CompositeCelltype# export する CompositeCelltypeJoin を得る
    35063311  #name:: string:
    3507   # attribute の場合、同じ名前に対し複数存在する可能性があるが、最初のものしか返さない
     3312  # attribute の場合、同じ名前に対し複数存在する可能性があるが、最初のものしか返さない
    35083313  def find_export name
    35093314    return @export_name_list.get_item( name )
    35103315  end
    35113316
    3512   #=== CompositeCelltype# composite celltype の cell を展開
    3513   #name:: string: Composite cell の名前
    3514   #global_name:: string: Composite cell の global name (C 言語名)
    3515   #join_list:: NamedList : Composite cell に対する Join の NamedList
     3317  #=== CompositeCelltype# composite celltype の cell を展開
     3318  #name:: string: Composite cell の名前
     3319  #global_name:: string: Composite cell の global name (C 言語名)
     3320  #join_list:: NamedList : Composite cell に対する Join の NamedList
    35163321  #RETURN:
    35173322  # [ { name => cell }, [ cell, ... ] ]
    3518   #  戻り値 前は 名前⇒cloneされたå†
    3519 éƒ¨ã‚»ãƒ«ã€å¾Œã‚ã¯ composite の出現順のリスト
     3323  #  戻り値 前は 名前⇒cloneされた内部セル、後ろは composite の出現順のリスト
    35203324  def expand( name, global_name, namespacePath, join_list, region, plugin, locale )
    35213325
     
    35263330    }
    35273331 
    3528     # 展開で clone されたセルのリスト、右辺は Cell (composite の場合 composite な cell の clone)
     3332    # 展開で clone されたセルのリスト、右辺は Cell (composite の場合 composite な cell の clone)
    35293333    clone_cell_list = {}
    35303334    clone_cell_list2 = []
    35313335
    3532     #  composite å†
    3533 éƒ¨ã®ã™ã¹ã¦ã® cell について
     3336    #  composite 内部のすべての cell について
    35343337    @cell_list.get_items.each { |c|
    35353338
     
    35373340      dbgPrint "expand : cell #{c.get_name}\n"
    35383341
    3539       # Join のé
    3540 åˆ—
     3342      # Join の配列
    35413343      ja = []
    35423344
    3543       # CompositeCelltype が export する呼び口、受け口、属性のリストについて
     3345      # CompositeCelltype が export する呼び口、受け口、属性のリストについて
    35443346      # @export_name_list.get_items.each{ |cj|  # cj: CompositeCelltypeJoin
    3545       # 新仕様では、@export_name_list にå
    3546 ¥ã£ã¦ã„ない attr がありうる
     3347      # 新仕様では、@export_name_list に入っていない attr がありうる
    35473348      (@port_list+@attr_list).each{ |cj|        # cj: CompositeCelltypeJoin
    35483349
     
    35503351        dbgPrint "        cj : #{cj.get_name}\n"
    35513352
    3552         # CompositeCelltypeJoin (export) の対象セルか?
     3353        # CompositeCelltypeJoin (export) の対象セルか?
    35533354        if cj.match?( c ) then
    35543355
    3555           # 対象セルå†
    3556 ã® CompositeCelltype の export する Join (attribute または call port)
     3356          # 対象セル内の CompositeCelltype の export する Join (attribute または call port)
    35573357          j = join_list.get_item( cj.get_name )
    35583358
     
    35653365
    35663366          if j then
    3567             # 呼び口、属性の場合
    3568             #  ComositeCell 用のもの(j) を対象セル用に clone (@through_list もコピーされる)
     3367            # 呼び口、属性の場合
     3368            #  ComositeCell 用のもの(j) を対象セル用に clone (@through_list もコピーされる)
    35693369            # p "expand: cloning Join #{j.get_name} #{@name} #{name}"
    35703370            jc = j.clone_for_composite( @name, name, locale )
     
    35743374            # p "cn #{jc.get_name} #{cj.get_cell_elem_name}"
    35753375
    3576             # 対象セルの呼び口または属性の名前に変更
     3376            # 対象セルの呼び口または属性の名前に変更
    35773377            jc.change_name( cj.get_cell_elem_name )
    35783378
    3579             # 対象セルに対する Join のé
    3580 åˆ—
     3379            # 対象セルに対する Join の配列
    35813380            ja << jc
    35823381          end
     
    35903389      dbgPrint "expand : clone #{name}_#{c.get_name}\n"
    35913390
    3592       # セルの clone を生成
     3391      # セルの clone を生成
    35933392#      clone_cell_list[ "#{name}_#{c.get_name}" ] =  c.clone_for_composite( name, global_name, ja )
    35943393      c2 =  c.clone_for_composite( name, global_name, namespacePath, ja, @name, region, plugin, locale )
     
    36003399    clone_cell_list.each { |nm,c|
    36013400      dbgPrint "  cloned: #{nm} = #{c.get_global_name}\n"
    3602       # join の owner を clone されたセルに変更する V1.1.0.25
     3401      # join の owner を clone されたセルに変更する V1.1.0.25
    36033402      c.get_join_list.get_items.each{ |j|
    36043403        j.set_cloned( clone_cell_list[ "#{c.get_local_name}" ] )
     
    36083407  end
    36093408
    3610   #=== CompositeCelltype 指定子リストの設定
     3409  #=== CompositeCelltype 指定子リストの設定
    36113410  def set_specifier_list( spec_list )
    36123411    return if spec_list == nil
     
    36393438
    36403439  def get_var_list
    3641     []   # 空のé
    3642 åˆ—を返す
     3440    []   # 空の配列を返す
    36433441  end
    36443442
     
    36473445  end
    36483446
    3649   #== CompositeCelltype# generate 指定子のæƒ
    3650 å ±
    3651   # CompositeCelltype には generate が指定できないので nil を返す
    3652   # Celltype::@generate を参ç
    3653 §ã®ã“と
     3447  #== CompositeCelltype# generate 指定子の情報
     3448  # CompositeCelltype には generate が指定できないので nil を返す
     3449  # Celltype::@generate を参照のこと
    36543450  def get_celltype_plugin
    36553451    nil
     
    36643460  end
    36653461
    3666   #=== CompositeCelltype# アクティブではない
    3667   # active ではないに加え、å
    3668 ¨ã¦ã®å†
    3669 éƒ¨ã‚»ãƒ«ã®ã‚»ãƒ«ã‚¿ã‚¤ãƒ—が inactive の場合に inactive
    3670   # (å†
    3671 éƒ¨ã®ã‚»ãƒ«ãŒ active または factory を持っている)
     3462  #=== CompositeCelltype# アクティブではない
     3463  # active ではないに加え、全ての内部セルのセルタイプが inactive の場合に inactive
     3464  # (内部のセルが active または factory を持っている)
    36723465  def is_inactive?
    36733466    if @b_active == false then
    36743467      @cell_list.get_items.each{ |c|
    36753468        if c.get_celltype && c.get_celltype.is_inactive? == false then
    3676           # c.get_celltype == nil の場合はセルタイプ未定義ですでにエラー
     3469          # c.get_celltype == nil の場合はセルタイプ未定義ですでにエラー
    36773470          return false
    36783471        end
     
    37143507
    37153508
    3716 #== 構文要素:口を表すクラス(セルタイプの呼び口、受け口)
     3509#== 構文要素:口を表すクラス(セルタイプの呼び口、受け口)
    37173510class Port < BDNode
    37183511# @name::  str
     
    37203513# @port_type::  :CALL, :ENTRY
    37213514# @array_size:: nil: not array, "[]": sizeless, Integer: sized array
    3722 # @reverse_require_cell_path:: NamespacePath :     é€†require呼びå
    3723 ƒã‚»ãƒ«  mikan namespace (呼び口のみ指定可能)
    3724 # @reverse_require_callport_name:: Symbol:  逆require呼びå
    3725 ƒã‚»ãƒ«ã®å‘¼ã³å£å
     3515# @reverse_require_cell_path:: NamespacePath :     逆require呼び元セル  mikan namespace (呼び口のみ指定可能)
     3516# @reverse_require_callport_name:: Symbol:  逆require呼び元セルの呼び口名
    37263517#
    3727 # set_allocator_port によって設定される.設定された場合、このポートはアロケータポートである。
    3728 # @allocator_port:: Port : この呼び口ができるå
    3729 ƒã¨ãªã£ãŸå‘¼ã³å£ã¾ãŸã¯å—け口
    3730 # @allocator_func_decl:: Decl : この呼び口ができるå
    3731 ƒã¨ãªã£ãŸå‘¼ã³å£ã¾ãŸã¯å—け口の関数
    3732 # @allocator_param_decl:: ParamDecl : この呼び口ができるå
    3733 ƒã¨ãªã£ãŸå‘¼ã³å£ã¾ãŸã¯å—け口のパラメータ
     3518# set_allocator_port によって設定される.設定された場合、このポートはアロケータポートである。
     3519# @allocator_port:: Port : この呼び口ができる元となった呼び口または受け口
     3520# @allocator_func_decl:: Decl : この呼び口ができる元となった呼び口または受け口の関数
     3521# @allocator_param_decl:: ParamDecl : この呼び口ができる元となった呼び口または受け口のパラメータ
    37343522#
    3735 # set_specifier によって設定される(
     3523# set_specifier によって設定される(
    37363524# @allocator_instance:: Hash : {"func_param" => [ :RELAY_ALLOC, func_name, param_name, rhs_cp_name, rhs_func_name, rhs_param_name ]}
    37373525#                                               [:INTERNAL_ALLOC, func_name, param_name, rhs_ep_name ]
     
    37393527#                                                                                    function    parameter   rhs
    37403528#
    3741 # @b_require:: bool : require により生成された call port の場合 true
    3742 # @b_has_name:: bool : require : 名前ありのリクワイア呼び口
    3743 # @b_inline:: bool : entry port のみ
    3744 # @b_omit:: bool : omit 指定子が指定された (call port のみ)
    3745 # @b_optional:: bool : call port のみ
    3746 # @b_ref_des:: bool :  ref_desc キーワードが指定された
    3747 # @b_dynamic:: bool :  dynamic キーワードが指定された (呼び口のみ)
     3529# @b_require:: bool : require により生成された call port の場合 true
     3530# @b_has_name:: bool : require : 名前ありのリクワイア呼び口
     3531# @b_inline:: bool : entry port のみ
     3532# @b_omit:: bool : omit 指定子が指定された (call port のみ)
     3533# @b_optional:: bool : call port のみ
     3534# @b_ref_des:: bool :  ref_desc キーワードが指定された
     3535# @b_dynamic:: bool :  dynamic キーワードが指定された (呼び口のみ)
    37483536#
    37493537# optimize::
    3750 # @celltype:: 属するセルタイプ
     3538# @celltype:: 属するセルタイプ
    37513539#
    3752 # :CALL の場合の最適化
    3753 # @b_VMT_useless:: bool                     # VMT 関数テーブルを使用しない
    3754 # @b_skelton_useless:: bool                 # スケルトン関数不要   (true の時、受け口関数を呼出す)
    3755 # @b_cell_unique:: bool                     # 呼びå
    3756 ˆã¯å”¯ä¸€ã®ã‚»ãƒ«
    3757 # @only_callee_port:: Port                  # 唯一の呼びå
    3758 ˆãƒãƒ¼ãƒˆ
    3759 # @only_callee_cell:: Cell                  # 唯一の呼びå
    3760 ˆã‚»ãƒ« (@b_PEPDES_in_CB_useless = true の時有効)
     3540# :CALL の場合の最適化
     3541# @b_VMT_useless:: bool                     # VMT 関数テーブルを使用しない
     3542# @b_skelton_useless:: bool                 # スケルトン関数不要   (true の時、受け口関数を呼出す)
     3543# @b_cell_unique:: bool                     # 呼び先は唯一のセル
     3544# @only_callee_port:: Port                  # 唯一の呼び先ポート
     3545# @only_callee_cell:: Cell                  # 唯一の呼び先セル (@b_PEPDES_in_CB_useless = true の時有効)
    37613546#
    3762 # :ENTRY の場合の最適化(呼び口最適化と同じ変数名を使用)
    3763 # @b_VMT_useless:: bool                     # VMT 関数テーブルが不要
    3764 # @b_skelton_useless:: bool                 # スケルトン関数不要
     3547# :ENTRY の場合の最適化(呼び口最適化と同じ変数名を使用)
     3548# @b_VMT_useless:: bool                     # VMT 関数テーブルが不要
     3549# @b_skelton_useless:: bool                 # スケルトン関数不要
    37653550
    37663551  def initialize( name, sig_path, port_type, array_size = nil, reverse_require_cell_path = nil, reverse_require_entry_port_name = nil )
     
    37783563        @array_size = array_size.eval_const(nil)
    37793564      else
    3780         @array_size = array_size   # これはアロケータ呼び口の場合(å
    3781 ƒã®å‘¼ã³å£ã§æ—¢ã«è©•ä¾¡æ¸ˆã¿ï¼‰
     3565        @array_size = array_size   # これはアロケータ呼び口の場合(元の呼び口で既に評価済み)
    37823566      end
    37833567      if @array_size == nil then
     
    37943578    object = Namespace.find( sig_path )    #1
    37953579    if object == nil then
    3796       # mikan signature の名前が不完å
    3797 ¨
     3580      # mikan signature の名前が不完全
    37983581      cdl_error( "S1075 \'$1\' signature not found" , sig_path )
    37993582    elsif ! object.instance_of?( Signature ) then
    3800       # mikan signature の名前が不完å
    3801 ¨
     3583      # mikan signature の名前が不完全
    38023584      cdl_error( "S1076 \'$1\' not signature" , sig_path )
    38033585    else
     
    38063588    end
    38073589
    3808     # 逆require
     3590    # require
    38093591    @reverse_require_cell_path       = nil
    38103592    @reverse_require_entry_port_name = nil
     
    38163598        @reverse_require_entry_port_name = reverse_require_entry_port_name
    38173599
    3818         # 受け口é
    3819 åˆ—か?
     3600        # 受け口配列か?
    38203601        if array_size then
    38213602          cdl_error( "S1153 $1: cannot be entry port array for fixed join port", @name )
    38223603        end
    38233604
    3824         # 呼び口のセルタイプを探す
     3605        # 呼び口のセルタイプを探す
    38253606        ct_or_cell = Namespace.find( @reverse_require_cell_path )  #1
    38263607        if ct_or_cell.instance_of? Cell then
     
    38373618
    38383619        if ct == nil then
    3839           return    # 既にエラー
    3840         end
    3841 
    3842         # 添え字なしの呼び口é
    3843 åˆ—か?
     3620          return    # 既にエラー
     3621        end
     3622
     3623        # 添え字なしの呼び口配列か?
    38443624        port = ct.find( @reverse_require_entry_port_name )
    38453625        if port == nil || port.get_port_type != :CALL
     
    38633643  end
    38643644
    3865   #=== Port#最適化に関する変数をリセットする
    3866   # Region ごとに最適化のやりなおしをするため、リセットする
     3645  #=== Port#最適化に関する変数をリセットする
     3646  # Region ごとに最適化のやりなおしをするため、リセットする
    38673647  def reset_optimize
    38683648    if @port_type == :CALL then
    38693649      # call port optimize
    3870       @b_VMT_useless = false                     # VMT 不要 (true の時 VMT を介することなく呼出す)
    3871       @b_skelton_useless = false                 # スケルトン関数不要   (true の時、受け口関数を呼出す)
    3872       @b_cell_unique = false                     # 唯一の呼びå
    3873 ˆã‚»ãƒ«
    3874       @only_callee_port = nil                    # 唯一の呼びå
    3875 ˆãƒãƒ¼ãƒˆ
    3876       @only_callee_cell = nil                    # 唯一の呼びå
    3877 ˆã‚»ãƒ«
     3650      @b_VMT_useless = false                     # VMT 不要 (true の時 VMT を介することなく呼出す)
     3651      @b_skelton_useless = false                 # スケルトン関数不要   (true の時、受け口関数を呼出す)
     3652      @b_cell_unique = false                     # 唯一の呼び先セル
     3653      @only_callee_port = nil                    # 唯一の呼び先ポート
     3654      @only_callee_cell = nil                    # 唯一の呼び先セル
    38783655    else
    38793656      # entry port optimize
    38803657      if $unopt then
    3881         # 最適化なし
    3882         @b_VMT_useless = false                     # VMT 不要 (true の時 VMT を介することなく呼出す)
    3883         @b_skelton_useless = false                 # スケルトン関数不要   (true の時、受け口関数を呼出す)
     3658        # 最適化なし
     3659        @b_VMT_useless = false                     # VMT 不要 (true の時 VMT を介することなく呼出す)
     3660        @b_skelton_useless = false                 # スケルトン関数不要   (true の時、受け口関数を呼出す)
    38843661      else
    3885         # 最適化あり
    3886         @b_VMT_useless = true                      # VMT 不要 (true の時 VMT を介することなく呼出す)
    3887         @b_skelton_useless = true                  # スケルトン関数不要   (true の時、受け口関数を呼出す)
     3662        # 最適化あり
     3663        @b_VMT_useless = true                      # VMT 不要 (true の時 VMT を介することなく呼出す)
     3664        @b_skelton_useless = true                  # スケルトン関数不要   (true の時、受け口関数を呼出す)
    38883665      end
    38893666    end
     
    39143691  end
    39153692
    3916   #=== Port# アロケータポートの設定
    3917   #port:: Port : send/receive のあった呼び口または受け口
    3918   #fd:: Decl : 関数の declarator
    3919   #par:: ParamDecl : send/receive のあった引数
    3920   # この呼び口が生成されるもとになった呼び口または受け口のæƒ
    3921 å ±ã‚’設定
     3693  #=== Port# アロケータポートの設定
     3694  #port:: Port : send/receive のあった呼び口または受け口
     3695  #fd:: Decl : 関数の declarator
     3696  #par:: ParamDecl : send/receive のあった引数
     3697  # この呼び口が生成されるもとになった呼び口または受け口の情報を設定
    39223698  def set_allocator_port( port, fd, par )
    39233699    @allocator_port = port
     
    39513727  end
    39523728
    3953   #=== Port# require 呼び口が名前を持つ?
    3954   # require 限定
     3729  #=== Port# require 呼び口が名前を持つ?
     3730  # require 限定
    39553731  def has_name?
    39563732    @b_has_name
     
    39653741  end
    39663742
    3967   #=== Port# omit 指定されている?
     3743  #=== Port# omit 指定されている?
    39683744  def is_omit?
    39693745    @b_omit || ( @signature && @signature.is_empty? )
     
    39743750  end
    39753751
    3976   def set_VMT_useless                     # VMT 関数テーブルを使用しない
     3752  def set_VMT_useless                     # VMT 関数テーブルを使用しない
    39773753   @b_VMT_useless = true
    39783754  end
    39793755
    3980   def set_skelton_useless                 # スケルトン関数不要   (true の時、受け口関数を呼出す)
     3756  def set_skelton_useless                 # スケルトン関数不要   (true の時、受け口関数を呼出す)
    39813757    @b_skelton_useless = true
    39823758  end
    39833759
    3984   def set_cell_unique                     # 呼びå
    3985 ˆã‚»ãƒ«ã¯ä¸€ã¤ã ã‘
     3760  def set_cell_unique                     # 呼び先セルは一つだけ
    39863761    @b_cell_unique = true
    39873762  end
    39883763
    3989   #=== Port# 呼び口/受け口の指定子の設定
    3990   # inline, allocator の指定
     3764  #=== Port# 呼び口/受け口の指定子の設定
     3765  # inline, allocator の指定
    39913766  def set_specifier spec_list
    39923767    spec_list.each { |s|
     
    40333808  end
    40343809
    4035   #=== Port# リレーアロケータ、å†
    4036 éƒ¨ã‚¢ãƒ­ã‚±ãƒ¼ã‚¿ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’設定
    4037   # 呼び口の前方参ç
    4038 §å¯èƒ½ãªã‚ˆã†ã«ã€ã‚»ãƒ«ã‚¿ã‚¤ãƒ—の解釈の最後で行う
     3810  #=== Port# リレーアロケータ、内部アロケータのインスタンスを設定
     3811  # 呼び口の前方参照可能なように、セルタイプの解釈の最後で行う
    40393812  def set_allocator_instance
    40403813    if @allocator_instance_tmp == nil then
     
    40493822      case alloc_type
    40503823      when :INTERNAL_ALLOC
    4051         if ! @owner.instance_of? CompositeCelltype then # ミスを防ぐために composite でなければとした
    4052           cdl_error( "S1081 self allocator not supported yet"  )   # mikan これはサポートされているはず。要調査 12/1/15
     3824        if ! @owner.instance_of? CompositeCelltype then # ミスを防ぐために composite でなければとした
     3825          cdl_error( "S1081 self allocator not supported yet"  )   # mikan これはサポートされているはず。要調査 12/1/15
    40533826          next
    40543827        end
     
    40573830        # OK
    40583831      when :NORMAL_ALLOC
    4059         # ここへ来るのは composite の受け口で右辺が "eEnt.func.param" 形式で指定されていた場合
     3832        # ここへ来るのは composite の受け口で右辺が "eEnt.func.param" 形式で指定されていた場合
    40603833        cdl_error( "S1174 $1 not suitable for lhs, suitable lhs: 'func.param'", "#{ai[1]}.#{ai[3]}.#{ai[4]}" )
    40613834        next
     
    40643837      end
    40653838
    4066       # '=' 左辺(func_name,param_name)は実在するか?
    4067       if @signature then       # signature = nil なら既にエラー
     3839      # '=' 左辺(func_name,param_name)は実在するか?
     3840      if @signature then       # signature = nil なら既にエラー
    40683841        fh = @signature.get_function_head( ai[1] )
    40693842        if fh == nil then
     
    40733846        decl = fh.get_declarator
    40743847        if ! decl.is_function? then
    4075           next   # 既にエラー
     3848          next   # 既にエラー
    40763849        end
    40773850        paramdecl = decl.get_type.get_paramlist.find( ai[2] )
     
    40903863      end
    40913864
    4092       # 重複指定がないか?
     3865      # 重複指定がないか?
    40933866      if @allocator_instance[ "#{@name}_#{ai[1]}_#{ai[2]}" ] then
    40943867        cdl_error( "S1085 duplicate allocator specifier for \'$1_$2\'" , ai[1], ai[2] )
    40953868      end
    40963869
    4097       # 右辺のチェック
     3870      # 右辺のチェック
    40983871      case alloc_type
    40993872      when :INTERNAL_ALLOC
     
    41053878        end
    41063879
    4107         ep_name = ele[1]   # アロケータ受け口名
     3880        ep_name = ele[1]   # アロケータ受け口名
    41083881        ep = @owner.find ep_name.get_path[0]  # mikan "a::b"
    41093882        if ep == nil || ! ep.instance_of?( Port ) || ep.get_port_type != :ENTRY || ! ep.get_signature.is_allocator? then
    41103883          cdl_error( "S1175 $1 not found or not allocator entry port for $2" , ep_name, ai[1] )
    41113884        end
    4112         # 右辺チェック終わり
     3885        # 右辺チェック終わり
    41133886        # ai2 = [ :INTERNAL_ALLOC, func_name, param_name, rhs_ep_name ]
    41143887        ai2 = [ ai[0], ai[1], ai[2], ep_name ]
     
    41223895          #    ele[0]    ele[1][0]  ele[1][1][0]  ele[1][1][1]        ele[1][2]    ele[2]
    41233896          #      name_space_path.Token(1).Token(2) === call_port.func.param
    4124           #  mikan Expression#analyze_cell_join_expression の変種を作成して置き換えるべき
     3897          #  mikan Expression#analyze_cell_join_expression の変種を作成して置き換えるべき
    41253898
    41263899          cdl_error( "S1176 rhs not in 'call_port.func.param' form for for $1_$2" , ai[1], ai[2] )   # S1086
     
    41283901        end
    41293902        func_name = ele[1][2]; cp_name = ele[1][1][1].get_name; param_name = ele[2].to_sym
    4130         cp = @owner.find cp_name    # リレーするå
    4131 ˆã®å‘¼ã³å£
     3903        cp = @owner.find cp_name    # リレーする先の呼び口
    41323904        if cp then
    4133 # mikan cp が呼び口であることのチェック(属性の場合もある)
    4134 # mikan 受け口から受け口へのリレーへの対応 (呼び口から呼び口へのリレーはありえない)  <=== 文法にかかわる事é 
    4135 ï¼ˆå‘¼ã³å£å´ã§ã‚¢ãƒ­ã‚±ãƒ¼ã‚¿ãŒæ±ºå®šã•ã‚Œã‚‹ï¼‰
     3905# mikan cp が呼び口であることのチェック(属性の場合もある)
     3906# mikan 受け口から受け口へのリレーへの対応 (呼び口から呼び口へのリレーはありえない)  <=== 文法にかかわる事項(呼び口側でアロケータが決定される)
    41363907          sig = cp.get_signature
    41373908          if sig && @signature then
     
    41433914            decl = fh.get_declarator
    41443915            if ! decl.is_function? then
    4145               next   # 既にエラー
     3916              next   # 既にエラー
    41463917            end
    41473918            paramdecl = decl.get_type.get_paramlist.find( param_name )
     
    41623933
    41633934            # else
    4164             # sig == nil ならば既にエラー
     3935            # sig == nil ならば既にエラー
    41653936          end
    41663937        else
     
    41733944          next
    41743945        end
    4175         # 右辺チェック終わり
     3946        # 右辺チェック終わり
    41763947        # ai2 = [ :RELAY_ALLOC, func_name, param_name, rhs_cp_name, rhs_func_name, rhs_param_name ]
    41773948        ai2 = [ ai[0], ai[1], ai[2], cp_name, func_name, param_name ]
     
    41863957  end
    41873958
    4188   def is_VMT_useless?                     # VMT 関数テーブルを使用しない
     3959  def is_VMT_useless?                     # VMT 関数テーブルを使用しない
    41893960   @b_VMT_useless
    41903961  end
    41913962
    4192   def is_skelton_useless?                 # スケルトン関数不要   (true の時、受け口関数を呼出す)
     3963  def is_skelton_useless?                 # スケルトン関数不要   (true の時、受け口関数を呼出す)
    41933964    @b_skelton_useless
    41943965  end
    41953966
    4196   def is_cell_unique?                     # 呼びå
    4197 ˆã®ã‚»ãƒ«ã¯ä¸€ã¤ï¼Ÿ
     3967  def is_cell_unique?                     # 呼び先のセルは一つ?
    41983968    @b_cell_unique
    41993969  end
    42003970
    4201   #=== Port# 受け口最適化の設定
    4202   # この受け口を参ç
    4203 §ã™ã‚‹å‘¼ã³å£ãŒ VMT, skelton をå¿
    4204 è¦ã¨ã—ているかどうかを設定
    4205   # 一つでも呼び口がå¿
    4206 è¦ã¨ã—ている(すなわち b_*_useless が false)場合は、
    4207   # この受け口の最適化を false とする
     3971  #=== Port# 受け口最適化の設定
     3972  # この受け口を参照する呼び口が VMT, skelton を必要としているかどうかを設定
     3973  # 一つでも呼び口が必要としている(すなわち b_*_useless が false)場合は、
     3974  # この受け口の最適化を false とする
    42083975  def set_entry_VMT_skelton_useless( b_VMT_useless, b_skelton_useless )
    42093976    if ! b_VMT_useless then
     
    42153982  end
    42163983
    4217   #=== Port# 唯一の結合å
    4218 ˆã‚’設定
    4219   # 最適化で使用
    4220   #  b_VMT_useless == true || b_skelton_useless == true の時に設定される
    4221   #  optional の場合 callee_cell, callee_port が nil となる
     3984  #=== Port# 唯一の結合先を設定
     3985  # 最適化で使用
     3986  #  b_VMT_useless == true || b_skelton_useless == true の時に設定される
     3987  #  optional の場合 callee_cell, callee_port が nil となる
    42223988  def set_only_callee( callee_port, callee_cell )
    42233989    @only_callee_port = callee_port
     
    42253991  end
    42263992
    4227   #=== Port# 唯一の結合å
    4228 ˆãƒãƒ¼ãƒˆã‚’返す(compositeの場合実セル)
    4229   # optional 呼び口で未結合の場合 nil を返す
     3993  #=== Port# 唯一の結合先ポートを返す(compositeの場合実セル)
     3994  # optional 呼び口で未結合の場合 nil を返す
    42303995  def get_real_callee_port
    42313996    if @only_callee_cell then
     
    42343999  end
    42354000
    4236   #=== Port# 唯一の結合å
    4237 ˆã‚»ãƒ«ã‚’返す(compositeの場合実セル)
    4238   # optional 呼び口で未結合の場合 nil を返す
     4001  #=== Port# 唯一の結合先セルを返す(compositeの場合実セル)
     4002  # optional 呼び口で未結合の場合 nil を返す
    42394003  def get_real_callee_cell
    42404004    if @only_callee_cell then
     
    42514015  end
    42524016
    4253   #=== Port# 逆require の結合を生成する
     4017  #=== Port# 逆require の結合を生成する
    42544018  # STAGE: S
    42554019  def create_reverse_require_join cell
     
    42584022    end
    42594023
    4260     # 呼びå
    4261 ƒã‚»ãƒ«ã‚’探す
     4024    # 呼び元セルを探す
    42624025    ct_or_cell = Namespace.find( @reverse_require_cell_path )   # mikan namespace    #1
    42634026    if ct_or_cell.instance_of? Cell then
     
    42654028      ct = cell2.get_celltype
    42664029      if ct == nil then
    4267         return    # 既にエラー
     4030        return    # 既にエラー
    42684031      end
    42694032    elsif ct_or_cell.instance_of? Celltype then
     
    42754038      ct = ct_or_cell
    42764039    else
    4277       # 既にエラー:無視
     4040      # 既にエラー:無視
    42784041      return
    42794042    end
    42804043
    4281     # 結合を生成する
     4044    # 結合を生成する
    42824045    dbgPrint "create_reverse_require_join #{cell2.get_name}.#{@reverse_require_entry_port_name}[] = #{cell.get_name}.#{@name}"
    42834046    nsp = NamespacePath.new( cell.get_name, false, cell.get_namespace )
     
    42914054  end
    42924055
    4293   #=== Port# signature のすべての関数のすべてのパラメータをたどる
    4294   #block:: ブロックを引数として取る(ruby の文法で書かない)
    4295   #  ブロックは3つの引数を受け取る(Port, Decl,      ParamDecl)    Decl: 関数ヘッダ
    4296   # Signature クラスにも each_param がある(同じ働き)
    4297   def each_param # ブロック引数{  |port, func_decl, param_decl| }
    4298     return if @signature == nil                         # signature 未定義(既にエラー)
    4299     fha = @signature.get_function_head_array            # 呼び口または受け口のシグニチャの関数é
    4300 åˆ—
    4301     return if fha == nil                                # nil なら文法エラーで有効値が設定されなかった
    4302 
    4303     pr = Proc.new   # このメソッドのブロック引数を pr に代å
    4304 ¥
     4056  #=== Port# signature のすべての関数のすべてのパラメータをたどる
     4057  #block:: ブロックを引数として取る(ruby の文法で書かない)
     4058  #  ブロックは3つの引数を受け取る(Port, Decl,      ParamDecl)    Decl: 関数ヘッダ
     4059  # Signature クラスにも each_param がある(同じ働き)
     4060  def each_param # ブロック引数{  |port, func_decl, param_decl| }
     4061    return if @signature == nil                         # signature 未定義(既にエラー)
     4062    fha = @signature.get_function_head_array            # 呼び口または受け口のシグニチャの関数配列
     4063    return if fha == nil                                # nil なら文法エラーで有効値が設定されなかった
     4064
     4065    pr = Proc.new   # このメソッドのブロック引数を pr に代入
    43054066    port = self
    4306     fha.each{ |fh|  # fh: FuncHead                      # 関数é
    4307 åˆ—中の各関数頭部
    4308       fd = fh.get_declarator                            # fd: Decl  (関数頭部からDeclarotorを得る)
    4309       if fd.is_function? then                           # fd が関数でなければ、すでにエラー
    4310         fd.get_type.get_paramlist.get_items.each{ |par| # すべてのパラメータについて
     4067    fha.each{ |fh|  # fh: FuncHead                      # 関数配列中の各関数頭部
     4068      fd = fh.get_declarator                            # fd: Decl  (関数頭部からDeclarotorを得る)
     4069      if fd.is_function? then                           # fd が関数でなければ、すでにエラー
     4070        fd.get_type.get_paramlist.get_items.each{ |par| # すべてのパラメータについて
    43114071          pr.call( port, fd, par )
    43124072        }
     
    43154075  end
    43164076
    4317   #=== Port# 逆require指定されている?
     4077  #=== Port# 逆require指定されている?
    43184078  def is_reverse_required?
    43194079    @reverse_require_cell_path != nil
     
    43574117#== Namespace
    43584118#
    4359 # root namespace だけ、Region クラスのインスタンスとして生成される
    4360 # root namespace は、root region をå
    4361 ¼ã­ã‚‹ãŸã‚
     4119# root namespace だけ、Region クラスのインスタンスとして生成される
     4120# root namespace は、root region を兼ねるため
    43624121#
    4363 # @cell_list は Region の場合にのみ持つ (mikan @cell_list 関連は Region に移すべき)
     4122# @cell_list は Region の場合にのみ持つ (mikan @cell_list 関連は Region に移すべき)
    43644123#
    43654124class Namespace < NSBDNode
    4366 # @name::  Symbol     # root の場合 "::" (String)
     4125# @name::  Symbol     # root の場合 "::" (String)
    43674126# @global_name:: str
    43684127# @name_list:: NamedList   Signature,Celltype,CompositeCelltype,Cell,Typedef,Namespace
    43694128# @struct_tag_list:: NamedList : StructType
    4370 # @namespace_list:: Namespace[] : Region は Namespace の子クラスであり、含まれる
     4129# @namespace_list:: Namespace[] : Region は Namespace の子クラスであり、含まれる
    43714130# @signature_list:: Sginature[]
    43724131# @celltype_list:: Celltype[]
     
    43744133# @cell_list:: Cell[]
    43754134# @typedef_list:: Typedef[]
    4376 # @decl_list:: ( Typedef | StructType | EnumType )[]   ä¾å­˜é–¢ä¿‚がある場合に備えて、順番どおりにé
    4377 åˆ—に格納 mikan enum
     4135# @decl_list:: ( Typedef | StructType | EnumType )[]   依存関係がある場合に備えて、順番どおりに配列に格納 mikan enum
    43784136# @const_decl_list:: Decl[]
    4379 # @cache_n_cells:: Integer :  get_n_cells の結果をキャッシュする
    4380 # @cache_generating_region:: Region :  get_n_cells の結果をキャッシュするしているリージョン
    4381 
    4382   # mikan namespace の push, pop
    4383 
    4384   # namespace 階層用のスタック
     4137# @cache_n_cells:: Integer :  get_n_cells の結果をキャッシュする
     4138# @cache_generating_region:: Region :  get_n_cells の結果をキャッシュするしているリージョン
     4139
     4140  # mikan namespace push, pop
     4141
     4142  # namespace 階層用のスタック
    43854143  @@namespace_stack = []      # @@namespace_stack[0] = "::" (generator.rb)
    43864144  @@namespace_sp = -1
    43874145
    4388   # Generator ネスト用のスタック (namespace 階層用のスタックを対比する)
     4146  # Generator ネスト用のスタック (namespace 階層用のスタックを対比する)
    43894147  @@nest_stack_index = -1
    43904148  @@nest_stack = []
     
    43924150  @@root_namespace = nil
    43934151
    4394   # Generator ネスト用スタックの push, pop (クラスメソッド)
     4152  # Generator ネスト用スタックの push, pop (クラスメソッド)
    43954153  def self.push
    43964154    dbgPrint "push Namespace\n"
     
    44124170  end
    44134171
    4414   # namespace 階層用スタックの push, pop (インスタンスメソッド)
     4172  # namespace 階層用スタックの push, pop (インスタンスメソッド)
    44154173  def push ns
    44164174    @@namespace_sp += 1
     
    44344192    if( name == "::" )then
    44354193      if( @@root_namespace != nil )then
    4436         # root は一回のみ生成できる
     4194        # root は一回のみ生成できる
    44374195        raise "try to re-create root namespace"
    44384196      end
     
    44434201      if ns.kind_of? Namespace then
    44444202        dbgPrint "namespace: re-appear #{@name}\n"
    4445         # 登録済み namespace の再登録
     4203        # 登録済み namespace の再登録
    44464204        ns.push ns
    44474205        return
     
    44544212    end
    44554213
    4456     if @@namespace_sp >= 0 then   # root は除外
     4214    if @@namespace_sp >= 0 then   # root は除外
    44574215      @@namespace_stack[@@namespace_sp].new_namespace( self )
    44584216    end
    44594217    push self
    44604218
    4461     @global_name = Namespace.get_global_name    # stack 登録後取る
     4219    @global_name = Namespace.get_global_name    # stack 登録後取る
    44624220    @name_list = NamedList.new( nil, "symbol in namespace '#{@name}'" )
    44634221    @struct_tag_list = NamedList.new( nil, "struct tag" )
     
    44744232    @cache_generating_region = nil
    44754233    if @NamespacePath == nil then
    4476       # root namespace の場合は設定済 (親 namespace が見つからず例外になる)
    4477       set_namespace_path # @NamespacePath の設定
     4234      # root namespace の場合は設定済 (親 namespace が見つからず例外になる)
     4235      set_namespace_path # @NamespacePath の設定
    44784236    end
    44794237  end
     
    44874245  end
    44884246
    4489   #=== Namespace:: global_name を得る
    4490   # parse 中のみこのメソッドは使える
     4247  #=== Namespace:: global_name を得る
     4248  # parse 中のみこのメソッドは使える
    44914249  # STAGE: P
    4492   def self.get_global_name    # parse 中有効
     4250  def self.get_global_name    # parse 中有効
    44934251    if @@namespace_sp <= 0 then
    44944252      return ""
     
    45094267  end
    45104268
    4511   #=== Namespace#セルの個数を得る
    4512   # 子 region が linkunit, node 指定されていれば、含めない(別のリンク単位)
    4513   # プロトタイプ宣言のもののみの個数を含めない
    4514   # mikan namespace 下に cell を置けない仕様になると、このメソッドは Region のものでよい
    4515   # mikan 上記の場合 instance_of? Namespace の条件判定は不要となる
     4269  #=== Namespace#セルの個数を得る
     4270  # 子 region が linkunit, node 指定されていれば、含めない(別のリンク単位)
     4271  # プロトタイプ宣言のもののみの個数を含めない
     4272  # mikan namespace 下に cell を置けない仕様になると、このメソッドは Region のものでよい
     4273  # mikan 上記の場合 instance_of? Namespace の条件判定は不要となる
    45164274  def get_n_cells
    45174275    if @cache_generating_region == $generating_region then
    4518       # このメソッドは繰り返し呼び出されるため、結果をキャッシュする
     4276      # このメソッドは繰り返し呼び出されるため、結果をキャッシュする
    45194277      return @cache_n_cells
    45204278    end
     
    45224280    count = 0
    45234281    @cell_list.each{ |c|
    4524       # 定義かプロトタイプ宣言だけかは、new_cell の段階で判断できないため、カウントしなおす
     4282      # 定義かプロトタイプ宣言だけかは、new_cell の段階で判断できないため、カウントしなおす
    45254283      if c.get_f_def == true then
    45264284        # print "get_n_cells: cell: #{c.get_name}\n"
     
    45334291        count += ns.get_n_cells
    45344292      else
    4535         # ns は Region である
     4293        # ns は Region である
    45364294        rt = ns.get_region_type
    45374295        # print "get_n_cells: region: #{ns.get_name}: #{rt}\n"
    45384296        if rt == :NODE || rt == :LINKUNIT then
    4539           # 別の linkunit なので加算しない
     4297          # 別の linkunit なので加算しない
    45404298        else
    45414299          count += ns.get_n_cells
     
    45494307  end
    45504308
    4551   #=== Namespace.find : in_path で示されるオブジェクトを探す
     4309  #=== Namespace.find : in_path で示されるオブジェクトを探す
    45524310  #in_path:: NamespacePath
    4553   #in_path:: Array : 古い形式
     4311  #in_path:: Array : 古い形式
    45544312  #  path [ "::", "ns1", "ns2" ]   absolute
    45554313  #  path [ "ns1", "ns2" ]         relative
     
    45664324      if name == "::" then
    45674325        i = 1
    4568         name = path[i]   # 構文的にå¿
    4569 ãšå­˜åœ¨
     4326        name = path[i]   # 構文的に必ず存在
    45704327        object = @@root_namespace.find( name )  # root
    45714328      else
    4572         # 相対パス
     4329        # 相対パス
    45734330        i = 0
    45744331        object = @@namespace_stack[@@namespace_sp].find_one( name ) # crrent
     
    46034360
    46044361      unless object.kind_of?( Namespace ) then
    4605         # クラスメソッドå†
    4606 ã§ cdl_error を呼び出すことはできない
    4607         # また、前方参ç
    4608 §å¯¾å¿œå¾Œã€æ­£ç¢ºãªè¡Œç•ªå·ãŒå‡ºãªã„問題も生じる
     4362        # クラスメソッド内で cdl_error を呼び出すことはできない
     4363        # また、前方参照対応後、正確な行番号が出ない問題も生じる
    46094364        # cdl_error( "S1092 \'$1\' not namespace" , name )
    4610         # このメソッドから nil が帰った場合 "not found" が出るので、ここでは出さない
     4365        # このメソッドから nil が帰った場合 "not found" が出るので、ここでは出さない
    46114366        return nil
    46124367      end
     
    46244379  end
    46254380
    4626   #=== Namespace# namespace から探す。見つからなければ親 namespace から探す
     4381  #=== Namespace# namespace から探す。見つからなければ親 namespace から探す
    46274382  def self.find_one( name )
    46284383    return @@namespace_stack[@@namespace_sp].find_one( name )
     
    46324387
    46334388    object = find( name )
    4634     # これは出すぎ
     4389    # これは出すぎ
    46354390    # dbgPrint "in '#{@name}' find '#{name}' object #{object ? object.class : "Not found"}\n"
    46364391
     
    46494404
    46504405  def self.find_tag( name )
    4651     # mikan tag : namespace の path に対応しない
    4652     # namespace の中にあっても、root namespace にあるものと見なされる
    4653     # よって カレント namespace から根に向かって探す
     4406    # mikan tag : namespace の path に対応しない
     4407    # namespace の中にあっても、root namespace にあるものと見なされる
     4408    # よって カレント namespace から根に向かって探す
    46544409    i = @@namespace_sp
    46554410    while i >= 0
     
    47274482  end
    47284483
    4729   #=== Namespace# 参ç
    4730 §ã•ã‚Œã¦ã„るが、未定義のセルを探す
    4731   # プロトタイプ宣言だけで定義されていないケースをエラーとする
    4732   # 受動の未結合セルについて警告する
     4484  #=== Namespace# 参照されているが、未定義のセルを探す
     4485  # プロトタイプ宣言だけで定義されていないケースをエラーとする
     4486  # 受動の未結合セルについて警告する
    47334487  def check_ref_but_undef
    47344488    @cell_list.each { |c|
    4735       if ! c.get_f_def then   # Namespace の @cell_list にはプロトタイプが含まれるケースあり
     4489      if ! c.get_f_def then   # Namespace の @cell_list にはプロトタイプが含まれるケースあり
    47364490        if c.get_f_ref then
    47374491          cdl_error( "S1093 $1 : undefined cell" , c.get_namespace_path.get_path_str )
     
    47534507  end
    47544508
    4755   #=== Namespace# セルの受け口の参ç
    4756 §ã‚«ã‚¦ãƒ³ãƒˆã‚’設定する
     4509  #=== Namespace# セルの受け口の参照カウントを設定する
    47574510  def set_port_reference_count
    47584511    @cell_list.each { |c|
     
    47704523
    47714524  def new_structtype( struct )
    4772     # struct.set_owner self   # StructType (Namespace) # StructType は BDNode ではない
     4525    # struct.set_owner self   # StructType (Namespace) # StructType は BDNode ではない
    47734526    dup = @struct_tag_list.get_item(struct.get_name)
    47744527    if dup != nil then
    47754528      if struct.same? dup then
    4776         # 同じものが typedef された
     4529        # 同じものが typedef された
    47774530        # p "#{struct.get_name}"
    47784531        return
     
    47984551      if typedef_type.get_type_str == dup_type.get_type_str &&
    47994552          typedef_type.get_type_str_post == dup_type.get_type_str_post then
    4800         # 同じものが typedef された
    4801         # ここへ来るのは C で関数ポインタを typedef しているケース
    4802         # 以下のように二重に定義されている場合は type_specifier_qualifier_list として扱われる
     4553        # 同じものが typedef された
     4554        # ここへ来るのは C で関数ポインタを typedef しているケース
     4555        # 以下のように二重に定義されている場合は type_specifier_qualifier_list として扱われる
    48034556        #    typedef long LONG;
    48044557        #    typedef long LONG;
    4805         # bnf.y.rb では declarator に TYPE_NAME を許さないので、ここへ来ることはない
     4558        # bnf.y.rb では declarator に TYPE_NAME を許さないので、ここへ来ることはない
    48064559        # p "#{typedef.get_declarator.get_type.get_type_str} #{typedef.get_name} #{typedef.get_declarator.get_type.get_type_str_post}"
    48074560        return
     
    48444597  def new_const_decl( decl )
    48454598    decl.set_owner self   # Decl (Namespace:const)
    4846     if ! decl.is_const? then                    # const 修飾さていること
     4599    if ! decl.is_const? then                    # const 修飾さていること
    48474600      if decl.is_type?( PtrType ) then
    48484601        cdl_error( "S1094 $1: pointer is not constant. check \'const\'" , decl.get_name )
     
    48524605    elsif ! decl.is_type?( IntType ) && ! decl.is_type?( FloatType ) &&
    48534606        ! decl.is_type?( BoolType ) && ! decl.is_type?( PtrType ) then
    4854                                             # IntType, FloatType であること
     4607                                            # IntType, FloatType であること
    48554608      cdl_error( "S1096 $1: should be int, float, bool or pointer type" , decl.get_name )
    4856     elsif decl.get_initializer == nil then   # 初期値を持つこと
     4609    elsif decl.get_initializer == nil then   # 初期値を持つこと
    48574610      cdl_error( "S1097 $1: has no initializer" , decl.get_name )
    4858 #    elsif decl.get_initializer.eval_const(nil) == nil then  #eval_const は check_init で呼出されるので二重チェック
    4859 #                                            # mikan 初期値が型に対し適切であること
     4611#    elsif decl.get_initializer.eval_const(nil) == nil then  #eval_const は check_init で呼出されるので二重チェック
     4612#                                            # mikan 初期値が型に対し適切であること
    48604613#      cdl_error( "S1098 $1: has unsuitable initializer" , decl.get_name )
    48614614    else
     
    48794632 ###
    48804633
    4881   #=== Namespace# すべてのセルの require ポートを設定
     4634  #=== Namespace# すべてのセルの require ポートを設定
    48824635  # STAGE: S
    48834636  def set_require_join
     
    48854638      ct.set_require_join
    48864639    }
    4887     # すべての namespace について require ポートをセット
     4640    # すべての namespace について require ポートをセット
    48884641    @namespace_list.each{ |ns|
    48894642      ns.set_require_join
     
    48914644  end
    48924645
    4893   #=== Namespace# Join への definition の設定とチェック
    4894   # セルタイプに属するすべてのセルに対して実施
     4646  #=== Namespace# Join への definition の設定とチェック
     4647  # セルタイプに属するすべてのセルに対して実施
    48954648  def set_definition_join
    4896     # celltype のコードを生成
     4649    # celltype のコードを生成
    48974650    @cell_list.each { |c|
    48984651      dbgPrint "set_definition_join #{c.get_name}\n"
     
    49044657  end
    49054658
    4906   #=== Namespace# セルの結合をチェックする
     4659  #=== Namespace# セルの結合をチェックする
    49074660  def check_join
    49084661    @cell_list.each { |c|
     
    49164669  end
    49174670
    4918   #== Namespace# ルートか?
    4919   # ルートネームスペース と ルートリージョンは同じ
     4671  #== Namespace# ルートか?
     4672  # ルートネームスペース と ルートリージョンは同じ
    49204673  def is_root?
    49214674    @name == "::"
    49224675  end
    49234676
    4924   #== Namespace# ルートを得る
    4925   # ルートリージョンとルートネームスペースは同じオブジェクト
     4677  #== Namespace# ルートを得る
     4678  # ルートリージョンとルートネームスペースは同じオブジェクト
    49264679  def self.get_root
    49274680    @@root_namespace
     
    49454698#
    49464699# available if definition is Port
    4947 # @cell_name:: string : 右辺のセルの名前
    4948 # @cell:: Cell  : 右辺のセル
    4949 # @celltype:: Celltype : 右辺のセルタイプ
    4950 # @port_name:: string : 右辺の受け口名
    4951 # @port:: Port : 右辺の受け口
     4700# @cell_name:: string : 右辺のセルの名前
     4701# @cell:: Cell  : 右辺のセル
     4702# @celltype:: Celltype : 右辺のセルタイプ
     4703# @port_name:: string : 右辺の受け口名
     4704# @port:: Port : 右辺の受け口
    49524705# @array_member:: rhs array : available only for first appear in the same name
    49534706# @array_member2:: Join array : available only for first appear in the same name
    4954 # @rhs_subscript:: nil : not array, >=0: 右辺の添数
     4707# @rhs_subscript:: nil : not array, >=0: 右辺の添数
    49554708#
    49564709
    49574710# @through_list::  @cp_through_list + @region_through_list
    4958 #  以下の構造を持つ(@cp_through_list の構造はå
    4959 ±é€šï¼‰
    4960 # @cp_through_list::  呼び口に指定された through
     4711#  以下の構造を持つ(@cp_through_list の構造は共通)
     4712# @cp_through_list::  呼び口に指定された through
    49614713#   [ [plugin_name, cell_name, plugin_arg], [plugin_name2, cell_name2, plugin_arg], ... ]
    4962 # @region_through_list::  region に指定された through
     4714# @region_through_list::  region に指定された through
    49634715#   [ [plugin_name, cell_name, plugin_arg, region], [plugin_name2, cell_name2, plugin_arg, region2], ... ]
    49644716#
    4965 # @through_generated_list:: [Plugin_class object, ...]: @through_list に対応
    4966 # @region_through_generated_list:: [Plugin_class object, ...]: @region_through_list に対応
     4717# @through_generated_list:: [Plugin_class object, ...]: @through_list に対応
     4718# @region_through_generated_list:: [Plugin_class object, ...]: @region_through_list に対応
    49674719#
    49684720
    49694721  include PluginModule
    49704722
    4971   #=== Join# 初期化
    4972   #name:: string: 名前(属性名、呼び口名)
    4973   #subscript:: Nil=非é
    4974 åˆ—, -1="[]", N="[N]"
    4975   #rhs:: Expression: 右辺の式
     4723  #=== Join# 初期化
     4724  #name:: string: 名前(属性名、呼び口名)
     4725  #subscript:: Nil=非配列, -1="[]", N="[N]"
     4726  #rhs:: Expression: 右辺の式
    49764727  def initialize( name, subscript, rhs, locale = nil )
    49774728    # dbgPrint "Join#new: #{name}, #{subscript} #{rhs.eval_const(nil)}\n"
     
    49854736    @name = name
    49864737    if subscript.instance_of?( Expression ) then
    4987        #mikan é
    4988 åˆ—添数が整数であることを未チェック
     4738       #mikan 配列添数が整数であることを未チェック
    49894739       @subscript = subscript.eval_const(nil)
    49904740       if @subscript == nil then
     
    49984748    @definition = nil
    49994749
    5000     # é
    5001 åˆ—要素を設定
    5002     # 本当は、初出の要素のみ設定するのが適当
    5003     # new_join で add_array_member の中で初出要素の array_member に対し設定する
     4750    # 配列要素を設定
     4751    # 本当は、初出の要素のみ設定するのが適当
     4752    # new_join で add_array_member の中で初出要素の array_member に対し設定する
    50044753    if @subscript == -1 then
    50054754      @array_member  = [self]
     
    50194768  end
    50204769
    5021   #===  Join# 左辺に対応する celltype の定義を設定するとともにチェックする
     4770  #===  Join# 左辺に対応する celltype の定義を設定するとともにチェックする
    50224771  # STAGE:   S
    50234772  #
    5024   #     ä»£å
    5025 ¥å¯èƒ½ã‹ãƒã‚§ãƒƒã‚¯ã™ã‚‹
    5026   #definition:: Decl (attribute,varの時) または Port (callの時) または nil (definition が見つからなかった時)
     4773  #     代入可能かチェックする
     4774  #definition:: Decl (attribute,varの時) または Port (callの時) または nil (definition が見つからなかった時)
    50274775
    50284776  def set_definition( definition )
     
    50304778    dbgPrint "set_definition: #{@owner.get_name}.#{@name} = #{definition.class}\n"
    50314779
    5032     # 二重チェックの防止
     4780    # 二重チェックの防止
    50334781    if @definition then
    5034       # set_definition を個別に行うケースで、二重に行われる可能性がある(異常ではない)
    5035       # 二重に set_definition が実行されると through が二重に適用されてしまう
     4782      # set_definition を個別に行うケースで、二重に行われる可能性がある(異常ではない)
     4783      # 二重に set_definition が実行されると through が二重に適用されてしまう
    50364784      # cdl_warning( "W9999 $1, internal error: set_definition duplicate", @name )
    50374785      return
     
    50404788    @definition = definition
    50414789
    5042     # mikan 左辺値、右辺値の型チェックなど
     4790    # mikan 左辺値、右辺値の型チェックなど
    50434791    if @definition.instance_of?( Decl ) then
    50444792      check_var_init
    50454793    elsif @definition.instance_of?( Port ) then
    50464794      check_call_port_init
    5047       if @definition.get_port_type == :CALL then   # :ENTRY ならエラー。無視しない
     4795      if @definition.get_port_type == :CALL then   # :ENTRY ならエラー。無視しない
    50484796        check_and_gen_through
    5049         create_allocator_join  # through プラグイン生成した後でないと、挿å
    5050 ¥å‰ã®ã‚»ãƒ«ã®ã‚¢ãƒ­ã‚±ãƒ¼ã‚¿ã‚’結合してしまう
     4797        create_allocator_join  # through プラグイン生成した後でないと、挿入前のセルのアロケータを結合してしまう
    50514798      end
    50524799    elsif @definition == nil then
     
    50574804  end
    50584805
    5059   #=== Join# 変数の初期化チェック
     4806  #=== Join# 変数の初期化チェック
    50604807  def check_var_init
    5061     # attribute, var の場合
     4808    # attribute, var の場合
    50624809    if @definition.get_kind == :ATTRIBUTE then
    50634810#        check_cell_cb_init( definition.get_type, @rhs )
    5064       # 右辺で初期化可能かチェック
     4811      # 右辺で初期化可能かチェック
    50654812      @definition.get_type.check_init( @locale, @definition.get_identifier, @rhs, :ATTRIBUTE )
    50664813    elsif @definition.get_kind == :VAR then
    5067       # var は初期化できない
     4814      # var は初期化できない
    50684815      cdl_error( "S1100 $1: cannot initialize var" , @name )
    50694816    else
     
    50734820  end
    50744821
    5075   #=== Join# 呼び口の初期化チェック
     4822  #=== Join# 呼び口の初期化チェック
    50764823  def check_call_port_init
    50774824    ### Port
    50784825
    5079     # 左辺は受け口か(受け口を初期化しようとしている)?
     4826    # 左辺は受け口か(受け口を初期化しようとしている)?
    50804827    if @definition.get_port_type == :ENTRY then
    50814828      cdl_error( "S1101 \'$1\' cannot initialize entry port" , @name )
     
    50834830    end
    50844831
    5085 #      # é
    5086 åˆ—添数の整合性チェック
    5087 #      # 呼び口の定義で、非é
    5088 åˆ—なら添数なし、添数なしé
    5089 åˆ—なら添数なし、添数ありé
    5090 åˆ—なら添数あり
     4832#      # 配列添数の整合性チェック
     4833#      # 呼び口の定義で、非配列なら添数なし、添数なし配列なら添数なし、添数あり配列なら添数あり
    50914834    as = @definition.get_array_size
    50924835    if ( @subscript == nil && as != nil ) then
     
    51114854#    end
    51124855
    5113     # mikan Expression の get_type で型導出させる方がスマート
    5114     # mikan '=' の左辺がé
    5115 åˆ—かどうか未チェック
    5116     #(1) '=' の右辺は "Cell.ePort" の形式か?
    5117     #     æ¼”算子は "."  かつ "." の左辺が :IDENTIFIER
    5118     #     "." の右辺はチェック不要 (synatax 的に :IDENTIFIER)
    5119     #(2) "Cell" は存在するか?(名前が一致するものはあるか)
    5120     #(3) "Cell" は cell か?
    5121     #(4) "Cell" の celltype は有効か? (無効なら既にエラー)
    5122     #(5) "ePort" は "Cell" の celltype å†
    5123 ã«å­˜åœ¨ã™ã‚‹ã‹ï¼Ÿ
    5124     #(6) "ePort" は entry port か?
    5125     #(7) signature は一致するか
    5126 
    5127     # 右辺がない(以前の段階でエラー)
     4856    # mikan Expression の get_type で型導出させる方がスマート
     4857    # mikan '=' の左辺が配列かどうか未チェック
     4858    #(1) '=' の右辺は "Cell.ePort" の形式か?
     4859    #     演算子は "."  かつ "." の左辺が :IDENTIFIER
     4860    #     "." の右辺はチェック不要 (synatax 的に :IDENTIFIER)
     4861    #(2) "Cell" は存在するか?(名前が一致するものはあるか)
     4862    #(3) "Cell" は cell か?
     4863    #(4) "Cell" の celltype は有効か? (無効なら既にエラー)
     4864    #(5) "ePort" は "Cell" の celltype 内に存在するか?
     4865    #(6) "ePort" は entry port か?
     4866    #(7) signature は一致するか
     4867
     4868    # 右辺がない(以前の段階でエラー)
    51284869    return unless @rhs
    51294870
    5130     # cCall = composite.cCall; のチェック.この形式は属性用
    5131     # 呼び口を export するには cCall => composite.cCall; の形式を用いる
     4871    # cCall = composite.cCall; のチェック.この形式は属性用
     4872    # 呼び口を export するには cCall => composite.cCall; の形式を用いる
    51324873    if @rhs.instance_of?( Array ) == true && @rhs[0] == :COMPOSITE then
    51334874      cdl_error( "S1107 to export port, use \'cCall => composite.cCall\'"  )
     
    51374878    end
    51384879
    5139     # 右辺の Expression の要素を取り出す
     4880    # 右辺の Expression の要素を取り出す
    51404881    ret = @rhs.analyze_cell_join_expression
    51414882    if ret == nil then   #1
     
    51454886
    51464887    nsp, @rhs_subscript, @port_name = ret[0], ret[1], ret[2]
    5147     @cell_name = nsp.get_name     # mikan ns::cellname の形式の考æ
    5148 ®
    5149 
    5150     # composite の定義の中なら object は結合å
    5151 ˆ cell か、見つからなければ nil が返る
    5152     # composite の定義外なら false が返る
     4888    @cell_name = nsp.get_name     # mikan ns::cellname の形式の考慮
     4889
     4890    # composite の定義の中なら object は結合先 cell か、見つからなければ nil が返る
     4891    # composite の定義外なら false が返る
    51534892    object = CompositeCelltype.find( @cell_name )
    51544893    if object == false then
    5155 #     mikan 左辺が namespace に対応していないため。 path にして find
     4894#     mikan 左辺が namespace に対応していないため。 path にして find
    51564895      # p nsp.get_path_str, nsp.get_path
    51574896      object = Namespace.find( nsp )    #1
     
    51724911      object.set_f_ref
    51734912
    5174       # 右辺のセルのセルタイプ
     4913      # 右辺のセルのセルタイプ
    51754914      celltype = object.get_celltype
    51764915
     
    51854924          cdl_error( "S1113 \'$1\' signature mismatch" , @port_name )
    51864925        elsif object2.get_array_size then
    5187           # 受け口é
    5188 åˆ—
     4926          # 受け口配列
    51894927
    51904928          unless @rhs_subscript then
    5191             # 右辺に添数指定がなかった
     4929            # 右辺に添数指定がなかった
    51924930            cdl_error( "S1114 \'$1\' should be array" , @port_name )
    51934931          else
     
    51954933            as = object2.get_array_size
    51964934            if( as.kind_of?( Integer ) && as <= @rhs_subscript )then
    5197               # 受け口é
    5198 åˆ—の大きさに対し、右辺の添数が同じか大きい
     4935              # 受け口配列の大きさに対し、右辺の添数が同じか大きい
    51994936              cdl_error( "S1115 $1[$2]: subscript out of range (< $3)" , @port_name, @rhs_subscript, as )
    52004937            else
     
    52034940              @celltype = celltype
    52044941              @port = object2
    5205               # 右辺のセルの受け口 object2 を参ç
    5206 §æ¸ˆã¿ã«ã™ã‚‹
     4942              # 右辺のセルの受け口 object2 を参照済みにする
    52074943              # object2: Port, @definition: Port
    52084944              @cell.set_entry_port_max_subscript( @port, @rhs_subscript )
     
    52144950          end
    52154951        elsif @rhs_subscript then
    5216           # 受け口é
    5217 åˆ—でないのに右辺で添数指定されている
     4952          # 受け口配列でないのに右辺で添数指定されている
    52184953          cdl_error( "S1116 \'$1\' entry port is not array" , @port_name )
    52194954        else
     
    52234958          @celltype = celltype
    52244959
    5225           # 右辺のセル object の受け口 object2 を参ç
    5226 §æ¸ˆã¿ã«ã™ã‚‹
     4960          # 右辺のセル object の受け口 object2 を参照済みにする
    52274961          # object2: Port, @definition: Port
    52284962
    52294963          # debug
    52304964          # p "rhs:  #{@cell}  #{@cell.get_name}"
    5231         end  # end of port (object2) チェック
     4965        end  # end of port (object2) チェック
    52324966
    52334967        #else
    5234         #  celltype == nil (すでにエラー)
    5235       end  # end of celltyep チェック
     4968        #  celltype == nil (すでにエラー)
     4969      end  # end of celltyep チェック
    52364970
    52374971
    52384972      check_region( object )
    52394973
    5240     end  # end of cell (object) チェック
    5241 
    5242   end
    5243 
    5244   #=== Join# アロケータの結合を生成
     4974    end  # end of cell (object) チェック
     4975
     4976  end
     4977
     4978  #=== Join# アロケータの結合を生成
    52454979  # STAGE: S
    5246   #cell::  呼び口の結合å
    5247 ˆã®ã‚»ãƒ«
     4980  #cell::  呼び口の結合先のセル
    52484981  #
    5249   # ここでは呼び口側に生成されるアロケータ呼び口の結合を生成
    5250   # 受け口側は Cell の set_specifier_list で生成
    5251   #  a[*] のå†
    5252 å®¹ã¯ Cell の set_specifier_list を参ç
    5253 §
     4982  # ここでは呼び口側に生成されるアロケータ呼び口の結合を生成
     4983  # 受け口側は Cell の set_specifier_list で生成
     4984  #  a[*] の内容は Cell の set_specifier_list を参照
    52544985  def create_allocator_join
    52554986
    5256     cell = get_rhs_cell2   # 右辺のセルを得る
     4987    cell = get_rhs_cell2   # 右辺のセルを得る
    52574988    port = get_rhs_port2
    52584989
    5259     if( cell && cell.get_allocator_list ) then      # cell == nil なら既にエラー
     4990    if( cell && cell.get_allocator_list ) then      # cell == nil なら既にエラー
    52604991
    52614992      dbgPrint "create_allocator_join: #{@owner.get_name}.#{@name}=>#{cell ? cell.get_name : "nil"}\n"
     
    52644995
    52654996        if( a[0+1] == port && a[1+1] == @rhs_subscript )then
    5266           # 名前の一致するものの結合を生成する
    5267           # 過不足は、別途チェックされる
     4997          # 名前の一致するものの結合を生成する
     4998          # 過不足は、別途チェックされる
    52684999          cp_name = :"#{@name}_#{a[2+1]}_#{a[3+1]}"
    52695000          # p "creating allocator join #{cp_name} #{@subscript} #{a[1+1]}"
     
    52805011  end
    52815012
    5282   #=== Join# リージョン間の結合をチェック
    5283   # リージョン間の through による @region_through_list の作成
    5284   # 実際の生成は check_and_gen_through で行う
    5285   # mikan Cell#distance とRegion へたどり着くまでための処理にå
    5286 ±é€šéƒ¨åˆ†ãŒå¤šã„
     5013  #=== Join# リージョン間の結合をチェック
     5014  # リージョン間の through による @region_through_list の作成
     5015  # 実際の生成は check_and_gen_through で行う
     5016  # mikan Cell#distance とRegion へたどり着くまでための処理に共通部分が多い
    52875017  def check_region( object )
    52885018
     
    52915021    # print "DOMAIN: check_region #{@owner.get_name}.#{@name} => #{object.get_name}\n"
    52925022
    5293     # プラグインで生成されたなかでは生成しない
    5294     # さもないとプラグイン生成されたものとの間で、無限に生成される
     5023    # プラグインで生成されたなかでは生成しない
     5024    # さもないとプラグイン生成されたものとの間で、無限に生成される
    52955025##    if Generator.get_nest >= 1 then
    5296 ##    if Generator.get_plugin then     # mikan これはå¿
    5297 è¦ï¼Ÿ (意味解析段階での実行になるので不適切)
     5026##    if Generator.get_plugin then     # mikan これは必要? (意味解析段階での実行になるので不適切)
    52985027    if @owner.get_plugin.kind_of?( ThroughPlugin ) then
    5299       # プラグイン生成されたセルの場合、結合チェックのみ
     5028      # プラグイン生成されたセルの場合、結合チェックのみ
    53005029      return
    53015030    end
    53025031
    5303     # region のチェック
    5304     r1 = @owner.get_region      # 呼び口セルの region
    5305     r2 = object.get_region      # 受け口セルの region
    5306 
    5307     if ! r1.equal? r2 then      # 同一 region なら呼出し可能
     5032    # region のチェック
     5033    r1 = @owner.get_region      # 呼び口セルの region
     5034    r2 = object.get_region      # 受け口セルの region
     5035
     5036    if ! r1.equal? r2 then      # 同一 region なら呼出し可能
    53085037
    53095038      f1 = r1.get_family_line
     
    53125041      len2 = f2.length
    53135042
    5314       # 不一致になるところ(å
    5315 „弟)を探す
    5316       i = 1  # i = 0 は :RootRegion なのでå¿
    5317 ãšä¸€è‡´
     5043      # 不一致になるところ(兄弟)を探す
     5044      i = 1  # i = 0 は :RootRegion なので必ず一致
    53185045      while( i < len1 && i < len2 )
    53195046        if( f1[i] != f2[i] )then
     
    53235050      end
    53245051
    5325       sibling_level = i     # å
    5326 „弟となるレベル、もしくはどちらか一方が終わったレベル
     5052      sibling_level = i     # 兄弟となるレベル、もしくはどちらか一方が終わったレベル
    53275053
    53285054      dbgPrint "sibling_level: #{i}\n"
     
    53375063
    53385064
    5339       # 呼び側について呼びå
    5340 ƒã®ãƒ¬ãƒ™ãƒ«ã‹ã‚‰å
    5341 „弟レベルまで(out_through をチェックおよび挿å
    5342 ¥ï¼‰
     5065      # 呼び側について呼び元のレベルから兄弟レベルまで(out_through をチェックおよび挿入)
    53435066      i = len1 -1
    53445067      if b_to_through then
     
    53645087
    53655088        out_through_list.each { |ol|
    5366           if ol[0] then    # plugin_name が指定されていなければ登録しない
     5089          if ol[0] then    # plugin_name が指定されていなければ登録しない
    53675090            plugin_arg = CDLString.remove_dquote ol[1]
    53685091            through = [ ol[0], :"Join_out_through_", plugin_arg, f1[i], f1[i-1], :OUT_THROUGH, region_count]
     
    53775100      end
    53785101
    5379       # å
    5380 „弟レベルにおいて(to_through をチェックおよび挿å
    5381 ¥ï¼‰
     5102      # 兄弟レベルにおいて(to_through をチェックおよび挿入)
    53825103      if f1[sibling_level] && f2[sibling_level] then
    53835104        dbgPrint "going from #{f1[sibling_level].get_name} to #{f2[sibling_level].get_name}\n"
    53845105        found = 0
    5385         region_count = f1[i].next_to_through_count( f2[sibling_level].get_name )   # to_through の region カウント
     5106        region_count = f1[i].next_to_through_count( f2[sibling_level].get_name )   # to_through の region カウント
    53865107        f1[sibling_level].get_to_through_list.each { |t|
    5387           if t[0][0] == f2[sibling_level].get_name then   # region 名が一致するか ?
    5388             if t[1] then    # plugin_name が指定されていなければ登録しない
     5108          if t[0][0] == f2[sibling_level].get_name then   # region 名が一致するか ?
     5109            if t[1] then    # plugin_name が指定されていなければ登録しない
    53895110              plugin_arg = CDLString.remove_dquote t[2]
    53905111              through = [ t[1], :"Join_to_through__", plugin_arg, f1[sibling_level], f2[sibling_level], :TO_THROUGH, region_count ]
     
    54095130      end
    54105131
    5411       # 受け側についてå
    5412 „弟レベルから受け側のレベルまで(in_through をチェックおよび挿å
    5413 ¥ï¼‰
     5132      # 受け側について兄弟レベルから受け側のレベルまで(in_through をチェックおよび挿入)
    54145133      if b_to_through then
    5415         i = sibling_level + 1      # to_through を経た場合、最初の in_through は適用しない
     5134        i = sibling_level + 1      # to_through を経た場合、最初の in_through は適用しない
    54165135      else
    54175136        i = sibling_level
     
    54365155        end
    54375156        in_through_list.each { |il|
    5438           if il[0] then    # plugin_name が指定されていなければ登録しない
     5157          if il[0] then    # plugin_name が指定されていなければ登録しない
    54395158            plugin_arg = CDLString.remove_dquote il[1]
    54405159            through = [ il[0], :"Join_in_through_", plugin_arg, f2[i-1], f2[i],:IN_THROUGH, region_count ]
     
    54495168
    54505169
    5451   #=== Join# 生成しないリージョンへの結合かチェック
    5452   # 右辺のセルが、生成されないリージョンにあればエラー
    5453   # 右辺は、プラグイン生成されたセルがあれば、それを対象とする
     5170  #=== Join# 生成しないリージョンへの結合かチェック
     5171  # 右辺のセルが、生成されないリージョンにあればエラー
     5172  # 右辺は、プラグイン生成されたセルがあれば、それを対象とする
    54545173  def check_region2
    54555174    lhs_cell = @owner
    54565175
    5457     # 生成しないリージョンのセルへの結合か?
     5176    # 生成しないリージョンのセルへの結合か?
    54585177    # if join.get_cell && ! join.get_cell.is_generate? then
    5459     # if get_rhs_cell && ! get_rhs_cell.is_generate? then # composite セルがプロタイプ宣言の場合例外
     5178    # if get_rhs_cell && ! get_rhs_cell.is_generate? then # composite セルがプロタイプ宣言の場合例外
    54605179    # print "Link root: (caller #{@owner.get_name}) '#{@owner.get_region.get_link_root.get_name}'"
    54615180    # print " #{@owner.get_region.get_link_root == get_rhs_region.get_link_root ? "==" : "!="} "
     
    54705189      end
    54715190    else
    5472       # rhs のセルが存在しなかった (既にエラー)
     5191      # rhs のセルが存在しなかった (既にエラー)
    54735192    end
    54745193  end
     
    54785197  end
    54795198
    5480   #=== Join# specifier を設定
     5199  #=== Join# specifier を設定
    54815200  # STAGE: B
    5482   # set_specifier_list は、join の解析の最後で呼び出される
    5483   # through 指定子を設定
    5484   #  check_and_gen_through を呼出して、through 生成
     5201  # set_specifier_list は、join の解析の最後で呼び出される
     5202  # through 指定子を設定
     5203  #  check_and_gen_through を呼出して、through 生成
    54855204  def set_specifier_list( specifier_list )
    54865205
     
    54905209        # set plugin_name
    54915210        plugin_name = s[1].to_s
    5492         plugin_name[0] = "#{plugin_name[/^./].upcase}"     # å
    5493 ˆé ­æ–‡å­—を大文字に : ruby のクラス名の制約
     5211        plugin_name[0] = "#{plugin_name[/^./].upcase}"     # 先頭文字を大文字に : ruby のクラス名の制約
    54945212
    54955213        # set cell_name
     
    54985216        # set plugin_arg
    54995217        plugin_arg = CDLString.remove_dquote s[2].to_s
    5500         # plugin_arg = s[2].to_s.gsub( /\A"(.*)/, '\1' )   # 前後の "" を取り除く
     5218        # plugin_arg = s[2].to_s.gsub( /\A"(.*)/, '\1' )   # 前後の "" を取り除く
    55015219        # plugin_arg.sub!( /(.*)"\z/, '\1' )
    55025220
     
    55075225  end
    55085226
    5509   #=== Join# through のチェックと生成
    5510   # new_join の中の check_region で region 間の through が @region_through に設定される
    5511   # set_specifier で呼び口の結合で指定された through が @cp_through 設定される
    5512   # その後、このメソッドが呼ばれる
     5227  #=== Join# through のチェックと生成
     5228  # new_join の中の check_region で region 間の through が @region_through に設定される
     5229  # set_specifier で呼び口の結合で指定された through が @cp_through 設定される
     5230  # その後、このメソッドが呼ばれる
    55135231  def check_and_gen_through
    55145232
     
    55315249
    55325250    @through_list = @cp_through_list + @region_through_list
    5533       # 後から @cp_through_list と @region_through_list に分けたため、このような実è£
    5534 ã«ãªã£ãŸ
     5251      # 後から @cp_through_list と @region_through_list に分けたため、このような実装になった
    55355252
    55365253    if @through_list then           # nil when the join is not Port
    5537       len = @through_list.length    # through が連接している数
     5254      len = @through_list.length    # through が連接している数
    55385255    else
    55395256      len = 0
     
    55465263    end
    55475264
    5548     # 連続した through について、受け口側から順にセルを生成し解釈する
     5265    # 連続した through について、受け口側から順にセルを生成し解釈する
    55495266    i = len - 1
    55505267    while i >= 0
     
    55755292
    55765293      else
    5577         # 最後のセルの場合、次のセルの名前、ポート名
     5294        # 最後のセルの場合、次のセルの名前、ポート名
    55785295        next_cell      = @cell
    55795296        next_port_name = @port_name
    55805297
    55815298        if next_cell == nil then
    5582           # 結合å
    5583 ˆãŒãªã„
     5299          # 結合先がない
    55845300          return
    55855301        end
     
    55875303
    55885304      if i >= cp_len then
    5589         # region_through_list 部分
    5590         # region から @cell_name.@port_name への through がないか探す
     5305        # region_through_list 部分
     5306        # region から @cell_name.@port_name への through がないか探す
    55915307        # rp = @through_list[i][3].find_cell_port_through_plugin( @cell_name, @port_name ) #762
    55925308        rp = @through_list[i][3].find_cell_port_through_plugin( @cell.get_global_name, @port_name )
    5593            # @through_list[i] と @region_through_list[i-cp_len] は同じ
    5594         # å
    5595 ±ç”¨ã—ないようにするには、見つからなかったことにすればよい
     5309           # @through_list[i] と @region_through_list[i-cp_len] は同じ
     5310        # 共用しないようにするには、見つからなかったことにすればよい
    55965311        # rp = nil
    55975312      else
    5598         # region 以外のものはå
    5599 ±æœ‰ã—ない
    5600         # 呼び口側に指定されているし、plugin_arg が異なるかもしれない
     5313        # region 以外のものは共有しない
     5314        # 呼び口側に指定されているし、plugin_arg が異なるかもしれない
    56015315        rp = nil
    56025316      end
     
    56075321        end
    56085322      else
    5609         # 見つかったものをå
    5610 ±ç”¨ã™ã‚‹
     5323        # 見つかったものを共用する
    56115324        @through_generated_list[ i ] = rp
    56125325      end
    56135326
    56145327      if i >= cp_len then
    5615         # @through_generated_list のうち @region_through_listに対応する部分
     5328        # @through_generated_list のうち @region_through_listに対応する部分
    56165329        @region_through_generated_list[ i - cp_len ] = @through_generated_list[ i ]
    56175330        if rp == nil then
    5618           # 生成したものを region(@through_list[i][3]) のリストに追加
     5331          # 生成したものを region(@through_list[i][3]) のリストに追加
    56195332          # @through_list[i][3].add_cell_port_through_plugin( @cell_name, @port_name, @through_generated_list[i] ) #762
    56205333          @through_list[i][3].add_cell_port_through_plugin( @cell.get_global_name, @port_name, @through_generated_list[i] )
     
    56235336
    56245337      if i == 0 then
    5625         # 最も呼び口側のセルは、CDL 上の結合がないため、参ç
    5626 §ã•ã‚ŒãŸã“とにならない
    5627         # mikan namespace 対応
     5338        # 最も呼び口側のセルは、CDL 上の結合がないため、参照されたことにならない
     5339        # mikan namespace 対応
    56285340        # cell = Namespace.find( [ @through_generated_list[0].get_cell_name] )    #1
    56295341        if @through_generated_list[0] == nil then
    5630           return  # plugin_object の生成に失敗している
     5342          return  # plugin_object の生成に失敗している
    56315343        end
    56325344        cell = Namespace.find( @through_generated_list[0].get_cell_namespace_path )    #1
     
    56525364  end
    56535365
    5654   #=== Join# through プラグインを呼び出して CDL 生成させるとともに、import する
     5366  #=== Join# through プラグインを呼び出して CDL 生成させるとともに、import する
    56555367  def gen_through_cell_code_and_parse( plugin_name, i, next_cell, next_port_name )
    56565368
     
    56605372    plugin_arg            = through[ 2 ]
    56615373    if through[ 3 ] then
    5662       # region 間の through の場合
     5374      # region 間の through の場合
    56635375      @@start_region      = through[ 3 ]
    56645376      if next_cell.get_region.equal? @@start_region then
     
    56705382      @@region_count      = through[ 6 ]
    56715383    else
    5672       # 呼び口の through の場合
    5673       @@start_region      = @owner.get_region    # 呼び口側セルの region
    5674       @@end_region        = next_cell.get_region # 次のセルの region
    5675       @@through_type      = :THROUGH             # 呼び口の through 指定
     5384      # 呼び口の through の場合
     5385      @@start_region      = @owner.get_region    # 呼び口側セルの region
     5386      @@end_region        = next_cell.get_region # 次のセルの region
     5387      @@through_type      = :THROUGH             # 呼び口の through 指定
    56765388      @@region_count      = 0
    56775389    end
     
    56875399
    56885400    begin
    5689       eval( eval_str )     # plugin を生成
     5401      eval( eval_str )     # plugin を生成
    56905402      plugin_object.set_locale @locale
    56915403    rescue Exception => evar
     
    57025414    @through_generated_list[ i ] = plugin_object
    57035415
    5704     # Region に関するæƒ
    5705 å ±ã‚’設定
    5706     # 後から追加したので、new の引数外で設定
     5416    # Region に関する情報を設定
     5417    # 後から追加したので、new の引数外で設定
    57075418    # plugin_object.set_through_info( start_region, end_region, through_type )
    57085419
     
    57105421  end
    57115422
    5712   #プラグインへの引数で渡さないものを、一時的に記憶しておく
    5713   # プラグインの initialize の中でコールバックして設定する
     5423  #プラグインへの引数で渡さないものを、一時的に記憶しておく
     5424  # プラグインの initialize の中でコールバックして設定する
    57145425  @@plugin_creating_join = nil
    57155426  @@start_region = nil
     
    57185429  @@region_count = nil
    57195430
    5720   #=== Join# ThroughPlugin の追加æƒ
    5721 å ±ã‚’設定する
    5722   # このメソッドは ThroughPlugin#initialize から呼び出される
    5723   # plugin_object を生成する際の引数では不足するæƒ
    5724 å ±ã‚’追加する
     5431  #=== Join# ThroughPlugin の追加情報を設定する
     5432  # このメソッドは ThroughPlugin#initialize から呼び出される
     5433  # plugin_object を生成する際の引数では不足する情報を追加する
    57255434  def self.set_through_info plugin_object
    57265435    plugin_object.set_through_info( @@start_region, @@end_region, @@through_type,
     
    57345443  end
    57355444
    5736   #=== Join#é
    5737 åˆ—添数を得る
    5738   # @subscript の説明を参ç
    5739 §ã®ã“と
     5445  #=== Join#配列添数を得る
     5446  # @subscript の説明を参照のこと
    57405447  def get_subscript
    57415448    @subscript
    57425449  end
    57435450
    5744   def get_cell_name         # 受け口セル名
     5451  def get_cell_name         # 受け口セル名
    57455452    @cell_name
    57465453  end
     
    57545461  end
    57555462
    5756   #=== Join# 右辺の実セルを得る
    5757   #    実セルとは through で挿å
    5758 ¥ã•ã‚ŒãŸã‚‚の、composite のå†
    5759 éƒ¨ãªã©å®Ÿéš›ã«çµåˆã•ã‚Œã‚‹å
    5760 ˆ
    5761   #    このメソッドは get_rhs_port と対になっている
    5762   #    このメソッドは、意味解析段階では呼び出してはならない (対象セルの意味解析が済む前には正しい結果を返さない)
     5463  #=== Join# 右辺の実セルを得る
     5464  #    実セルとは through で挿入されたもの、composite の内部など実際に結合される先
     5465  #    このメソッドは get_rhs_port と対になっている
     5466  #    このメソッドは、意味解析段階では呼び出してはならない (対象セルの意味解析が済む前には正しい結果を返さない)
    57635467  def get_rhs_cell
    5764     # through 指定あり?
     5468    # through 指定あり?
    57655469    if @through_list[0] then
    5766       # mikan through で生成したものが root namespace 限定
     5470      # mikan through で生成したものが root namespace 限定
    57675471      if @through_generated_list[0] then
    57685472        # cell = Namespace.find( [ "::", @through_generated_list[0].get_cell_name.to_sym ] )    #1
    57695473        cell = Namespace.find( @through_generated_list[0].get_cell_namespace_path )    #1
    5770         # cell が nil になるのはプラグインの get_cell_namespace_path が正しくないか、
    5771         # プラグイン生成コードがエラーになっている。
    5772         # できの悪いプラグインが多ければ、cell == nil をはじいた方がよい。
     5474        # cell が nil になるのはプラグインの get_cell_namespace_path が正しくないか、
     5475        # プラグイン生成コードがエラーになっている。
     5476        # できの悪いプラグインが多ければ、cell == nil をはじいた方がよい。
    57735477        return cell.get_real_cell( @through_generated_list[0].get_through_entry_port_name )
    57745478      else
    5775         return nil            # generate に失敗している
     5479        return nil            # generate に失敗している
    57765480      end
    57775481    elsif @cell then
    57785482      return @cell.get_real_cell( @port_name )
    57795483    else
    5780       # 右辺が未定義の場合 @cell は nil (既にエラー)
     5484      # 右辺が未定義の場合 @cell は nil (既にエラー)
    57815485      return nil
    57825486    end
    57835487  end
    57845488
    5785   #=== Join# 右辺のセルを得る
    5786   # 右辺のセルを得る。ただし、composite 展開されていない
    5787   # composite 展開されたものを得るには get_rhs_cell を使う
    5788   # プロトタイプ宣言しかされていない場合には、こちらしか使えない
    5789   # このメソッドは get_rhs_port2 と対になっている
     5489  #=== Join# 右辺のセルを得る
     5490  # 右辺のセルを得る。ただし、composite 展開されていない
     5491  # composite 展開されたものを得るには get_rhs_cell を使う
     5492  # プロトタイプ宣言しかされていない場合には、こちらしか使えない
     5493  # このメソッドは get_rhs_port2 と対になっている
    57905494  def get_rhs_cell2
    5791     # through 指定あり?
     5495    # through 指定あり?
    57925496    if @through_list[0] then
    5793       # mikan through で生成したものが root namespace 限定
     5497      # mikan through で生成したものが root namespace 限定
    57945498      # cell = Namespace.find( [ "::", @through_generated_list[0].get_cell_name ] )
    57955499      if @through_generated_list[0] then
     
    57975501        cell = Namespace.find( @through_generated_list[0].get_cell_namespace_path )    #1
    57985502      else
    5799         cell = @cell            # generate に失敗している
     5503        cell = @cell            # generate に失敗している
    58005504      end
    58015505    else
     
    58065510  end
    58075511
    5808   #=== Join# 右辺のセルを得る
    5809   # through は適用しないが、composite は展開した後のセル
    5810   # (意味解析が終わっていないと、composite 展開が終わっていない)
    5811   # このメソッドは get_rhs_port3 と対になっている
     5512  #=== Join# 右辺のセルを得る
     5513  # through は適用しないが、composite は展開した後のセル
     5514  # (意味解析が終わっていないと、composite 展開が終わっていない)
     5515  # このメソッドは get_rhs_port3 と対になっている
    58125516  def get_rhs_cell3
    58135517    if @cell then
     
    58165520  end
    58175521
    5818   #=== Join# 右辺のセルのリージョンを得る
    5819   # 右辺が未定義の場合、nil を返す
    5820   # composite の場合、実セルではなく composite cell の region を返す(composite はすべて同じ region に属する)
    5821   # composite の cell がプロトタイプ宣言されているとき get_rhs_cell/get_real_cell は ruby の例外となる
     5522  #=== Join# 右辺のセルのリージョンを得る
     5523  # 右辺が未定義の場合、nil を返す
     5524  # composite の場合、実セルではなく composite cell の region を返す(composite はすべて同じ region に属する)
     5525  # composite の cell がプロトタイプ宣言されているとき get_rhs_cell/get_real_cell は ruby の例外となる
    58225526  def get_rhs_region
    5823     # through 指定あり?
     5527    # through 指定あり?
    58245528    if @through_list[0] then
    58255529      if @through_generated_list[0] then
    5826         # mikan through で生成したものが root namespace 限定
     5530        # mikan through で生成したものが root namespace 限定
    58275531        # cell = Namespace.find( [ "::", @through_generated_list[0].get_cell_name.to_sym ] )    #1
    58285532        cell = Namespace.find( @through_generated_list[0].get_cell_namespace_path )    #1
     
    58315535        end
    58325536      else
    5833         return nil       # generate に失敗している
     5537        return nil       # generate に失敗している
    58345538      end
    58355539    elsif @cell then
    58365540      return @cell.get_region
    58375541    end
    5838     # 右辺が未定義の場合 @cell は nil (既にエラー)
     5542    # 右辺が未定義の場合 @cell は nil (既にエラー)
    58395543    return nil
    58405544  end
    58415545
    5842   def get_cell_global_name  # 受け口セル名(コンポジットなら展開したå†
    5843 å´ã®ã‚»ãƒ«ï¼‰
     5546  def get_cell_global_name  # 受け口セル名(コンポジットなら展開した内側のセル)
    58445547
    58455548    # debug
     
    58555558  end
    58565559
    5857   #===  Join# 結合の右辺の受け口の名前
    5858   #     namespace 名 + '_' + セル名 + '_' + 受け口名   ï¼ˆã“のセルが composite ならば展開後のセル名、受け口名)
    5859   #subscript:: Integer  呼び口é
    5860 åˆ—の時添数 または nil 呼び口é
    5861 åˆ—でない時
    5862   def get_port_global_name( subscript = nil )  # 受け口名(コンポジットなら展開したå†
    5863 å´ã®ã‚»ãƒ«ï¼‰
     5560  #===  Join# 結合の右辺の受け口の名前
     5561  #     namespace 名 + '_' + セル名 + '_' + 受け口名   (このセルが composite ならば展開後のセル名、受け口名)
     5562  #subscript:: Integer  呼び口配列の時添数 または nil 呼び口配列でない時
     5563  def get_port_global_name( subscript = nil )  # 受け口名(コンポジットなら展開した内側のセル)
    58645564
    58655565    # debug
    58665566    dbgPrint "Cell get_port_global_name:  #{@cell_name}\n"
    58675567
    5868     # through 指定あり?
     5568    # through 指定あり?
    58695569    if @through_list[0] then
    58705570
    5871       # mikan through で生成したものが root namespace 限定
     5571      # mikan through で生成したものが root namespace 限定
    58725572      # cell = Namespace.find( [ "::", @through_generated_list[0].get_cell_name.to_sym ] )    #1
    58735573      cell = Namespace.find( @through_generated_list[0].get_cell_namespace_path )    #1
    58745574
    5875       # through で挿å
    5876 ¥ã•ã‚ŒãŸã‚»ãƒ«ã§ã€å®Ÿéš›ã«æŽ¥ç¶šã•ã‚Œã‚‹ã‚»ãƒ«ï¼ˆcompositeの場合å†
    5877 éƒ¨ã®)の受け口の C 言語名前
     5575      # through で挿入されたセルで、実際に接続されるセル(compositeの場合内部の)の受け口の C 言語名前
    58785576      return cell.get_real_global_port_name( @through_generated_list[0].get_through_entry_port_name )
    58795577    else
    58805578
    5881       # 実際に接続されるセルの受け口の C 言語名前
     5579      # 実際に接続されるセルの受け口の C 言語名前
    58825580      if @cell then
    58835581        return @cell.get_real_global_port_name( @port_name )
     
    59025600  end
    59035601
    5904   #=== Join# 右辺のポートを得る
    5905   #    右辺が composite の場合は、å†
    5906 éƒ¨ã®ç¹‹ãŒã‚‹ã‚»ãƒ«ã®ãƒãƒ¼ãƒˆ, through の場合は挿å
    5907 ¥ã•ã‚ŒãŸã‚»ãƒ«ã®ãƒãƒ¼ãƒˆ
    5908   #    このメソッドは get_rhs_cell と対になっている
     5602  #=== Join# 右辺のポートを得る
     5603  #    右辺が composite の場合は、内部の繋がるセルのポート, through の場合は挿入されたセルのポート
     5604  #    このメソッドは get_rhs_cell と対になっている
    59095605  def get_rhs_port
    5910     # through 指定あり?
     5606    # through 指定あり?
    59115607    if @through_list[0] then
    5912       # mikan through で生成したものが root namespace 限定
    5913       # through で生成されたセルを探す
     5608      # mikan through で生成したものが root namespace 限定
     5609      # through で生成されたセルを探す
    59145610#      cell = Namespace.find( [ "::", @through_generated_list[0].get_cell_name.to_sym ] )    #1
    59155611      cell = Namespace.find( @through_generated_list[0].get_cell_namespace_path )    #1
    5916       # cell のプラグインで生成されたポート名のポートを探す (composite ならå†
    5917 éƒ¨ã®ç¹‹ãŒã‚‹ãƒãƒ¼ãƒˆ)
     5612      # cell のプラグインで生成されたポート名のポートを探す (composite なら内部の繋がるポート)
    59185613      return cell.get_real_port( @through_generated_list[0].get_through_entry_port_name )
    59195614    else
    5920       # ポートを返す(composite ならå†
    5921 éƒ¨ã®ç¹‹ãŒã‚‹ãƒãƒ¼ãƒˆã‚’返す)
     5615      # ポートを返す(composite なら内部の繋がるポートを返す)
    59225616      return @cell.get_real_port( @port_name )
    59235617    end
    59245618  end
    59255619
    5926   #=== Join# 右辺のポートを得る
    5927   # 右辺のポートを得る。
    5928   # これはプロトタイプ宣言しかされていない場合には、こちらしか使えない
     5620  #=== Join# 右辺のポートを得る
     5621  # 右辺のポートを得る。
     5622  # これはプロトタイプ宣言しかされていない場合には、こちらしか使えない
    59295623  def get_rhs_port2
    5930     # through 指定あり?
     5624    # through 指定あり?
    59315625    if @through_list[0] then
    59325626      if @through_generated_list[0] then
    59335627        port = @through_generated_list[0].get_through_entry_port_name.to_sym
    59345628      else
    5935         port = @port_name    # generate に失敗している
     5629        port = @port_name    # generate に失敗している
    59365630      end
    59375631    else
     
    59425636  end
    59435637
    5944   #=== Join# 右辺のポートを得る
    5945   # through は適用しないが、composite は展開した後のセルの対応するポート
     5638  #=== Join# 右辺のポートを得る
     5639  # through は適用しないが、composite は展開した後のセルの対応するポート
    59465640  def get_rhs_port3
    59475641    if @cell then
     
    59505644  end
    59515645
    5952   #=== Join# 呼び口é
    5953 åˆ—の2番目以降の要素を追加する
    5954   #     ä¸€ç•ªæœ€åˆã«å®šç¾©ã•ã‚ŒãŸé
    5955 åˆ—要素がå
    5956 ¨è¦ç´ ã®åˆæœŸå€¤ã®é
    5957 åˆ—を持つ
    5958   #     ã“のメソッドは非é
    5959 åˆ—の場合も呼出される(join 重複エラーの場合)
    5960   #join2:: Join  呼び口é
    5961 åˆ—要素の Join
     5646  #=== Join# 呼び口配列の2番目以降の要素を追加する
     5647  #     一番最初に定義された配列要素が全要素の初期値の配列を持つ
     5648  #     このメソッドは非配列の場合も呼出される(join 重複エラーの場合)
     5649  #join2:: Join  呼び口配列要素の Join
    59625650  def add_array_member join2
    59635651
    5964     # subscript2: join2 の左辺添数
     5652    # subscript2: join2 の左辺添数
    59655653    subscript2 = join2.get_subscript
    59665654
    59675655    if @subscript == nil then           # not array : initialize duplicate
    5968       # 非é
    5969 åˆ—の場合、join が重複している
     5656      # 非配列の場合、join が重複している
    59705657      cdl_error( "S1127 \'$1\' duplicate", @name )
    59715658      # print "add_array_member2: #{@owner.get_name}\n"
    59725659
    59735660    elsif @subscript >= 0 then
    5974       # 添数指定ありの場合
     5661      # 添数指定ありの場合
    59755662      if( subscript2 == nil || subscript2 < 0 ) then
    5976         # join2 左辺は非é
    5977 åˆ—または添数なし
    5978         # é
    5979 åˆ—が不一致
     5663        # join2 左辺は非配列または添数なし
     5664        # 配列が不一致
    59805665        cdl_error( "S1128 \'$1\' inconsistent array definition", @name )
    59815666      elsif @array_member[subscript2] != nil then
    5982         # 同じ添数が既に定義済み
     5667        # 同じ添数が既に定義済み
    59835668        cdl_error( "S1129 \'$1\' redefinition of subscript $2" ,@name, subscript2 )
    59845669      else
    5985         # 添数の位置に要素を追加
     5670        # 添数の位置に要素を追加
    59865671        @array_member[subscript2] = join2.get_rhs
    59875672        @array_member2[subscript2] = join2
     
    59905675
    59915676    else
    5992       # 添数指定なしの場合
     5677      # 添数指定なしの場合
    59935678      if( subscript2 == nil || subscript2 >= 0 ) then
    5994         # join2 左辺は非é
    5995 åˆ—または添数有
    5996         # é
    5997 åˆ—が不一致
     5679        # join2 左辺は非配列または添数有
     5680        # 配列が不一致
    59985681        cdl_error( "S1130 \'R1\' inconsistent array definition", @name )
    59995682      end
    60005683
    6001       # 添数なしé
    6002 åˆ—の場合、é
    6003 åˆ—要素を追加
     5684      # 添数なし配列の場合、配列要素を追加
    60045685      @array_member  << join2.get_rhs
    60055686      @array_member2 << join2
     
    60255706      while i < @array_member2.length
    60265707        if @array_member2[i] != self && @array_member[i] != nil then
    6027           # @array_member2[i] が nil になるのは optional の時と、
    6028           # Join の initialize で無駄に @array_member2 が設定されている場合
    6029           # 無駄に設定されているものについては、再帰的に呼び出すå¿
    6030 è¦ã¯ãªã„(clone_for_composite では対策している)
     5708          # @array_member2[i] が nil になるのは optional の時と、
     5709          # Join の initialize で無駄に @array_member2 が設定されている場合
     5710          # 無駄に設定されているものについては、再帰的に呼び出す必要はない(clone_for_composite では対策している)
    60315711          @array_member2[i].change_name( name )
    60325712        end
     
    60365716  end
    60375717
    6038   # composite cell を展開したセルの結合を clone したセルの名前に変更
     5718  # composite cell を展開したセルの結合を clone したセルの名前に変更
    60395719  def change_rhs_port( clone_cell_list, celltype )
    60405720
     
    60545734    dbgPrint "  cell_name:   #{@cell_name} => #{c.get_global_name}, #{c.get_name}\n"
    60555735
    6056     # @rhs のå†
    6057 å®¹ã‚’調整しておく(このå†
    6058 å®¹ã¯ã€subscript を除いて、後から使われていない)
     5736    # @rhs の内容を調整しておく(この内容は、subscript を除いて、後から使われていない)
    60595737    elements = @rhs.get_elements
    6060     if elements[0] == :OP_SUBSC then  # 右辺:受け口é
    6061 åˆ—?
     5738    if elements[0] == :OP_SUBSC then  # 右辺:受け口配列?
    60625739      elements  = elements[1]
    60635740    end
    60645741
    6065     # 右辺が cell.ePort の形式でない
     5742    # 右辺が cell.ePort の形式でない
    60665743    if elements[0] != :OP_DOT || elements[1][0] != :IDENTIFIER then   #1
    60675744      return
    60685745    else
    6069       # セル名を composite å†
    6070 éƒ¨ã®åå‰ã‹ã‚‰ã€å¤–部の名前にå
    6071 ¥ã‚Œæ›¿ãˆã‚‹
     5746      # セル名を composite 内部の名前から、外部の名前に入れ替える
    60725747      # elements[1][1] = Token.new( c.get_name, nil, nil, nil )
    60735748      elements[1][1] = NamespacePath.new( c.get_name, false, c.get_namespace )
     
    60765751    @cell_name = c.get_name
    60775752    @cell = c
    6078     # @definition = nil          # @definition が有効: チェック済み(とは、しない)
     5753    # @definition = nil          # @definition が有効: チェック済み(とは、しない)
    60795754
    60805755    if @array_member2 then
     
    60855760      i = 0
    60865761      while i < @array_member2.length
    6087         # @array_member2[i] が nil になるのは optional の時と、
    6088         # Join の initialize で無駄に @array_member2 が設定されている場合
    6089         # 無駄に設定されているものについては、再帰的に呼び出すå¿
    6090 è¦ã¯ãªã„(clone_for_composite では対策している)
     5762        # @array_member2[i] が nil になるのは optional の時と、
     5763        # Join の initialize で無駄に @array_member2 が設定されている場合
     5764        # 無駄に設定されているものについては、再帰的に呼び出す必要はない(clone_for_composite では対策している)
    60915765        if @array_member2[i] != self && @array_member[i] != nil then
    60925766          @array_member2[i].change_rhs_port( clone_cell_list, celltype )
     
    60985772  end
    60995773
    6100   #=== Join# composite セル用にクローン
    6101   #cell_global_name:: string : 親セルのグローバル名
    6102   # 右辺の C_EXP に含まれる $id$, $cell$, $ct$ を置換
    6103   # ここで置換するのは composite の attribute の C_EXP を composite セルタイプおよびセル名に置換するため
    6104   # (å†
    6105 éƒ¨ã‚»ãƒ«ã® C_EXP もここで置換される)
    6106   # @through_list などもコピーされるので、これが呼び出される前に確定するå¿
    6107 è¦ãŒã‚ã‚‹
     5774  #=== Join# composite セル用にクローン
     5775  #cell_global_name:: string : 親セルのグローバル名
     5776  # 右辺の C_EXP に含まれる $id$, $cell$, $ct$ を置換
     5777  # ここで置換するのは composite の attribute の C_EXP を composite セルタイプおよびセル名に置換するため
     5778  # (内部セルの C_EXP もここで置換される)
     5779  # @through_list などもコピーされるので、これが呼び出される前に確定する必要がある
    61085780  def clone_for_composite( ct_name, cell_name, locale, b_need_recursive = true )
    61095781
     
    61255797
    61265798  def clone_array_member( array_member, array_member2, ct_name, cell_name, prev, locale )
    6127     # é
    6128 åˆ—のコピーを作る
     5799    # 配列のコピーを作る
    61295800    am  = array_member.clone
    61305801    am2 = array_member2.clone
    61315802
    6132     # é
    6133 åˆ—要素のコピーを作る
     5803    # 配列要素のコピーを作る
    61345804    i = 0
    61355805    while i < am2.length
    61365806      if array_member2[i] == prev then
    6137         # 自分自身である(ので、呼出すと無限再帰呼出しとなる)
     5807        # 自分自身である(ので、呼出すと無限再帰呼出しとなる)
    61385808        am2[i] = self
    61395809      elsif array_member2[i] then
    61405810        am2[i] = array_member2[i].clone_for_composite( ct_name, cell_name, locale, false )
    61415811      else
    6142         # 以前のエラーで array_member2[i] は nil になっている
     5812        # 以前のエラーで array_member2[i] は nil になっている
    61435813      end
    61445814
     
    61495819    end
    61505820
    6151     # i = 0 は、ここで自分自身を設定
     5821    # i = 0 は、ここで自分自身を設定
    61525822    # am2[0] = self
    61535823
     
    61575827  end
    61585828
    6159   #=== Join# rhs をå
    6160 ¥ã‚Œæ›ãˆã‚‹
     5829  #=== Join# rhs を入れ換える
    61615830  #rhs:: Expression | initializer
    6162   # 右辺をå
    6163 ¥ã‚Œæ›ãˆã‚‹ï¼Ž
    6164   # このメソッドは、composite で cell の属性の初期値を attribute の値で置き換えるのに使われる
    6165   # このメソッドは composite å†
    6166 ã® cell の属性の初期値が定数ではなく式になった場合、不要になる
     5831  # 右辺を入れ換える.
     5832  # このメソッドは、composite で cell の属性の初期値を attribute の値で置き換えるのに使われる
     5833  # このメソッドは composite 内の cell の属性の初期値が定数ではなく式になった場合、不要になる
    61675834  def change_rhs rhs
    61685835    @rhs = rhs
    61695836  end
    61705837
    6171   #=== Join# clone された join の owner を変更
     5838  #=== Join# clone された join の owner を変更
    61725839  def set_cloned( owner )
    61735840    dbgPrint "Join#set_cloned: #{@name}  prev owner: #{@owner.get_name} new owner: #{owner.get_name}\n"
     
    62555922end
    62565923
    6257 #== 逆結合
     5924#== 逆結合
    62585925class ReverseJoin < BDNode
    62595926#@ep_name:: Symbol
     
    62805947end
    62815948
    6282 # CLASS: CompositeCelltype 用の Join
    6283 # REM:   CompositeCelltype が export するもの
     5949# CLASS: CompositeCelltype 用の Join
     5950# REM:   CompositeCelltype が export するもの
    62845951class CompositeCelltypeJoin < BDNode
    6285 # @export_name:: string     :  CompositeCelltype が export する名前(呼び口、受け口、属性)
    6286 # @internal_cell_name:: string : CompositeCelltype å†
    6287 éƒ¨ã®ã‚»ãƒ«ã®åå‰
    6288 # @internal_cell_elem_name:: string : CompositeCelltype å†
    6289 éƒ¨ã®ã‚»ãƒ«ã®å‘¼ã³å£ã€å—け口、属性の名前
    6290 # @cell : Cell : Cell::  internal cell  : CompositeCelltyep å†
    6291 éƒ¨ã®ã‚»ãƒ«ï¼ˆin_compositeセル)
     5952# @export_name:: string     :  CompositeCelltype が export する名前(呼び口、受け口、属性)
     5953# @internal_cell_name:: string : CompositeCelltype 内部のセルの名前
     5954# @internal_cell_elem_name:: string : CompositeCelltype 内部のセルの呼び口、受け口、属性の名前
     5955# @cell : Cell : Cell::  internal cell  : CompositeCelltyep 内部のセル(in_compositeセル)
    62925956# @port_decl:: Port | Decl
    62935957# @b_pseudo: bool :
     
    63045968  end
    63055969
    6306   #=== CompositeCelltypeJoin# CompositeCelltypeJoin の対象セルか?
    6307   #cell::  Cell 対象かどうかチェックするセル
     5970  #=== CompositeCelltypeJoin# CompositeCelltypeJoin の対象セルか?
     5971  #cell::  Cell 対象かどうかチェックするセル
    63085972  #
    6309   #     CompositeCelltypeJoin と cell の名前が一致するかチェックする
    6310   #     port_decl が指定された場合は、現状使われていない
     5973  #     CompositeCelltypeJoin と cell の名前が一致するかチェックする
     5974  #     port_decl が指定された場合は、現状使われていない
    63115975  def match?( cell, port_decl = nil )
    63125976
     
    63245988
    63255989#    if @cell.equal?( cell ) && ( port_decl == nil || @port_decl.equal?( port_decl ) ) then
    6326     # なぜ port_decl が一致しなければならなかったか忘れた。
    6327     # recursive_composite で名前の一致に変更   060917
     5990    # なぜ port_decl が一致しなければならなかったか忘れた。
     5991    # recursive_composite で名前の一致に変更   060917
    63285992    if((@cell.get_name == cell.get_name) && (port_decl == nil || @port_decl.get_name == port_decl.get_name))then
    63295993      true
     
    63576021  end
    63586022
    6359   # @port_decl が Port の場合のみ呼び出してよい
     6023  # @port_decl が Port の場合のみ呼び出してよい
    63606024  def get_port_type
    63616025    if @port_decl then
     
    63796043  end
    63806044
    6381   # @port_decl が Port の場合のみ呼び出してよい
     6045  # @port_decl が Port の場合のみ呼び出してよい
    63826046  def is_require?
    63836047    if @port_decl then
     
    63866050  end
    63876051
    6388   # @port_decl が Port の場合のみ呼び出してよい
     6052  # @port_decl が Port の場合のみ呼び出してよい
    63896053  def is_allocator_port?
    63906054    if @port_decl then
     
    63936057  end
    63946058
    6395   # @port_decl が Port の場合のみ呼び出してよい
     6059  # @port_decl が Port の場合のみ呼び出してよい
    63966060  def is_optional?
    63976061    if @port_decl then
     
    64006064  end
    64016065
    6402   #=== CompositeCelltypeJoin# 右辺が Decl ならば初期化子(式)を返す
    6403   # このメソッドは Cell の check_join から初期値チェックのために呼び出される
     6066  #=== CompositeCelltypeJoin# 右辺が Decl ならば初期化子(式)を返す
     6067  # このメソッドは Cell の check_join から初期値チェックのために呼び出される
    64046068  def get_initializer
    64056069    if @port_decl.instance_of? Decl then
     
    64146078  end
    64156079
    6416   #=== CompositeCelltypeJoin# é
    6417 åˆ—サイズを得る
    6418   #RETURN:: nil: not array, "[]": 大きさ指定なし, Integer: 大きさ指定あり
     6080  #=== CompositeCelltypeJoin# 配列サイズを得る
     6081  #RETURN:: nil: not array, "[]": 大きさ指定なし, Integer: 大きさ指定あり
    64196082  def get_array_size
    64206083    @port_decl.get_array_size
    64216084  end
    64226085
    6423   #=== CompositeCelltypeJoin# signature を得る
    6424   # @port_decl が Port の時のみ呼び出してもよい
     6086  #=== CompositeCelltypeJoin# signature を得る
     6087  # @port_decl が Port の時のみ呼び出してもよい
    64256088  def get_signature
    64266089    @port_decl.get_signature
     
    64656128# @file_name:: string
    64666129# @format:: string
    6467 # @arg_list:: Expression の elements と同じ形式 [ [:IDENTIFIER, String], ... ]
     6130# @arg_list:: Expression の elements と同じ形式 [ [:IDENTIFIER, String], ... ]
    64686131# @f_celltype:: bool : true: celltype factory, false: cell factory
    64696132
     
    64766139    case name
    64776140    when :write
    6478       # write 関数
     6141      # write 関数
    64796142      @name = name
    64806143
    6481       # write 関数の第一引数:出力å
    6482 ˆãƒ•ã‚¡ã‚¤ãƒ«å
    6483         # 式を評価する(通常単一の文字列であるから、単一の文字列が返される)
     6144      # write 関数の第一引数:出力先ファイル名
     6145        # 式を評価する(通常単一の文字列であるから、単一の文字列が返される)
    64846146      @file_name = file_name.eval_const(nil).val  # file_name : Expression
    64856147      if ! @file_name.instance_of?( String ) then
    6486         # 文字列定数ではなかった
     6148        # 文字列定数ではなかった
    64876149        cdl_error( "S1132 $1: 1st parameter is not string(file name)" , @name )
    64886150        @file_name = nil
    64896151      end
    64906152
    6491       # write 関数の第二引数:フォーマット文字列
     6153      # write 関数の第二引数:フォーマット文字列
    64926154      @format    = format.eval_const(nil).val     # format : Expression
    6493         # 式を評価する(通常単一の文字列であるから、単一の文字列が返される)
     6155        # 式を評価する(通常単一の文字列であるから、単一の文字列が返される)
    64946156      if ! @format.instance_of?( String ) then
    6495         # 文字列定数ではなかった
     6157        # 文字列定数ではなかった
    64966158        cdl_error( "S1133 $1: 2nd parameter is not string(fromat)" , @name )
    64976159        @format = nil
    64986160      end
    64996161
    6500       # 第三引数以降を引数リストとする mikan 引数のチェック
     6162      # 第三引数以降を引数リストとする mikan 引数のチェック
    65016163      @arg_list = arg_list
    65026164
     
    65756237#== Domain
    65766238#
    6577 # region の domain を記憶するクラス
     6239# region の domain を記憶するクラス
    65786240class DomainType < Node
    6579 #@name::Symbol : ドメインタイプの名前 ex) HRP2
     6241#@name::Symbol : ドメインタイプの名前 ex) HRP2
    65806242#@region::Region
    65816243#@plugin_name::Symbol : ex) HRP2Plugin
    65826244#@option::String : ex) "trusted", "nontrusted"
    6583 #@plugin::DomainPlugin の子クラス
     6245#@plugin::DomainPlugin の子クラス
    65846246
    65856247  include PluginModule
    65866248
    6587   # ドメインに属する region の Hash
    6588   # domain 指定が一度も行われない場合、このリストは空である
    6589   # ルートリージョンは option = "OutOfDomain" で登録される (domain 指定が無ければ登録されない)
     6249  # ドメインに属する region の Hash
     6250  # domain 指定が一度も行われない場合、このリストは空である
     6251  # ルートリージョンは option = "OutOfDomain" で登録される (domain 指定が無ければ登録されない)
    65906252  @@domain_regions = { }  # { :domain_type => [ region, ... ] }
    65916253
     
    66286290  end
    66296291
    6630   #== Domain リージョンの Hash を得る
    6631   # @@domain_regions の説明参ç
    6632 §
     6292  #== Domain リージョンの Hash を得る
     6293  # @@domain_regions の説明参照
    66336294  def self.get_domain_regions
    66346295    return @@domain_regions
     
    66496310end
    66506311
    6651 #== Region クラス
     6312#== Region クラス
    66526313#
    6653 # Region は Namespace を継承している
    6654 # root region は特殊で、root namespace と同じである
     6314# Region は Namespace を継承している
     6315# root region は特殊で、root namespace と同じである
    66556316#
    6656 # cell は region に属する
    6657 # region に属する cell のリストは Namespace クラスのインスタンス変数として記憶される
     6317# cell は region に属する
     6318# region に属する cell のリストは Namespace クラスのインスタンス変数として記憶される
    66586319#
    66596320class Region < Namespace
    66606321# @name:: string
    6661 # @in_through_list:: [ [ plugin_name, plugin_arg ], ... ] : plungin_name = nil の時 in 禁止
    6662 # @out_through_list:: [ [ plugin_name, plugin_arg ], ... ] : plungin_name = nil の時 out 禁止
     6322# @in_through_list:: [ [ plugin_name, plugin_arg ], ... ] : plungin_name = nil の時 in 禁止
     6323# @out_through_list:: [ [ plugin_name, plugin_arg ], ... ] : plungin_name = nil の時 out 禁止
    66636324# @to_through_list:: [ [ dst_region, plugin_name, plugin_arg ], ... ]
    6664 # @cell_port_throug_plugin_list:: { "#{cell_name}.#{port_name}" => through_generated_list の要素 }
    6665 #    この region から cell_name.port_name への through プラグインで生成されたオブジェクト
     6325# @cell_port_throug_plugin_list:: { "#{cell_name}.#{port_name}" => through_generated_list の要素 }
     6326#    この region から cell_name.port_name への through プラグインで生成されたオブジェクト
    66666327# @region_type::Symbol : :NODE, :LINKUNIT, :DOMAIN, :CLASS
    6667 # @region_type_param::Symbol : domain, class の名前. node, linkunit では nil
    6668 # @link_root:: Region : linkUnit の根っことなる region (node, linkunit が指定された region)
    6669 # @family_line:: [ @region_root, ...,@region_me ]  家系
    6670 # @in_through_count:: Integer :  n 番目の in_through 結合 (n>=0)
    6671 # @out_through_count:: Integer : n 番目の out_through 結合 (n>=0)
    6672 # @to_through_count:: { :RegionName => Integer }: RegionName への n 番目の to_through 結合 (n>=0)
    6673 # @domain_type::DomainType : domain 指定されていない場合、nil
    6674 # @domain_root::Region : domain 指定されていなる Region (root の場合 nil)
     6328# @region_type_param::Symbol : domain, class の名前. node, linkunit では nil
     6329# @link_root:: Region : linkUnit の根っことなる region (node, linkunit が指定された region)
     6330# @family_line:: [ @region_root, ...,@region_me ]  家系
     6331# @in_through_count:: Integer :  n 番目の in_through 結合 (n>=0)
     6332# @out_through_count:: Integer : n 番目の out_through 結合 (n>=0)
     6333# @to_through_count:: { :RegionName => Integer }: RegionName への n 番目の to_through 結合 (n>=0)
     6334# @domain_type::DomainType : domain 指定されていない場合、nil
     6335# @domain_root::Region : domain 指定されていなる Region (root の場合 nil)
    66756336
    66766337  @@in_through_list  = []
     
    66806341  @@region_type_param = nil
    66816342  @@domain_name = nil
    6682   @@domain_option = nil    # Token がå
    6683 ¥ã‚‹
     6343  @@domain_option = nil    # Token が入る
    66846344
    66856345  @@link_roots = []
    66866346
    66876347  def initialize( name )
    6688     # mikan name の Namespace 修飾
    6689     # object = Namespace.find( [ name ] )   # 親まで捜しにいく
     6348    # mikan name の Namespace 修飾
     6349    # object = Namespace.find( [ name ] )   # 親まで捜しにいく
    66906350    if name != "::" then
    66916351      object = Namespace.get_current.find( name )    #1
    66926352    else
    6693       # root リージョン
     6353      # root リージョン
    66946354      object = nil
    66956355      @@region_type = :NODE
     
    67276387        dbgPrint "Region.new: re-appear #{@name}\n"
    67286388
    6729         # # Region path が前回出現と一致するか?
     6389        # # Region path が前回出現と一致するか?
    67306390        # if @@region_stack[ @@region_stack_sp - 1 ] then
    67316391        #   my_path = @@region_stack[ @@region_stack_sp - 1 ].get_path_string.to_s + "." + @name.to_s
     
    67376397        # end
    67386398
    6739         # 再出現
     6399        # 再出現
    67406400        # @@region_stack[@@region_stack_sp] = object
    67416401
    6742         # 再出現時に specifier が指定されているか?
     6402        # 再出現時に specifier が指定されているか?
    67436403        if( @in_through_list.length != 0 || @out_through_list.length != 0 || @to_through_list.length != 0 || @region_type != nil )then
    67446404          cdl_error( "S1140 $1: region specifier must place at first appearence" , name )
     
    67476407
    67486408      else
    6749         # エラー用ダミー定義
    6750 
    6751         # 異なる同名のオブジェクトが定義済み
     6409        # エラー用ダミー定義
     6410
     6411        # 異なる同名のオブジェクトが定義済み
    67526412        cdl_error( "S1141 $1 duplication, previous one : $2" , name, object.class )
    6753         # @@region_stack[@@region_stack_sp] = self    # エラー時暫定 region
    6754       end
    6755     else
    6756       # 初出現
     6413        # @@region_stack[@@region_stack_sp] = self    # エラー時暫定 region
     6414      end
     6415    else
     6416      # 初出現
    67576417      dbgPrint "Region.new: #{@name}\n"
    67586418      set_region_family_line
     
    68076467  end
    68086468
    6809   #== Region ルートリージョンを得る
    6810   # ルートリージョンは、ルートネームスペースと同じである
     6469  #== Region ルートリージョンを得る
     6470  # ルートリージョンは、ルートネームスペースと同じである
    68116471  def self.get_root
    68126472    Namespace.get_root
     
    68166476
    68176477    dbgPrint  "set_region_family_line: Region: #{@name}  \n"
    6818     # root namespace (root region) の region type は :NODE
     6478    # root namespace (root region) の region type は :NODE
    68196479    if @name == "::" then
    68206480      @region_type = :NODE
     
    68346494
    68356495    if @domain_type then
    6836       # ルートリージョンが最初から @domain_type 設定されることはないの
    6837       # で @owner == nil を調べるå¿
    6838 è¦ã¯ãªã„
     6496      # ルートリージョンが最初から @domain_type 設定されることはないの
     6497      # で @owner == nil を調べる必要はない
    68396498      @owner.set_domain_type @domain_type
    68406499    end
     
    68506509    @link_root = nil
    68516510
    6852     # @family_line を作成する
    6853     # @link_root もみつける
    6854     # (上位にたどっていって Region で node または linkunit のいずれかå
    6855 ˆã«è¦‹ã¤ã‹ã£ãŸã‚‚のが @link_root となる)
    6856     # root namespace は Region かつ node なのでå¿
    6857 ãš @link_root は見つかる
    6858     # mikan: self が node, linkUnit の場合、ここで期å¾
    6859 ã—たとおりに設定されないため、Region#initialize で再設定
     6511    # @family_line を作成する
     6512    # @link_root もみつける
     6513    # (上位にたどっていって Region で node または linkunit のいずれか先に見つかったものが @link_root となる)
     6514    # root namespace は Region かつ node なので必ず @link_root は見つかる
     6515    # mikan: self が node, linkUnit の場合、ここで期待したとおりに設定されないため、Region#initialize で再設定
    68606516    obj = self
    68616517    while 1
     
    68686524        end
    68696525      else
    6870         # さもなければ Namespace
    6871         # namespace の下に region がある場合
    6872       end
    6873 
    6874       # root namespace にたどり着けば終り
     6526        # さもなければ Namespace
     6527        # namespace の下に region がある場合
     6528      end
     6529
     6530      # root namespace にたどり着けば終り
    68756531      break if obj.get_name == "::"
    68766532
     
    68836539  end
    68846540
    6885   #== Region#ドメインを設定する
     6541  #== Region#ドメインを設定する
    68866542  def set_domain_type domain_type
    68876543    if @region_type == :NODE then
     
    69276583  end
    69286584
    6929   #== Region# domain の根っことなる region を得る
    6930   # Region のインスタンスを返す
    6931   # domain 指定子があれば、そのリージョンがドメインルートである
    6932   # なければ、親リージョンのドメインルートとする
     6585  #== Region# domain の根っことなる region を得る
     6586  # Region のインスタンスを返す
     6587  # domain 指定子があれば、そのリージョンがドメインルートである
     6588  # なければ、親リージョンのドメインルートとする
    69336589  def get_domain_root
    69346590    @domain_root
     
    69706626  end
    69716627
    6972   #=== Region# 構文解析中の region を得る
    6973   # 構文解析中 Namespace (あるいは子クラスの Region) の上位をたどって Region を見つける
    6974   # cell が namespace 下におくことができなければ、ループをまわすå¿
    6975 è¦ã¯ãªã„
     6628  #=== Region# 構文解析中の region を得る
     6629  # 構文解析中 Namespace (あるいは子クラスの Region) の上位をたどって Region を見つける
     6630  # cell が namespace 下におくことができなければ、ループをまわす必要はない
    69766631  def self.get_current
    69776632    # @@region_stack[@@region_stack_sp]
     
    69866641  end
    69876642
    6988   #=== Region# through プラグインで、この region から cell_name.port_name へのプラグインオブジェクトを登録
    6989   # mikan namesppace 対応 (cell_name)
     6643  #=== Region# through プラグインで、この region から cell_name.port_name へのプラグインオブジェクトを登録
     6644  # mikan namesppace 対応 (cell_name)
    69906645  def add_cell_port_through_plugin( cell_name, port_name, through_plugin_object )
    69916646    @cell_port_throug_plugin_list[ "#{cell_name}.#{port_name}" ] = through_plugin_object
     
    70026657  end
    70036658
    7004   #=== Region# to_region への距離(unreachable な場合 nil)
    7005   # mikan Cell#check_region とRegion へたどり着くまでための処理にå
    7006 ±é€šæ€§ãŒé«˜ã„
    7007   # region#distance は require で用いられる
     6659  #=== Region# to_region への距離(unreachable な場合 nil)
     6660  # mikan Cell#check_region とRegion へたどり着くまでための処理に共通性が高い
     6661  # region#distance は require で用いられる
    70086662  def distance( to_region )
    70096663
    7010     r1 = self                   # 出発 region
    7011     r2 = to_region              # 目的 region
     6664    r1 = self                   # 出発 region
     6665    r2 = to_region              # 目的 region
    70126666    dist = 0
    70136667
    7014     if ! r1.equal? r2 then      # 同一 region なら呼出し可能
    7015 
    7016       # mikan namespace 対応
     6668    if ! r1.equal? r2 then      # 同一 region なら呼出し可能
     6669
     6670      # mikan namespace 対応
    70176671      f1 = r1.get_family_line
    70186672      len1 = f1.length
     
    70206674      len2 = f2.length
    70216675
    7022       # 不一致になるところ(å
    7023 „弟)を探す
    7024       i = 1  # i = 0 は :RootRegion なのでå¿
    7025 ãšä¸€è‡´
     6676      # 不一致になるところ(兄弟)を探す
     6677      i = 1  # i = 0 は :RootRegion なので必ず一致
    70266678      while( i < len1 && i < len2 )
    70276679        if( f1[i] != f2[i] )then
     
    70316683      end
    70326684
    7033       sibling_level = i     # å
    7034 „弟となるレベル、もしくはどちらか一方が終わったレベル
     6685      sibling_level = i     # 兄弟となるレベル、もしくはどちらか一方が終わったレベル
    70356686
    70366687      # p "sibling_level: #{i}"
     
    70386689      # p "to: #{f2[i].get_name}" if f2[i]
    70396690
    7040       # 呼び側について呼びå
    7041 ƒã®ãƒ¬ãƒ™ãƒ«ã‹ã‚‰å
    7042 „弟レベルまで(out_through をチェックおよび挿å
    7043 ¥ï¼‰
     6691      # 呼び側について呼び元のレベルから兄弟レベルまで(out_through をチェックおよび挿入)
    70446692      i = len1 -1
    70456693      while i >= sibling_level
     
    70646712      end
    70656713
    7066       # å
    7067 „弟レベルにおいて(to_through をチェックおよび挿å
    7068 ¥ï¼‰
     6714      # 兄弟レベルにおいて(to_through をチェックおよび挿入)
    70696715      if f1[sibling_level] && f2[sibling_level] then
    70706716        dbgPrint "going from #{f1[sibling_level].get_name} to #{f2[sibling_level].get_name}\n"
     
    70816727          found = 0
    70826728          f1[sibling_level].get_to_through_list.each { |t|
    7083             if t[0][0] == f2[sibling_level].get_name then   # region 名が一致するか ?
     6729            if t[0][0] == f2[sibling_level].get_name then   # region 名が一致するか ?
    70846730              found = 1
    70856731            end
     
    70926738      end
    70936739
    7094       # 受け側についてå
    7095 „弟レベルから受け側のレベルまで(in_through をチェックおよび挿å
    7096 ¥ï¼‰
     6740      # 受け側について兄弟レベルから受け側のレベルまで(in_through をチェックおよび挿入)
    70976741      i = sibling_level
    70986742      while i < len2
     
    71376781class Import_C < Node
    71386782
    7139   # ヘッダの名前文字列のリスト
     6783  # ヘッダの名前文字列のリスト
    71406784  @@header_list = {}
    71416785  @@header_list2 = []
    71426786  @@define_list = {}
    71436787
    7144   #=== Import_C# import_C の生成(ヘッダファイルを取込む)
    7145   #header:: Token : import_C の第一引数文字列リテラルトークン
    7146   #define:: Token : import_C の第二引数文字列リテラルトークン
     6788  #=== Import_C# import_C の生成(ヘッダファイルを取込む)
     6789  #header:: Token : import_C の第一引数文字列リテラルトークン
     6790  #define:: Token : import_C の第二引数文字列リテラルトークン
    71476791  def initialize( header, define = nil )
    71486792    super()
    7149     # ヘッダファイル名文字列から前後の "" を取り除く
     6793    # ヘッダファイル名文字列から前後の "" を取り除く
    71506794    # header = header.to_s.gsub( /\A"(.*)"\z/, '\1' )
    71516795    header = CDLString.remove_dquote header.to_s
    71526796
    71536797    if define then
    7154       # 前後の "" を取り除く
     6798      # 前後の "" を取り除く
    71556799      # def_opt = define.to_s.gsub( /\A"(.*)/, '\1' )
    71566800      # def_opt.sub!( /(.*)"\z/, '\1' )
    71576801      def_opt = CDLString.remove_dquote define.to_s
    71586802
    7159       # "," を -D に置き換え
     6803      # "," を -D に置き換え
    71606804      def_opt = def_opt.gsub( /,/, " -D " )
    71616805
    7162       # å
    7163 ˆé ­ã« -D を挿å
    7164 ¥ # mikan 不適切な define å
    7165 ¥åŠ›ãŒã‚った場合、CPP 時にエラー
     6806      # 先頭に -D を挿入 # mikan 不適切な define 入力があった場合、CPP 時にエラー
    71666807      def_opt = def_opt.gsub( /^/, "-D " )
    71676808
    71686809    end
    71696810
    7170     # コマンドライン指定された DEFINE
     6811    # コマンドライン指定された DEFINE
    71716812    $define.each{ |define|
    71726813      if $IN_EXERB then
     
    71896830      if found == false then
    71906831        begin
    7191           # ファイルの stat を取ってみる(なければ例外発生)
     6832          # ファイルの stat を取ってみる(なければ例外発生)
    71926833          File.stat( "#{path}/#{header}" )
    71936834
    7194           # cdl を見つかったファイルパスに再設定
     6835          # cdl を見つかったファイルパスに再設定
    71956836          header_path = "#{path}/#{header}"
    71966837          found = true
     
    72076848    end
    72086849
    7209     # 読込み済み?
     6850    # 読込み済み?
    72106851    if( @@header_list[ header ] ) then
    7211       # 第二引数 define が以前と異なる
     6852      # 第二引数 define が以前と異なる
    72126853      if @@define_list[ header ].to_s != define.to_s then
    72136854        cdl_error( "S1143 import_C: arg2: mismatch with previous one"  )
    72146855      end
    7215       # いずれにせよ読み込まない
     6856      # いずれにせよ読み込まない
    72166857      return
    72176858    end
    72186859
    7219     # ヘッダのリストを記録
     6860    # ヘッダのリストを記録
    72206861    @@header_list[ header ] = header_path
    72216862    @@header_list2 << header
     
    72416882    end
    72426883
    7243     # CPP 出力用 tmp ファイル名
     6884    # CPP 出力用 tmp ファイル名
    72446885    tmp_header = header.gsub( /\//, "_" )
    72456886    tmp_header = "#{$gen}/tmp_#{tmp_header}"
    72466887
    7247     # CPP コマンドラインを作成
     6888    # CPP コマンドラインを作成
    72486889    cmd = "#{$cpp} #{def_opt} #{include_opt} #{tmp_C}"
    72496890
     
    72536894      end
    72546895
    7255       # プリプロセッサコマンドを pipe として開く
    7256           # cmd は cygwin/Linux では bash(sh) 経由で実行される
    7257           # Exerb 版では cmd.exe 経由で実行される
    7258           # この差は引き数の (), $, % などシェルの特別な文字の評価に現れるので注意
     6896      # プリプロセッサコマンドを pipe として開く
     6897          # cmd は cygwin/Linux では bash(sh) 経由で実行される
     6898          # Exerb 版では cmd.exe 経由で実行される
     6899          # この差は引き数の (), $, % などシェルの特別な文字の評価に現れるので注意
    72596900          cpp = IO.popen( cmd, "r:ASCII-8BIT" )
    72606901      begin
     
    72696910        print_exception( evar )
    72706911      ensure
    7271         tmp_file.close if tmp_file    # mikan File.open に失敗した時 tmp_file == nil は保証されている ?
     6912        tmp_file.close if tmp_file    # mikan File.open に失敗した時 tmp_file == nil は保証されている ?
    72726913        cpp.close
    72736914      end
     
    72776918    end
    72786919
    7279     # C 言語のパーサインスタンスを生成
     6920    # C 言語のパーサインスタンスを生成
    72806921    c_parser = C_parser.new
    72816922
    7282     # tmp_header をパース
     6923    # tmp_header をパース
    72836924    c_parser.parse( [tmp_header] )
    72846925
    7285     # 終期化 パーサスタックを戻す
     6926    # 終期化 パーサスタックを戻す
    72866927    c_parser.finalize
    72876928
     
    73376978
    73386979class Import < Node
    7339 # @b_reuse::bool:       å†åˆ©ç”¨ï¼Žã‚»ãƒ«ã‚¿ã‚¤ãƒ—の template 生成不要
    7340 # @b_reuse_real::bool:  実際に再利用
    7341 # @cdl::      string:   import する CDL
    7342 # @cdl_path:: string:   CDL のパス
    7343 # @b_imported:: bool:   import された(コマンドライン指定されていない)
    7344 
    7345   # ヘッダの名前文字列のリスト  添字:expand したパス、値:Import
     6980# @b_reuse::bool:       再利用.セルタイプの template 生成不要
     6981# @b_reuse_real::bool:  実際に再利用
     6982# @cdl::      string:   import する CDL
     6983# @cdl_path:: string:   CDL のパス
     6984# @b_imported:: bool:   import された(コマンドライン指定されていない)
     6985
     6986  # ヘッダの名前文字列のリスト  添字:expand したパス、値:Import
    73466987  @@import_list = {}
    73476988
     
    73647005  end
    73657006
    7366   #=== Import# import を行う
    7367   #cdl::      string   cdl へのパス."" で囲まれていることを仮定
    7368   #b_reuse::  bool     true: template を生成しない
     7007  #=== Import# import を行う
     7008  #cdl::      string   cdl へのパス."" で囲まれていることを仮定
     7009  #b_reuse::  bool     true: template を生成しない
    73697010  def initialize( cdl, b_reuse = false, b_imported = true )
    73707011    Import.push self
     
    73727013    super()
    73737014    @@current_import = self
    7374     # ヘッダファイル名文字列から前後の "", <> を取り除くn
     7015    # ヘッダファイル名文字列から前後の "", <> を取り除くn
    73757016    @cdl = cdl.to_s.gsub( /\A["<](.*)[">]\z/, '\1' )
    73767017
    7377     # サーチパスから探す
     7018    # サーチパスから探す
    73787019    found = false
    73797020    @cdl_path = ""
     
    73837024
    73847025    if Generator.get_plugin then
    7385       # plugin から import されている場合 gen をサーチパスのå
    7386 ˆé ­ã«åŠ ãˆã‚‹
     7026      # plugin から import されている場合 gen をサーチパスの先頭に加える
    73877027      search_path = [ $gen ] + $import_path
    73887028    else
     
    73997039        end
    74007040
    7401         # ファイルの stat を取ってみる(なければ例外発生)
     7041        # ファイルの stat を取ってみる(なければ例外発生)
    74027042        File.stat( cdl_path )
    74037043
    7404         # cdl を見つかったファイルパスに再設定
     7044        # cdl を見つかったファイルパスに再設定
    74057045        @cdl_path = cdl_path
    74067046        found = true
     
    74197059    end
    74207060
    7421     # 読込み済みなら、読込まない
     7061    # 読込み済みなら、読込まない
    74227062    prev = @@import_list[ File.expand_path( @cdl_path ) ]
    74237063    if( prev ) then
     
    74287068    end
    74297069
    7430     # import リストを記録
     7070    # import リストを記録
    74317071    @@import_list[ File.expand_path( @cdl_path ) ] = self
    74327072
    7433     # plugin から import されている場合
     7073    # plugin から import されている場合
    74347074    plugin = Generator.get_plugin
    74357075
    7436     # パーサインスタンスを生成(別パーサで読み込む)
     7076    # パーサインスタンスを生成(別パーサで読み込む)
    74377077    parser = Generator.new
    74387078
    7439     # plugin から import されている場合の plugin 設定
     7079    # plugin から import されている場合の plugin 設定
    74407080    parser.set_plugin plugin
    74417081
    7442     # reuse フラグを設定
     7082    # reuse フラグを設定
    74437083    parser.set_reuse @b_reuse_real
    74447084
    7445     # cdl をパース
     7085    # cdl をパース
    74467086    parser.parse( [@cdl_path] )
    74477087
    7448     # 終期化 パーサスタックを戻す
     7088    # 終期化 パーサスタックを戻す
    74497089    parser.finalize
    74507090    Import.pop
     
    74717111  end
    74727112
    7473   #=== cdl の名前を返す
    7474   # 引数で指定されている cdl 名。一部パスを含む可能性がある
     7113  #=== cdl の名前を返す
     7114  # 引数で指定されている cdl 名。一部パスを含む可能性がある
    74757115  def get_cdl_name
    74767116    @cdl
     
    74787118end
    74797119
    7480 #== generate: signature プラグインのロードと実行
     7120#== generate: signature プラグインのロードと実行
    74817121class Generate < Node
    74827122#@plugin_name:: Symbol
    74837123#@signature_nsp:: NamespacePath
    7484 #@option::         String '"', '"' で囲まれている
     7124#@option::         String '"', '"' で囲まれている
    74857125
    74867126  include PluginModule
     
    74907130    @plugin_name = plugin_name
    74917131    @signature_nsp = signature_nsp
    7492     option = option.to_s    # option は Token
     7132    option = option.to_s    # option Token
    74937133    @option = option
    74947134
     
    75117151
    75127152    begin
    7513       eval( eval_str )     # plugin を生成
     7153      eval( eval_str )     # plugin を生成
    75147154      plugin_object.set_locale @locale
    75157155    rescue Exception => evar
     
    75237163end
    75247164
    7525 #== 名前空間パス
     7165#== 名前空間パス
    75267166class NamespacePath < Node
    75277167#@b_absolute::Bool
    75287168#@path::[ Symbol,... ]
    7529 #@namespace::Namespace:  @b_absolute == false のとき、基点となる namespace
     7169#@namespace::Namespace:  @b_absolute == false のとき、基点となる namespace
    75307170
    75317171  #=== NamespacePath# initialize
    7532   #ident::Symbol           æœ€åˆã®åå‰, ただし "::" のみの場合は String
    7533   #b_absolute:Bool         "::" で始まっている場合 true
    7534   #namespace::Namespace    b_absolute = false かつ、構文解釈段階以外で呼び出す場合は、å¿
    7535 ãšæŒ‡å®šã™ã‚‹ã“と
     7172  #ident::Symbol           最初の名前, ただし "::" のみの場合は String
     7173  #b_absolute:Bool         "::" で始まっている場合 true
     7174  #namespace::Namespace    b_absolute = false かつ、構文解釈段階以外で呼び出す場合は、必ず指定すること
    75367175  def initialize( ident, b_absolute, namespace = nil )
    75377176    super()
     
    75597198  end
    75607199
    7561   #=== NamespacePath# append する
     7200  #=== NamespacePath# append する
    75627201  #RETURN self
    7563   # このメソッドは、å
    7564 ƒã® NamespacePath オブジェクトを変形して返す
     7202  # このメソッドは、元の NamespacePath オブジェクトを変形して返す
    75657203  def append!( ident )
    75667204    @path << ident
    75677205    return self
    75687206  end
    7569   #=== NamespacePath# append する
    7570   # このメソッドは、å
    7571 ƒã® NamespacePath オブジェクトを変形しない
    7572   #RETURN:: 複製した NamespacePath
     7207  #=== NamespacePath# append する
     7208  # このメソッドは、元の NamespacePath オブジェクトを変形しない
     7209  #RETURN:: 複製した NamespacePath
    75737210  def append( ident )
    75747211    cl = self.clone
     
    75867223  end
    75877224
    7588   #=== NamespacePath#クローンを作成して名前を変更する
     7225  #=== NamespacePath#クローンを作成して名前を変更する
    75897226  def change_name name
    75907227    cl = self.clone
     
    75957232  alias :change_name_clone :change_name
    75967233
    7597   #=== NamespacePath#名前を変更する
    7598   # このインスタンスを参ç
    7599 §ã™ã‚‹ã™ã¹ã¦ã«å½±éŸ¿ã‚’与えることに注意
     7234  #=== NamespacePath#名前を変更する
     7235  # このインスタンスを参照するすべてに影響を与えることに注意
    76007236  def change_name_no_clone name
    76017237    @path[ @path.length - 1 ] = name
     
    76037239  end
    76047240
    7605   #=== NamespacePath:: path 文字列を得る
    7606   # CDL 用の path 文字列を生成
     7241  #=== NamespacePath:: path 文字列を得る
     7242  # CDL 用の path 文字列を生成
    76077243  def to_s
    76087244    get_path_str
     
    76337269  end
    76347270
    7635   #=== NamespacePath:: パスのé
    7636 åˆ—を返す
    7637   # is_absolute? true の場合、ルートからのパス
    7638   #              false の場合、base_namespace からの相対
    7639   # ルート namespace の場合、長さ0のé
    7640 åˆ—を返す
     7271  #=== NamespacePath:: パスの配列を返す
     7272  # is_absolute? true の場合、ルートからのパス
     7273  #              false の場合、base_namespace からの相対
     7274  # ルート namespace の場合、長さ0の配列を返す
    76417275  #
    76427276  def get_path
     
    76447278  end
    76457279
    7646   #=== NamespacePath#フルパスのé
    7647 åˆ—を返す
    7648   # 返されたé
    7649 åˆ—を書き換えてはならない
     7280  #=== NamespacePath#フルパスの配列を返す
     7281  # 返された配列を書き換えてはならない
    76507282  def get_full_path
    76517283    if @b_absolute then
     
    76567288  end
    76577289
    7658   #=== NamespacePath:: 相対パスのベースとなる namespace
    7659   # is_absolute? == false の時のみ有効な値を返す (true なら nil)
     7290  #=== NamespacePath:: 相対パスのベースとなる namespace
     7291  # is_absolute? == false の時のみ有効な値を返す (true なら nil)
    76607292  def get_base_namespace
    76617293    @namespace
    76627294  end
    76637295
    7664   #=== NamespacePath:: C 言語グローバル名を得る
     7296  #=== NamespacePath:: C 言語グローバル名を得る
    76657297  def get_global_name
    76667298    if @b_absolute then
     
    76807312  end
    76817313
    7682   #=== NamespacePath:: 分解して NamespacePath インスタンスを生成する
    7683   #path_str:: String       : namespace または region のパス ex) "::path::A" , "::", "ident"
    7684   #b_force_absolute:: Bool : "::" で始まっていない場合でも絶対パスに扱う
     7314  #=== NamespacePath:: 分解して NamespacePath インスタンスを生成する
     7315  #path_str:: String       : namespace または region のパス ex) "::path::A" , "::", "ident"
     7316  #b_force_absolute:: Bool : "::" で始まっていない場合でも絶対パスに扱う
    76857317  #
    7686   # NamespacePath は通常構文解析されて作成される
    7687   # このメソッドは、オプションなどで指定される文字列を分解して NamespacePath を生成するのに用いる
    7688   # チェックはゆるい。不適切なパス指定は、不適切な NamespacePath が生成される
     7318  # NamespacePath は通常構文解析されて作成される
     7319  # このメソッドは、オプションなどで指定される文字列を分解して NamespacePath を生成するのに用いる
     7320  # チェックはゆるい。不適切なパス指定は、不適切な NamespacePath が生成される
    76897321  def self.analyze( path_str, b_force_absolute = false )
    76907322
     
    77257357end
    77267358
    7727 # 以下単体テストコード
     7359# 以下単体テストコード
    77287360if $unit_test then
    77297361  root_namespace = Namespace.new("::")
  • asp3_gr_sakura/trunk/tecsgen/tecslib/core/ctypes.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: ctypes.rb 2296 2015-11-29 11:57:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
    55 # CType は C_parser で定義される型を扱う CIntType, CFloatType などに include するもの
    56 # CIntType は IntType を継承するなど、C の型では TECS の型を継承する
     40# CType は C_parser で定義される型を扱う CIntType, CFloatType などに include するもの
     41# CIntType は IntType を継承するなど、C の型では TECS の型を継承する
    5742module CType
    5843
    59   #=== 構文要素 type_specifier が複数指定されている場合に merge する
    60   # merge は const(CIntType) unsigned(CIntTtype), long(CIntType), などと他の型をマージする
    61   # const, unsigned, long などは、単体で int (CIntType) 型になりうる
     44  #=== 構文要素 type_specifier が複数指定されている場合に merge する
     45  # merge は const(CIntType) unsigned(CIntTtype), long(CIntType), などと他の型をマージする
     46  # const, unsigned, long などは、単体で int (CIntType) 型になりうる
    6247  #
    63   # mikan C の文法を厳密にはチェックしていない  long struct 等もできてしまう
     48  # mikan C の文法を厳密にはチェックしていない  long struct 等もできてしまう
    6449  def merge another
    6550
    6651    # p "self: #{self.class} kind_of( IntType ): #{self.kind_of?( IntType )}  another: #{another.class}"
    6752
    68     # signed, unsigned が Symbol として来る事は無くなった
     53    # signed, unsigned が Symbol として来る事は無くなった
    6954    # if another.instance_of? Symbol then
    70     #   # ここで Symbol は :SIGNED, :UNSIGNED のいずれか
     55    #   # ここで Symbol は :SIGNED, :UNSIGNED のいずれか
    7156    #
    72     #   # CIntType か?
     57    #   # CIntType か?
    7358    #   if self.instance_of? CIntType then
    7459    #     self.set_sign another
     
    8469          @bit_size = -5  # long long
    8570        else
    86           # self は int 型、another の bit_size が (int 以外であれば)そちらにする
    87           # mikan 上記以外で 両方 -3 でなければ、本来エラー
     71          # self は int 型、another の bit_size が (int 以外であれば)そちらにする
     72          # mikan 上記以外で 両方 -3 でなければ、本来エラー
    8873          @bit_size = another.get_bit_size
    8974        end
     
    9176
    9277      if another.get_sign then
    93         # another で sign が指定されていれば、そちらのものを採用する mikan 矛盾のチェック
     78        # another で sign が指定されていれば、そちらのものを採用する mikan 矛盾のチェック
    9479        @sign = another.get_sign
    9580      end
    9681
    9782#      if another.get_qualifier then
    98 #        # another で qualifier が指定されていれば、そちらのものを採用する mikan 矛盾のチェック
     83#        # another で qualifier が指定されていれば、そちらのものを採用する mikan 矛盾のチェック
    9984#        @qualifier = another.get_qualifier
    10085#      end
     
    11095      return another.merge self
    11196    elsif self.instance_of?( CDefinedType ) then
    112       # mikan unsigned などとの merge の不正検出
     97      # mikan unsigned などとの merge の不正検出
    11398      if another.is_const? then
    11499        @b_const = true
     
    135120    else
    136121      # mikan long double
    137       #   TECS には long double を表現する手段がない (double80_t を定義すればよいか?)
     122      #   TECS には long double を表現する手段がない (double80_t を定義すればよいか?)
    138123#      cdl_warning( "C1003 $1 & $2 incompatible (\'long double\' is not supported.). Treated as $3." , self.class, another.class, self.class )
    139124      cdl_warning( "W9999 $1 & $2 incompatible (\'long double\' is not supported.). Treated as $3." , self.get_type_str, another.get_type_str, self.get_type_str )
     
    142127  end
    143128
    144   #=== qualifier を設定する
    145   #     å
    146 ƒã® Type クラスでは矛盾チェックしない(TECSの本来の文法では重複指定できないため)
     129  #=== qualifier を設定する
     130  #     元の Type クラスでは矛盾チェックしない(TECSの本来の文法では重複指定できないため)
    147131  def set_qualifier( qual )
    148132
     
    181165
    182166  def initialize( bit_size )
    183     #p super.class   mikan super.class が Symbol だ、なぜ?
     167    #p super.class   mikan super.class が Symbol だ、なぜ?
    184168    super( bit_size )
    185169  end
  • asp3_gr_sakura/trunk/tecsgen/tecslib/core/expression.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: expression.rb 2061 2014-05-31 22:15:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
     
    7156
    7257  #=== Expression# to_s
    73   # C 言語ソース向きの文字列を生成 (globa_name)
     58  # C 言語ソース向きの文字列を生成 (globa_name)
    7459  def to_s
    7560    elements_to_s( @elements )
     
    7762
    7863  #=== Expression# to_str
    79   # C 言語ソース向きの文字列を生成 (globa_name)
     64  # C 言語ソース向きの文字列を生成 (globa_name)
    8065  def to_str( name_list, pre, post )
    8166    elements_to_s( @elements, name_list, pre, post )
     
    8368
    8469  #=== Expression#to_CDL_str
    85   # CDL 表現の文字列を生成
     70  # CDL 表現の文字列を生成
    8671  def to_CDL_str
    8772    return to_s
    8873  end
    8974
    90   #=== 定数式として評価する(トライしてみる)
     75  #=== 定数式として評価する(トライしてみる)
    9176  #
    92   # このメソッドは、定数式を評価する
    93   # ・attribute, var の初期化子
    94   # ・size_is, count_is 引数
    95   # ・é
    96 åˆ—の添数
     77  # このメソッドは、定数式を評価する
     78  # ・attribute, var の初期化子
     79  # ・size_is, count_is 引数
     80  # ・配列の添数
    9781  #
    98   # name_list(NamedList|Nil): 式から参ç
    99 §å¯èƒ½ãªãƒªã‚¹ãƒˆï¼Ž
    100   # NamedList の要素は  size_is, count_is の引数評価の場合 ParamDecl (関数仮引数)
     82  # name_list(NamedList|Nil): 式から参照可能なリスト.
     83  # NamedList の要素は  size_is, count_is の引数評価の場合 ParamDecl (関数仮引数)
    10184  #
    102   # name_list2(NamedList|Nil) : NamedList の要素は Decl (attribute, var) である.省略時 nil
     85  # name_list2(NamedList|Nil) : NamedList の要素は Decl (attribute, var) である.省略時 nil
    10386  #
    104   # RETURN: 評価した定数.評価できなかった場合は nil を返す
     87  # RETURN: 評価した定数.評価できなかった場合は nil を返す
    10588  #
    106   # 型は get_type で、評価する(定数として求められないときに使用できる)
    107   # Array を返すのは attr{ int *a = {1, 2, 3}; int *b = a; }; の b の右辺を評価した場合
     89  # 型は get_type で、評価する(定数として求められないときに使用できる)
     90  # Array を返すのは attr{ int *a = {1, 2, 3}; int *b = a; }; の b の右辺を評価した場合
    10891
    10992  def eval_const( name_list, name_list2 = nil )
     
    11699      return val.to_i
    117100    elsif val.kind_of? PointerVal then
    118       return val.to_i           # mikan エラー V1008 が発生してしまう
     101      return val.to_i           # mikan エラー V1008 が発生してしまう
    119102      # elsif val.kind_of? EnumVal then
    120103      # enum mikan
    121104    else
    122       # C_EXP, Array または nil :そのまま返す
     105      # C_EXP, Array または nil :そのまま返す
    123106      return val
    124107    end
    125108  end
    126109
    127   #=== 定数式として評価する2(トライしてみる)
     110  #=== 定数式として評価する2(トライしてみる)
    128111  #
    129   # IntegerVal, FloatVal をそのまま返す(eval_const では Integer, Float に変換)
     112  # IntegerVal, FloatVal をそのまま返す(eval_const では Integer, Float に変換)
    130113  def eval_const2( name_list, name_list2 = nil, nest = 0 )
    131114    val = elements_eval_const( @elements, name_list, name_list2, nest )
    132115  end
    133116
    134   #=== 式の型を評価する
     117  #=== 式の型を評価する
    135118  #
    136   # eval_const で値が得られない場合、型を導出可能であれば型を得る
    137   # param を含んだ式は定数値を求められないが、型を得ることはできる
    138   # 未定義変数を含んだ型は、得ることができない (ダミー型定義が返る)
    139   def get_type( namedList )        # 名前空間の NamedList を指定
     119  # eval_const で値が得られない場合、型を導出可能であれば型を得る
     120  # param を含んだ式は定数値を求められないが、型を得ることはできる
     121  # 未定義変数を含んだ型は、得ることができない (ダミー型定義が返る)
     122  def get_type( namedList )        # 名前空間の NamedList を指定
    140123    elements_get_type( @elements, namedList )
    141124  end
     
    150133
    151134  def show_tree( indent )
    152     # mikan override してしまった print を呼出す方法がわからないのでこうした
     135    # mikan override してしまった print を呼出す方法がわからないのでこうした
    153136    str = ""
    154137    indent.times { str += "  " }
     
    158141## private
    159142
    160   #=== 式を文字列に変換
    161   #name_list:: attribute (Celltype::@attribute_list), struct の @member_list を仮定している
     143  #=== 式を文字列に変換
     144  #name_list:: attribute (Celltype::@attribute_list), struct の @member_list を仮定している
    162145  def elements_to_s( elements, name_list = nil, pre = nil, post = nil )
    163146    if elements.instance_of? Token then
    164       return elements.to_s    # OP_DOT, OP_REF の右辺
     147      return elements.to_s    # OP_DOT, OP_REF の右辺
    165148    end
    166149
     
    246229  end
    247230
    248   # 定数式(elements)を評価する
     231  # 定数式(elements)を評価する
    249232  #
    250   # このメソッドは Expression クラスのメソッドであるå¿
    251 è¦ã¯ãªã„(関数化できる)
     233  # このメソッドは Expression クラスのメソッドである必要はない(関数化できる)
    252234  #
    253   # elements は式の要素
     235  # elements は式の要素
    254236  #
    255   # name_list, name_list2 は eval_const を参ç
    256 §
     237  # name_list, name_list2 は eval_const を参照
    257238  #
    258   # RETURN: 評価した定数、評価できなかった場合は nil を返す
    259 
    260   MAX_NEST_LEVEL = 64    # 簡易のループ検出(参ç
    261 §ã®ãƒã‚¹ãƒˆã‚’ 64 まで許可する)
     239  # RETURN: 評価した定数、評価できなかった場合は nil を返す
     240
     241  MAX_NEST_LEVEL = 64    # 簡易のループ検出(参照のネストを 64 まで許可する)
    262242  def elements_eval_const( elements, name_list, name_list2 = nil, nest = nil )
    263243
     
    266246      nsp = elements[1]
    267247
    268       # #809 の修正しかけ (別の問題が解決しきれていない)
    269       # nest += 1     # 参ç
    270 §ãŒãƒ«ãƒ¼ãƒ—になっていないかのチェック
    271       #               # mikan 本当にループしているかどうかではなく、単純に多数の参ç
    272 §ã‚’繰り返していることで判定している
     248      # #809 の修正しかけ (別の問題が解決しきれていない)
     249      # nest += 1     # 参照がループになっていないかのチェック
     250      #               # mikan 本当にループしているかどうかではなく、単純に多数の参照を繰り返していることで判定している
    273251      # if nest > MAX_NEST_LEVEL then
    274252      #   cdl_error( "E9999: '$1' too many reference (maybe loop) max=$1" , nsp.to_s, MAX_NEST_LEVEL )
     
    285263      end
    286264
    287       # 見つからなければ定数定義から探す
     265      # 見つからなければ定数定義から探す
    288266      if object == nil then
    289         object = Namespace.find( nsp )# mikan namespace の対応 #1
    290       end
    291 
    292 # この実è£
    293 ã¯ã€ã‚‚う少し整理されるべき
    294 # これが呼出されるのは、以下の場合
    295 #   ãƒ»attribute, var の右辺式の評価
    296 #   ãƒ»size_is 引数の評価:関数パラメータの場合とattribute, var の場合がある
    297 # 以下のエラーチェックでは、これらがごっちゃになって誤りを検出しようとしている
    298 
    299       # IDENTIFIER は見つからなかった?
     267        object = Namespace.find( nsp )# mikan namespace の対応 #1
     268      end
     269
     270# この実装は、もう少し整理されるべき
     271# これが呼出されるのは、以下の場合
     272#   ・attribute, var の右辺式の評価
     273#   ・size_is 引数の評価:関数パラメータの場合とattribute, var の場合がある
     274# 以下のエラーチェックでは、これらがごっちゃになって誤りを検出しようとしている
     275
     276      # IDENTIFIER は見つからなかった?
    300277      if object == nil then
    301278        cdl_error( "E1001 $1: not found" , nsp.get_path_str )
     
    303280        return nil
    304281      elsif object.instance_of?( Join ) then
    305         # Join の場合: cell の中の attribute, var, call のどれかが見つかった
    306         # Decl (attribute, var) でない?
     282        # Join の場合: cell の中の attribute, var, call のどれかが見つかった
     283        # Decl (attribute, var) でない?
    307284        if ! object.get_definition.instance_of?( Decl ) then
    308285          cdl_error( "E1002 $1: not constant (port)" , nsp.get_path_str )
     
    311288        return object.get_rhs.eval_const2( name_list, name_list2, nest )
    312289      elsif ! object.instance_of?( Decl ) then
    313         # Decl でない場合: 定数でもない
     290        # Decl でない場合: 定数でもない
    314291        if ( ! object.instance_of?( ParamDecl ) ) then
    315                                                       # mikan paramdecl は無視する
    316                                                       # ParamList から呼ばれたとき
     292                                                      # mikan paramdecl は無視する
     293                                                      # ParamList から呼ばれたとき
    317294          cdl_error( "E1003 $1: not constant" , nsp.get_path_str )
    318295        else
     
    324301        object.referenced
    325302        if object.get_initializer == nil then
    326           # 初期化子の存在しない変数   # mikan ここへくるのは、通常ありえないはず(未検証)
     303          # 初期化子の存在しない変数   # mikan ここへくるのは、通常ありえないはず(未検証)
    327304          return IntegerVal.new( 0 )
    328305        else
    329           # Decl の右辺の評価
    330           # mikan size_is 引数に現れる変数の型が適切かのチェックする
     306          # Decl の右辺の評価
     307          # mikan size_is 引数に現れる変数の型が適切かのチェックする
    331308          if object.get_initializer.instance_of?( Expression ) || object.get_initializer.instance_of?( C_EXP ) then
    332309            return object.get_initializer.eval_const2( name_list, name_list2, nest )
    333310          else
    334             # Array の場合
     311            # Array の場合
    335312            return object.get_initializer
    336313          end
     
    440417# p "val.respond_to?( \"-@\" )=#{val.respond_to?( "-@" )} #{val.class}"
    441418# p "val.respond_to?( \"~@\" )=#{val.respond_to?( "~@" )}"
    442 #2.0      if val.respond_to?( "~@" ) then  # Ruby 1.9, 2.0 preview 版では例外が発生してしまう
     419#2.0      if val.respond_to?( "~@" ) then  # Ruby 1.9, 2.0 preview 版では例外が発生してしまう
    443420      if val.kind_of? IntegerVal then
    444421        return ~ val
     
    586563  def elements_get_type( elements, namedList )
    587564    type = elements_get_type_sub( elements, namedList )
    588     # 返された方が DefinedType の場合 å
    589 ƒã®åž‹ã‚’返す
     565    # 返された方が DefinedType の場合 元の型を返す
    590566    if type.kind_of?( DefinedType ) then
    591567      type = type.get_type
     
    626602      unless type.kind_of?( PtrType ) then
    627603        cdl_error( "E1013 \'*\': operand is not pointer value"  )
    628         return IntType.new( 8 )    # IntType を返しておく
     604        return IntType.new( 8 )    # IntType を返しておく
    629605      end
    630606      return type.get_referto
    631607
    632608    when :OP_U_PLUS, :OP_U_MINUS
    633       # mikan operand が適切な型かチェックしていない
     609      # mikan operand が適切な型かチェックしていない
    634610      return elements_get_type( elements[1], namedList )
    635611
    636612    when :OP_ADD, :OP_SUB, :OP_MULT, :OP_DIV, :OP_REMAIN
    637       # mikan operand が適切な型かチェックしていない&左辺の型を採用している
     613      # mikan operand が適切な型かチェックしていない&左辺の型を採用している
    638614      return elements_get_type( elements[1], namedList )
    639615
    640616    when :OP_U_TILDE
    641       # mikan operand が整数かチェックしていない
     617      # mikan operand が整数かチェックしていない
    642618      return elements_get_type( elements[1], namedList )
    643619    when :OP_AND, :OP_EOR, :OP_OR, :OP_LSFT, :OP_RSFT
    644       # mikan operand が整数かチェックしていない
     620      # mikan operand が整数かチェックしていない
    645621      return BoolType.new
    646622    when :OP_U_EXCLAM
    647       # mikan operand が整数かチェックしていない
     623      # mikan operand が整数かチェックしていない
    648624      return BoolType.new
    649625
     
    655631  end
    656632
    657   # 式が size_is, count_is, string の引数である場合の方向のチェック
     633  # 式が size_is, count_is, string の引数である場合の方向のチェック
    658634  def elements_check_dir_for_param( elements, namedList, dir, spec )
    659    # dir : å
    660 ƒã®å¼•æ•°ã®æ–¹å‘
    661    # direct: size_is などの引数の変数の方向
     635   # dir : 元の引数の方向
     636   # direct: size_is などの引数の変数の方向
    662637
    663638    case elements[0]
     
    690665          judge = true if ( direct == :IN || direct == :INOUT )
    691666          req_direct = "in or inout"
    692         when :OUT, :RECEIVE     # mikan out で count_is のみ指定されている場合 in でなくてはならない
     667        when :OUT, :RECEIVE     # mikan out で count_is のみ指定されている場合 in でなくてはならない
    693668          judge = true if ( direct == :OUT || direct == :INOUT )
    694669          req_direct = "out or inout"
     
    706681      return true
    707682
    708     # 単é 
    709 æ¼”算子
     683    # 単項演算子
    710684    when :OP_U_ASTER, :OP_SIZEOF_EXPR, :OP_SIZEOF_TYPE, :OP_U_PLUS, :OP_U_MINUS, :OP_U_TILDE, :OP_U_EXCLAM, :CAST, :OP_U_AMP, :PARENTHESES,
    711685      elements_check_dir_for_param( elements[1], namedList, dir, spec )
    712686
    713     # 2é 
    714 æ¼”算子
     687    # 2項演算子
    715688    when :OP_SUBSC, :OP_DOT, :OP_REF, :OP_MULT, :OP_DIV, :OP_REMAIN, :OP_ADD, :OP_SUB, :OP_LSFT, :OP_RSFT, :OP_LT, :OP_GT, :OP_LE, :OP_GE, :OP_EQ, :OP_NE, :OP_AND, :OP_EOR, :OP_OR, :OP_LAND, :OP_LOR
    716689      return elements_check_dir_for_param( elements[1], namedList, dir, spec ) && elements_check_dir_for_param( elements[2], namedList, dir, spec )
    717690
    718     # 3é 
    719 æ¼”算子
     691    # 3項演算子
    720692    when :OP_CEX
    721693      return elements_check_dir_for_param( elements[1], namedList, dir, spec ) && elements_check_dir_for_param( elements[2], namedList, dir, spec ) && elements_check_dir_for_param( elements[3], namedList, dir, spec )
     
    729701  #Express# get_allocator_rhs_elem
    730702  #alloc_type::Symbol  :NORMAL_ALLOC|:INTERNAL_ALLOC|:RELAY_ALLOC
    731   #式がアロケータ指定子の右辺として妥当かチェックし、正しければ分解した値を返す
     703  #式がアロケータ指定子の右辺として妥当かチェックし、正しければ分解した値を返す
    732704  #return:
    733705  #  :NORMAL_ALLOC      [ cell_nsp, ep_name ]               # rhs = cell_nsp.ep_name    ex) Alloc.eAlloc
     
    767739  end
    768740
    769   #Expression#Expression のクローンを作成する
     741  #Expression#Expression のクローンを作成する
    770742  def clone_for_composite
    771743    cl = self.clone
     
    775747  end
    776748
    777   #Expression#elements のクローンを作成
     749  #Expression#elements のクローンを作成
    778750  #elements::Array
    779   # このメソッドは、Array のディープコピーを行う
     751  # このメソッドは、Array のディープコピーを行う
    780752  def clone_elements elements
    781753    elements = elements.clone
     
    794766  end
    795767
    796   #=== Expression#セル結合の式を解析する
     768  #=== Expression#セル結合の式を解析する
    797769  # Cell.eEntry  => [ :OP_DOT, [ :IDENTIFIER, token ], token ]
    798770  # Cell.eEntry[expression] => [ :OP_SUBSC, [ :OP_DOT, [ :IDENTIFIER, token ], token ], expression ]
    799771  # Return: [ NamespacePath(cell_name), Integer(subscript) or nil, Token(port_name)]
    800772  def analyze_cell_join_expression
    801     # 右辺の Expression の要素を取り出す
     773    # 右辺の Expression の要素を取り出す
    802774    elements = @elements
    803     if elements[0] == :OP_SUBSC then  # 右辺:受け口é
    804 åˆ—?
     775    if elements[0] == :OP_SUBSC then  # 右辺:受け口配列?
    805776      # elements = [ :OP_SUBSC, [ :OP_DOT, [ :IDENTIFIER, token ], token ], expression ]
    806       subscript = elements[2].eval_const(nil)  # 受け口é
    807 åˆ—の添数
    808       elements  = elements[1]          # mikan é
    809 åˆ—だった場合
     777      subscript = elements[2].eval_const(nil)  # 受け口配列の添数
     778      elements  = elements[1]          # mikan 配列だった場合
    810779    else
    811780      subscript = nil
     
    823792  end
    824793
    825   #=== Expression# セルへの結合の式を生成する
     794  #=== Expression# セルへの結合の式を生成する
    826795  #nsp:: NamespacePath
    827796  #subscript:: Integer
    828797  #port_name:: Symbol
    829   # analyze_cell_join_expression と対になっている
     798  # analyze_cell_join_expression と対になっている
    830799  def self.create_cell_join_expression( nsp, subscript, port_name, locale = nil )
    831800    if ! port_name.instance_of?( Symbol ) then
     
    843812  end
    844813
    845   #=== Expression#整数定数の式を生成する
    846   #val:: Integer : 値: 整数
     814  #=== Expression#整数定数の式を生成する
     815  #val:: Integer : 値: 整数
    847816  def self.create_integer_constant( val, locale = nil )
    848817    if val != Integer( val ) || val < 0 then
     
    852821  end
    853822
    854   #=== Expression#単一の識別子の式を解析する
     823  #=== Expression#単一の識別子の式を解析する
    855824  # Identifier  => [ :IDENTIFIER, token ]
    856825  # Return: NamespacePath(Identifier)
    857826  def analyze_single_identifier
    858     # 右辺の Expression の要素を取り出す
     827    # 右辺の Expression の要素を取り出す
    859828    elements = @elements
    860829    if elements[0] == :IDENTIFIER
     
    866835
    867836  #=== Expression#
    868   #nsp:: NamespacePath :  参ç
    869 §ã™ã‚‹ã‚‚の識別子
     837  #nsp:: NamespacePath :  参照するもの識別子
    870838  def self.create_single_identifier( nsp, locale )
    871839    if ! nsp.instance_of?( NamespacePath ) then
     
    875843  end
    876844
    877   #=== 評価可能かチェックする
    878   #*v:: 可変個引数(任意の型)
    879   # すべてが BaseVal の子クラス(値)であれば、評価可能と判断する
     845  #=== 評価可能かチェックする
     846  #*v:: 可変個引数(任意の型)
     847  # すべてが BaseVal の子クラス(値)であれば、評価可能と判断する
    880848  def evaluable?( *v )
    881849    v.each{ |val|
     
    896864
    897865  #c_exp_string::String
    898   #b_renew::Bool  : true なら C_EXP の clone 作成(エスケープ処理等をしない)
     866  #b_renew::Bool  : true なら C_EXP の clone 作成(エスケープ処理等をしない)
    899867  def initialize( c_exp_string, b_renew = false )
    900868    if b_renew then
    901869      @c_exp_string = c_exp_string
    902870    else
    903       # 前後の " を取り除く
     871      # 前後の " を取り除く
    904872      # str = c_exp_string.to_s.sub( /^\"(.*)\"$/, "\\1" )
    905873      str = CDLString.remove_dquote c_exp_string.to_s
     
    908876  end
    909877
    910   #=== composite 用に C_EXP を clone する
     878  #=== composite 用に C_EXP を clone する
    911879  #ct_name::
    912880  #cell_name::
    913   # composite の attribute に現れる C_EXP を文字列置換して生成しなおす.
    914   # この文字列置換は、意味解釈段階で行う.
    915   # 他の C_EXP の文字列置換は、コード生成段階で行う.
     881  # composite の attribute に現れる C_EXP を文字列置換して生成しなおす.
     882  # この文字列置換は、意味解釈段階で行う.
     883  # 他の C_EXP の文字列置換は、コード生成段階で行う.
    916884  def clone_for_composite( ct_name, cell_name, locale )
    917885    dbgPrint "C_EXP: #{ct_name} #{cell_name} #{@c_exp_string}\n"
     
    928896  end
    929897
    930   #=== C_EXP を評価する
    931   # C_EXP の引き数文字列を返す
    932   # 本来 C_EXP は eval_const する対象ではないが、便宜上 eval_const で対応
     898  #=== C_EXP を評価する
     899  # C_EXP の引き数文字列を返す
     900  # 本来 C_EXP は eval_const する対象ではないが、便宜上 eval_const で対応
    933901  def eval_const( name_list, name_list2 = nil )
    934902     return self
  • asp3_gr_sakura/trunk/tecsgen/tecslib/core/gen_xml.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: gen_xml.rb 2061 2014-05-31 22:15:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
     
    8065
    8166  def gen_XML( file, nest )
    82     # signature のコードを生成
     67    # signature のコードを生成
    8368    @signature_list.each { |s|
    8469      s.gen_XML file, nest
    8570    }
    8671
    87     # celltype のコードを生成
     72    # celltype のコードを生成
    8873    @celltype_list.each { |t|
    8974      t.gen_XML( file, nest )
    9075    }
    9176
    92     # composite のコードを生成
     77    # composite のコードを生成
    9378    @compositecelltype_list.each { |t|
    9479      t.gen_XML( file, nest )
    9580    }
    9681
    97     # cell のコードを生成
     82    # cell のコードを生成
    9883    @cell_list.each { |t|
    9984      t.gen_XML( file, nest )
    10085    }
    10186
    102     # サブネームスペースのコードを生成
     87    # サブネームスペースのコードを生成
    10388    @namespace_list.each { |n|
    10489      kind = n.instance_of?( Namespace ) ? "namespace" : "region"
     
    250235
    251236#
    252 # Celltype とå
    253 ±ç”¨å¯èƒ½ãªã¯ãšã ãŒã€ä»¥ä¸‹ã®ç‚¹ã®å¤‰æ›´ãŒå¿
    254 è¦
    255 #  @active ⇒ @b_active
    256 #  @singleton ⇒ @b_singleton
    257 #  @attribute ⇒ @name_list (Decl)
    258 #  @port ⇒ @name_list (Port)
     237# Celltype と共用可能なはずだが、以下の点の変更が必要
     238#  @active ⇒ @b_active
     239#  @singleton ⇒ @b_singleton
     240#  @attribute ⇒ @name_list (Decl)
     241#  @port ⇒ @name_list (Port)
    259242class CompositeCelltype
    260243  def gen_XML file, nest
  • asp3_gr_sakura/trunk/tecsgen/tecslib/core/generate.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    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 2507 2016-01-12 13:37:41Z okuma-top $
     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
  • asp3_gr_sakura/trunk/tecsgen/tecslib/core/location.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: bnf.y.rb 2061 2014-05-31 22:15:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
     
    7762
    7863#==  Cell_location
    79   # tecscde の位置æƒ
    80 å ±
     64  # tecscde の位置情報
    8165  class  Cell_location
    8266
     
    10589
    10690  #==  Join_location
    107   # tecscde の位置æƒ
    108 å ±
     91  # tecscde の位置情報
    10992  class  Join_location
    11093    @@join_location_list = []
  • asp3_gr_sakura/trunk/tecsgen/tecslib/core/messages.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: messages.rb 2061 2014-05-31 22:15:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
    55 #== TECS の生成する各国語化å¿
    56 è¦ãªæ–‡å­—列
    57 # 現状、エラーメッセージは英語のみ
    58 # 生成ファイルのコメントとして出力される文字列
     40#== TECS の生成する各国語化必要な文字列
     41# 現状、エラーメッセージは英語のみ
     42# 生成ファイルのコメントとして出力される文字列
    5943class TECSMsg
    6044
    61   #=== TECSMsg#生成するヘッダやテンプレートなどに含めるコメントの取得
    62   # CDL の文字コードに合わせて、文字コード変換を行う
     45  #=== TECSMsg#生成するヘッダやテンプレートなどに含めるコメントの取得
     46  # CDL の文字コードに合わせて、文字コード変換を行う
    6347  def self.get( msg )
    6448    str = @@comment[ msg ]
     
    7155  end
    7256
    73  #=== TECSMsg#ローカライズされたエラーメッセージを得る
    74  #body::String   : "S0001 error message body"  の形式
    75  # S0001 の部分が使用される
    76  # Generator.error2 から呼び出される
     57 #=== TECSMsg#ローカライズされたエラーメッセージを得る
     58 #body::String   : "S0001 error message body"  の形式
     59 # S0001 の部分が使用される
     60 # Generator.error2 から呼び出される
    7761 def self.get_error_message( body )
    78    body =~ /^[A-Z0-9]+/    # エラー番号を取り出す
     62   body =~ /^[A-Z0-9]+/    # エラー番号を取り出す
    7963   num = $&
    8064   if num then
     
    9175 end
    9276
    93  #=== TECSMsg#ローカライズされたウォーニングメッセージを得る
    94  # Generator.warning2 から呼び出される
     77 #=== TECSMsg#ローカライズされたウォーニングメッセージを得る
     78 # Generator.warning2 から呼び出される
    9579 def self.get_warning_message( body )
    96    body =~ /^[A-Z0-9]+/    # ウォーニング番号を取り出す
     80   body =~ /^[A-Z0-9]+/    # ウォーニング番号を取り出す
    9781   num = $&
    9882   msg = @@warning_message[ num.to_sym ]
  • asp3_gr_sakura/trunk/tecsgen/tecslib/core/optimize.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: optimize.rb 2300 2015-12-06 11:23:27Z okuma-top $
     37#   $Id$
    5338#++
    5439
     
    5843Other processes are setting ID for each cell and setting domain information
    5944
    60 ã“のファイルには、意味解析からコード生成の間で行うべき処理が含まれる.
    61 æœ€é©åŒ–もその一つである.
    62 ãã®ä»–に、セル毎の ID 付け、ドメインわけを行う.
    63 ã‚³ãƒ¼ãƒ‰ç”Ÿæˆå¯¾è±¡ã¨ãªã‚‹ã‚»ãƒ«ã‚’対象に処理を行うものが含まれる.
     45このファイルには、意味解析からコード生成の間で行うべき処理が含まれる.
     46最適化もその一つである.
     47その他に、セル毎の ID 付け、ドメインわけを行う.
     48コード生成対象となるセルを対象に処理を行うものが含まれる.
    6449=end
    6550
    6651class Namespace
    6752
    68   #===  各セルに ID (整数値)を割付ける
     53  #===  各セルに ID (整数値)を割付ける
    6954  def set_cell_id_and_domain
    70     # celltype の各セルに ID を割付ける
     55    # celltype の各セルに ID を割付ける
    7156    @celltype_list.each { |t|
    7257      t.set_cell_id_and_domain
    7358    }
    7459
    75     # サブネームスペースの各セルに ID を割付ける
     60    # サブネームスペースの各セルに ID を割付ける
    7661    @namespace_list.each { |n|
    7762      n.set_cell_id_and_domain
     
    8065
    8166  def optimize
    82     # celltype の最適化
     67    # celltype の最適化
    8368    @celltype_list.each { |t|
    8469      t.optimize
    8570    }
    8671
    87     # サブネームスペースの最適化
     72    # サブネームスペースの最適化
    8873    @namespace_list.each { |n|
    8974      n.optimize
     
    9277
    9378  def reset_optimize
    94     # celltype の最適化
     79    # celltype の最適化
    9580    @celltype_list.each { |t|
    9681      t.reset_optimize
    9782    }
    9883
    99     # サブネームスペースの最適化
     84    # サブネームスペースの最適化
    10085    @namespace_list.each { |n|
    10186      n.reset_optimize
     
    10691class Celltype
    10792
    108   ID_BASE = 1               # reset_optimize でリセットする
     93  ID_BASE = 1               # reset_optimize でリセットする
    10994  @@ID_BASE = ID_BASE
    11095
     
    11499  end
    115100
    116   #=== 各セルに ID (整数値)を割付ける
     101  #=== 各セルに ID (整数値)を割付ける
    117102  def set_cell_id
    118103
     
    122107
    123108    if $unique_id then
    124       @id_base = @@ID_BASE   # id をシステムå
    125 ¨ä½“で連番にする
     109      @id_base = @@ID_BASE   # id をシステム全体で連番にする
    126110    else
    127       @id_base = 1           # base を常に 1 から始める
     111      @id_base = 1           # base を常に 1 から始める
    128112    end
    129113
     
    131115    no_id_specified_cells = []
    132116
    133     # プロトタイプを除いた数を求める
     117    # プロトタイプを除いた数を求める
    134118    @cell_list.each{ |c|
    135119      if c.is_generate? then
     
    148132    }
    149133
    150     @ordered_cell_list = []   # id = 1 が添数 0 に格納される
    151     # ID 指定されているセルに id 番号を与える
     134    @ordered_cell_list = []   # id = 1 が添数 0 に格納される
     135    # ID 指定されているセルに id 番号を与える
    152136    id_specified_cells.each{ |c|
    153137      id = c.get_specified_id
     
    169153      end
    170154      @ordered_cell_list[ id - 1 ] = c
    171       # 通し番号とする場合のため @id_base を加える
     155      # 通し番号とする場合のため @id_base を加える
    172156      c.set_id( @id_base - 1 + id )
    173157      if $verbose then
     
    176160    }
    177161
    178     # ID 指定されていないセルに id 番号を与える
     162    # ID 指定されていないセルに id 番号を与える
    179163    i = 0
    180164    no_id_specified_cells.each{ |c|
     
    226210
    227211    @domain_roots.each{ |dn, regions|
    228       # domain_type は一つのノードに一つしかないので、一つの要素を無条件で取り出す
     212      # domain_type は一つのノードに一つしかないので、一つの要素を無条件で取り出す
    229213      if regions.length > 1 then
    230214        cdl_info( "celltype:#{@name} has cells in multi domain.\n" )
     
    239223  def optimize
    240224
    241     # port の参ç
    242 §ã™ã‚‹ã‚»ãƒ«ã‚¿ã‚¤ãƒ—の数、セルの数を求める
     225    # port の参照するセルタイプの数、セルの数を求める
    243226    if $verbose then
    244227      print "=== optimizing celltype #{get_namespace_path.to_s} ===\n"
     
    248231      next if port.get_port_type != :CALL
    249232      if port.is_omit? then
    250         # 呼び口最適化実施
     233        # 呼び口最適化実施
    251234        @b_cp_optimized = true
    252         @n_call_port_omitted_in_CB += 1               # CB で省略する呼び口
    253         port.set_skelton_useless                      # スケルトン関数不要最適化
    254         port.set_VMT_useless                          # VMT 不要最適化 (直接受け口関数を呼出す)
     235        @n_call_port_omitted_in_CB += 1               # CB で省略する呼び口
     236        port.set_skelton_useless                      # スケルトン関数不要最適化
     237        port.set_VMT_useless                          # VMT 不要最適化 (直接受け口関数を呼出す)
    255238        if $verbose then
    256239          print "optimized by omit: port: #{port.get_name} : o\n"
     
    263246      end
    264247
    265       port_cells = []    # 呼びå
    266 ˆã‚»ãƒ«
    267       port_ports = []    # 呼びå
    268 ˆã®ãƒãƒ¼ãƒˆ
    269 
    270       # セルの参ç
    271 §ã™ã‚‹ã‚»ãƒ«ã‚’集める(ポートも一緒に集める)
     248      port_cells = []    # 呼び先セル
     249      port_ports = []    # 呼び先のポート
     250
     251      # セルの参照するセルを集める(ポートも一緒に集める)
    272252      @cell_list.each{ |cell|
    273253
     
    281261        if j then
    282262          if j.get_array_member2 then
    283             # 呼び口é
    284 åˆ—の場合、å
    285 ¨éƒ¨ã®çµåˆå
    286 ˆã‚’集める
     263            # 呼び口配列の場合、全部の結合先を集める
    287264            j.get_array_member2.each { |j2|
    288265              if j2 then
    289266                port_cells << j2.get_rhs_cell
    290                 port_ports << j2.get_rhs_port   # 右辺のポート
     267                port_ports << j2.get_rhs_port   # 右辺のポート
    291268              else
    292                 # optional で、ある添数のみ初期化されていない(すべて初期化されない場合は、下)
     269                # optional で、ある添数のみ初期化されていない(すべて初期化されない場合は、下)
    293270                port_cells << nil
    294271                port_ports << nil
     
    296273            }
    297274          else
    298             # å
    299 ¨ã¦ã®çµåˆå
    300 ˆã‚’集める
     275            # 全ての結合先を集める
    301276            port_cells << j.get_rhs_cell
    302             port_ports << j.get_rhs_port   # 右辺のポート
     277            port_ports << j.get_rhs_port   # 右辺のポート
    303278          end
    304279        else
    305           # optional で初期化されていない(nil を要素に加えておく)
     280          # optional で初期化されていない(nil を要素に加えておく)
    306281          port_cells << nil
    307           port_ports << nil   # 右辺のポート
     282          port_ports << nil   # 右辺のポート
    308283        end
    309284      }
    310285
    311       # 重複要素を取り除く
     286      # 重複要素を取り除く
    312287      port_cells.uniq!
    313288      port_ports.uniq!
    314289
    315       # 呼び口の呼びå
    316 ˆãŒä¸€ã¤ã®ãƒãƒ¼ãƒˆã ã‘か?
     290      # 呼び口の呼び先が一つのポートだけか?
    317291      if port_ports.length == 1 then
    318292
    319         # 呼び口é
    320 åˆ—が可変長の場合、最適化しない
    321              # mikan 呼び口é
    322 åˆ—要素数マクロ不å
    323 ·åˆæš«å®šå¯¾ç­–
    324              # より望ましい修正は、受け口へのポインタは省略するが、é
    325 åˆ—個数は出力する(#_CP_#, #_TCP_#)
    326              # さらにé
    327 åˆ—個数が定数化できるのであれば、定数マクロを出力 (#_NCPA_#)
     293        # 呼び口配列が可変長の場合、最適化しない
     294             # mikan 呼び口配列要素数マクロ不具合暫定対策
     295             # より望ましい修正は、受け口へのポインタは省略するが、配列個数は出力する(#_CP_#, #_TCP_#)
     296             # さらに配列個数が定数化できるのであれば、定数マクロを出力 (#_NCPA_#)
    328297        next if port.get_array_size == "[]"
    329298
    330         # 呼び口最適化実施
     299        # 呼び口最適化実施
    331300        @b_cp_optimized = true
    332301
    333         # 呼びå
    334 ˆãŒä¸€ã¤ã®ã‚»ãƒ«ã ã‘か?
     302        # 呼び先が一つのセルだけか?
    335303        if port_cells.length == 1 then
    336304
    337           # 呼び口は optional で初期化されていない、または受け口はé
    338 åˆ—ではないか?
     305          # 呼び口は optional で初期化されていない、または受け口は配列ではないか?
    339306          if port_ports[0] == nil || port_ports[0].get_array_size == nil then
    340307
    341             @n_call_port_omitted_in_CB += 1               # CB で省略する呼び口
    342             port.set_cell_unique                          # セル一つだけ最適化
    343             port.set_skelton_useless                      # スケルトン関数不要最適化
    344             port.set_VMT_useless                          # VMT 不要最適化 (直接受け口関数を呼出す)
     308            @n_call_port_omitted_in_CB += 1               # CB で省略する呼び口
     309            port.set_cell_unique                          # セル一つだけ最適化
     310            port.set_skelton_useless                      # スケルトン関数不要最適化
     311            port.set_VMT_useless                          # VMT 不要最適化 (直接受け口関数を呼出す)
    345312
    346313            if $verbose then
     
    348315            end
    349316          else
    350             port.set_VMT_useless                          # VMT 不要最適化 (スケルトン関数を呼出す)
     317            port.set_VMT_useless                          # VMT 不要最適化 (スケルトン関数を呼出す)
    351318
    352319            if $verbose then
     
    355322          end
    356323
    357         else  # 呼びå
    358 ˆãŒè¤‡æ•°ã®ã‚»ãƒ«ï¼ˆå˜ä¸€ã®ãƒãƒ¼ãƒˆï¼‰
    359 
    360           # 呼び口は optional で初期化されていない、または受け口はé
    361 åˆ—ではないか?
     324        else  # 呼び先が複数のセル(単一のポート)
     325
     326          # 呼び口は optional で初期化されていない、または受け口は配列ではないか?
    362327          if port_ports[0] == nil || port_ports[0].get_array_size == nil then
    363328            if ! @singleton then
    364               port.set_skelton_useless                    # スケルトン関数不要最適化
    365               port.set_VMT_useless                        # VMT 不要最適化 (スケルトン関数 or 受け口関数を呼出す)
     329              port.set_skelton_useless                    # スケルトン関数不要最適化
     330              port.set_VMT_useless                        # VMT 不要最適化 (スケルトン関数 or 受け口関数を呼出す)
    366331
    367332              if $verbose then
     
    369334              end
    370335            else
    371               port.set_VMT_useless                           # VMT 不要最適化 (スケルトン関数 or 受け口関数を呼出す)
     336              port.set_VMT_useless                           # VMT 不要最適化 (スケルトン関数 or 受け口関数を呼出す)
    372337
    373338              if $verbose then
     
    379344
    380345        port.set_only_callee( port_ports[0], port_cells[0] )
    381            # set_cell_unique でない場合 cell は意味がない
     346           # set_cell_unique でない場合 cell は意味がない
    382347
    383348      end
     
    387352    }
    388353
    389     # 受け口最適化の設定
     354    # 受け口最適化の設定
    390355    @port.each{ |port|
    391356      next if port.get_port_type != :CALL
    392357
    393       # 呼び口側の最適化状æ
    394 ‹
     358      # 呼び口側の最適化状態
    395359      b_VMT_useless     = port.is_VMT_useless?
    396360      b_skelton_useless = port.is_skelton_useless?
    397361
    398       # セルの参ç
    399 §ã™ã‚‹ã‚»ãƒ«ã‚’集める(ポートも一緒に集める)
     362      # セルの参照するセルを集める(ポートも一緒に集める)
    400363      @cell_list.each{ |cell|
    401364
     
    407370        j = jl.get_item( port.get_name )
    408371
    409         if j then    # optional で結合されていない場合 nil
     372        if j then    # optional で結合されていない場合 nil
    410373          if j.get_array_member2 then
    411             # 呼び口é
    412 åˆ—
     374            # 呼び口配列
    413375            j.get_array_member2.each { |j2|
    414376              if j2 then
    415                 port2 = j2.get_rhs_port   # 右辺のポート
    416                 # 受け口側の最適化可能性を設定
     377                port2 = j2.get_rhs_port   # 右辺のポート
     378                # 受け口側の最適化可能性を設定
    417379                port2.set_entry_VMT_skelton_useless( b_VMT_useless, b_skelton_useless )
    418380              #else
    419               #  optional で呼び口é
    420 åˆ—要素が初期化されていない
     381              #  optional で呼び口配列要素が初期化されていない
    421382              end
    422383            }
    423384          else
    424             port2 = j.get_rhs_port      # 右辺のポート
    425             # 受け口側の最適化可能性を設定
     385            port2 = j.get_rhs_port      # 右辺のポート
     386            # 受け口側の最適化可能性を設定
    426387            port2.set_entry_VMT_skelton_useless( b_VMT_useless, b_skelton_useless )
    427388          end
     
    431392  end
    432393
    433   #Celltype# リセットする
     394  #Celltype# リセットする
    434395  def reset_optimize
    435     @@ID_BASE = ID_BASE      # 本当は一回だけでよい
    436     @id_base = 1             # set_cell_id でリセットされるので不要
    437 
    438     @b_cp_optimized = false  # 呼び口最適化
    439     @n_call_port_omitted_in_CB = 0 # 呼び口最適化により不生成となったポートの数
    440     @n_cell_gen = 0          # 生成セル個数
     396    @@ID_BASE = ID_BASE      # 本当は一回だけでよい
     397    @id_base = 1             # set_cell_id でリセットされるので不要
     398
     399    @b_cp_optimized = false  # 呼び口最適化
     400    @n_call_port_omitted_in_CB = 0 # 呼び口最適化により不生成となったポートの数
     401    @n_cell_gen = 0          # 生成セル個数
    441402    @port.each{ |p|
    442403      p.reset_optimize
     
    446407  end
    447408
    448   #Celltype# ヘッダは include されているか
    449   #hname::Symbol : ヘッダ名
    450   #RETURN:: bool_t: false インクルードされていない、true インクルードされている
    451   # #_ISH_#, #_ICT_# でヘッダが取り込まれているかチェックする
    452   # false が返った場合、hname は登録されて、次回の呼び出しでは true が返る
     409  #Celltype# ヘッダは include されているか
     410  #hname::Symbol : ヘッダ名
     411  #RETURN:: bool_t: false インクルードされていない、true インクルードされている
     412  # #_ISH_#, #_ICT_# でヘッダが取り込まれているかチェックする
     413  # false が返った場合、hname は登録されて、次回の呼び出しでは true が返る
    453414  def header_included?( hname )
    454415    if @included_header[ hname ] == nil then
  • asp3_gr_sakura/trunk/tecsgen/tecslib/core/plugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: plugin.rb 2061 2014-05-31 22:15:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
    55 #== class モジュール
    56 # ThroughPlugin, SignaturePlugin, CelltypePlugin に include する
     40#== class モジュール
     41# ThroughPlugin, SignaturePlugin, CelltypePlugin に include する
    5742class Plugin < Node
    58 #@error_backlog:: [msg1, msg2, ... ]   @locale が設定される前に発生したエラー
     43#@error_backlog:: [msg1, msg2, ... ]   @locale が設定される前に発生したエラー
    5944
    6045  PluginArgProc = {
     
    6550    super
    6651    @b_silent = false
    67     @locale = nil       # set_locale が呼び出されるまで nil となる
     52    @locale = nil       # set_locale が呼び出されるまで nil となる
    6853    @error_backlog = []
    6954  end
    7055
    7156  #=== Plugin#cdl_error
    72   # set_locale が呼び出されるまで @error_backlog に保存し保留する
     57  # set_locale が呼び出されるまで @error_backlog に保存し保留する
    7358  def cdl_error *arg
    7459    if @locale then
     
    7964  end
    8065
    81   #=== locale を設定する
    82   # Node は initialize で locale を設定するが、plugin は parse とは
    83   # 異なるタイミング new されるため、locale を再設定する
    84   # このメソッドを2度呼び出すと @error_backlog のエラーが2度出力されてしまう
     66  #=== locale を設定する
     67  # Node は initialize で locale を設定するが、plugin は parse とは
     68  # 異なるタイミング new されるため、locale を再設定する
     69  # このメソッドを2度呼び出すと @error_backlog のエラーが2度出力されてしまう
    8570  def set_locale locale
    8671    @locale = locale
     
    9075  end
    9176
    92 ### 意味解析段階で呼び出されるメソッド ###
    93   #===  CDL ファイルの生成
    94   #      typedef, signature, celltype, cell のコードを生成
    95   #      重複して生成してはならない
    96   #      すでに生成されている場合は出力しないこと。
    97   #      もしくは同名の import により、重複を避けること。
    98   #file::        FILE       ç”Ÿæˆã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«
     77### 意味解析段階で呼び出されるメソッド ###
     78  #===  CDL ファイルの生成
     79  #      typedef, signature, celltype, cell のコードを生成
     80  #      重複して生成してはならない
     81  #      すでに生成されている場合は出力しないこと。
     82  #      もしくは同名の import により、重複を避けること。
     83  #file::        FILE       生成するファイル
    9984  def gen_cdl_file file
    10085  end
    10186
    10287
    103 ### コード生段階で呼び出されるメソッド ###
    104   #=== プラグインは gen_ep_func を提供するか
    105   # gen_ep_func 定義   â‡’ テンプレートではない、セルタイプコード(tCelltype.c)を生成
    106   # gen_ep_func 未定義 ⇒ テンプレート(tCelltype_templ.c)を生成
     88### コード生段階で呼び出されるメソッド ###
     89  #=== プラグインは gen_ep_func を提供するか
     90  # gen_ep_func 定義   ⇒ テンプレートではない、セルタイプコード(tCelltype.c)を生成
     91  # gen_ep_func 未定義 ⇒ テンプレート(tCelltype_templ.c)を生成
    10792  def gen_ep_func?
    10893    self.class.method_defined?( :gen_ep_func_body )
    10994  end
    11095
    111   #===  受け口関数の本体(C言語)を生成する
    112   #     ãƒ—ラグインの場合、変更するå¿
    113 è¦ã®ãªã„セルタイプコードを生成する
    114   #     ã“のメソッドが未定義であれば、プラグインはセルタイプコードを生成しない (通常通りテンプレートを生成する)
    115   #      gen_cdl_file の中で生成されたセルタイプに対して呼び出される
    116   #file::           FILE        出力å
    117 ˆãƒ•ã‚¡ã‚¤ãƒ« (tCelltype.c)
     96  #===  受け口関数の本体(C言語)を生成する
     97  #     プラグインの場合、変更する必要のないセルタイプコードを生成する
     98  #     このメソッドが未定義であれば、プラグインはセルタイプコードを生成しない (通常通りテンプレートを生成する)
     99  #      gen_cdl_file の中で生成されたセルタイプに対して呼び出される
     100  #file::           FILE        出力先ファイル (tCelltype.c)
    118101  #b_singleton::    bool        true if singleton
    119102  #ct_name::        Symbol
     
    127110#  end
    128111
    129   #===  受け口関数の preamble (C言語)を生成する
    130   #     å¿
    131 è¦ãªã‚‰ preamble 部に出力する
    132   #      gen_cdl_file の中でで生成されたセルタイプに対して呼び出される
    133   #file::           FILE        出力å
    134 ˆãƒ•ã‚¡ã‚¤ãƒ«
     112  #===  受け口関数の preamble (C言語)を生成する
     113  #     必要なら preamble 部に出力する
     114  #      gen_cdl_file の中でで生成されたセルタイプに対して呼び出される
     115  #file::           FILE        出力先ファイル
    135116  #b_singleton::    bool        true if singleton
    136117  #ct_name::        Symbol
    137118  #global_ct_name:: string
    138119  def gen_preamble( file, b_singleton, ct_name, global_ct_name )
    139     # デフォルトでは何も出力しない
    140   end
    141 
    142   #===  受け口関数の postamble (C言語)を生成する
    143   #     å¿
    144 è¦ãªã‚‰ postamble 部に出力する
    145   #      gen_cdl_file の中で生成されたセルタイプに対して呼び出される
    146   #file::           FILE        出力å
    147 ˆãƒ•ã‚¡ã‚¤ãƒ«
     120    # デフォルトでは何も出力しない
     121  end
     122
     123  #===  受け口関数の postamble (C言語)を生成する
     124  #     必要なら postamble 部に出力する
     125  #      gen_cdl_file の中で生成されたセルタイプに対して呼び出される
     126  #file::           FILE        出力先ファイル
    148127  #b_singleton::    bool        true if singleton
    149128  #ct_name::        Symbol
    150129  #global_ct_name:: string
    151130  def gen_postamble( file, b_singleton, ct_name, global_ct_name )
    152     # デフォルトでは何も出力しない
    153   end
    154 
    155   #=== gen_cdl_file の中で生成されたセルタイプに新しいセルが生成された
    156   # どのセルタイプかは cell.get_celltype で分かる
     131    # デフォルトでは何も出力しない
     132  end
     133
     134  #=== gen_cdl_file の中で生成されたセルタイプに新しいセルが生成された
     135  # どのセルタイプかは cell.get_celltype で分かる
    157136  #
    158   #file::           FILE        出力å
    159 ˆãƒ•ã‚¡ã‚¤ãƒ«
     137  #file::           FILE        出力先ファイル
    160138  #b_singleton::    bool        true if singleton
    161139  #ct_name::        Symbol
    162140  #global_ct_name:: string
    163141  def new_cell cell
    164     # デフォルトでは何もしない
    165   end
    166 
    167 ### プラグイン引数の解釈 ###
     142    # デフォルトでは何もしない
     143  end
     144
     145### プラグイン引数の解釈 ###
    168146  def parse_plugin_arg
    169147    arg = @plugin_arg_str.dup
    170148
    171     # 改行を消す
     149    # 改行を消す
    172150    arg.gsub!( /\\\n/, "" )
    173151
    174152    while arg != ""
    175153
    176       # 前の空白読み飛ばす
     154      # 前の空白読み飛ばす
    177155      arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')
    178156
    179       #  識別子取得
     157      #  識別子取得
    180158      if arg =~ /\A[a-zA-Z_]\w*/ then
    181159        ident = $~
     
    186164      end
    187165     
    188       # 前の空白読み飛ばす
     166      # 前の空白読み飛ばす
    189167      arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')
    190168
     
    196174      end
    197175
    198       # 前の空白読み飛ばす
     176      # 前の空白読み飛ばす
    199177      arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')
    200178
    201       # 右辺文字列
    202       if arg =~ /\A\\"(.*?)\\"\s*,/ then      # \"  \" で囲まれている場合
    203         rhs = $1
    204         remain = $'
    205       elsif arg =~ /\A%(.*?)%\s*,/ then      # %   % で囲まれている場合
    206         rhs = $1
    207         remain = $'
    208       elsif arg =~ /\A!(.*?)!\s*,/ then    # $   $ で囲まれている場合
    209         rhs = $1
    210         remain = $'
    211       elsif arg =~ /\A'(.*?)'\s*,/ then    # $   $ で囲まれている場合
    212         rhs = $1
    213         remain = $'
    214       elsif  arg =~ /\A\\"(.*?)\\"\s*,/ then  # || にも [,$] にもできなかった
     179      # 右辺文字列
     180      if arg =~ /\A\\"(.*?)\\"\s*,/ then      # \"  \" で囲まれている場合
     181        rhs = $1
     182        remain = $'
     183      elsif arg =~ /\A%(.*?)%\s*,/ then      # %   % で囲まれている場合
     184        rhs = $1
     185        remain = $'
     186      elsif arg =~ /\A!(.*?)!\s*,/ then    # $   $ で囲まれている場合
     187        rhs = $1
     188        remain = $'
     189      elsif arg =~ /\A'(.*?)'\s*,/ then    # $   $ で囲まれている場合
     190        rhs = $1
     191        remain = $'
     192      elsif  arg =~ /\A\\"(.*?)\\"\s*,/ then  # || にも [,$] にもできなかった
    215193        rhs = $1
    216194        remain = $'
    217195      # elsif arg =~ /\A(.*?)\s*$/ then
    218       elsif arg =~ /\A\\"(.*?)\\"\s*\z/ then      # \"  \" で囲まれている場合
    219         rhs = $1
    220         remain = $'
    221       elsif arg =~ /\A%(.*?)%\s*\z/ then      # %   % で囲まれている場合
    222         rhs = $1
    223         remain = $'
    224       elsif arg =~ /\A!(.*?)!\s*\z/ then    # $   $ で囲まれている場合
    225         rhs = $1
    226         remain = $'
    227       elsif arg =~ /\A'(.*?)'\s*\z/ then    # $   $ で囲まれている場合
    228         rhs = $1
    229         remain = $'
    230       elsif  arg =~ /\A\\"(.*?)\\"\s*\z/ then  # || にも [,$] にもできなかった
     196      elsif arg =~ /\A\\"(.*?)\\"\s*\z/ then      # \"  \" で囲まれている場合
     197        rhs = $1
     198        remain = $'
     199      elsif arg =~ /\A%(.*?)%\s*\z/ then      # %   % で囲まれている場合
     200        rhs = $1
     201        remain = $'
     202      elsif arg =~ /\A!(.*?)!\s*\z/ then    # $   $ で囲まれている場合
     203        rhs = $1
     204        remain = $'
     205      elsif arg =~ /\A'(.*?)'\s*\z/ then    # $   $ で囲まれている場合
     206        rhs = $1
     207        remain = $'
     208      elsif  arg =~ /\A\\"(.*?)\\"\s*\z/ then  # || にも [,$] にもできなかった
    231209        rhs = $1
    232210        remain = $'
     
    234212        rhs = $1
    235213        remain = $'
    236         # 前の空白読み飛ばす
     214        # 前の空白読み飛ばす
    237215        rhs.sub!( /\A\s*(.*)\s*\z/, '\1')
    238216      elsif arg =~ /\A(.*?)\s*\z/ then
     
    244222      end
    245223
    246       # 0文字の文字列を to_sym すると例外発生するので空白文字とする
     224      # 0文字の文字列を to_sym すると例外発生するので空白文字とする
    247225      if rhs == "" then
    248226        rhs = " "
    249227      end
    250228
    251       arg = remain         # arg の残りの部分
    252       arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')      # 前の空白読み飛ばす
    253 
    254       # \ を外す
    255       rhs = rhs.gsub( /\\(.)/, "\\1" )   # ここで $' が変わることに注意!
     229      arg = remain         # arg の残りの部分
     230      arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')      # 前の空白読み飛ばす
     231
     232      # \ を外す
     233      rhs = rhs.gsub( /\\(.)/, "\\1" )   # ここで $' が変わることに注意!
    256234      # print "parse_plugin_arg:  #{ident} #{rhs}\n"
    257235      @plugin_arg_list[ ident ] = rhs
     
    262240  end
    263241
    264   #=== プラグイン引数をチェックする
    265   # @plugin_arg_check_proc_tab に従ってプラグイン引数をチェックすする
    266   # 古い用法:子クラスでオーバーライドし、引数識別子が正しいかチェックする
    267   #ident:: string: 引数識別子
    268   #rhs:: string: 右辺文字列
     242  #=== プラグイン引数をチェックする
     243  # @plugin_arg_check_proc_tab に従ってプラグイン引数をチェックすする
     244  # 古い用法:子クラスでオーバーライドし、引数識別子が正しいかチェックする
     245  #ident:: string: 引数識別子
     246  #rhs:: string: 右辺文字列
    269247  def check_plugin_arg( ident, rhs )
    270248
     
    291269  end
    292270
    293   #=== プラグインのメッセージ出力
     271  #=== プラグインのメッセージ出力
    294272  def print_msg( msg )
    295273    if @b_silent == true then
     
    299277  end
    300278
    301   #=== プラグイン引数 silent
     279  #=== プラグイン引数 silent
    302280  def set_silent rhs
    303281    if rhs == "true" || rhs == nil then
     
    307285end
    308286
    309 #== 出力文字列を EUC から出力ファイルに convert する
    310 # tecsgen のソースコードは EUC で記述されている
    311 # これを、出力ファイルの文字コードに変換して出力する
     287#== 出力文字列を EUC から出力ファイルに convert する
     288# tecsgen のソースコードは EUC で記述されている
     289# これを、出力ファイルの文字コードに変換して出力する
    312290#
    313 # generate.rb で出力するものは message.rb で変換している
    314 # generate.rb で出力するものは APPFile クラスを使用している
    315 # mikan: CFile で出力したものに factory で追記できない (cdl ファイルの場合、追記できても意味がない)
     291# generate.rb で出力するものは message.rb で変換している
     292# generate.rb で出力するものは APPFile クラスを使用している
     293# mikan: CFile で出力したものに factory で追記できない (cdl ファイルの場合、追記できても意味がない)
    316294class CFile
    317295  def self.open( path, mode )
  • asp3_gr_sakura/trunk/tecsgen/tecslib/core/pluginModule.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: pluginModule.rb 2081 2014-06-30 05:41:00Z okuma-top $
     37#   $Id$
    5338#++
    5439
    55 #== プラグインをロードする側のモジュール
     40#== プラグインをロードする側のモジュール
    5641# @@loaded_plugin_list:: {Symbol=>Integer}
    5742module PluginModule
     
    5944  @@loaded_plugin_list = {}
    6045
    61   #=== プラグインをロードする
    62   #return:: true : 成功、 false : 失敗
     46  #=== プラグインをロードする
     47  #return:: true : 成功、 false : 失敗
    6348  #
    64   # すでにロードされているものは、重複してロードしない
    65   # load 時の例外はこのメソッドの中でキャッチされて false が返される
     49  # すでにロードされているものは、重複してロードしない
     50  # load 時の例外はこのメソッドの中でキャッチされて false が返される
    6651  def load_plugin( plugin_name, superClass )
    6752
     
    7358          print( "load '#{plugin_name}.rb'\n" )
    7459        end
    75         # "#{plugin_name}.rb" をロード(システム用ではないので、fatal エラーにしない)
     60        # "#{plugin_name}.rb" をロード(システム用ではないので、fatal エラーにしない)
    7661        if require_tecsgen_lib( "#{plugin_name}.rb", false ) == false
    7762          cdl_error( "P2001 $1.rb : fail to load plugin" , plugin_name )
     
    10186  end
    10287
    103   #=== プラグインの gen_cdl_file を呼びして cdl ファイルを生成させ、解釈を行う
     88  #=== プラグインの gen_cdl_file を呼びして cdl ファイルを生成させ、解釈を行う
    10489  def generate_and_parse plugin_object
    105     if plugin_object == nil     # プラグインのロードに失敗している(既にエラー)
     90    if plugin_object == nil     # プラグインのロードに失敗している(既にエラー)
    10691      return
    10792    end
     
    10994    if @@loaded_plugin_list[ plugin_name ] == nil
    11095      raise "#{plugin_name} might have different name "
    111       # プラグインのファイル名と、プラグインのクラス名が相違する場合
     96      # プラグインのファイル名と、プラグインのクラス名が相違する場合
    11297    end
    11398    count = @@loaded_plugin_list[ plugin_name ]
     
    141126  end
    142127
    143   #=== プラグインが CDL の POST コードを生成
    144   # tmp_plugin_post_code.cdl への出力
     128  #=== プラグインが CDL の POST コードを生成
     129  # tmp_plugin_post_code.cdl への出力
    145130  def self.gen_plugin_post_code file
    146131    dbgPrint "PluginModule #{@@loaded_plugin_list}\n"
  • asp3_gr_sakura/trunk/tecsgen/tecslib/core/syntaxobj.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    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: syntaxobj.rb 2374 2016-01-03 22:14:59Z okuma-top $
     37#   $Id$
    5338#++
    5439
    55 # mikan ruby の symbol と文字列の使い分けがどうしてもうまくいかないことが時ã€
    56 ã‚るので name.to_sym をå
    57 ¥ã‚Œã‚‹ã“とにした
     40# mikan ruby の symbol と文字列の使い分けがどうしてもうまくいかないことが時々あるので name.to_sym を入れることにした
    5841
    5942#== Node
    6043#
    61 # Node の直接の子クラス: C_EXP, Type, BaseVal, BDNode(ほとんどのものは BDNode の子クラス)
    62 # Node に (BDNodeにも) å
    63 ¥ã‚‰ãªã„もの: Token, Import, Import_C, Generate
     44# Node の直接の子クラス: C_EXP, Type, BaseVal, BDNode(ほとんどのものは BDNode の子クラス)
     45# Node に (BDNodeにも) 入らないもの: Token, Import, Import_C, Generate
    6446#
    65 # owner を持たないものが Node となる
    66 # エラーは、cdl_error を通じて報告する (意味解析が構文解析後に行われる場合には、行番号が正しく出力できる
     47# owner を持たないものが Node となる
     48# エラーは、cdl_error を通じて報告する (意味解析が構文解析後に行われる場合には、行番号が正しく出力できる
    6749#
    6850
     
    7456  end
    7557
    76   #=== エラーを出力する
     58  #=== エラーを出力する
    7759  def cdl_error( message, *arg )
    7860    Generator.error2( @locale, message, *arg )
    7961  end
    8062
    81   #=== エラーを出力する
    82   #locale:: Array(locale info) : 構文解析中は無視される
     63  #=== エラーを出力する
     64  #locale:: Array(locale info) : 構文解析中は無視される
    8365  def cdl_error2( locale, message, *arg )
    8466    Generator.error2( locale, message, *arg )
    8567  end
    8668
    87   #=== エラーを出力する
     69  #=== エラーを出力する
    8870  #locale:: Array(locale info)
    89   # 構文解析中 cdl_error2 では locale が無視されるため、別に locale を出力する
     71  # 構文解析中 cdl_error2 では locale が無視されるため、別に locale を出力する
    9072  def cdl_error3( locale, message, *arg )
    9173    Generator.error(  message, *arg )
     
    9375  end
    9476
    95   #=== ウォーニング出力する
     77  #=== ウォーニング出力する
    9678  def cdl_warning( message, *arg )
    9779    Generator.warning2( @locale, message, *arg )
    9880  end
    9981
    100   #=== ウォーニング出力する
     82  #=== ウォーニング出力する
    10183  def cdl_warning2( locale, message, *arg )
    10284    Generator.warning2( locale, message, *arg )
    10385  end
    10486
    105   #=== æƒ
    106 å ±ã‚’表示する
     87  #=== 情報を表示する
    10788  def cdl_info( message )
    10889    Console.puts "info: #{message}"
     
    122103end
    123104
    124 #== 双方向 Node (Bi Direction Node)
     105#== 双方向 Node (Bi Direction Node)
    125106#
    126 #  Node の子クラス
    127 #  owner Node から参ç
    128 §ã•ã‚Œã¦ã„るもの (owner へのリンクも取り出せる)
     107#  Node の子クラス
     108#  owner Node から参照されているもの (owner へのリンクも取り出せる)
    129109#
    130 #  get_owner で得られるもの
     110#  get_owner で得られるもの
    131111#    FuncHead => Signature
    132112#    Decl => Namespace(const), Typedef(typedef),
     
    134114#            Struct(member), ParamDecl(parameter), FuncHead(funchead)
    135115#    Signature, Celltype, CompositeCelltype, Typedef => Namespace
    136 #,   Namespace => Namespace, Generator.class (root Namespace の場合)
     116#,   Namespace => Namespace, Generator.class (root Namespace の場合)
    137117#    Cell => Region, CompositeCelltype(in_composite)
    138118#    Port => Celltype, Composite
     
    144124#    ParamList => FuncHead
    145125#    Expression => Namespace
    146 #    大半のものは new_* メソッドで owner Node に伝達される
    147 #    そのメソッドが呼び出されたときに owner Node が記録される
    148 #    new_* がないもの:
     126#    大半のものは new_* メソッドで owner Node に伝達される
     127#    そのメソッドが呼び出されたときに owner Node が記録される
     128#    new_* がないもの:
    149129#            Decl(parameter), ParamDecl, ParamList, FuncHead, Expression
    150130#
    151 #    Expression は、owner Node となるものが多くあるが、改造が困難であるため
    152 #    Expression が定義されたときの Namespace を owner Node とする
    153 #    StructType は Type の一種なので owner を持たない
     131#    Expression は、owner Node となるものが多くあるが、改造が困難であるため
     132#    Expression が定義されたときの Namespace を owner Node とする
     133#    StructType は Type の一種なので owner を持たない
    154134#
    155135class BDNode < Node
     
    167147  end
    168148
    169   #=== owner を設定する
     149  #=== owner を設定する
    170150  def set_owner owner
    171151    dbgPrint "set_owner: #{owner.class.name}\n"
     
    173153  end
    174154
    175   #=== owner を得る
    176   # class の説明を参ç
    177 §
     155  #=== owner を得る
     156  # class の説明を参照
    178157  def get_owner
    179158    if @owner == nil
     
    184163end
    185164
    186 #== Namespace 名を持つ BDNode
     165#== Namespace 名を持つ BDNode
    187166# Namespace(Region), Signature, Celltype, CompositeCelltype, Cell
    188167class NSBDNode < BDNode
     
    192171  end
    193172
    194   #=== 属する namespace を得る
    195   # owner を namespace にたどり着くまで上にたどる
     173  #=== 属する namespace を得る
     174  # owner を namespace にたどり着くまで上にたどる
    196175  def get_namespace
    197176    if @owner.kind_of? Namespace
     
    200179      return @owner.get_namespace
    201180    else
    202       # @owner == nil なら "::"
     181      # @owner == nil なら "::"
    203182      if @name != "::" then
    204183        raise "non-root namespace has no owner #{self.class.name}##{@name} #{self}"
     
    217196  end
    218197
    219   #=== NamespacePath を得る
     198  #=== NamespacePath を得る
    220199  def get_namespace_path
    221200    return @NamespacePath
     
    226205      return @import.is_imported?
    227206    else
    228       return false    # mikan: ä»® @import が nil になるケースが追求できていない
     207      return false    # mikan: 仮 @import が nil になるケースが追求できていない
    229208    end
    230209  end
     
    233212class NamedList
    234213#  @names:: {} of items
    235 #  @items:: [] of items : item の CLASS は get_name メソッドを持つこと get_name の戻り値は Symbol でなくてはならない
    236 #                         NamedList を clone_for_composite する場合は、item にもメソッドがå¿
    237 è¦
    238 #  @type:: string       ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸
     214#  @items:: [] of items : item の CLASS は get_name メソッドを持つこと get_name の戻り値は Symbol でなくてはならない
     215#                         NamedList を clone_for_composite する場合は、item にもメソッドが必要
     216#  @type:: string       エラーメッセージ
    239217
    240218  def initialize( item, type )
     
    245223  end
    246224
    247   #=== 要素を加える
    248   # parse した時点で加えること(場所を記憶する)
     225  #=== 要素を加える
     226  # parse した時点で加えること(場所を記憶する)
    249227  def add_item( item )
    250228
     
    305283  end
    306284
    307   #=== composite cell を clone した時に要素(JOIN) の clone する
     285  #=== composite cell を clone した時に要素(JOIN) の clone する
    308286  #
    309   # mikan このメソッドは Join に特化されているので NamedList から分離すべき
     287  # mikan このメソッドは Join に特化されているので NamedList から分離すべき
    310288  def clone_for_composite( ct_name, cell_name, locale )
    311289    cl = self.clone
     
    314292  end
    315293
    316   #=== clone された NamedList インスタンスの参ç
    317 §ã™ã‚‹ã‚‚の(item)を clone
     294  #=== clone された NamedList インスタンスの参照するもの(item)を clone
    318295  #
    319   # mikan このメソッドは Join に特化されているので NamedList から分離すべき
     296  # mikan このメソッドは Join に特化されているので NamedList から分離すべき
    320297  def set_cloned( ct_name, cell_name, locale )
    321298    items = []
     
    379356end
    380357
    381 #== 関数頭部
    382 # signature に登録される関数
     358#== 関数頭部
     359# signature に登録される関数
    383360class FuncHead <BDNode
    384361#  @declarator:: Decl
     
    425402  end
    426403
    427   #=== FuncHead# 関数の名前を返す
     404  #=== FuncHead# 関数の名前を返す
    428405  def get_name
    429406    return @declarator.get_name
    430407  end
    431408
    432   #=== FuncHead# 関数の戻り値の型を返す
    433   # types.rb に定義されている型
    434   # 関数ヘッダの定義として不完å
    435 ¨ãªå ´åˆ nil を返す
     409  #=== FuncHead# 関数の戻り値の型を返す
     410  # types.rb に定義されている型
     411  # 関数ヘッダの定義として不完全な場合 nil を返す
    436412  def get_return_type
    437413    if is_function? then
     
    440416  end
    441417
    442   #=== FuncHead# 関数の引数のリストを返す
    443   # ParamList を返す
    444   # 関数ヘッダの定義として不完å
    445 ¨ãªå ´åˆ nil を返す
     418  #=== FuncHead# 関数の引数のリストを返す
     419  # ParamList を返す
     420  # 関数ヘッダの定義として不完全な場合 nil を返す
    446421  def get_paramlist
    447422    if is_function? then
     
    457432end
    458433
    459 #=== 宣言
    460 # @kind で示される各種の宣言
     434#=== 宣言
     435# @kind で示される各種の宣言
    461436class Decl < BDNode
    462437
    463438# @identifer:: String
    464 # @global_name:: String | nil : String(@kind=TYPEDEF||:CONSTANT), nil(@kind=その他)
    465 #                set_kind にて設定される
     439# @global_name:: String | nil : String(@kind=TYPEDEF||:CONSTANT), nil(@kind=その他)
     440#                set_kind にて設定される
    466441# @type:: ArrayType, FuncType, PtrType, IntType, StructType
    467442#         VoidType, FloatType, DefinedType, BoolType
    468443# @initializer:: constant_expression, mikan { initlist }
    469 # @kind:: :VAR, :ATTRIBUTE, :PARAMETER, :TYPEDEF, :CONSTANT, :MEMBER, :FUNCHEAD(signatureの関数定義)
     444# @kind:: :VAR, :ATTRIBUTE, :PARAMETER, :TYPEDEF, :CONSTANT, :MEMBER, :FUNCHEAD(signatureの関数定義)
    470445# @b_referenced:: bool
    471446#
    472 # 以下は、@kind が :VAR, :ATTRIBUTE のときに有効
    473 # @rw:: bool     # 古い文法では attr に指定可能だった(消すには generate の修正もå¿
    474 è¦ï¼‰
     447# 以下は、@kind が :VAR, :ATTRIBUTE のときに有効
     448# @rw:: bool     # 古い文法では attr に指定可能だった(消すには generate の修正も必要)
    475449# @omit:: bool
    476 # @choice_list:: [String]  attr 初期値の選択肢
    477 # 以下は、@kind が :VAR, :ATTRIBUTE, :MEMBER のときに有効
     450# @choice_list:: [String]  attr 初期値の選択肢
     451# 以下は、@kind が :VAR, :ATTRIBUTE, :MEMBER のときに有効
    478452# @size_is:: Expression or nil unless specified
    479 # 以下は、@kind が :MEMBER のときに有効
     453# 以下は、@kind が :MEMBER のときに有効
    480454# @count_is:: Expression or nil unless specified
    481 #             attr, var の場合、count_is は指定できない
     455#             attr, var の場合、count_is は指定できない
    482456# @string:: Expression, -1 (length not specified) or nil (not specified)
    483457#
    484 # mikan  ParamDecl だけ別に設けたが、MemberDecl, AttrDecl なども分けるべきか(?)
     458# mikan  ParamDecl だけ別に設けたが、MemberDecl, AttrDecl なども分けるべきか(?)
    485459
    486460  def initialize( identifier )
     
    512486  end
    513487
    514   #== Decl の意味的誤りをチェックする
     488  #== Decl の意味的誤りをチェックする
    515489  def check
    516490    # return nil if @type == nil
    517491
    518     # 構造体タグチェック(ポインタ型から構造体が参ç
    519 §ã•ã‚Œã¦ã„る場合は、タグの存在をチェックしない)
     492    # 構造体タグチェック(ポインタ型から構造体が参照されている場合は、タグの存在をチェックしない)
    520493    @type.check_struct_tag @kind
    521494
    522     # 型のチェックを行う
     495    # 型のチェックを行う
    523496    res = @type.check
    524497    if res then
     
    526499    end
    527500
    528     # 不要の初期化子をチェックする
     501    # 不要の初期化子をチェックする
    529502    if @initializer then
    530503      case @kind
     
    532505        cdl_error( "S2003 $1: $2 cannot have initializer" , @identifier, @kind.to_s.downcase )
    533506      when :VAR, :ATTRIBUTE, :CONSTANT
    534         # p @initializer  ここでは代å
    535 ¥å¯èƒ½ã‹ã©ã†ã‹ã€ãƒã‚§ãƒƒã‚¯ã—ない
    536         # :VAR, :ATTRIBUTE, :CONSTANT はそれぞれでチェックする
     507        # p @initializer  ここでは代入可能かどうか、チェックしない
     508        # :VAR, :ATTRIBUTE, :CONSTANT はそれぞれでチェックする
    537509        # return @type.check_init( @identifier, @initializer, @kind )
    538510      else
     
    552524  end
    553525
    554   #== ポインタレベルを得る
    555   # 戻り値:
    556   #   éžãƒã‚¤ãƒ³ã‚¿å¤‰æ•°   = 0
    557   #   ãƒã‚¤ãƒ³ã‚¿å¤‰æ•°     = 1
    558   #   äºŒé‡ãƒã‚¤ãƒ³ã‚¿å¤‰æ•° = 2
     526  #== ポインタレベルを得る
     527  # 戻り値:
     528  #   非ポインタ変数   = 0
     529  #   ポインタ変数     = 1
     530  #   二重ポインタ変数 = 2
    559531  def get_ptr_level
    560532    level = 0
     
    564536        level += 1
    565537        type = type.get_referto
    566 #      elsif type.kind_of?( ArrayType ) then  # 添数なしé
    567 åˆ—はポインタとみなす
     538#      elsif type.kind_of?( ArrayType ) then  # 添数なし配列はポインタとみなす
    568539#        if type.get_subscript == nil then
    569540#          level += 1
     
    572543#          break
    573544#        end
    574         # mikan ポインタの添数ありé
    575 åˆ—のポインタレベルは0でよい?
     545        # mikan ポインタの添数あり配列のポインタレベルは0でよい?
    576546      elsif type.kind_of?( DefinedType ) then
    577547        type = type.get_type
     
    596566      @type = type
    597567    else
    598       @type.set_type( type )             # 葉に設定
     568      @type.set_type( type )             # 葉に設定
    599569    end
    600570  end
     
    731701end
    732702
    733 # 関数パラメータの宣言
     703# 関数パラメータの宣言
    734704class ParamDecl < BDNode
    735705
    736706# @declarator:: Decl:  Token, ArrayType, FuncType, PtrType
    737707# @direction:: :IN, :OUT, :INOUT, :SEND, :RECEIVE
    738 # @size:: Expr   (size_is 引数)
    739 # @count:: Expr   (count_is 引数)
    740 # @max:: Expr (size_is の第二引数)
     708# @size:: Expr   (size_is 引数)
     709# @count:: Expr   (count_is 引数)
     710# @max:: Expr (size_is の第二引数)
    741711# @b_nullable:: Bool : nullable
    742 # @string:: Expr or -1(if size not specified) (string 引数)
     712# @string:: Expr or -1(if size not specified) (string 引数)
    743713# @allocator:: Signature of allocator
    744 # @b_ref:: bool : size_is, count_is, string_is 引数として参ç
    745 §ã•ã‚Œã¦ã„ã‚‹
     714# @b_ref:: bool : size_is, count_is, string_is 引数として参照されている
    746715#
    747 # 1. 関数型でないこと
    748 # 2. 2次å
    749 ƒä»¥ä¸Šã®é
    750 åˆ—であって最もå†
    751 å´ä»¥å¤–の添数があること
    752 # 3. in, out, ..., size_is, count_is, ... の重複指定がないこと
    753 # 4. ポインタレベルが適切なこと
     716# 1. 関数型でないこと
     717# 2. 2次元以上の配列であって最も内側以外の添数があること
     718# 3. in, out, ..., size_is, count_is, ... の重複指定がないこと
     719# 4. ポインタレベルが適切なこと
    754720
    755721  def initialize( declarator, specifier, param_specifier )
     
    818784        end
    819785      when :MAX_IS
    820         # max_is は、å†
    821 éƒ¨çš„なもの bnf.y.rb 参ç
    822 §
    823         # size_is で重複チェックされる
     786        # max_is は、内部的なもの bnf.y.rb 参照
     787        # size_is で重複チェックされる
    824788        @max = i[1]
    825789      when :NULLABLE
     
    841805    end
    842806
    843     # mikan ポインタのé
    844 åˆ—(添数有)のレベルが0
     807    # mikan ポインタの配列(添数有)のレベルが0
    845808    ptr_level = @declarator.get_ptr_level
    846809
     
    885848      cdl_error( "S2014 $1 need pointer or more pointer" , @declarator.get_identifier )
    886849    elsif ptr_level > max_level then
    887       # note: 構文解析段階で実行のため get_current 可
     850      # note: 構文解析段階で実行のため get_current 可
    888851      if Signature.get_current == nil || Signature.get_current.is_deviate? == false then
    889852        cdl_warning( "W3003 $1 pointer level mismatch" , @declarator.get_identifier )
     
    897860
    898861    if ptr_level > 0 then
    899       # size_is, count_is, string をセット
     862      # size_is, count_is, string をセット
    900863      if @direction == :RECEIVE && ptr_level > 1 then
    901864        type.get_type.set_scs( @size, @count, @string, @max, @b_nullable )
     
    907870#type.show_tree 1
    908871
    909       # ポインタが指しているå
    910 ˆã®ãƒ‡ãƒ¼ã‚¿åž‹ã‚’å¾—ã‚‹
     872      # ポインタが指している先のデータ型を得る
    911873      i = 0
    912874      t2 = type
     
    923885# p t2.is_const?
    924886
    925       # const 修飾が適切かチェック
     887      # const 修飾が適切かチェック
    926888      if @direction == :IN then
    927889        if ! t2.is_const? then
     
    934896      end
    935897    else
    936       # 非ポインタタイプ
     898      # 非ポインタタイプ
    937899      if @size != nil || @count != nil || @string != nil || @max != nil || @b_nullable then
    938900        type.set_scs( @size, @count, @string, @max, @b_nullable )
     
    1006968  end
    1007969
    1008   #=== PPAllocator がå¿
    1009 è¦ã‹
    1010   # Transparent RPC の場合 in で size_is, count_is, string のいずれかが指定されている場合 oneway では PPAllocator がå¿
    1011 è¦
    1012   # Transparent PC で oneway かどうかは、ここでは判断しないので別途判断がå¿
    1013 è¦
    1014   # Opaque RPC の場合 size_is, count_is, string のいずれかが指定されている場合、PPAllocator がå¿
    1015 è¦
     970  #=== PPAllocator が必要か
     971  # Transparent RPC の場合 in で size_is, count_is, string のいずれかが指定されている場合 oneway では PPAllocator が必要
     972  # Transparent PC で oneway かどうかは、ここでは判断しないので別途判断が必要
     973  # Opaque RPC の場合 size_is, count_is, string のいずれかが指定されている場合、PPAllocator が必要
    1016974  def need_PPAllocator?( b_opaque = false )
    1017975    if ! b_opaque then
     
    10601018end
    10611019
    1062 # 関数パラメータリスト
     1020# 関数パラメータリスト
    10631021class ParamList < BDNode
    10641022# @param_list:: NamedList : item: ParamDecl
     
    10731031
    10741032  def add_param( paramdecl )
    1075     return if paramdecl == nil    # 既にエラー
     1033    return if paramdecl == nil    # 既にエラー
    10761034
    10771035    @param_list.add_item( paramdecl )
     
    10831041  end
    10841042
    1085   #=== size_is, count_is, string の引数の式をチェック
    1086   # 変数は前方参ç
    1087 §å¯èƒ½ãªãŸã‚ã€é–¢æ•°é ­éƒ¨ã®æ§‹æ–‡è§£é‡ˆãŒçµ‚わった後にチェックする
     1043  #=== size_is, count_is, string の引数の式をチェック
     1044  # 変数は前方参照可能なため、関数頭部の構文解釈が終わった後にチェックする
    10881045  def check_param
    10891046    @param_list.get_items.each { |i|
    1090       next if i == nil                      # i == nil : エラー時
     1047      next if i == nil                      # i == nil : エラー時
    10911048
    10921049      if i.get_type.class == VoidType then
    1093         # 単一の void 型はここにはこない
     1050        # 単一の void 型はここにはこない
    10941051        cdl_error( "S2027 '$1' parameter cannot be void type", i.get_name )
    10951052      end
     
    10981055      if size then
    10991056        val = size.eval_const( @param_list )
    1100         if val == nil then                      # 定数式でないか?
    1101           # mikan 変数を含む式:単一の変数のみ OK
     1057        if val == nil then                      # 定数式でないか?
     1058          # mikan 変数を含む式:単一の変数のみ OK
    11021059          type = size.get_type( @param_list )
    11031060          unless type.kind_of?( IntType ) then
     
    11371094      if count then
    11381095        val = count.eval_const( @param_list )
    1139         if val == nil then                      # 定数式でないか?
    1140           # mikan 変数を含む式:単一の変数のみ OK
     1096        if val == nil then                      # 定数式でないか?
     1097          # mikan 変数を含む式:単一の変数のみ OK
    11411098          type = count.get_type( @param_list )
    11421099          unless type.kind_of?( IntType ) then
     
    11571114      if string != -1 && string then
    11581115        val = string.eval_const( @param_list )
    1159         if val == nil then                      # 定数式でないか?
    1160           # mikan 変数を含む式:単一の変数のみ OK
     1116        if val == nil then                      # 定数式でないか?
     1117          # mikan 変数を含む式:単一の変数のみ OK
    11611118          type = string.get_type( @param_list )
    11621119          unless type.kind_of?( IntType ) then
     
    11821139  end
    11831140
    1184   #=== Push Pop Allocator がå¿
    1185 è¦ã‹ï¼Ÿ
    1186   # Transparent RPC の場合 (oneway かつ) in のé
    1187 åˆ—(size_is, count_is, string のいずれかで修飾)がある
     1141  #=== Push Pop Allocator が必要か?
     1142  # Transparent RPC の場合 (oneway かつ) in の配列(size_is, count_is, string のいずれかで修飾)がある
    11881143  def need_PPAllocator?( b_opaque = false )
    11891144    @param_list.get_items.each { |i|
     
    11991154  end
    12001155
    1201   #== ParamList# 文字列化
    1202   #b_name:: Bool: パラメータ名を含める
     1156  #== ParamList# 文字列化
     1157  #b_name:: Bool: パラメータ名を含める
    12031158  def to_str( b_name )
    12041159    str = "("
     
    12231178end
    12241179
    1225 #== CDL の文字列リテラルを扱うためのクラス
    1226 # CDL の文字列リテラルそのものではない
     1180#== CDL の文字列リテラルを扱うためのクラス
     1181# CDL の文字列リテラルそのものではない
    12271182class CDLString
    1228   # エスケープ文字を変換
     1183  # エスケープ文字を変換
    12291184  def self.escape str
    12301185    str = str.dup
     
    12381193    str.gsub!( /(\\[Xx][0-9A-Fa-f]{1,2})/, '{printf \"\\1\"}' )
    12391194    str.gsub!( /(\\[0-7]{1,3})/, '{printf \"\\1\"}' )
    1240     str.gsub!( /\\(.)/, "\\1" )   # mikan 未定義のエスケープシーケンスを変換してしまう (gcc V3.4.4 では警告が出される)
     1195    str.gsub!( /\\(.)/, "\\1" )   # mikan 未定義のエスケープシーケンスを変換してしまう (gcc V3.4.4 では警告が出される)
    12411196    return str
    12421197  end
    12431198
    1244   #=== CDLString#前後の " を取り除く
     1199  #=== CDLString#前後の " を取り除く
    12451200  def self.remove_dquote str
    12461201    s = str.sub( /\A"/, "" )
     
    12501205end
    12511206
    1252 #== CDL の初期化子を扱うためのクラス
    1253 # CDL の初期化子そのものではない
     1207#== CDL の初期化子を扱うためのクラス
     1208# CDL の初期化子そのものではない
    12541209class CDLInitializer
    1255   #=== 初期化子のクローン
    1256   # 初期化子は Expression, C_EXP, Array のいずれか
     1210  #=== 初期化子のクローン
     1211  # 初期化子は Expression, C_EXP, Array のいずれか
    12571212  def self.clone_for_composite( rhs, ct_name, cell_name, locale )
    12581213    if rhs.instance_of? C_EXP then
    1259       # C_EXP の clone を作るとともに置換
     1214      # C_EXP の clone を作るとともに置換
    12601215      rhs = rhs.clone_for_composite( ct_name, cell_name, locale )
    12611216    elsif rhs.instance_of? Expression then
     
    12691224  end
    12701225
    1271   #=== 初期化子(é
    1272 åˆ—)のクローン
    1273   # 要素は clone_for_composite を持つものだけ
     1226  #=== 初期化子(配列)のクローン
     1227  # 要素は clone_for_composite を持つものだけ
    12741228  def self.clone_for_compoiste_array( array, ct_name, cell_name, locale )
    1275     # "compoiste.identifier" の場合 (CDL としては誤り)
     1229    # "compoiste.identifier" の場合 (CDL としては誤り)
    12761230    if array[0] == :COMPOSITE then
    12771231      return array.clone
  • asp3_gr_sakura/trunk/tecsgen/tecslib/core/tecs_lang.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: tecs_lang.rb 2061 2014-05-31 22:15:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
    55 #== 言語に関する変数を設定
    56 # メッセージファイルの読み込みも行う (読み込みに失敗した場合、デフォルトの文字コードに変更する)
     40#== 言語に関する変数を設定
     41# メッセージファイルの読み込みも行う (読み込みに失敗した場合、デフォルトの文字コードに変更する)
    5742class TECS_LANG
    58   # ハッシュのタグは case insensitive のため、大文字の文字列とする
     43  # ハッシュのタグは case insensitive のため、大文字の文字列とする
    5944  CHARSET_ALIAS = {
    6045    "UJIS" => :eucJP,
    6146    "UTF-8" => :utf8,
    62     "EUCJP" => :eucJP,   # 以下 case insensitive にするため
     47    "EUCJP" => :eucJP,   # 以下 case insensitive にするため
    6348    "SJIS" => :sjis,
    6449    "UTF8" => :utf8,
     
    6752  LANG_ALIAS = {
    6853    "C" => :en_US,
    69     "EN_US" => :en_US,   # 以下 case insensitive にするため
     54    "EN_US" => :en_US,   # 以下 case insensitive にするため
    7055    "JA_JP" => :ja_JP
    7156  }
     
    7560  }
    7661
    77   #=== LANG のパース
    78   #lang::String  "ja_JP.eucJP@cjknarrow", "C" など
     62  #=== LANG のパース
     63  #lang::String  "ja_JP.eucJP@cjknarrow", "C" など
    7964  #RETURN:: [ :ja_JP, :eucJP, :cjknarrow ]
    8065  def self.parse_lang( lang )
     
    8267
    8368    lang_terri = $1.to_sym if $1 != nil && $1 != ""
    84     # set_kcode_binary により、C.UTF-8 のみを特別扱いするå¿
    85 è¦ãŒãªããªã£ãŸ
    86     # if lang_terri == :C then    # LANG=C.* は、すべて 1 byte 文字コードとして扱う
     69    # set_kcode_binary により、C.UTF-8 のみを特別扱いする必要がなくなった
     70    # if lang_terri == :C then    # LANG=C.* は、すべて 1 byte 文字コードとして扱う
    8771    #  codeset = nil
    8872    #  modifier = nil
     
    9478  end
    9579
    96   #=== lang, charset の別明解決および妥当性のチェック
    97   #lang::Symbol    : :en_US, :ja_JP など
    98   #charset::Symbol : :eucJP, :utf8 など
     80  #=== lang, charset の別明解決および妥当性のチェック
     81  #lang::Symbol    : :en_US, :ja_JP など
     82  #charset::Symbol : :eucJP, :utf8 など
    9983  #RETURN:
    100   #  [ lang, charset, result ]::  result = false の場合 lang, charset は不適切
     84  #  [ lang, charset, result ]::  result = false の場合 lang, charset は不適切
    10185  def self.resolve_alias_and_check( lang, charset )
    10286    if LANG_ALIAS[ lang.to_s.upcase ] then
     
    122106  end
    123107
    124   #=== codepage を取り出す
    125   #codepage は3~5桁の整数として仮定
     108  #=== codepage を取り出す
     109  #codepage は3~5桁の整数として仮定
    126110  def self.get_win_codepage
    127111    cmd_pipe = IO.popen('cmd /c chcp','r')
     
    132116  end
    133117
    134   #=== codepage から LANG の設定文字列に変換
     118  #=== codepage から LANG の設定文字列に変換
    135119  def self.codepage_to_lang cp
    136120    if cp == "932" then
     
    141125  end
    142126
    143   #=== 言語、文字コードに関する変数を設定
    144   # 以下の順にチェックされ、一番最後に設定された値が採用される
    145   #   ãƒ»ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆ
    146   #   ãƒ»codepage  (exerb 版で TERM 未設定または TERM=cygwin の場合のみ)
    147   #   ãƒ»LANG 環境変数
    148   #   ãƒ»TECSGEN_LANG 環境変数
    149   #   ãƒ»TECSGEN_FILE_LANG 環境変数 (ファイルの文字コードのみ)
    150   #   ãƒ»-k オプション (ファイルの文字コードのみ)
     127  #=== 言語、文字コードに関する変数を設定
     128  # 以下の順にチェックされ、一番最後に設定された値が採用される
     129  #   ・デフォルト
     130  #   ・codepage  (exerb 版で TERM 未設定または TERM=cygwin の場合のみ)
     131  #   ・LANG 環境変数
     132  #   ・TECSGEN_LANG 環境変数
     133  #   ・TECSGEN_FILE_LANG 環境変数 (ファイルの文字コードのみ)
     134  #   ・-k オプション (ファイルの文字コードのみ)
    151135  def self.set_lang_var
    152136
    153137    if $IN_EXERB && ( ENV[ 'TERM' ] == nil || ENV[ 'TERM' ] == "cygwin" ) then
    154       # exerb 版で端末 cygwin の時は codepage のみを見る
     138      # exerb 版で端末 cygwin の時は codepage のみを見る
    155139      cp = get_win_codepage
    156140      lang = codepage_to_lang cp
     
    160144
    161145    elsif ENV[ 'LANG' ]then
    162       # 非 exerb 版では LANG 環境変数を見る
    163       # cygwin console では codepage に従って出力した方が平和なため
     146      # 非 exerb 版では LANG 環境変数を見る
     147      # cygwin console では codepage に従って出力した方が平和なため
    164148
    165149      $LANG_FILE, $CHARSET_FILE, *dum = self.parse_lang( ENV[ 'LANG' ] )
     
    181165  end
    182166
    183   #=== -k オプションからファイル用の言語、文字コード変数を設定
     167  #=== -k オプションからファイル用の言語、文字コード変数を設定
    184168  def self.set_lang_by_option
    185169    if $kcode == nil
     
    211195  end
    212196
    213   #=== Kconv クラス用の変数を設定
    214   # 言語æƒ
    215 å ±ã‹ã‚‰ Kconv に関する変数を設定
     197  #=== Kconv クラス用の変数を設定
     198  # 言語情報から Kconv に関する変数を設定
    216199  def self.set_kconv_var
    217200
    218     # 文字コードの設定
     201    # 文字コードの設定
    219202    case $CHARSET_FILE           # string: "EUC" | "SJIS" | "NONE" | "UTF8"
    220203    when :eucJP
     
    251234    end
    252235
    253     $KCODE_TECSGEN = "UTF8"      # string: "EUC"  このファイルの文字コード(オプションではなく定数)
     236    $KCODE_TECSGEN = "UTF8"      # string: "EUC"  このファイルの文字コード(オプションではなく定数)
    254237    $KCONV_TECSGEN = Kconv::UTF8 # const:
    255     set_kcode $KCODE_TECSGEN     # このファイルの文字コードを設定
    256   end
    257 
    258   #=== 一時的に KCODE を BINARY に変更する
    259   # EUC を UTF8 で読み込んだ場合に文字区切りを誤る問題の対応
    260   # コメントの読み飛ばしを誤る点が問題
    261   # ただし、SJIS の場合は、エスケープ文字の問題があるため、変更しない
     238    set_kcode $KCODE_TECSGEN     # このファイルの文字コードを設定
     239  end
     240
     241  #=== 一時的に KCODE を BINARY に変更する
     242  # EUC を UTF8 で読み込んだ場合に文字区切りを誤る問題の対応
     243  # コメントの読み飛ばしを誤る点が問題
     244  # ただし、SJIS の場合は、エスケープ文字の問題があるため、変更しない
    262245  def self.set_kcode_binary
    263246
     
    273256  end
    274257
    275   #=== 一時的なあ KCODE の変更をå
    276 ƒã«æˆ»ã™
     258  #=== 一時的なあ KCODE の変更を元に戻す
    277259  def self.reset_kcode
    278260    set_kcode $KCODE_BACK
     
    280262
    281263  #####
    282   # $LANG_FILE        言語 (C は en_US に変換される)
    283   # $LANG_CONSOLE     è¨€èªž (C は en_US に変換される)
    284   # $CHARSET_FILE     ãƒ•ã‚¡ã‚¤ãƒ«ã®æ–‡å­—コード
    285   # $CHARSET_CONSOLE  コンソール文字コード
    286 
    287   # デフォルトの設定(正規化済みのこと)
     264  # $LANG_FILE        言語 (C は en_US に変換される)
     265  # $LANG_CONSOLE     言語 (C は en_US に変換される)
     266  # $CHARSET_FILE     ファイルの文字コード
     267  # $CHARSET_CONSOLE  コンソール文字コード
     268
     269  # デフォルトの設定(正規化済みのこと)
    288270  $LANG_FILE_DEFAULT  = :en_US
    289271  $CHARSET_FILE_DEFAULT = nil
     
    296278  $CHARSET_CONSOLE = $CHARSET_CONSOLE_DEFAULT
    297279
    298   # -k で指定可能なコード
     280  # -k で指定可能なコード
    299281  $CODE_TYPE_ARRAY = [ "euc", "sjis", "none", "utf8" ]
    300282
    301   # 言語を決定する
     283  # 言語を決定する
    302284  self.set_lang_var
    303285
    304   # 言語、コードのチェックと正規化
     286  # 言語、コードのチェックと正規化
    305287  lang_file, charset_file, res =
    306288    self.resolve_alias_and_check( $LANG_FILE, $CHARSET_FILE )
     
    316298  end
    317299
    318   # メッセージモジュールをロード
     300  # メッセージモジュールをロード
    319301  if require_tecsgen_lib( "tecslib/messages/messages_console_#{lang_console}.rb", false ) == false then
    320302    require_tecsgen_lib( "tecslib/messages/messages_console_#{$LANG_CONSOLE_DEFAULT}.rb" )
     
    330312  end
    331313
    332   # Kconv クラスのための変数を設定
     314  # Kconv クラスのための変数を設定
    333315  self.set_kconv_var
    334316
     
    337319  dbgPrint "Ruby19_File_Encode=#{$Ruby19_File_Encode}\n"
    338320
    339   #=== 単体テスト実行
     321  #=== 単体テスト実行
    340322  if $unit_test then
    341323    print "unit test: set_lang_var\n"
     
    350332end
    351333
    352 #= Console クラス
    353 # 文字コードを変換する
     334#= Console クラス
     335# 文字コードを変換する
    354336class Console
    355337  def self.print str
  • asp3_gr_sakura/trunk/tecsgen/tecslib/core/tecsgen.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: tecsgen.rb 2389 2016-01-04 07:40:32Z okuma-top $
     37#   $Id$
    5338#++
    5439
     
    5641class TECSGEN
    5742
    58   #=== import パス (-I) を末尾に追加
    59   # 既に登録済みであれば、追加しない
     43  #=== import パス (-I) を末尾に追加
     44  # 既に登録済みであれば、追加しない
    6045  def self.add_import_path path
    6146    if $import_path.index( path ) == nil then
     
    6550  end
    6651
    67   #=== EXEB 版のパスの調整
    68   # 環境変数 TECSPATH が cygwin スタイルだと、exerb 版では扱えない
    69   # $import_path と $TECSPATH を調整する
     52  #=== EXEB 版のパスの調整
     53  # 環境変数 TECSPATH が cygwin スタイルだと、exerb 版では扱えない
     54  # $import_path と $TECSPATH を調整する
    7055  def self.adjust_exerb_path
    7156    if $IN_EXERB then
     
    7459      paths = []
    7560      $import_path.each{ |path|
    76         # cygpath は '..' を簡約してしまうので、new_tecspath で置換する
     61        # cygpath は '..' を簡約してしまうので、new_tecspath で置換する
    7762        # paths << cygpath( path, path )
    7863        paths << path.sub( pattern, new_tecspath )
     
    8570  end
    8671
    87   #=== $(TECSPATH) への置換
    88   #path::String   : ENV[ 'TECSPATH' ] に一致する部分があれば、 "$(TECSPATH)" に置換
    89   #b_global::Bool : true なら gsub で置換。false なら sub で置換
     72  #=== $(TECSPATH) への置換
     73  #path::String   : ENV[ 'TECSPATH' ] に一致する部分があれば、 "$(TECSPATH)" に置換
     74  #b_global::Bool : true なら gsub で置換。false なら sub で置換
    9075  def self.subst_tecspath( path, b_global = false )
    9176    tp = $tecspath.dup
     
    10287  end
    10388
    104   #=== path は絶対パスか?
     89  #=== path は絶対パスか?
    10590  #path:: String   :
    106   # '/' または '$' で始まる場合、絶対パスと判定する
     91  # '/' または '$' で始まる場合、絶対パスと判定する
    10792  def self.is_absolute_path?( path )
    10893    pa = path[0..0]; pa2 = path[0..1]
     
    116101  end
    117102
    118   #=== tecsgen のデフォルトを設定
     103  #=== tecsgen のデフォルトを設定
    119104  def self.set_default_config
    120105    Makefile::set_default_config
     
    122107
    123108  ###
    124   #== Makefile.templ の出力å†
    125 å®¹ã‚’追加、変更するための操作
     109  #== Makefile.templ の出力内容を追加、変更するための操作
    126110  module Makefile
    127     # 固定されている変数(add_var で変更できない)
     111    # 固定されている変数(add_var で変更できない)
    128112    @@fixed_vars = { :INCLUDES => nil, :DEFINES => nil, :TARGET_BASE => nil, :BASE_DIR => nil }
    129113    @@config_mode = false
     
    140124    @@lines = []
    141125
    142     #=== OTHER_OBJS に追加する
     126    #=== OTHER_OBJS に追加する
    143127    def self.add_obj obj
    144128      @@objs << obj
    145129    end
    146     #=== 追加する変数
    147     # プラグインからは、デフォルト値を変更できる
    148     # config により
     130    #=== 追加する変数
     131    # プラグインからは、デフォルト値を変更できる
     132    # config により
    149133    def self.add_var( var, val, comment = nil )
    150134      if @@fixed_vars[ var ]
     
    159143      end
    160144    end
    161     #=== LDFLAGS に追加する
     145    #=== LDFLAGS に追加する
    162146    def self.add_ldflag ldflag
    163147      @@ldflags += " " + ldflag
    164148    end
    165     #=== サーチパスを追加する
    166     # CFLAGS, vpath に追加する
     149    #=== サーチパスを追加する
     150    # CFLAGS, vpath に追加する
    167151    def self.add_search_path path
    168152      @@search_path << path
    169153    end
    170     #=== PRE_TECSGEN_TARGET に追加する
    171     # PRE_TECSGEN_TARGET に target を追加する
     154    #=== PRE_TECSGEN_TARGET に追加する
     155    # PRE_TECSGEN_TARGET に target を追加する
    172156    def self.add_pre_tecsgen_target target
    173157      @@pre_tecsgen_target << pre_tecsgen_target
    174158    end
    175     #=== POST_TECSGEN_TARGET に追加する
    176     # POST_TECSGEN_TARGET に target を追加する
     159    #=== POST_TECSGEN_TARGET に追加する
     160    # POST_TECSGEN_TARGET に target を追加する
    177161    def self.add_post_tecsgen_target target
    178162      @@post_tecsgen_target << pre_tecsgen_target
    179163    end
    180     #=== 追加する変数
     164    #=== 追加する変数
    181165    def self.add_line( line )
    182166      @@lines << line.to_s + "\n"
    183167    end
    184168
    185     def self.get_objs  # Array を返す
     169    def self.get_objs  # Array を返す
    186170      return @@objs.uniq
    187171    end
    188     def self.get_vars  # Array を返す
     172    def self.get_vars  # Array を返す
    189173      if RUBY_VERSION >= '1.9' then
    190174        return (@@vars.keys + @@vars_default.keys).sort.uniq
    191175      else
    192         # V1.8 では、Symbol の sort ができないので、一旦 String に置換する
     176        # V1.8 では、Symbol の sort ができないので、一旦 String に置換する
    193177        return (@@vars.keys + @@vars_default.keys).map{|s| s.to_s }.sort.uniq.map!{|s| s.to_sym }
    194178      end
     
    200184      return @@var_comments[ var ]
    201185    end
    202     def self.get_ldflags  # String を返す
     186    def self.get_ldflags  # String を返す
    203187      return @@ldflags
    204188    end
    205     def self.get_search_path  # Array を返す
     189    def self.get_search_path  # Array を返す
    206190      return @@search_path.uniq
    207191    end
    208     def self.get_pre_tecsgen_target  # Array を返す
     192    def self.get_pre_tecsgen_target  # Array を返す
    209193      return @@pre_tecsgen_target.uniq
    210194    end
    211     def self.get_post_tecsgen_target  # Array を返す
     195    def self.get_post_tecsgen_target  # Array を返す
    212196      return @@post_tecsgen_target.uniq
    213197    end
    214     def self.get_lines  # 付加する行を得る
     198    def self.get_lines  # 付加する行を得る
    215199      return @@lines.uniq
    216200    end
    217201
    218     #=== TECSGEN のデフォルト設定を行う
     202    #=== TECSGEN のデフォルト設定を行う
    219203    # Makefile
    220     # @@fixed_vars で定義されている変数は、変更できず、定数定義されている
     204    # @@fixed_vars で定義されている変数は、変更できず、定数定義されている
    221205    def self.set_default_config
    222206      add_var( "TARGET", "$(TARGET_BASE).exe", "default target name"  )
     
    235219
    236220  def syntax_analisys argv
    237     # ルート namespace (region) を生成
     221    # ルート namespace (region) を生成
    238222    @root_namespace = Region.new("::")
    239223
    240     ####  構文解析 (post コードを除く) ####
    241     # すべての cdl を import する
     224    ####  構文解析 (post コードを除く) ####
     225    # すべての cdl を import する
    242226    argv.each{ |f|
    243227      dbgPrint( "## Import: #{f}\n")
     
    245229    }
    246230
    247     # すべての構文解釈が完了したことの報告
    248     #   å®Ÿéš›ã«ã¯ã€å¾Œã‹ã‚‰ãƒ—ラグインの生成する CDL のパースが行われる
    249     #   ã‚¨ãƒ©ãƒ¼è¡Œæ•°ã®æ±ºå®šæ–¹æ³•ã®å¤‰æ›´ã®ãŸã‚ã«è¡Œã†
     231    # すべての構文解釈が完了したことの報告
     232    #   実際には、後からプラグインの生成する CDL のパースが行われる
     233    #   エラー行数の決定方法の変更のために行う
    250234    Generator.end_all_parse
    251235    dbgPrint( "## End all parse (except Post Code)\n")
     
    253237
    254238  def semantics_analisys_1
    255     ####  意味解析1 (post コードを除く) ####
     239    ####  意味解析1 (post コードを除く) ####
    256240    dbgPrint( "## Creating reverse join \n")
    257241    Cell.create_reverse_join
    258242
    259     #0 set_definition_join は2回呼び出される(1回目)
     243    #0 set_definition_join は2回呼び出される(1回目)
    260244    dbgPrint( "## Checking all join\n")
    261245    @root_namespace.set_definition_join
    262     # @root_namespace.set_require_join                   ### いったん見合わせ。重複エラーを見逃す
    263     # through プラグインで生成されたセルにも require も生成できる (set_definition_join の後ろで実施)
    264 
    265     ####  post コードの生成と構文解析 ####
    266     # 引数がなければ、プラグインのポストコードを出力しない
     246    # @root_namespace.set_require_join                   ### いったん見合わせ。重複エラーを見逃す
     247    # through プラグインで生成されたセルにも require も生成できる (set_definition_join の後ろで実施)
     248
     249    ####  post コードの生成と構文解析 ####
     250    # 引数がなければ、プラグインのポストコードを出力しない
    267251    if ARGV.length > 0 then
    268252      dbgPrint( "## Generating Post Code\n")
    269       # プラグインのポストコードの出力と import
     253      # プラグインのポストコードの出力と import
    270254      tmp_file_name = "#{$gen}/tmp_plugin_post_code.cdl"
    271255      file = nil
     
    277261
    278262      if file then
    279         # through プラグインのポストコード生成
     263        # through プラグインのポストコード生成
    280264        PluginModule.gen_plugin_post_code file
    281265
     
    290274    end
    291275
    292     ####  意味解析1 (post コード) ####
     276    ####  意味解析1 (post コード) ####
    293277    dbgPrint( "## Creating reverse join (for post code) \n")
    294278    Cell.create_reverse_join
    295279
    296     # Join の定義の設定とチェック
    297     #0 # 前方参ç
    298 §å¯¾å¿œ
    299     #0 set_definition_join は2回呼び出される(2回目)  post_code で生成された
     280    # Join の定義の設定とチェック
     281    #0 # 前方参照対応
     282    #0 set_definition_join は2回呼び出される(2回目)  post_code で生成された
    300283    dbgPrint( "## Checking all join (for cells generated by Post Code\n")
    301284    @root_namespace.set_definition_join
    302285
    303286    dbgPrint( "## Set require join\n")
    304     @root_namespace.set_require_join   # mikan post の前にも
    305     # ポストコードで生成されたセルの require のjoin を生成
    306     # mikan require で through が適用されて、ポストコードがå¿
    307 è¦ã¨ãªã£ã¦ã‚‚出力されない
     287    @root_namespace.set_require_join   # mikan post の前にも
     288    # ポストコードで生成されたセルの require のjoin を生成
     289    # mikan require で through が適用されて、ポストコードが必要となっても出力されない
    308290  end # semantics_analisys_1
    309291
    310292  def semantics_analisys_2
    311     ####  意味解析2 ####
     293    ####  意味解析2 ####
    312294    Cell.make_cell_list2
    313295    dbgPrint( "## Set fixed join\n")
    314296    Cell.create_reverse_require_join
    315     # create_reverse_require_join は set_detinition_join に埋め込むことができない
    316         # namespace に依存しない出現順で行う
    317         # mikan through プラグインが適用されポストコードに影響を与える場合が考æ
    318 ®ã§ãã¦ã„ない
    319         # mikan post code に影響のあるものであれば、早くに reverse_require_join の結合がå¿
    320 è¦
     297    # create_reverse_require_join は set_detinition_join に埋め込むことができない
     298        # namespace に依存しない出現順で行う
     299        # mikan through プラグインが適用されポストコードに影響を与える場合が考慮できていない
     300        # mikan post code に影響のあるものであれば、早くに reverse_require_join の結合が必要
    321301    dbgPrint( "## Setting port reference count\n")
    322302    @root_namespace.set_port_reference_count
     
    325305    @root_namespace.check_join
    326306
    327     # mikan プラグインで生成されたコンポーネントの set_def_and_check_join
     307    # mikan プラグインで生成されたコンポーネントの set_def_and_check_join
    328308
    329309    dbgPrint( "## Checking referenced but undefined cell\n")
     
    332312
    333313  def optimize_and_generate
    334     #### Region link root ごとにオプティマイズおよび生成 ####
     314    #### Region link root ごとにオプティマイズおよび生成 ####
    335315    Region.get_link_roots.each { |region|
    336316
     
    354334      end
    355335
    356       # セルが一つもなければ生成しない
    357       # セルの生成がない場合
     336      # セルが一つもなければ生成しない
     337      # セルの生成がない場合
    358338      if region.get_n_cells == 0 then
    359339        if $region_list.length > 0 then
     
    385365
    386366      dbgPrint( "## Unset optimize variables\n")
    387       @root_namespace.reset_optimize   # 最適化をリセットする
     367      @root_namespace.reset_optimize   # 最適化をリセットする
    388368
    389369      if Generator.get_n_error == 0 then
    390         # エラーが発生していたら、設定しない
     370        # エラーが発生していたら、設定しない
    391371        dbgPrint( "## Set cell id\n")
    392         @root_namespace.set_cell_id_and_domain      # セルの ID とドメインæƒ
    393 å ±ã‚’設定(linkunit 毎に0からつける)
    394 
    395         # エラーが発生していたら、最適化は実施しない
     372        @root_namespace.set_cell_id_and_domain      # セルの ID とドメイン情報を設定(linkunit 毎に0からつける)
     373
     374        # エラーが発生していたら、最適化は実施しない
    396375        if ! $unopt then
    397376          dbgPrint( "## Optimizing: Link Region=#{@root_namespace.get_name}\n")
     
    401380
    402381      if $show_tree then
    403         # エラーが発生していても表示(エラー発生時は最適化されていないので注意)
     382        # エラーが発生していても表示(エラー発生時は最適化されていないので注意)
    404383        print "##### show_tree LinkRegion=#{region.get_name} #####\n"
    405384        @root_namespace.show_tree(0)
     
    407386      end
    408387
    409       # 構文解釈、意味解析でエラー発生していたら、コード生成をしない
     388      # 構文解釈、意味解析でエラー発生していたら、コード生成をしない
    410389      if Generator.get_n_error != 0 then
    411390        print_report
     
    413392      end
    414393
    415       #### コード生成 ####
     394      #### コード生成 ####
    416395      begin
    417396        dbgPrint( "## Generating: Link Region=#{@root_namespace.get_name}\n")
     
    420399        @root_namespace.generate_post
    421400      rescue
    422         # 通常ここへは来ない (generate, generate_post で処置される)
     401        # 通常ここへは来ない (generate, generate_post で処置される)
    423402        Generator.error( "G9999 fail to generate" )
    424403      end
     
    438417    }
    439418
    440     # update する
    441     # APPFile で生成されたファイルは、もし変化があれば、ここで更新する
    442     # コード生成段階でエラーが発生すれば、更新しない
    443     # CFile で生成されたものは、更新されている
     419    # update する
     420    # APPFile で生成されたファイルは、もし変化があれば、ここで更新する
     421    # コード生成段階でエラーが発生すれば、更新しない
     422    # CFile で生成されたものは、更新されている
    444423    if Generator.get_n_error == 0 then
    445424      begin
  • asp3_gr_sakura/trunk/tecsgen/tecslib/core/types.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2015 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: types.rb 2296 2015-11-29 11:57:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
    55 #= HasType: @type をå†
    56 éƒ¨ã«æŒã¤åž‹ã®ãŸã‚ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«
     40#= HasType: @type を内部に持つ型のためのモジュール
    5741#  @b_cloned::Bool  : true if @type is cloned
    5842#
    59 # このモジュールは DefinedType, PtrType, ArrayType に include される
    60 # 本当は typedef された時の Decl の要素のみ clone すればよいのだが、get_type, get_original_type で
    61 # 取り出されたとき、set_scs, set_qualifier されたときに無条件で clone する (無駄にメモリを使用する)
    62 # ただし、clone するのは一回のみである (二回 clone すると別の型を参ç
    63 §ã—てしまう)
     43# このモジュールは DefinedType, PtrType, ArrayType に include される
     44# 本当は typedef された時の Decl の要素のみ clone すればよいのだが、get_type, get_original_type で
     45# 取り出されたとき、set_scs, set_qualifier されたときに無条件で clone する (無駄にメモリを使用する)
     46# ただし、clone するのは一回のみである (二回 clone すると別の型を参照してしまう)
    6447#
    65 # initialize で clone しても、å
    66 ±æœ‰ã•ã‚Œã¦ã„るときに clone されない
     48# initialize で clone しても、共有されているときに clone されない
    6749#
    6850module HasType
     
    7153  end
    7254
    73   #=== HasType# @type をクローンする
     55  #=== HasType# @type をクローンする
    7456  def clone_type
    7557#    if @b_cloned == false then
     
    131113  end
    132114
    133   #=== size_is, count_is, string を設定
    134   # 派生クラスでオーバーライドする(デフォルトではエラー)
     115  #=== size_is, count_is, string を設定
     116  # 派生クラスでオーバーライドする(デフォルトではエラー)
    135117  def set_scs( size, count, string, max = nil, b_nullable = false )
    136118    str = ""
     
    170152  end
    171153
    172   #=== 型をチェック
    173   #    正当な型定義かどうか、チェックする
     154  #=== 型をチェック
     155  #    正当な型定義かどうか、チェックする
    174156  def check
    175     # 型に誤りがあれば、エラー文字列を返す
    176   end
    177 
    178   #=== struct の tag をチェック
    179   #    正当な型定義かどうか、チェックする
    180   #kind:: Decl の @kind を参ç
    181 §
     157    # 型に誤りがあれば、エラー文字列を返す
     158  end
     159
     160  #=== struct の tag をチェック
     161  #    正当な型定義かどうか、チェックする
     162  #kind:: Decl の @kind を参照
    182163  def check_struct_tag kind
    183     # tag が存在しなければエラーを出力する
    184     # é
    185 åˆ—型では、要素の型を再帰的にチェック
    186     # ポインタ型では、指すå
    187 ˆã® tag チェックはしない
    188     # 関数型ではパラメータリストのすべてについて行う
    189   end
    190 
    191   #===  初期化可能かチェック
    192   #     attribute など初期化可能かチェックする(型に対し正当な初期化子が与えられているか)
    193   #ident::        string                被代å
    194 ¥å¤‰æ•°å‘½
     164    # tag が存在しなければエラーを出力する
     165    # 配列型では、要素の型を再帰的にチェック
     166    # ポインタ型では、指す先の tag チェックはしない
     167    # 関数型ではパラメータリストのすべてについて行う
     168  end
     169
     170  #===  初期化可能かチェック
     171  #     attribute など初期化可能かチェックする(型に対し正当な初期化子が与えられているか)
     172  #ident::        string                被代入変数命
    195173  #initialize::   Expression, Array of initializer or C_EXP
    196   #               ä»£å
    197 ¥å€¤ã€C_EXP が与えられるのは IntType の場合のみ
     174  #               代入値、C_EXP が与えられるのは IntType の場合のみ
    198175  #kind::         symbol (:ATTRIBUTE, :VAR, :CONSTNAT )
    199   #attribute::    NameList              kind == :VAR のとき参ç
    200 §ã§ãã‚‹ attribute
     176  #attribute::    NameList              kind == :VAR のとき参照できる attribute
    201177  #
    202   #     locale を第一引数として取るのは、以下の理由による。
    203   #     ã“のメソッドは、変数への代å
    204 ¥ãŒè¡Œã‚ã‚Œã‚‹ã€Œè¡Œã€ã«å¯¾ã—て呼び出されるが、
    205   #     Type クラスのインスタンスは、変数が定義された「行」を記憶している。
     178  #     locale を第一引数として取るのは、以下の理由による。
     179  #     このメソッドは、変数への代入が行われる「行」に対して呼び出されるが、
     180  #     Type クラスのインスタンスは、変数が定義された「行」を記憶している。
    206181  #
    207182  # STAGE: S
     
    210185  end
    211186
    212   #=== const_val を指定の型にキャストする
    213   # 派生クラスでオーバーライドしていないとエラー
     187  #=== const_val を指定の型にキャストする
     188  # 派生クラスでオーバーライドしていないとエラー
    214189  def cast( const_val )
    215190    cdl_error( "T1004 cannot cast to $1" , self.class )
    216191  end
    217192
    218   #=== 型が一致するかのチェック
    219   # 型名の字面でチェック.
    220   # typedef された型も字面で一致を見るため、å
    221 ƒã®åž‹ãŒåŒã˜ã§ã‚‚型名が異なれば不一致となる
     193  #=== 型が一致するかのチェック
     194  # 型名の字面でチェック.
     195  # typedef された型も字面で一致を見るため、元の型が同じでも型名が異なれば不一致となる
    222196  def equal? type2
    223197    return ( get_type_str == type2.get_type_str ) && ( get_type_str_post == type2.get_type_str_post )
    224198  end
    225199
    226   #=== bit size を得る
    227   # IntType, FloatType 以外は0
     200  #=== bit size を得る
     201  # IntType, FloatType 以外は0
    228202  def get_bit_size
    229203    return 0
    230204  end
    231205
    232   #=== å
    233 ƒã®åž‹ã‚’å¾—ã‚‹
    234   # typedef された型の場合、そのå
    235 ƒã®åž‹ã‚’返す.
    236   # それ以外は、自分自身を返す.
    237   # (DefinedType では本メソッドがオーバーライドされる)
     206  #=== 元の型を得る
     207  # typedef された型の場合、その元の型を返す.
     208  # それ以外は、自分自身を返す.
     209  # (DefinedType では本メソッドがオーバーライドされる)
    238210  def get_original_type
    239211    return self
    240212  end
    241213
    242   #=== å†
    243 éƒ¨ã«ãƒã‚¤ãƒ³ã‚¿åž‹ã‚’持つ
    244   # ポインタ型、またはポインタ型メンバを持つ構造体、または要素がポインタ型を持つé
    245 åˆ—
     214  #=== 内部にポインタ型を持つ
     215  # ポインタ型、またはポインタ型メンバを持つ構造体、または要素がポインタ型を持つ配列
    246216  def has_pointer?
    247217    false
    248218  end
    249219
    250   #=== size_is, count_is, string 指定されたポインタを持つか
    251   # size_is, count_is, string 指定されたポインタ型、またはそれをメンバに持つ構造体、またはそれをを要素に持つé
    252 åˆ—
     220  #=== size_is, count_is, string 指定されたポインタを持つか
     221  # size_is, count_is, string 指定されたポインタ型、またはそれをメンバに持つ構造体、またはそれをを要素に持つ配列
    253222  def has_sized_pointer?
    254223    false
    255224  end
    256225 
    257   #=== 長さ指定のない string を持つ
    258   # なさ指定のない string 指定されたポインタ型、またはそれをメンバに持つ構造体、またはそれを要素に持つé
    259 åˆ—
     226  #=== 長さ指定のない string を持つ
     227  # なさ指定のない string 指定されたポインタ型、またはそれをメンバに持つ構造体、またはそれを要素に持つ配列
    260228  def has_unsized_string?
    261229    false
     
    281249    @type_name = type_name
    282250
    283     # mikan type_name が path になっていないため暫定
     251    # mikan type_name が path になっていないため暫定
    284252    @typedef = Namespace.find( [ type_name ] )  #1
    285253
     
    317285  end
    318286
    319   #=== qualifier(const, volatile) の設定
     287  #=== qualifier(const, volatile) の設定
    320288  def set_qualifier( qualifier )
    321289    clone_type
     
    338306  end
    339307
    340   def check     # 意味的誤りがあれば、文字列を返す
    341     nil    # typedef の段階で意味チェックされている
     308  def check     # 意味的誤りがあれば、文字列を返す
     309    nil    # typedef の段階で意味チェックされている
    342310  end
    343311
     
    346314  end
    347315
    348   #=== å†
    349 éƒ¨ã«ãƒã‚¤ãƒ³ã‚¿åž‹ã‚’持つ
    350   # ポインタ型、またはポインタ型メンバを持つ構造体、または要素がポインタ型を持つé
    351 åˆ—
     316  #=== 内部にポインタ型を持つ
     317  # ポインタ型、またはポインタ型メンバを持つ構造体、または要素がポインタ型を持つ配列
    352318  def has_pointer?
    353319    @type.has_pointer?
    354320  end
    355321
    356   #=== size_is, count_is, string 指定されたポインタを持つか
    357   # size_is, count_is, string 指定されたポインタ型、またはそれをメンバに持つ構造体、またはそれをを要素に持つé
    358 åˆ—
     322  #=== size_is, count_is, string 指定されたポインタを持つか
     323  # size_is, count_is, string 指定されたポインタ型、またはそれをメンバに持つ構造体、またはそれをを要素に持つ配列
    359324  def has_sized_pointer?
    360325    @type.has_sized_pointer?
    361326  end
    362327 
    363   #=== 長さ指定のない string を持つ
    364   # なさ指定のない string 指定されたポインタ型、またはそれをメンバに持つ構造体、またはそれを要素に持つé
    365 åˆ—
     328  #=== 長さ指定のない string を持つ
     329  # なさ指定のない string 指定されたポインタ型、またはそれをメンバに持つ構造体、またはそれを要素に持つ配列
    366330  def has_unsized_string?
    367331    @type.has_unsized_string?
     
    383347class VoidType < Type
    384348
    385   def check     # 意味的誤りがあれば、文字列を返す
     349  def check     # 意味的誤りがあれば、文字列を返す
    386350    nil
    387351  end
     
    408372class BoolType < Type
    409373
    410   def check     # 意味的誤りがあれば、文字列を返す
     374  def check     # 意味的誤りがあれば、文字列を返す
    411375    nil
    412376  end
     
    458422  end
    459423
    460   def check     # 意味的誤りがあれば、文字列を返す
     424  def check     # 意味的誤りがあれば、文字列を返す
    461425    nil
    462426  end
     
    466430    if val.instance_of?( Expression ) then
    467431      val = val.eval_const2( nil, attribute )
    468       # 評価の結果 C_EXP や Array となる可能性がある
    469     end
    470 
    471     if val.instance_of? Token then    # StringVal 導å
    472 ¥ã«ã‚ˆã‚Šã€ã‚‚はや Token は来ないはず
    473       # val が Token の場合 == の右辺が String だとエラーを起こす (#198)
     432      # 評価の結果 C_EXP や Array となる可能性がある
     433    end
     434
     435    if val.instance_of? Token then    # StringVal 導入により、もはや Token は来ないはず
     436      # val が Token の場合 == の右辺が String だとエラーを起こす (#198)
    474437      cdl_error2( locale, "T1009 $1: $2: not integer" , ident, val )
    475438      return
    476439    elsif val.is_a? C_EXP then
    477       # #192 var が attribute を参ç
    478 §ã—、attribute の右辺が C_EXP の場合
    479       # const の右辺が C_EXP の場合も
     440      # #192 var が attribute を参照し、attribute の右辺が C_EXP の場合
     441      # const の右辺が C_EXP の場合も
    480442      return
    481443    elsif val.kind_of? FloatVal then
     
    521483  end
    522484
    523   #=== IntType# 最大値、最小値をチェックしてクリップする
    524   # キャスト演算を行う
    525   #in_val:: IntegerVal, FloatVal:  この型にキャストする値
    526   #from_type:: Symbol:  :IntType, :FloatType  IntType の場合はビット数でクリップ、FloatType の場合は最大値でクリップ
     485  #=== IntType# 最大値、最小値をチェックしてクリップする
     486  # キャスト演算を行う
     487  #in_val:: IntegerVal, FloatVal:  この型にキャストする値
     488  #from_type:: Symbol:  :IntType, :FloatType  IntType の場合はビット数でクリップ、FloatType の場合は最大値でクリップ
    527489  def check_and_clip( in_val, from_type = :IntType )
    528490    bit_size = get_bit_size
     
    533495    if get_max && val > get_max then
    534496      if from_type == :IntType then
    535         rval = ((1 << bit_size)-1) & val   # bit 数でクリップ
     497        rval = ((1 << bit_size)-1) & val   # bit 数でクリップ
    536498      else
    537         rval = get_max                         # 最大値でクリップ (FloatType)
     499        rval = get_max                         # 最大値でクリップ (FloatType)
    538500      end
    539501      cdl_warning( "W2003 $1: too large to cast to $2, clipped($3)" , in_val, get_type_str, rval )
     
    546508      if @sign == :SIGNED || @sign == nil then
    547509        cdl_warning( "W2004 $1: too small to cast to $2, clipped($3)" , in_val, get_type_str, rval )
    548       else    # @sign == :UNSIGNED || @sign == nil (char の場合)
     510      else    # @sign == :UNSIGNED || @sign == nil (char の場合)
    549511        cdl_warning( "W2005 $1: negative value for unsigned: convert to $2" , in_val, rval )
    550512      end
     
    558520    if @sign == :SIGNED || @sign == nil then
    559521      if @bit_size == -1 then
    560         bit_sz = 8   # char_t は、有符号に扱う
     522        bit_sz = 8   # char_t は、有符号に扱う
    561523      else
    562524        bit_sz = @bit_size
     
    576538    if @bit_size == -1 then
    577539      if @sign == nil then
    578         return 255   # char_t は、無符号に扱う
     540        return 255   # char_t は、無符号に扱う
    579541      else
    580542        bit_sz = 8
     
    600562  end
    601563
    602   #=== IntType# C 言語における型名(修飾子付き)
     564  #=== IntType# C 言語における型名(修飾子付き)
    603565  def get_type_str
    604566    str = super
     
    620582
    621583    case @bit_size
    622     when -1      # char_t 型
     584    when -1      # char_t
    623585      if @sign == :SIGNED then
    624586        sign = "s"
    625587      end
    626588      str = "#{str}#{sign}char_t"
    627     when -11     # char 型(obsolete)
     589    when -11     # char (obsolete)
    628590      str = "#{str}#{signL}char"
    629     when -2      # short 型
     591    when -2      # short
    630592      str = "#{str}#{signL}short"
    631     when -3      # int 型
     593    when -3      # int
    632594      str = "#{str}#{signL}int"
    633     when -4      # long 型
     595    when -4      # long
    634596      str = "#{str}#{signL}long"
    635     when -5      # long long 型
     597    when -5      # long long
    636598      str = "#{str}#{signL}long long"
    637     when 8, 16, 32, 64, 128     # int16, int32, int64, int128 型
     599    when 8, 16, 32, 64, 128     # int16, int32, int64, int128
    638600      str = "#{str}#{sign}int#{@bit_size}_t"
    639601    end
     
    642604  end
    643605
    644   #=== IntType# C 言語における型名(後置文字列)
     606  #=== IntType# C 言語における型名(後置文字列)
    645607  def get_type_str_post
    646608    ""
    647609  end
    648610
    649   #=== IntType#bit_size を得る
    650   #    返される値は @bit_size の仕様を参ç
    651 §
     611  #=== IntType#bit_size を得る
     612  #    返される値は @bit_size の仕様を参照
    652613  def get_bit_size
    653614    return @bit_size
    654615  end
    655616
    656   #=== IntType# sign を得る
    657   # @sign の説明を参ç
    658 §
     617  #=== IntType# sign を得る
     618  # @sign の説明を参照
    659619  def get_sign
    660620    @sign
     
    676636  end
    677637
    678   def check     # 意味的誤りがあれば、文字列を返す
     638  def check     # 意味的誤りがあれば、文字列を返す
    679639    nil
    680640  end
    681641
    682   # mikan Float 型の C_EXP 対応 (generate.rb にも変更å¿
    683 è¦)
     642  # mikan Float 型の C_EXP 対応 (generate.rb にも変更必要)
    684643  def check_init( locale, ident, initializer, kind, attribute = nil )
    685     # 型に対する初期値に誤りがあれば、エラー文字列を返す
     644    # 型に対する初期値に誤りがあれば、エラー文字列を返す
    686645    val = initializer
    687646    if val.instance_of?( Expression ) then
    688647      val = val.eval_const2( nil, attribute )
    689       # 評価の結果 C_EXP や Array となる可能性がある
     648      # 評価の結果 C_EXP や Array となる可能性がある
    690649    end
    691650
    692651    if val.instance_of? Token then
    693       # val が Token の場合 == の右辺が String だとエラーを起こす
     652      # val が Token の場合 == の右辺が String だとエラーを起こす
    694653      cdl_error2( locale, "T1018 $1: $2: not number" , ident, val )
    695654      return
     
    772731#  @members_decl:: NamedList
    773732#  @definition:: StructType
    774 #  @b_has_pointer_member:: bool : メンバにポインタ型がある
    775 #  @b_has_sized_pointer_member:: bool : メンバにポインタ型がある
    776 #  @b_has_unsized_string_member:: bool : メンバにポインタ型がある
    777 #  @member_types_symbol:: Symbol : tag が無い時のみ設定 (それ以外では nil)
     733#  @b_has_pointer_member:: bool : メンバにポインタ型がある
     734#  @b_has_sized_pointer_member:: bool : メンバにポインタ型がある
     735#  @b_has_unsized_string_member:: bool : メンバにポインタ型がある
     736#  @member_types_symbol:: Symbol : tag が無い時のみ設定 (それ以外では nil)
    778737
    779738  @@structtype_current_stack = []
    780739  @@structtype_current_sp = -1
    781740
    782   # tag なし struct
     741  # tag なし struct
    783742  @@no_struct_tag_num = 0
    784743  @@no_tag_struct_list = {}
     
    803762    if @b_define then
    804763      @members_decl = NamedList.new( nil, "in struct #{@tag}" )
    805       # if @tag then    登録タイミングを終わりに変更 V1.0.2.19
     764      # if @tag then    登録タイミングを終わりに変更 V1.0.2.19
    806765      #  Namespace.new_structtype( self )
    807766      # end
    808767    else
    809768      @definition = Namespace.find_tag( @tag )
    810       # check_struct_tag に移す V1.0.2.19
     769      # check_struct_tag に移す V1.0.2.19
    811770      # if @definition == nil then
    812771      #  cdl_error( "T1021 \'$1\': struct not defined" , @tag )
     
    833792  end
    834793
    835   def check     # 意味的誤りがあれば、文字列を返す
     794  def check     # 意味的誤りがあれば、文字列を返す
    836795    nil
    837796  end
    838797
    839   #=== 構造体のタグをチェック
    840   #  declarator の時点でチェックする
    841   #kind:: Decl の @kind を参ç
    842 §
     798  #=== 構造体のタグをチェック
     799  #  declarator の時点でチェックする
     800  #kind:: Decl の @kind を参照
    843801  def check_struct_tag kind
    844802    if @tag == nil
     
    852810  end
    853811
    854   # mikan Float 型の C_EXP 対応 (generate.rb にも変更å¿
    855 è¦)
     812  # mikan Float 型の C_EXP 対応 (generate.rb にも変更必要)
    856813  def check_init( locale, ident, initializer, kind, attribute = nil )
    857814
     
    862819    end
    863820
    864     # 初期化子が式の場合、型(タグ)が一致するかチェック
     821    # 初期化子が式の場合、型(タグ)が一致するかチェック
    865822    if initializer.instance_of?( Expression ) then
    866823      t = initializer.get_type( attribute )
     
    898855
    899856  def end_of_parse()
    900     if @members_decl == nil   # @b_define = false またはメンバーのない構造体(エラー)
     857    if @members_decl == nil   # @b_define = false またはメンバーのない構造体(エラー)
    901858      return
    902859    end
     
    924881      string = md.get_string
    925882      if string == -1 then
    926         # 長さ指定なし
     883        # 長さ指定なし
    927884      elsif string then
    928885        val = string.eval_const( @members_decl )
     
    962919
    963920    if @tag then
    964       # typedef struct tag StructType; の形式の場合
    965       # struct の本体は、別に生成される
     921      # typedef struct tag StructType; の形式の場合
     922      # struct の本体は、別に生成される
    966923      return "#{str}struct #{@tag} "
    967924
    968925    else
    969       # typedef struct { int a; } StructType; の形式の場合
     926      # typedef struct { int a; } StructType; の形式の場合
    970927      str += "struct {\n"
    971928      @members_decl.get_items.each{ |i|
     
    1018975  end
    1019976
    1020   #=== 同じ構造体かどうかチェックする
    1021   # tag のチェックは行わない
    1022   # すべてのメンバの名前と型が一致することを確認する
     977  #=== 同じ構造体かどうかチェックする
     978  # tag のチェックは行わない
     979  # すべてのメンバの名前と型が一致することを確認する
    1023980  def same? another
    1024981    md = another.get_members_decl
     
    11101067  end
    11111068
    1112   def check     # 意味的誤りがあれば、文字列を返す
    1113     if @type.class == ArrayType then    # é
    1114 åˆ—を返す関数
     1069  def check     # 意味的誤りがあれば、文字列を返す
     1070    if @type.class == ArrayType then    # 配列を返す関数
    11151071      return "function returning array"
    1116     elsif @type.class == FuncType then  # 関数を返す関数
     1072    elsif @type.class == FuncType then  # 関数を返す関数
    11171073      return "function returning function"
    11181074    end
    1119     return @type.check   # 関数の return する型のチェック
    1120 
    1121     # パラメータの型のチェックは ParamList#check_param で行う
     1075    return @type.check   # 関数の return する型のチェック
     1076
     1077    # パラメータの型のチェックは ParamList#check_param で行う
    11221078  end
    11231079
    11241080  def check_struct_tag kind
    11251081    @type.check_struct_tag kind
    1126     # ParamDecl でもチェックされるので、ここではチェックしない
     1082    # ParamDecl でもチェックされるので、ここではチェックしない
    11271083    # @paramlist.check_struct_tag kind
    11281084  end
     
    11411097  end
    11421098
    1143   #=== return type を返す
     1099  #=== return type を返す
    11441100  #
    1145   # return type を返す
    1146   # get_return_type とすべきだった
     1101  # return type を返す
     1102  # get_return_type とすべきだった
    11471103  def get_type
    11481104    @type
     
    11541110
    11551111  def get_type_str_post
    1156     # 型だけを返す (仮引数の名前を含めない)
     1112    # 型だけを返す (仮引数の名前を含めない)
    11571113    @paramlist.to_str( false )
    11581114  end
     
    11821138  end
    11831139
    1184   #=== Push Pop Allocator がå¿
    1185 è¦ã‹ï¼Ÿ
    1186   # Transparent RPC の場合 oneway かつ in のé
    1187 åˆ—(size_is, count_is, string のいずれかで修飾)がある
     1140  #=== Push Pop Allocator が必要か?
     1141  # Transparent RPC の場合 oneway かつ in の配列(size_is, count_is, string のいずれかで修飾)がある
    11881142  def need_PPAllocator?( b_opaque = false )
    11891143    if @b_oneway || b_opaque then
     
    11941148  end
    11951149
    1196   #=== パラメータが in, inout, out, send, receive を持つか
     1150  #=== パラメータが in, inout, out, send, receive を持つか
    11971151  def has_in?
    11981152    @has_in
     
    12111165  end
    12121166
    1213   #=== å
    1214 ¥åŠ›æ–¹å‘のパラメータを持つか
     1167  #=== 入力方向のパラメータを持つか
    12151168  def has_inward?
    12161169    @has_in || @has_inout || @has_send
    12171170  end
    1218   #=== 出力方向のパラメータを持つか
     1171  #=== 出力方向のパラメータを持つか
    12191172  def has_outward?
    12201173    @has_inout || @has_out || @has_receive
     
    12581211  end
    12591212
    1260   #=== Array#qualifier(const, volatile) の設定
     1213  #=== Array#qualifier(const, volatile) の設定
    12611214  def set_qualifier( qualifier )
    12621215    clone_type
     
    12651218  end
    12661219
    1267   # é
    1268 åˆ—要素が const なら const
     1220  # 配列要素が const なら const
    12691221  def is_const?
    12701222    @type.is_const?
    12711223  end
    12721224
    1273   # é
    1274 åˆ—要素が volatile なら volatile
     1225  # 配列要素が volatile なら volatile
    12751226  def is_volatile?
    12761227    @type.is_volatile?
     
    12981249  end
    12991250
    1300   def check     # 意味的誤りがあれば、文字列を返す
    1301     if @type.class == FuncType then             # 関数のé
    1302 åˆ—
     1251  def check     # 意味的誤りがあれば、文字列を返す
     1252    if @type.class == FuncType then             # 関数の配列
    13031253      return "array of function"
    1304     elsif @type.class == ArrayType then # 添数なしé
    1305 åˆ—のé
    1306 åˆ—
     1254    elsif @type.class == ArrayType then # 添数なし配列の配列
    13071255      unless @type.get_subscript then
    13081256        return "subscript not specified"
     
    13101258    end
    13111259
    1312     return @type.check    # é
    1313 åˆ—要素の型をチェック
     1260    return @type.check    # 配列要素の型をチェック
    13141261  end
    13151262
     
    13641311#  @size:: Expr, or nil if not specified
    13651312#  @count:: Expr, or nil if not specified
    1366 #  @string:: Expr or -1(if size not specified) (string 引数), or nil if not specified
     1313#  @string:: Expr or -1(if size not specified) (string 引数), or nil if not specified
    13671314
    13681315  include HasType
     
    13811328      @type = type
    13821329    else
    1383       @type.set_type( type )    # 枝å
    1384 ˆã® type を設定
     1330      @type.set_type( type )    # 枝先の type を設定
    13851331    end
    13861332  end
     
    14041350  end
    14051351
    1406   def check     # 意味的誤りがあれば、文字列を返す
     1352  def check     # 意味的誤りがあれば、文字列を返す
    14071353    return nil if @type == nil
    14081354    @type.check
     
    14101356
    14111357  def check_struct_tag kind
    1412     if kind != :MEMBER  # 構造体メンバーの場合、ポインタのå
    1413 ˆã®æ§‹é€ ä½“タグをチェックしない
     1358    if kind != :MEMBER  # 構造体メンバーの場合、ポインタの先の構造体タグをチェックしない
    14141359      @type.check_struct_tag kind
    14151360    end
     
    14281373          if ( t1.class == t2.class ) && ( t1.get_bit_size == t2.get_bit_size ) then
    14291374          elsif ( t1.kind_of?( CDefinedType) || t2.kind_of?( CDefinedType ) )&& t1.get_type_str == t2.get_type_str && t1.get_type_str_post && t2.get_type_str_post then
    1430             # int8_t などが、一方は .h に定義されているケース
     1375            # int8_t などが、一方は .h に定義されているケース
    14311376          else
    14321377            cdl_error2( locale, "T1032 $1: incompatible pointer type" , ident )
     
    14391384        end
    14401385      elsif val.kind_of? StringVal then
    1441         # 文字列定数
     1386        # 文字列定数
    14421387        # mikan L"wide string"
    14431388        if @type.get_bit_size != -1 && @type.get_bit_size != -11 then  # -1: char_t
     
    14831428    @b_nullable = b_nullable
    14841429
    1485     # string は最も左側の ptr に作用する
     1430    # string は最も左側の ptr に作用する
    14861431    if @type.kind_of?( PtrType ) then
    1487       # ptr_level が 2 以上であることは ParamDecl#initializer でチェックされる
     1432      # ptr_level が 2 以上であることは ParamDecl#initializer でチェックされる
    14881433      clone_type
    14891434      @type.set_scs( nil, nil, string, nil, false )
     
    15321477  end
    15331478
    1534   #=== PtrType# size_is の最大値
     1479  #=== PtrType# size_is の最大値
    15351480  def get_max
    15361481    @max
     
    15951540end
    15961541
    1597 #==  DescriptorType クラス
    1598 # 動的結合で渡すデスクリプタ型
     1542#==  DescriptorType クラス
     1543# 動的結合で渡すデスクリプタ型
    15991544class DescriptorType < Type
    16001545# @sinagure_nsp::NamespacePath
     
    16301575    case kind
    16311576    when :PARAMETER
    1632       # 引数は初期化できない
     1577      # 引数は初期化できない
    16331578    else
    16341579      cdl_error2( locale, "T9999 Descriptor cannot be used for $1", kind)
     
    16371582
    16381583  #== DescriptorType#
    1639   # 意味解析段階では nil が返される可能性に注意
     1584  # 意味解析段階では nil が返される可能性に注意
    16401585  def get_signature
    16411586    Namespace.find @signature_nsp
     
    16431588end
    16441589
    1645 # 以下単体テストコード
     1590# 以下単体テストコード
    16461591if $unit_test then
    16471592  puts( "===== Unit Test: IntType ===== (types.rb)")
  • asp3_gr_sakura/trunk/tecsgen/tecslib/core/value.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: value.rb 2061 2014-05-31 22:15:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
    55 #= BaseVal 整数、浮動小数などの値を扱うクラスの基底クラス
     40#= BaseVal 整数、浮動小数などの値を扱うクラスの基底クラス
    5641#
    57 # TECS の CDL で扱う値は、以下に分類される
    58 # ・整数
    59 # ・浮動小数
    60 # ・文字列
    61 # ・ブール値
    62 # 集成型(構造体、é
    63 åˆ—)と C_EXP はここでは扱わない
     42# TECS の CDL で扱う値は、以下に分類される
     43# ・整数
     44# ・浮動小数
     45# ・文字列
     46# ・ブール値
     47# 集成型(構造体、配列)と C_EXP はここでは扱わない
    6448#
    65 # このクラスで定義済みの演算子は、エラーとなる
    66 # 型により演算可能な場合、演算子をオーバーライドする
     49# このクラスで定義済みの演算子は、エラーとなる
     50# 型により演算可能な場合、演算子をオーバーライドする
    6751#
    6852class BaseVal < Node
     
    160144end
    161145
    162 #= Pointer 値 (IntegerVal の Pointer 版)
     146#= Pointer 値 (IntegerVal の Pointer 版)
    163147#
    164 # ポインタ値は、CDL で直接生成されることはない
    165 # 整数値のキャスト演算により生成される
     148# ポインタ値は、CDL で直接生成されることはない
     149# 整数値のキャスト演算により生成される
    166150class PointerVal < BaseVal
    167 #@int_val:: IntegerVal: IntegerVal でなくてはならない
    168 #@ptr_type:: PtrType: ポインタの指すå
    169 ˆã®åž‹
     151#@int_val:: IntegerVal: IntegerVal でなくてはならない
     152#@ptr_type:: PtrType: ポインタの指す先の型
    170153
    171154  def initialize( int_val, ptr_type )
     
    175158  end
    176159
    177   #=== ポインタの指すå
    178 ˆã®åž‹ã‚’å¾—ã‚‹
    179   # PointerVal 専用のメソッド
     160  #=== ポインタの指す先の型を得る
     161  # PointerVal 専用のメソッド
    180162  def get_type
    181163    @ptr_type
     
    183165
    184166  def cast type
    185     t = type.get_original_type   # typedef のå
    186 ƒã‚’å¾—ã‚‹
     167    t = type.get_original_type   # typedef の元を得る
    187168    if t.kind_of? IntType then
    188169      val = t.check_and_clip( @int_val, :IntType )
     
    213194end
    214195
    215 #= IntegerVal: 整数値を扱うクラス
     196#= IntegerVal: 整数値を扱うクラス
    216197class IntegerVal < BaseVal
    217198#@val:: Integer: value
     
    250231  def / val
    251232    if val.kind_of? FloatVal then
    252       v2 = val.to_f   # to_f を2回評価しない
     233      v2 = val.to_f   # to_f を2回評価しない
    253234      if v2 == 0.0 then
    254235        cdl_error( "V1009 / : divieded by zero"  )
     
    257238      return FloatVal.new( @val.to_f / v2 )
    258239    else
    259       v2 = val.to_i   # to_i を2回評価しない
     240      v2 = val.to_i   # to_i を2回評価しない
    260241      if v2 == 0 then
    261242        cdl_error( "V1010 / : divieded by zero"  )
     
    267248  def % val
    268249    if val.kind_of? FloatVal then
    269       v2 = val.to_f   # to_f を2回評価しない
     250      v2 = val.to_f   # to_f を2回評価しない
    270251      if v2 == 0.0 then
    271252        cdl_error( "V1011 % : divieded by zero"  )
     
    274255      return FloatVal.new( @val.to_f % v2 )
    275256    else
    276       v2 = val.to_i   # to_i を2回評価しない
     257      v2 = val.to_i   # to_i を2回評価しない
    277258      if v2 == 0 then
    278259        cdl_error( "V1012 % : divieded by zero"  )
     
    360341  end
    361342  def cast( type )
    362     t = type.get_original_type   # typedef のå
    363 ƒã‚’å¾—ã‚‹
     343    t = type.get_original_type   # typedef の元を得る
    364344    if t.kind_of? IntType then
    365345      val = t.check_and_clip( @val, :IntType )
     
    395375end
    396376
    397 #= BoolVal: bool 値を扱うクラス
     377#= BoolVal: bool 値を扱うクラス
    398378class BoolVal < BaseVal
    399379#@val:: bool: true, false
     
    437417  end
    438418  def cast( type )
    439     t = type.get_original_type   # typedef のå
    440 ƒã‚’å¾—ã‚‹
     419    t = type.get_original_type   # typedef の元を得る
    441420    if @val then
    442421      val = 1
     
    478457end
    479458
    480 #= FloatVal: 実数値を扱うクラス
     459#= FloatVal: 実数値を扱うクラス
    481460class FloatVal < BaseVal
    482461#@val:: Float
     
    496475  end
    497476  def / val
    498     v2 = val.to_f   # to_f を2回評価しない
     477    v2 = val.to_f   # to_f を2回評価しない
    499478    if v2 == 0.0 then
    500479      cdl_error( "V1017 / : divieded by zero"  )
     
    504483  end
    505484  def % val
    506     v2 = val.to_f   # to_f を2回評価しない
     485    v2 = val.to_f   # to_f を2回評価しない
    507486    if v2 == 0.0 then
    508487      cdl_error( "V1018 % : divieded by zero"  )
     
    536515  end
    537516  def cast( type )
    538     t = type.get_original_type   # typedef のå
    539 ƒã‚’å¾—ã‚‹
     517    t = type.get_original_type   # typedef の元を得る
    540518    if t.kind_of? IntType then
    541519      val = t.check_and_clip( @val, :FloatType )
     
    565543end
    566544
    567 #= 文字列リテラルを扱うクラス
     545#= 文字列リテラルを扱うクラス
    568546class StringVal < BaseVal
    569547#@str:: Token:
     
    573551    super()
    574552    @str = str
    575     @specifier = spec   # mikan L"str" wide 文字列未対応
     553    @specifier = spec   # mikan L"str" wide 文字列未対応
    576554  end
    577555
    578556  #===
    579557  #
    580   # string の cast はできない mikan ポインタ型への cast はできるべき
     558  # string の cast はできない mikan ポインタ型への cast はできるべき
    581559  def cast type
    582     t = type.get_original_type   # typedef のå
    583 ƒã‚’å¾—ã‚‹
     560    t = type.get_original_type   # typedef の元を得る
    584561    if t.kind_of? IntType then
    585562      cdl_error( "V1022 string cannot cast to integer"  )
     
    598575
    599576  def val
    600     @str.to_s   # Token で扱われていた名残 (val を取り出す)
     577    @str.to_s   # Token で扱われていた名残 (val を取り出す)
    601578  end
    602579end
  • asp3_gr_sakura/trunk/tecsgen/tecslib/messages/messages_console_en_US.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: messages_console_en_US.rb 2061 2014-05-31 22:15:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
     
    5843
    5944###
    60 # エラーメッセージ
     45# エラーメッセージ
    6146@@error_message = {}
    6247
     
    10731058
    10741059###
    1075 # warning メッセージ
     1060# warning メッセージ
    10761061@@warning_message = {}
    10771062
  • asp3_gr_sakura/trunk/tecsgen/tecslib/messages/messages_console_ja_JP.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: messages_console_ja_JP.rb 2061 2014-05-31 22:15:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
     
    5843
    5944###
    60 # エラーメッセージ
     45# エラーメッセージ
    6146@@error_message = {}
    6247
    6348### C_parser.y.rb
    6449# B1001 need parameter name"
    65 @@error_message[ :"B1001" ] = "パラメータ名がå¿
    66 è¦ã§ã™"
     50@@error_message[ :"B1001" ] = "パラメータ名が必要です"
    6751
    6852# B1002 while open or reading \'$1\'"
    69 @@error_message[ :"B1002" ] = "\'$1\' のオープンまたは読み込みに失敗しました"
     53@@error_message[ :"B1002" ] = "\'$1\' のオープンまたは読み込みに失敗しました"
    7054
    7155# B1003 Unexpected EOF"
    72 @@error_message[ :"B1003" ] = "予期しない EOF です"
     56@@error_message[ :"B1003" ] = "予期しない EOF です"
    7357
    7458# B1004 syntax error near \'$1\'"
    75 @@error_message[ :"B1004" ] = "\'$1\' 付近の構文エラーです"
     59@@error_message[ :"B1004" ] = "\'$1\' 付近の構文エラーです"
    7660
    7761### ctypes.rb
    7862# C1001 $1: mismatch, suitable for integer types"
    79 @@error_message[ :"C1001" ] = "$1: 整合していません, それは整数型に適しています"
     63@@error_message[ :"C1001" ] = "$1: 整合していません, それは整数型に適しています"
    8064
    8165# C1002 $1 not compatible with previous one $2"
    82 @@error_message[ :"C1002" ] = "$1 はそれ以前のものである $2 と両立しません"
     66@@error_message[ :"C1002" ] = "$1 はそれ以前のものである $2 と両立しません"
    8367
    8468# C1003 $1 & $2 incompatible  (\'long double\' not support)"
    85 @@error_message[ :"C1003" ] = "$1 及び $2 は両立しません (\'long double\' は未サポート)"
     69@@error_message[ :"C1003" ] = "$1 及び $2 は両立しません (\'long double\' は未サポート)"
    8670
    8771# C1004 $1: qualifier respecified. previous one: $2"
    88 @@error_message[ :"C1004" ] = "$1: 修飾子が再度指定されました. その前の修飾子: $2"
     72@@error_message[ :"C1004" ] = "$1: 修飾子が再度指定されました. その前の修飾子: $2"
    8973
    9074### expression.rb
    9175# E1001 $1: not found"
    92 @@error_message[ :"E1001" ] = "$1: 見つかりません"
     76@@error_message[ :"E1001" ] = "$1: 見つかりません"
    9377
    9478# E1002 $1: not constant (port)"
    95 @@error_message[ :"E1002" ] = "$1: 定数ではありません (port)"
     79@@error_message[ :"E1002" ] = "$1: 定数ではありません (port)"
    9680
    9781# E1003 $1: not constant"
    98 @@error_message[ :"E1003" ] = "$1: 定数ではありません"
     82@@error_message[ :"E1003" ] = "$1: 定数ではありません"
    9983
    10084# E1004 cannot evaluate \'[]\' operator"
    101 @@error_message[ :"E1004" ] = "\'[]\' 演算子を評価できません"
     85@@error_message[ :"E1004" ] = "\'[]\' 演算子を評価できません"
    10286
    10387# E1005 cannot evaluate \'.\' operator"
    104 @@error_message[ :"E1005" ] = "\'.\' 演算子を評価できません"
     88@@error_message[ :"E1005" ] = "\'.\' 演算子を評価できません"
    10589
    10690# E1006 cannot evaluate \'->\' operator"
    107 @@error_message[ :"E1006" ] = "\'->\' 演算子を評価できません"
     91@@error_message[ :"E1006" ] = "\'->\' 演算子を評価できません"
    10892
    10993# E1007 cannot evaluate \'sizeof\' operator"
    110 @@error_message[ :"E1007" ] = "\'sizeof\' 演算子を評価できません"
     94@@error_message[ :"E1007" ] = "\'sizeof\' 演算子を評価できません"
    11195
    11296# E1008 cannot evaluate \'sizeof\' operator"
    113 @@error_message[ :"E1008" ] = "\'sizeof\' 演算子を評価できません"
     97@@error_message[ :"E1008" ] = "\'sizeof\' 演算子を評価できません"
    11498
    11599# E1009 cannot evaluate \'&\' operator"
    116 @@error_message[ :"E1009" ] = "\'&\' 演算子を評価できません"
     100@@error_message[ :"E1009" ] = "\'&\' 演算子を評価できません"
    117101
    118102# E1010 cannot evaluate \'*\' operator"
    119 @@error_message[ :"E1010" ] = "\'*\' 演算子を評価できません"
     103@@error_message[ :"E1010" ] = "\'*\' 演算子を評価できません"
    120104
    121105# E1011 cannot evaluate unary + for $1"
    122 @@error_message[ :"E1011" ] = "$1 に対する単é 
    123 ã® + を評価できません"
     106@@error_message[ :"E1011" ] = "$1 に対する単項の + を評価できません"
    124107
    125108# E1012 $1: not found in parameter list"
    126 @@error_message[ :"E1012" ] = "$1: パラメータリストの中に見つかりません"
     109@@error_message[ :"E1012" ] = "$1: パラメータリストの中に見つかりません"
    127110
    128111# E1013 \'*\': operand is not pointer value"
    129 @@error_message[ :"E1013" ] = "\'*\': オペランドはポインタ値ではありません"
     112@@error_message[ :"E1013" ] = "\'*\': オペランドはポインタ値ではありません"
    130113
    131114# E1014 $1: elements_get_type: sorry not supported"
    132 @@error_message[ :"E1014" ] = "$1: elements_get_type: 申し訳ありません.サポートされていません"
     115@@error_message[ :"E1014" ] = "$1: elements_get_type: 申し訳ありません.サポートされていません"
    133116
    134117# E1015 \'$1\': direction mismatch for $2, $3 required"
    135 @@error_message[ :"E1015" ] = "\'$1\': $2 に対する方向が整合していません.$3 がå¿
    136 è¦ã§ã™"
     118@@error_message[ :"E1015" ] = "\'$1\': $2 に対する方向が整合していません.$3 が必要です"
    137119
    138120# E1016 $1: elements_check_dir_for_param: sorry not supported"
    139 @@error_message[ :"E1016" ] = "$1: elements_check_dir_for_param: 申し訳ありません.サポートされていません"
     121@@error_message[ :"E1016" ] = "$1: elements_check_dir_for_param: 申し訳ありません.サポートされていません"
    140122
    141123# E1017 $1: rhs not \'Cell.ePort\' form"
    142 @@error_message[ :"E1017" ] = "$1: 右辺が \'Cell.ePort\' 形式ではありません"
     124@@error_message[ :"E1017" ] = "$1: 右辺が \'Cell.ePort\' 形式ではありません"
    143125
    144126# E1018 $1: namespace cannot be specified"
    145 @@error_message[ :"E1018" ] = "$1: namespace を指定できません"
     127@@error_message[ :"E1018" ] = "$1: namespace を指定できません"
    146128
    147129# E1019 $1: rhs not in 'allocator_entry_port' form"
    148 @@error_message[ :"E1019" ] = "$1: 右辺が 'allocator_entry_port' 形式ではありません"
     130@@error_message[ :"E1019" ] = "$1: 右辺が 'allocator_entry_port' 形式ではありません"
    149131
    150132# E1020 rhs not in 'call_port.func.param' form for $1_$2"
    151 @@error_message[ :"E1020" ] = "右辺が 'call_port.func.param' 形式でありません ($1_$2)"
     133@@error_message[ :"E1020" ] = "右辺が 'call_port.func.param' 形式でありません ($1_$2)"
    152134
    153135### bnf.y.rb
    154136# G1001 need specifier for \'$1\'"
    155 @@error_message[ :"G1001" ] = "\'$1\' に対する指定子がå¿
    156 è¦ã§ã™"
     137@@error_message[ :"G1001" ] = "\'$1\' に対する指定子が必要です"
    157138
    158139# G1002 need parameter name"
    159 @@error_message[ :"G1002" ] = "パラメータ名がå¿
    160 è¦ã§ã™"
     140@@error_message[ :"G1002" ] = "パラメータ名が必要です"
    161141
    162142# G1003 need parameter name"
    163 @@error_message[ :"G1003" ] = "パラメータ名がå¿
    164 è¦ã§ã™"
     143@@error_message[ :"G1003" ] = "パラメータ名が必要です"
    165144
    166145# G1004 impossible array type 0"
    167 @@error_message[ :"G1004" ] = "あり得ないé
    168 åˆ—åž‹ 0 です"
     146@@error_message[ :"G1004" ] = "あり得ない配列型 0 です"
    169147
    170148# G1005 impossible array type 1"
    171 @@error_message[ :"G1005" ] = "あり得ないé
    172 åˆ—åž‹ 1 です"
     149@@error_message[ :"G1005" ] = "あり得ない配列型 1 です"
    173150
    174151# G1006 impossible array type 2"
    175 @@error_message[ :"G1006" ] = "あり得ないé
    176 åˆ—åž‹ 2 です"
     152@@error_message[ :"G1006" ] = "あり得ない配列型 2 です"
    177153
    178154# G1007 impossible array type 3"
    179 @@error_message[ :"G1007" ] = "あり得ないé
    180 åˆ—åž‹ 3 です"
     155@@error_message[ :"G1007" ] = "あり得ない配列型 3 です"
    181156
    182157# G1008 impossible function type"
    183 @@error_message[ :"G1008" ] = "あり得ない関数型です"
     158@@error_message[ :"G1008" ] = "あり得ない関数型です"
    184159
    185160# G1009 unexpected specifier"
    186 @@error_message[ :"G1009" ] = "予期しない指定子です"
     161@@error_message[ :"G1009" ] = "予期しない指定子です"
    187162
    188163# G1010 Not function"
    189 @@error_message[ :"G1010" ] = "関数ではありません"
     164@@error_message[ :"G1010" ] = "関数ではありません"
    190165
    191166# G1011 Not function"
    192 @@error_message[ :"G1011" ] = "関数ではありません"
     167@@error_message[ :"G1011" ] = "関数ではありません"
    193168
    194169# G1012 $1 : cannot put specifier here"
    195 @@error_message[ :"G1012" ] = "$1 : ここに指定子を置くことはできません"
     170@@error_message[ :"G1012" ] = "$1 : ここに指定子を置くことはできません"
    196171
    197172# G1013 unexpected specifier"
    198 @@error_message[ :"G1013" ] = "予期しない指定子です"
     173@@error_message[ :"G1013" ] = "予期しない指定子です"
    199174
    200175# G1014 while open or reading \'$1\'"
    201 @@error_message[ :"G1014" ] = "\'$1\' のオープンまたは読み込みに失敗しました"
     176@@error_message[ :"G1014" ] = "\'$1\' のオープンまたは読み込みに失敗しました"
    202177
    203178# G1015 Unexpected EOF"
    204 @@error_message[ :"G1015" ] = "予期しない EOF です"
     179@@error_message[ :"G1015" ] = "予期しない EOF です"
    205180
    206181# G1016 syntax error near \'$1\'"
    207 @@error_message[ :"G1016" ] = "\'$1\' 付近の構文エラーです"
     182@@error_message[ :"G1016" ] = "\'$1\' 付近の構文エラーです"
    208183
    209184### plugin.rb
    210185# P1001 plugin arg: cannot find identifier in $1"
    211 @@error_message[ :"P1001" ] = "plugin arg: $1 の中に識別子を見つけることができません"
     186@@error_message[ :"P1001" ] = "plugin arg: $1 の中に識別子を見つけることができません"
    212187
    213188# P1002 plugin arg: expecting \'=\' not \'$1\'"
    214 @@error_message[ :"P1002" ] = "plugin arg: \'$1\' ではなく \'=\' がå¿
    215 è¦ã§ã™"
     189@@error_message[ :"P1002" ] = "plugin arg: \'$1\' ではなく \'=\' が必要です"
    216190
    217191# P1003 plugin arg: unexpected $1"
    218 @@error_message[ :"P1003" ] = "plugin arg: 予期しない $1 です"
     192@@error_message[ :"P1003" ] = "plugin arg: 予期しない $1 です"
    219193
    220194# P1004 $1: unknown plugin argument\'s identifier\n  $2 are acceptable for RPCPlugin."
    221 @@error_message[ :"P1004" ] = "$1: 不明なプラグイン引数の識別子\n  $2 が RPC プラグインに対して受けå
    222 ¥ã‚Œå¯èƒ½ã§ã™"
     195@@error_message[ :"P1004" ] = "$1: 不明なプラグイン引数の識別子\n  $2 が RPC プラグインに対して受け入れ可能です"
    223196
    224197### pluginModule.rb
    225198# P2001 $1.rb : fail to load plugin"
    226 @@error_message[ :"P2001" ] = "$1.rb : プラグインの読み込みに失敗しました"
     199@@error_message[ :"P2001" ] = "$1.rb : プラグインの読み込みに失敗しました"
    227200
    228201# P2002 $1: not kind of $2"
    229 @@error_message[ :"P2002" ] = "$1: $2 の一種ではありません"
     202@@error_message[ :"P2002" ] = "$1: $2 の一種ではありません"
    230203
    231204# P2003 $1: load failed"
    232 @@error_message[ :"P2003" ] = "$1: 読み込みに失敗しました"
     205@@error_message[ :"P2003" ] = "$1: 読み込みに失敗しました"
    233206
    234207# P2004 $1: open error \'$2\'"
    235 @@error_message[ :"P2004" ] = "$1: オープンエラー \'$2\' が発生しました"
     208@@error_message[ :"P2004" ] = "$1: オープンエラー \'$2\' が発生しました"
    236209
    237210# P2005 $1: plugin error in gen_through_cell_code "
    238 @@error_message[ :"P2005" ] = "$1: gen_through_cell_code å†
    239 ã®ãƒ—ラグインエラーが発生しました"
     211@@error_message[ :"P2005" ] = "$1: gen_through_cell_code 内のプラグインエラーが発生しました"
    240212
    241213# P2006 $1: close error \'$2\'"
    242 @@error_message[ :"P2006" ] = "$1: \'$2\' のクローズエラーが発生しました"
     214@@error_message[ :"P2006" ] = "$1: \'$2\' のクローズエラーが発生しました"
    243215
    244216# P2007 $1: fail to generate post code"
    245 @@error_message[ :"P2007" ] = "$1: ポストコードの生成に失敗しました"
     217@@error_message[ :"P2007" ] = "$1: ポストコードの生成に失敗しました"
    246218
    247219### componentobj.rb
    248220# S1001 context specifier duplicate"
    249 @@error_message[ :"S1001" ] = "コンテキスト指定子が重複しています"
     221@@error_message[ :"S1001" ] = "コンテキスト指定子が重複しています"
    250222
    251223# S1002 \'$1\': unknown specifier for signature"
    252 @@error_message[ :"S1002" ] = "\'$1\': シグニチャに対する不明な指定子です"
     224@@error_message[ :"S1002" ] = "\'$1\': シグニチャに対する不明な指定子です"
    253225
    254226# S1003 $1: \'alloc\' 1st parameter neither [in] integer type nor [out] double pointer type
    255 @@error_message[ :"S1003" ] = "$1: \'alloc\' 関数の第1パラメータが in の整数型でも out の二重ポインタ型でもありません."
     227@@error_message[ :"S1003" ] = "$1: \'alloc\' 関数の第1パラメータが in の整数型でも out の二重ポインタ型でもありません."
    256228
    257229# S1004 $1: \'alloc\' 2nd parameter not [in] double pointer"
    258 @@error_message[ :"S1004" ] = "$1: \'alloc\' 関数の第2パラメータが in のポインタへのポインタではありません."
     230@@error_message[ :"S1004" ] = "$1: \'alloc\' 関数の第2パラメータが in のポインタへのポインタではありません."
    259231
    260232# S1005 $1: \'alloc\' has no parameter, unsuitable for allocator signature"
    261 @@error_message[ :"S1005" ] = "$1: \'alloc\' 関数がパラメータを持っていません.アロケータシグニチャに対して不適当です."
     233@@error_message[ :"S1005" ] = "$1: \'alloc\' 関数がパラメータを持っていません.アロケータシグニチャに対して不適当です."
    262234
    263235# S1006 $1: \'dealloc\' 1st parameter not [in] pointer type"
    264 @@error_message[ :"S1006" ] = "$1: \'dealloc\' 関数の第1パラメータが in のポインタ型ではありません."
     236@@error_message[ :"S1006" ] = "$1: \'dealloc\' 関数の第1パラメータが in のポインタ型ではありません."
    265237
    266238# S1007 "
    267239     # S1007 $1: \'dealloc\' cannot has 2nd parameter"
    268 # @@error_message[ :"S1007" ] = "$1: \'dealloc\' 関数は第2パラメータを持つことができません."
     240# @@error_message[ :"S1007" ] = "$1: \'dealloc\' 関数は第2パラメータを持つことができません."
    269241
    270242# S1008 $1: \'dealloc\' has no parameter, unsuitable for allocator signature"
    271 @@error_message[ :"S1008" ] = "$1: \'dealloc\' 関数がパラメータを持っていません.アロケータシグニチャに対して不適当です."
     243@@error_message[ :"S1008" ] = "$1: \'dealloc\' 関数がパラメータを持っていません.アロケータシグニチャに対して不適当です."
    272244
    273245# S1009 $1: \'alloc\' function not found, unsuitable for allocator signature"
    274 @@error_message[ :"S1009" ] = "$1: \'alloc\' 関数が見つかりません.アロケータシグニチャに対して不適当です."
     246@@error_message[ :"S1009" ] = "$1: \'alloc\' 関数が見つかりません.アロケータシグニチャに対して不適当です."
    275247
    276248# S1010 $1: \'dealloc\' function not found, unsuitable for allocator signature"
    277 @@error_message[ :"S1010" ] = "$1: \'dealloc\' 関数が見つかりません.アロケータシグニチャに対して不適当です."
     249@@error_message[ :"S1010" ] = "$1: \'dealloc\' 関数が見つかりません.アロケータシグニチャに対して不適当です."
    278250
    279251# S1011 $1: size_is specified for non-pointer type"
    280 @@error_message[ :"S1011" ] = "$1: 非ポインタ型に対して size_is が指定されました"
     252@@error_message[ :"S1011" ] = "$1: 非ポインタ型に対して size_is が指定されました"
    281253
    282254# S1012 $1: unsuitable initializer, need array initializer"
    283 @@error_message[ :"S1012" ] = "$1: 不適当な初期化子です.é
    284 åˆ—の初期化子がå¿
    285 è¦ã§ã™ï¼Ž"
     255@@error_message[ :"S1012" ] = "$1: 不適当な初期化子です.配列の初期化子が必要です."
    286256
    287257# S1013 $1: too many initializer, $2 for $3"
    288 @@error_message[ :"S1013" ] = "$1: 初期化子が多すぎます.$3 とするところを $2 としました."
     258@@error_message[ :"S1013" ] = "$1: 初期化子が多すぎます.$3 とするところを $2 としました."
    289259
    290260# S1014 generate specifier duplicate"
    291 @@error_message[ :"S1014" ] = "generate 指定子が重複しました."
     261@@error_message[ :"S1014" ] = "generate 指定子が重複しました."
    292262
    293263# S1015 $1 cannot be specified for composite"
    294 @@error_message[ :"S1015" ] = "$1 は複合セルに対して指定できません."
     264@@error_message[ :"S1015" ] = "$1 は複合セルに対して指定できません."
    295265
    296266# S1016 $1 not found"
    297 @@error_message[ :"S1016" ] = "$1 が見つかりません"
     267@@error_message[ :"S1016" ] = "$1 が見つかりません"
    298268
    299269# S1017 $1 : neither celltype nor cell"
    300 @@error_message[ :"S1017" ] = "$1 : セルタイプでもセルでもありません"
     270@@error_message[ :"S1017" ] = "$1 : セルタイプでもセルでもありません"
    301271
    302272# S1018 $1 : not singleton cell"
    303 @@error_message[ :"S1018" ] = "$1 : シングルトンセルではありません"
     273@@error_message[ :"S1018" ] = "$1 : シングルトンセルではありません"
    304274
    305275# S1019 \'$1\' : not entry port"
    306 @@error_message[ :"S1019" ] = "\'$1\' : 受け口ではありません"
     276@@error_message[ :"S1019" ] = "\'$1\' : 受け口ではありません"
    307277
    308278# S1020 \'$1\' : required port cannot be array"
    309 @@error_message[ :"S1020" ] = "\'$1\' : 要求された口(port)はé
    310 åˆ—に出来ません."
     279@@error_message[ :"S1020" ] = "\'$1\' : 要求された口(port)は配列に出来ません."
    311280
    312281# S1021 $1 : require cannot have same signature with \'$2\'"
    313 @@error_message[ :"S1021" ] = "$1 : リクワイアは \'$2\' と同じシグニチャを持つことが出来ません."
     282@@error_message[ :"S1021" ] = "$1 : リクワイアは \'$2\' と同じシグニチャを持つことが出来ません."
    314283
    315284# S1022 $1.$2 : \'$3\' conflict function name in $4.$5"
    316 @@error_message[ :"S1022" ] = "$1.$2 : \'$3\' は $4.$5 における関数名と衝突しています."
     285@@error_message[ :"S1022" ] = "$1.$2 : \'$3\' は $4.$5 における関数名と衝突しています."
    317286
    318287# S1023 $1: fail to new"
    319 @@error_message[ :"S1023" ] = "$1: new に失敗しました."
     288@@error_message[ :"S1023" ] = "$1: new に失敗しました."
    320289
    321290# S1024 $1: multiple cell for singleton celltype"
    322 @@error_message[ :"S1024" ] = "$1: シングルトンセルタイプに対し複数のセルが存在します."
     291@@error_message[ :"S1024" ] = "$1: シングルトンセルタイプに対し複数のセルが存在します."
    323292
    324293# S1025 not found reachable cell for require \'$1\' in celltype \'$2\'"
    325 @@error_message[ :"S1025" ] = "セルタイプ \'$2\' å†
    326 ã®ãƒªã‚¯ãƒ¯ã‚¤ã‚¢ \'$1\' へ到達可能なセルが見つかりません."
     294@@error_message[ :"S1025" ] = "セルタイプ \'$2\' 内のリクワイア \'$1\' へ到達可能なセルが見つかりません."
    327295
    328296# S1026 required cell \'$1\' not reachable"
    329 @@error_message[ :"S1026" ] = "å¿
    330 è¦ã¨ã•ã‚Œã‚‹ã‚»ãƒ« \'$1\' は到達可能ではありません."
     297@@error_message[ :"S1026" ] = "必要とされるセル \'$1\' は到達可能ではありません."
    331298
    332299# S1027 \'$1\' celltype not found"
    333 @@error_message[ :"S1027" ] = "セルタイプ \'$1\' が見つかりません"
     300@@error_message[ :"S1027" ] = "セルタイプ \'$1\' が見つかりません"
    334301
    335302# S1028 \'$1\' not celltype"
    336 @@error_message[ :"S1028" ] = "\'$1\' はセルタイプではありません"
     303@@error_message[ :"S1028" ] = "\'$1\' はセルタイプではありません"
    337304
    338305# S1029 $1 mismatch with previous one"
    339 @@error_message[ :"S1029" ] = "$1 がそれ以前のものと整合していません"
     306@@error_message[ :"S1029" ] = "$1 がそれ以前のものと整合していません"
    340307
    341308# S1030 $1: celltype mismatch with previous one"
    342 @@error_message[ :"S1030" ] = "$1: セルタイプがそれ以前のものと整合していません"
     309@@error_message[ :"S1030" ] = "$1: セルタイプがそれ以前のものと整合していません"
    343310
    344311# S1031 $1 region \'$2\' mismatch  with previous one \'$3\'"
    345 @@error_message[ :"S1031" ] = "セル $1 のリージョン \'$2\' はそれ以前のリージョン \'$3\' と整合していません."
     312@@error_message[ :"S1031" ] = "セル $1 のリージョン \'$2\' はそれ以前のリージョン \'$3\' と整合していません."
    346313
    347314# S1032 $1: duplicate cell"
    348 @@error_message[ :"S1032" ] = "$1: セルが重複しています"
     315@@error_message[ :"S1032" ] = "$1: セルが重複しています"
    349316
    350317# S1033 rhs expression is not supported. Only attribute is permitted on current version."
    351 @@error_message[ :"S1033" ] = "右辺式はサポートされていません.属性のみが現在のバージョンで使用できます."
     318@@error_message[ :"S1033" ] = "右辺式はサポートされていません.属性のみが現在のバージョンで使用できます."
    352319
    353320# S1034 $1 : cannot refer to $2\'s attribute here. Use \'composite.$3\' to refer to composite celltype\'s"
    354 @@error_message[ :"S1034" ] = "$1 : ここでは $2 の属性を参ç
    355 §ã§ãã¾ã›ã‚“. 複合セルタイプの属性を参ç
    356 §ã™ã‚‹ãŸã‚ \'composite.$3\' をお使いください."
     321@@error_message[ :"S1034" ] = "$1 : ここでは $2 の属性を参照できません. 複合セルタイプの属性を参照するため \'composite.$3\' をお使いください."
    357322
    358323# S1035 composite : cannot specify out of composite celltype definition"
    359 @@error_message[ :"S1035" ] = "composite : 複合セルタイプ定義の外側では指定できません."
     324@@error_message[ :"S1035" ] = "composite : 複合セルタイプ定義の外側では指定できません."
    360325
    361326# S1036 $1 : cannot refer to $2\'s here. Use \'composite.$3\' to refer to composite celltype\'s"
    362 @@error_message[ :"S1036" ] = "$1 : ここでは$2のものを参ç
    363 §ã§ãã¾ã›ã‚“.複合セルタイプのものを参ç
    364 §ã™ã‚‹ãŸã‚ \'composite.$3\' をお使いください."
     327@@error_message[ :"S1036" ] = "$1 : ここでは$2のものを参照できません.複合セルタイプのものを参照するため \'composite.$3\' をお使いください."
    365328
    366329# S1037 $1: celltype plugin fail to new_cell"
    367 @@error_message[ :"S1037" ] = "$1: セルタイププラグインが new_cell に失敗しました."
     330@@error_message[ :"S1037" ] = "$1: セルタイププラグインが new_cell に失敗しました."
    368331
    369332# S1038 $1.$2: self allocator not supported for array entry port"
    370 @@error_message[ :"S1038" ] = "$1.$2: セルフアロケータは受け口é
    371 åˆ—に対してサポートされていません."
     333@@error_message[ :"S1038" ] = "$1.$2: セルフアロケータは受け口配列に対してサポートされていません."
    372334
    373335# S1039 \'$1\': unknown specifier for cell"
    374 @@error_message[ :"S1039" ] = "\'$1\': セルに対する不明な指定子です."
     336@@error_message[ :"S1039" ] = "\'$1\': セルに対する不明な指定子です."
    375337
    376338# S1040 array not supported for relay allocator"
    377 @@error_message[ :"S1040" ] = "é
    378 åˆ—はリレーアロケータに対してサポートされていません."
     339@@error_message[ :"S1040" ] = "配列はリレーアロケータに対してサポートされていません."
    379340
    380341# S1041 \'$1_$2_$3\': not joined. cannot create internal join for relay allocator"
    381 @@error_message[ :"S1041" ] = "\'$1_$2_$3\': 結合されません. リレーアロケータに対してå†
    382 éƒ¨çµåˆã‚’生成できません."
     342@@error_message[ :"S1041" ] = "\'$1_$2_$3\': 結合されません. リレーアロケータに対して内部結合を生成できません."
    383343
    384344# S1042 call port \'$1\' not initialized in cell \'$2\'"
    385 @@error_message[ :"S1042" ] = "呼び口 \'$1\' はセル \'$2\' の中で初期化されません."
     345@@error_message[ :"S1042" ] = "呼び口 \'$1\' はセル \'$2\' の中で初期化されません."
    386346
    387347# S1043 call port \'$1\' not initialized in cell \'$2\'. this call port is created by tecsgen. check allocator specifier"
    388 @@error_message[ :"S1043" ] = "呼び口 \'$1\' はセル \'$2\' の中で初期化されません.この呼び口は tecsgen により生成されます.アロケータ指定子を確認してください."
     348@@error_message[ :"S1043" ] = "呼び口 \'$1\' はセル \'$2\' の中で初期化されません.この呼び口は tecsgen により生成されます.アロケータ指定子を確認してください."
    389349
    390350# S1044 $1: array initializer too many or few, $2 for $3"
    391 @@error_message[ :"S1044" ] = "$1: é
    392 åˆ—の初期化子が多すぎるかまたは少なすぎます.$3 とするところを $2 にしました."
     351@@error_message[ :"S1044" ] = "$1: 配列の初期化子が多すぎるかまたは少なすぎます.$3 とするところを $2 にしました."
    393352
    394353# S1045 $1[$2]: not initialized"
    395 @@error_message[ :"S1045" ] = "$1[$2]: 初期化されません."
     354@@error_message[ :"S1045" ] = "$1[$2]: 初期化されません."
    396355
    397356# S1046 $1[$2]: not initialized"
    398 @@error_message[ :"S1046" ] = "$1[$2]: 初期化されません"
     357@@error_message[ :"S1046" ] = "$1[$2]: 初期化されません"
    399358
    400359# S1047 size_is pointer cannot be exposed for composite attribute"
    401 @@error_message[ :"S1047" ] = "size_is を指定されたポインタ変数は,複合セルタイプの属性名に関しては,外部へå
    402 ¬é–‹ã™ã‚‹ã“とができません."
     360@@error_message[ :"S1047" ] = "size_is を指定されたポインタ変数は,複合セルタイプの属性名に関しては,外部へ公開することができません."
    403361
    404362# S1048 $1: size_is specified for non-pointer type"
    405 @@error_message[ :"S1048" ] = "$1: size_is が非ポインタ型に対して指定されました."
     363@@error_message[ :"S1048" ] = "$1: size_is が非ポインタ型に対して指定されました."
    406364
    407365# S1049 $1: size_is arg not constant"
    408 @@error_message[ :"S1049" ] = "$1: size_is 引数が定数ではありません."
     366@@error_message[ :"S1049" ] = "$1: size_is 引数が定数ではありません."
    409367
    410368# S1050 unsuitable initializer, need array initializer"
    411 @@error_message[ :"S1050" ] = "不適当な初期化子です.é
    412 åˆ—の初期化子がå¿
    413 è¦ã§ã™ï¼Ž"
     369@@error_message[ :"S1050" ] = "不適当な初期化子です.配列の初期化子が必要です."
    414370
    415371# S1051 too many initializer for array, $1 for $2"
    416 @@error_message[ :"S1051" ] = "é
    417 åˆ—に対する初期化子が多すぎます.$2 とするところを $1 にしました."
     372@@error_message[ :"S1051" ] = "配列に対する初期化子が多すぎます.$2 とするところを $1 にしました."
    418373
    419374# S1052 attribute \'$1\' not initialized in cell \'$2\'"
    420 @@error_message[ :"S1052" ] = "属性 \'$1\' はセル \'$2\' の中で初期化されません."
     375@@error_message[ :"S1052" ] = "属性 \'$1\' はセル \'$2\' の中で初期化されません."
    421376
    422377# S1053 $1 must be singleton. inner cell \'$2\' is singleton"
    423 @@error_message[ :"S1053" ] = "$1 はシングルトンであるå¿
    424 è¦ãŒã‚ります.å†
    425 éƒ¨ã‚»ãƒ« \'$2\' はシングルトンです."
     378@@error_message[ :"S1053" ] = "$1 はシングルトンである必要があります.内部セル \'$2\' はシングルトンです."
    426379
    427380# S1054 $1 : specified active but has no active in this celltype"
    428 @@error_message[ :"S1054" ] = "$1 : アクティブに指定されましたが,このセルタイプの中にはアクティブなセルがありません."
     381@@error_message[ :"S1054" ] = "$1 : アクティブに指定されましたが,このセルタイプの中にはアクティブなセルがありません."
    429382
    430383# S1055 $1 must be active. inner cell \'$2\' is active"
    431 @@error_message[ :"S1055" ] = "$1 は active であるå¿
    432 è¦ãŒã‚ります. å†
    433 éƒ¨ã‚»ãƒ« \'$2\' がアクティブです."
     384@@error_message[ :"S1055" ] = "$1 は active である必要があります. 内部セル \'$2\' がアクティブです."
    434385
    435386# S1056 $1 : cannot export, nothing designated"
    436 @@error_message[ :"S1056" ] = "$1 : 外部にå
    437 ¬é–‹ã™ã‚‹ã“とができません.何も指定されていません."
     387@@error_message[ :"S1056" ] = "$1 : 外部に公開することができません.何も指定されていません."
    438388
    439389# S1057 $1 not found in $2"
    440 @@error_message[ :"S1057" ] = "$1 が $2 の中に見つかりません."
     390@@error_message[ :"S1057" ] = "$1 が $2 の中に見つかりません."
    441391
    442392# S1058 \'$1\' : cannot export var"
    443 @@error_message[ :"S1058" ] = "\'$1\' : 変数を外部にå
    444 ¬é–‹ã™ã‚‹ã“とができません."
     393@@error_message[ :"S1058" ] = "\'$1\' : 変数を外部に公開することができません."
    445394
    446395# S1059 \'$1\' : exporting attribute. write in cell or use \'=\' to export attribute"
    447 @@error_message[ :"S1059" ] = "\'$1\' : 属性をå
    448 ¬é–‹ã—ています. セルの中に記述するかまたは属性のå
    449 ¬é–‹ã®ãŸã‚ã« \'=\' を使って下さい."
     396@@error_message[ :"S1059" ] = "\'$1\' : 属性を公開しています. セルの中に記述するかまたは属性の公開のために \'=\' を使って下さい."
    450397
    451398# S1060 \'$1\' : port type mismatch. $2 type is allowed here."
    452 @@error_message[ :"S1060" ] = "\'$1\' : 口(port)の型が整合していません. ここでは $2 型が使用できます."
     399@@error_message[ :"S1060" ] = "\'$1\' : 口(port)の型が整合していません. ここでは $2 型が使用できます."
    453400
    454401# S1061 \'$1\' : not defined"
    455 @@error_message[ :"S1061" ] = "\'$1\' : 定義されていません."
     402@@error_message[ :"S1061" ] = "\'$1\' : 定義されていません."
    456403
    457404# S1062 $1 has no export definition"
    458 @@error_message[ :"S1062" ] = "$1 には外部定義がありません."
     405@@error_message[ :"S1062" ] = "$1 には外部定義がありません."
    459406
    460407# S1063 $1 is port but previously defined as an attribute"
    461 @@error_message[ :"S1063" ] = "$1 は口(port)ですがそれより前に属性として定義されました."
     408@@error_message[ :"S1063" ] = "$1 は口(port)ですがそれより前に属性として定義されました."
    462409
    463410# S1064 $1 : type \'$2$3\' mismatch with pprevious definition\'$4$5\'"
    464 @@error_message[ :"S1064" ] = "$1 : 型 \'$2$3\' はそれ以前の定義 \'$4$5\' と整合してません."
     411@@error_message[ :"S1064" ] = "$1 : 型 \'$2$3\' はそれ以前の定義 \'$4$5\' と整合してません."
    465412
    466413# S1065 $1 : port type $2 mismatch with previous definition $3"
    467 @@error_message[ :"S1065" ] = "$1 : 口(port)型 $2 はそれ以前の定義 $3 と整合していません."
     414@@error_message[ :"S1065" ] = "$1 : 口(port)型 $2 はそれ以前の定義 $3 と整合していません."
    468415
    469416# S1066 $1 : signature \'$2\' mismatch with previous definition \'$3\'"
    470 @@error_message[ :"S1066" ] = "$1 : シグニチャ \'$2\' はそれ以前の定義 \'$3\' と整合していません."
     417@@error_message[ :"S1066" ] = "$1 : シグニチャ \'$2\' はそれ以前の定義 \'$3\' と整合していません."
    471418
    472419# S1067 $1 : array size mismatch with previous definition"
    473 @@error_message[ :"S1067" ] = "$1 : é
    474 åˆ—のサイズがそれ以前の定義と整合していません."
     420@@error_message[ :"S1067" ] = "$1 : 配列のサイズがそれ以前の定義と整合していません."
    475421
    476422# S1068 $1 : optional specifier mismatch with previous definition"
    477 @@error_message[ :"S1068" ] = "$1 : オプショナルな指定子がそれ以前の定義と整合していません."
     423@@error_message[ :"S1068" ] = "$1 : オプショナルな指定子がそれ以前の定義と整合していません."
    478424
    479425# S1069 $1 is an attribute but previously defined as a port"
    480 @@error_message[ :"S1069" ] = "$1 は属性ですがそれより前に口(port)として定義されました."
     426@@error_message[ :"S1069" ] = "$1 は属性ですがそれより前に口(port)として定義されました."
    481427
    482428# S1070 $1: size_is pointer cannot be exposed for composite attribute"
    483 @@error_message[ :"S1070" ] = "$1: size_is を指定されたポインタ変数は,複合セルタイプの属性名に関しては,å
    484 ¬é–‹ã™ã‚‹ã“とができません."
     429@@error_message[ :"S1070" ] = "$1: size_is を指定されたポインタ変数は,複合セルタイプの属性名に関しては,公開することができません."
    485430
    486431# S1071 $1 cannot be specified for composite"
    487 @@error_message[ :"S1071" ] = "$1 は複合セルに対して指定できません."
     432@@error_message[ :"S1071" ] = "$1 は複合セルに対して指定できません."
    488433
    489434# S1072 $1: entry port: sizeless array not supported in current version"
    490 @@error_message[ :"S1072" ] = "$1: 受け口: 現在の版ではサイズ未指定のé
    491 åˆ—はサポートされていません."
     435@@error_message[ :"S1072" ] = "$1: 受け口: 現在の版ではサイズ未指定の配列はサポートされていません."
    492436
    493437# S1073 Not constant expression $1"
    494 @@error_message[ :"S1073" ] = "$1 は定数式ではありません."
     438@@error_message[ :"S1073" ] = "$1 は定数式ではありません."
    495439
    496440# S1074 Not Integer $1"
    497 @@error_message[ :"S1074" ] = "$1 は整数ではありません"
     441@@error_message[ :"S1074" ] = "$1 は整数ではありません"
    498442
    499443# S1075 \'$1\' signature not found"
    500 @@error_message[ :"S1075" ] = "\'$1\' シグニチャが見つかりません."
     444@@error_message[ :"S1075" ] = "\'$1\' シグニチャが見つかりません."
    501445
    502446# S1076 \'$1\' not signature"
    503 @@error_message[ :"S1076" ] = "\'$1\' はシグニチャではありません."
     447@@error_message[ :"S1076" ] = "\'$1\' はシグニチャではありません."
    504448
    505449# S1077 inline: cannot be specified for call port"
    506 @@error_message[ :"S1077" ] = "inline: 呼び口に対して指定できません."
     450@@error_message[ :"S1077" ] = "inline: 呼び口に対して指定できません."
    507451
    508452# S1078 optional: cannot be specified for entry port"
    509 @@error_message[ :"S1078" ] = "optional: 受け口に対して指定できません."
     453@@error_message[ :"S1078" ] = "optional: 受け口に対して指定できません."
    510454
    511455# S1079 allocator: cannot be specified for call port"
    512 @@error_message[ :"S1079" ] = "allocator: 呼び口に対して指定できません."
     456@@error_message[ :"S1079" ] = "allocator: 呼び口に対して指定できません."
    513457
    514458# S1080 duplicate allocator specifier"
    515 @@error_message[ :"S1080" ] = "アロケータ指定子が重複しています."
     459@@error_message[ :"S1080" ] = "アロケータ指定子が重複しています."
    516460
    517461# S1081 self allocator not supported yet"
    518 @@error_message[ :"S1081" ] = "セルフアロケータはまだサポートされていません"
     462@@error_message[ :"S1081" ] = "セルフアロケータはまだサポートされていません"
    519463
    520464# S1082 function \'$1\' not found in signature"
    521 @@error_message[ :"S1082" ] = "関数 \'$1\' がシグニチャで見つかりません"
     465@@error_message[ :"S1082" ] = "関数 \'$1\' がシグニチャで見つかりません"
    522466
    523467# S1083 \'$1\' not found in function \'$2\'"
    524 @@error_message[ :"S1083" ] = "\'$1\' が関数 \'$2\' で見つかりません"
     468@@error_message[ :"S1083" ] = "\'$1\' が関数 \'$2\' で見つかりません"
    525469
    526470# S1084 \'$1\' in function \'$2\' is not send or receive"
    527 @@error_message[ :"S1084" ] = "\'$2\' å†
    528 ã® \'$1\' が基本指定子 send または receive ではありません."
     471@@error_message[ :"S1084" ] = "\'$2\' 内の \'$1\' が基本指定子 send または receive ではありません."
    529472
    530473# S1085 duplicate allocator specifier for \'$1_$2\'"
    531 @@error_message[ :"S1085" ] = "\'$1_$2\' に対する重複したアロケータ指定子です."
     474@@error_message[ :"S1085" ] = "\'$1_$2\' に対する重複したアロケータ指定子です."
    532475
    533476# S1086 rhs not call_port.func.param for $1_$2"
    534 @@error_message[ :"S1086" ] = "$1_$2 に対して not call_port.func.param の形式ではありません."
     477@@error_message[ :"S1086" ] = "$1_$2 に対して not call_port.func.param の形式ではありません."
    535478
    536479# S1087 function \'$1\' not found in signature \'$2\'"
    537 @@error_message[ :"S1087" ] = "関数 \'$1\' がシグニチャ \'$2\' の中に見つかりません."
     480@@error_message[ :"S1087" ] = "関数 \'$1\' がシグニチャ \'$2\' の中に見つかりません."
    538481
    539482# S1088 \'$1\' not found in function \'$2\'"
    540 @@error_message[ :"S1088" ] = "\'$1\' が関数 \'$2\' の中に見つかりません."
     483@@error_message[ :"S1088" ] = "\'$1\' が関数 \'$2\' の中に見つかりません."
    541484
    542485# S1089 relay allocator send/receive mismatch between $1.$2 and $3_$4.$5"
    543 @@error_message[ :"S1089" ] = "リレーアロケータ send/receive は $1.$2 及び $3_$4.$5 の間で整合していません."
     486@@error_message[ :"S1089" ] = "リレーアロケータ send/receive は $1.$2 及び $3_$4.$5 の間で整合していません."
    544487
    545488# S1090 \'$1\' in function \'$2\' is not send or receive"
    546 @@error_message[ :"S1090" ] = "関数 \'$2\' å†
    547 ã® \'$1\' が send または receive ではありません."
     489@@error_message[ :"S1090" ] = "関数 \'$2\' 内の \'$1\' が send または receive ではありません."
    548490
    549491# S1091 call port \'$1\' not found in celltype $2"
    550 @@error_message[ :"S1091" ] = "呼び口 \'$1\' がセルタイプ $2 の中に見つかりません."
     492@@error_message[ :"S1091" ] = "呼び口 \'$1\' がセルタイプ $2 の中に見つかりません."
    551493
    552494# S1092 \'$1\' not namespace"
    553 @@error_message[ :"S1092" ] = "\'$1\' はネームスペースではありません."
     495@@error_message[ :"S1092" ] = "\'$1\' はネームスペースではありません."
    554496
    555497# S1093 $1 : undefined cell"
    556 @@error_message[ :"S1093" ] = "$1 : 未定義のセルです"
     498@@error_message[ :"S1093" ] = "$1 : 未定義のセルです"
    557499
    558500# S1094 $1: pointer is not constant. check \'const\'"
    559 @@error_message[ :"S1094" ] = "$1: ポインタが定数ではありません.\'const\' を確認してください"
     501@@error_message[ :"S1094" ] = "$1: ポインタが定数ではありません.\'const\' を確認してください"
    560502
    561503# S1095 $1: not constant"
    562 @@error_message[ :"S1095" ] = "$1: 定数ではありません"
     504@@error_message[ :"S1095" ] = "$1: 定数ではありません"
    563505
    564506# S1096 $1: should be int, float, bool or pointer type"
    565 @@error_message[ :"S1096" ] = "$1: int, float, bool またはポインタ型であるå¿
    566 è¦ãŒã‚ります"
     507@@error_message[ :"S1096" ] = "$1: int, float, bool またはポインタ型である必要があります"
    567508
    568509# S1097 $1: has no initializer"
    569 @@error_message[ :"S1097" ] = "$1: 初期化子を持っていません"
     510@@error_message[ :"S1097" ] = "$1: 初期化子を持っていません"
    570511
    571512# S1098 $1: has unsuitable initializer"
    572 @@error_message[ :"S1098" ] = "$1: 不適当な初期化子があります."
     513@@error_message[ :"S1098" ] = "$1: 不適当な初期化子があります."
    573514
    574515# S1099 array subscript not constant"
    575 @@error_message[ :"S1099" ] = "é
    576 åˆ—添数が定数ではありません."
     516@@error_message[ :"S1099" ] = "配列添数が定数ではありません."
    577517
    578518# S1100 $1: cannot initialize var"
    579 @@error_message[ :"S1100" ] = "$1: 変数を初期化できません."
     519@@error_message[ :"S1100" ] = "$1: 変数を初期化できません."
    580520
    581521# S1101 \'$1\' cannot initialize entry port"
    582 @@error_message[ :"S1101" ] = "\'$1\' 受け口を初期化できません."
     522@@error_message[ :"S1101" ] = "\'$1\' 受け口を初期化できません."
    583523
    584524# S1102 $1: must specify array subscript here"
    585 @@error_message[ :"S1102" ] = "$1: ここではé
    586 åˆ—添数を指定するå¿
    587 è¦ãŒã‚ります."
     525@@error_message[ :"S1102" ] = "$1: ここでは配列添数を指定する必要があります."
    588526
    589527# S1103 $1: need array subscript"
    590 @@error_message[ :"S1103" ] = "$1: é
    591 åˆ—添数がå¿
    592 è¦ã§ã™ï¼Ž"
     528@@error_message[ :"S1103" ] = "$1: 配列添数が必要です."
    593529
    594530# S1104 $1: need array subscript number. ex. \'[0]\'"
    595 @@error_message[ :"S1104" ] = "$1: é
    596 åˆ—添数の数値がå¿
    597 è¦ã§ã™ï¼Ž(例) \'[0]\'"
     531@@error_message[ :"S1104" ] = "$1: 配列添数の数値が必要です.(例) \'[0]\'"
    598532
    599533# S1105 $1: cannot specify array subscript here"
    600 @@error_message[ :"S1105" ] = "$1: ここではé
    601 åˆ—添数を指定することができません."
     534@@error_message[ :"S1105" ] = "$1: ここでは配列添数を指定することができません."
    602535
    603536# S1106 $1: cannot specify array subscript number. use \'[]\'"
    604 @@error_message[ :"S1106" ] = "$1: é
    605 åˆ—添数の数値を指定することが出来ません.\'[]\' をお使いください."
     537@@error_message[ :"S1106" ] = "$1: 配列添数の数値を指定することが出来ません.\'[]\' をお使いください."
    606538
    607539# S1107 to export port, use \'cCall => composite.cCall\'"
    608 @@error_message[ :"S1107" ] = "口(port)を外部にå
    609 ¬é–‹ã™ã‚‹ãŸã‚, \'cCall => composite.cCall\' をお使いください."
     540@@error_message[ :"S1107" ] = "口(port)を外部に公開するため, \'cCall => composite.cCall\' をお使いください."
    610541
    611542# S1108 $1: rhs not \'Cell.ePort\' form"
    612 @@error_message[ :"S1108" ] = "$1: 右辺が \'Cell.ePort\' の形式ではありません."
     543@@error_message[ :"S1108" ] = "$1: 右辺が \'Cell.ePort\' の形式ではありません."
    613544
    614545# S1109 \'$1\' not found"
    615 @@error_message[ :"S1109" ] = "\'$1\' が見つかりません."
     546@@error_message[ :"S1109" ] = "\'$1\' が見つかりません."
    616547
    617548# S1110 \'$1\' not cell"
    618 @@error_message[ :"S1110" ] = "\'$1\' セルではありません."
     549@@error_message[ :"S1110" ] = "\'$1\' セルではありません."
    619550
    620551# S1111 \'$1\' not found"
    621 @@error_message[ :"S1111" ] = "\'$1\' が見つかりません."
     552@@error_message[ :"S1111" ] = "\'$1\' が見つかりません."
    622553
    623554# S1112 \'$1\' not entry port"
    624 @@error_message[ :"S1112" ] = "\'$1\' 受け口ではありません."
     555@@error_message[ :"S1112" ] = "\'$1\' 受け口ではありません."
    625556
    626557# S1113 \'$1\' signature mismatch"
    627 @@error_message[ :"S1113" ] = "\'$1\' シグニチャが整合していません."
     558@@error_message[ :"S1113" ] = "\'$1\' シグニチャが整合していません."
    628559
    629560# S1114 \'$1\' should be array"
    630 @@error_message[ :"S1114" ] = "\'$1\' é
    631 åˆ—であるå¿
    632 è¦ãŒã‚ります."
     561@@error_message[ :"S1114" ] = "\'$1\' 配列である必要があります."
    633562
    634563# S1115 $1[$2]: subscript out of range (< $3)"
    635 @@error_message[ :"S1115" ] = "$1[$2]: é
    636 åˆ—の添数が範囲外の値です.(< $3)"
     564@@error_message[ :"S1115" ] = "$1[$2]: 配列の添数が範囲外の値です.(< $3)"
    637565
    638566# S1116 \'$1\' entry port is not array"
    639 @@error_message[ :"S1116" ] = "\'$1\' 受け口がé
    640 åˆ—ではありません."
     567@@error_message[ :"S1116" ] = "\'$1\' 受け口が配列ではありません."
    641568
    642569# S1117 \'$1\' not in celltype"
    643 @@error_message[ :"S1117" ] = "\'$1\' はセルタイプå†
    644 ã«ã‚りません."
     570@@error_message[ :"S1117" ] = "\'$1\' はセルタイプ内にありません."
    645571
    646572# S1118 $1: going out from region \'$2\' not permitted"
    647 @@error_message[ :"S1118" ] = "$1: リージョン $2 から out することができません."
     573@@error_message[ :"S1118" ] = "$1: リージョン $2 から out することができません."
    648574
    649575# S1119 $1: going from region \'$2\' to \'$3\' not permitted"
    650 @@error_message[ :"S1119" ] = "$1: リージョン $2 からリージョン $3へ結合できません."
     576@@error_message[ :"S1119" ] = "$1: リージョン $2 からリージョン $3へ結合できません."
    651577
    652578# S1120 $1: going in to region \'$2\' not permitted"
    653 @@error_message[ :"S1120" ] = "$1: リージョン \'$2\' へ in することができません."
     579@@error_message[ :"S1120" ] = "$1: リージョン \'$2\' へ in することができません."
    654580
    655581# S1121 \'$1\' in region \'$2\' cannot be directly joined $3 in  $4"
    656 @@error_message[ :"S1121" ] = "リージョン \'$2\' å†
    657 ã® \'$1\' は直接 $4 å†
    658 ã® $3 に結合できません."
     582@@error_message[ :"S1121" ] = "リージョン \'$2\' 内の \'$1\' は直接 $4 内の $3 に結合できません."
    659583
    660584# S1122 $1 : not port: \'through\' can be specified only for port"
    661 @@error_message[ :"S1122" ] = "$1 :口(port) ではありません: \'through\' は口(port)に対してのみ指定できます."
     585@@error_message[ :"S1122" ] = "$1 :口(port) ではありません: \'through\' は口(port)に対してのみ指定できます."
    662586
    663587# S1123 $1 : not port: \'through\' can be specified only for port"
    664 @@error_message[ :"S1123" ] = "$1 :口(port) ではありません: \'through\' は口(port)に対してのみ指定できます."
     588@@error_message[ :"S1123" ] = "$1 :口(port) ではありません: \'through\' は口(port)に対してのみ指定できます."
    665589
    666590# S1124 $1: plugin function failed: \'get_through_entry_port_name\'"
    667 @@error_message[ :"S1124" ] = "$1: プラグイン関数が失敗しました.: \'get_through_entry_port_name\'"
     591@@error_message[ :"S1124" ] = "$1: プラグイン関数が失敗しました.: \'get_through_entry_port_name\'"
    668592
    669593# S1125 $1: not generated cell \'$2\'"
    670 @@error_message[ :"S1125" ] = "$1: 生成されたセル \'$2\' ではありません."
     594@@error_message[ :"S1125" ] = "$1: 生成されたセル \'$2\' ではありません."
    671595
    672596# S1126 $1: fail to new"
    673 @@error_message[ :"S1126" ] = "$1: new に失敗しました."
     597@@error_message[ :"S1126" ] = "$1: new に失敗しました."
    674598
    675599# S1127 \'$1\' duplicate"
    676 @@error_message[ :"S1127" ] = "\'$1\' が重複しています."
     600@@error_message[ :"S1127" ] = "\'$1\' が重複しています."
    677601
    678602# S1128 \'$1\' inconsistent array definition"
    679 @@error_message[ :"S1128" ] = "\'$1\' は一貫しないé
    680 åˆ—定義です."
     603@@error_message[ :"S1128" ] = "\'$1\' は一貫しない配列定義です."
    681604
    682605# S1129 \'$1\' redefinition of subscript $1"
    683 @@error_message[ :"S1129" ] = "\'$1\' はé
    684 åˆ—添数 $1 の再定義です."
     606@@error_message[ :"S1129" ] = "\'$1\' は配列添数 $1 の再定義です."
    685607
    686608# S1130 \'$1\' inconsistent array definition"
    687 @@error_message[ :"S1130" ] = "\'$1\' は一貫しないé
    688 åˆ—定義です."
     609@@error_message[ :"S1130" ] = "\'$1\' は一貫しない配列定義です."
    689610
    690611# S1131 \'$1.$2\' has duplicate initializer"
    691 @@error_message[ :"S1131" ] = "\'$1.$2\' には重複した初期化子があります."
     612@@error_message[ :"S1131" ] = "\'$1.$2\' には重複した初期化子があります."
    692613
    693614# S1132 $1: 1st parameter is not string(file name)"
    694 @@error_message[ :"S1132" ] = "$1: 第1パラメータが string(ファイル名) ではありません."
     615@@error_message[ :"S1132" ] = "$1: 第1パラメータが string(ファイル名) ではありません."
    695616
    696617# S1133 $1: 2nd parameter is not string(fromat)"
    697 @@error_message[ :"S1133" ] = "$1: 第2パラメータが string(ファイル名) ではありません."
     618@@error_message[ :"S1133" ] = "$1: 第2パラメータが string(ファイル名) ではありません."
    698619
    699620# S1134 $1: unknown factory function"
    700 @@error_message[ :"S1134" ] = "$1: 不明なファクトリ関数です."
     621@@error_message[ :"S1134" ] = "$1: 不明なファクトリ関数です."
    701622
    702623# S1135 celltype factory can\'t have parameter(s)"
    703 @@error_message[ :"S1135" ] = "セルタイプファクトリはパラメータを持つことができません."
     624@@error_message[ :"S1135" ] = "セルタイプファクトリはパラメータを持つことができません."
    704625
    705626# S1136 \'$1\': not found"
    706 @@error_message[ :"S1136" ] = "\'$1\': 見つかりません."
     627@@error_message[ :"S1136" ] = "\'$1\': 見つかりません."
    707628
    708629# S1137 \'$1\': not attribute"
    709 @@error_message[ :"S1137" ] = "\'$1\': 属性ではありません."
     630@@error_message[ :"S1137" ] = "\'$1\': 属性ではありません."
    710631
    711632# S1138 internal error Factory.check_arg()"
    712 @@error_message[ :"S1138" ] = "Factory.check_arg() のå†
    713 éƒ¨ã‚¨ãƒ©ãƒ¼ã§ã™ï¼Ž"
     633@@error_message[ :"S1138" ] = "Factory.check_arg() の内部エラーです."
    714634
    715635# S1139 $1: region path mismatch. previous path: $2"
    716 @@error_message[ :"S1139" ] = "$1: リージョンパスが整合していません.以前のパス: $2"
     636@@error_message[ :"S1139" ] = "$1: リージョンパスが整合していません.以前のパス: $2"
    717637
    718638# S1140 $1: region specifier must place at first appearence"
    719 @@error_message[ :"S1140" ] = "$1: リージョン指定子は最初にé
    720 ç½®ã™ã‚‹å¿
    721 è¦ãŒã‚ります."
     639@@error_message[ :"S1140" ] = "$1: リージョン指定子は最初に配置する必要があります."
    722640
    723641# S1141 $1 duplication, previous one : $2"
    724 @@error_message[ :"S1141" ] = "$1 が重複しています, 以前の値 : $2"
     642@@error_message[ :"S1141" ] = "$1 が重複しています, 以前の値 : $2"
    725643
    726644# S1142 $1 not found in search path"
    727 @@error_message[ :"S1142" ] = "$1 が検索パスの中に見つかりません."
     645@@error_message[ :"S1142" ] = "$1 が検索パスの中に見つかりません."
    728646
    729647# S1143 import_C: arg2: mismatch with previous one"
    730 @@error_message[ :"S1143" ] = "import_C: arg2: 以前のものと整合していません."
     648@@error_message[ :"S1143" ] = "import_C: arg2: 以前のものと整合していません."
    731649
    732650# S1144 $1: temporary C source: open error"
    733 @@error_message[ :"S1144" ] = "$1: 一時的な C ソース: オープンエラーです."
     651@@error_message[ :"S1144" ] = "$1: 一時的な C ソース: オープンエラーです."
    734652
    735653# S1145 $1: temporary C source: writing error"
    736 @@error_message[ :"S1145" ] = "$1: 一時的な C ソース: 書込みエラーです."
     654@@error_message[ :"S1145" ] = "$1: 一時的な C ソース: 書込みエラーです."
    737655
    738656# S1146 $1: error occured while CPP"
    739 @@error_message[ :"S1146" ] = "$1: CPP 実行中にエラーが発生しました."
     657@@error_message[ :"S1146" ] = "$1: CPP 実行中にエラーが発生しました."
    740658
    741659# S1147 $1: popen for CPP failed"
    742 @@error_message[ :"S1147" ] = "$1: CPPに対する popen が失敗しました."
     660@@error_message[ :"S1147" ] = "$1: CPPに対する popen が失敗しました."
    743661
    744662# S1148 $1 not found in search path"
    745 @@error_message[ :"S1148" ] = "$1 が検索パスの中に見つかりません."
     663@@error_message[ :"S1148" ] = "$1 が検索パスの中に見つかりません."
    746664
    747665# S1149 $1 not signature"
    748 @@error_message[ :"S1149" ] = "$1 シグニチャではありません."
     666@@error_message[ :"S1149" ] = "$1 シグニチャではありません."
    749667
    750668# S1150 $1: fail to new"
    751 @@error_message[ :"S1150" ] = "$1: new に失敗しました."
     669@@error_message[ :"S1150" ] = "$1: new に失敗しました."
    752670
    753671# S1151 $1: not namespace"
    754 @@error_message[ :"S1151" ] = "$1: ネームスペースではありません."
     672@@error_message[ :"S1151" ] = "$1: ネームスペースではありません."
    755673
    756674# S1152 $1: call port cannot have fixed join"
    757 @@error_message[ :"S1152" ] = "$1: 呼び口は固定結合を持つことができません."
     675@@error_message[ :"S1152" ] = "$1: 呼び口は固定結合を持つことができません."
    758676
    759677# "S1153 $1: cannot be entry port array for fixed join port"
    760 @@error_message[ :"S1153" ] = "$1: 固定結合の口に対する受け口é
    761 åˆ—はあり得ません."
     678@@error_message[ :"S1153" ] = "$1: 固定結合の口に対する受け口配列はあり得ません."
    762679
    763680# "S1154 $1: must be singleton celltype for fixed join"
    764 @@error_message[ :"S1154" ] = "$1: 固定結合に対するシングルトンセルタイプであるå¿
    765 è¦ãŒã‚ります."
     681@@error_message[ :"S1154" ] = "$1: 固定結合に対するシングルトンセルタイプである必要があります."
    766682
    767683# "S1155 $1: not celltype or not found"
    768 @@error_message[ :"S1155" ] = "$1: セルタイプではないかまたは見つかりません."
     684@@error_message[ :"S1155" ] = "$1: セルタイプではないかまたは見つかりません."
    769685
    770686# "S1156 $1: not call port or not found"
    771 @@error_message[ :"S1156" ] = "$1: 呼び口ではないかまたは見つかりません."
     687@@error_message[ :"S1156" ] = "$1: 呼び口ではないかまたは見つかりません."
    772688
    773689# "S1157 $1: sized array or not array"
    774 @@error_message[ :"S1157" ] = "$1: サイズ指定されたé
    775 åˆ—かまたはé
    776 åˆ—ではありません."
     690@@error_message[ :"S1157" ] = "$1: サイズ指定された配列かまたは配列ではありません."
    777691
    778692# "S1158 $1: singleton cell not found for fixed join"
    779 @@error_message[ :"S1158" ] = "$1: シングルトンセルが固定結合に対して見つかりません."
     693@@error_message[ :"S1158" ] = "$1: シングルトンセルが固定結合に対して見つかりません."
    780694
    781695# S1159 $1: non-size_is pointer cannot be initialized with array initializer"
    782 @@error_message[ :"S1159" ] = "$1: size_is 指定されていないポインタは、é
    783 åˆ—初期化子で初期化できません"
     696@@error_message[ :"S1159" ] = "$1: size_is 指定されていないポインタは、配列初期化子で初期化できません"
    784697
    785698# S1160 $1 must be constant for id"
    786 @@error_message[ :"S1160" ] = "$1 id は定数でなければなりません"
     699@@error_message[ :"S1160" ] = "$1 id は定数でなければなりません"
    787700
    788701# S1161 $1 must be constant for id"
    789 @@error_message[ :"S1161" ] = "$1 id は定数でなければなりません"
     702@@error_message[ :"S1161" ] = "$1 id は定数でなければなりません"
    790703
    791704# S1162 $1: id cannot be 0"
    792 @@error_message[ :"S1162" ] = "$1: id に 0 を指定できません"
     705@@error_message[ :"S1162" ] = "$1: id に 0 を指定できません"
    793706
    794707# S1163 generate specifier duplicate"
    795 @@error_message[ :"S1163" ] = "generate 指定子が重複しています"
     708@@error_message[ :"S1163" ] = "generate 指定子が重複しています"
    796709
    797710# S1164 '$1' set_specified_id: id not positive integer '$2'"
    798 @@error_message[ :"S1164" ] = "'$1' id が正整数でありません '$2'"
     711@@error_message[ :"S1164" ] = "'$1' id が正整数でありません '$2'"
    799712
    800713# S1165 '$1' set_specified_id: id duplicate"
    801 @@error_message[ :"S1165" ] = "'$1' id 指定子が重複しています"
     714@@error_message[ :"S1165" ] = "'$1' id 指定子が重複しています"
    802715
    803716# S1166 $1: fail to new"
    804 @@error_message[ :"S1166" ] = "$1: プラグインの生成に失敗しました"
     717@@error_message[ :"S1166" ] = "$1: プラグインの生成に失敗しました"
    805718
    806719# S1167 \'$1\': relay mismatch \'$2\'"
    807 @@error_message[ :"S1167" ] = "\'$1\': リレーにマッチしません \'$2\'"
     720@@error_message[ :"S1167" ] = "\'$1\': リレーにマッチしません \'$2\'"
    808721
    809722# S1168 too many initializer for array, $1 for $2"
    810 @@error_message[ :"S1168" ] = "é
    811 åˆ—初期化子が多すぎます $1 for $2"
     723@@error_message[ :"S1168" ] = "配列初期化子が多すぎます $1 for $2"
    812724
    813725# S1169 $1: non-size_is pointer cannot be initialized with array initializer"
    814 @@error_message[ :"S1169" ] = "$1: size_is 指定されていないポインタにé
    815 åˆ—初期化子を指定できません"
     726@@error_message[ :"S1169" ] = "$1: size_is 指定されていないポインタに配列初期化子を指定できません"
    816727
    817728# S1170 \'$1\' has size_is but export attr \'$2\' doesn't have"
    818 @@error_message[ :"S1170" ] = "\'$1\' に size_is 指定されていますがエクスポートする \'$2\' に指定されていません"
     729@@error_message[ :"S1170" ] = "\'$1\' に size_is 指定されていますがエクスポートする \'$2\' に指定されていません"
    819730
    820731# S1171 \'$1\' size_is argument of \'$2\' not exported"
    821 @@error_message[ :"S1171" ] = "\'$1\' \'$2\' size_is 引数がエクスポートされていません"
     732@@error_message[ :"S1171" ] = "\'$1\' \'$2\' size_is 引数がエクスポートされていません"
    822733
    823734# S1172 \'$1\' size_is argument mismatch with exporting one \'$2\'"
    824 @@error_message[ :"S1172" ] = "\'$1\' size_is 引数がエクスポートされている \'$2\' と一致しません"
     735@@error_message[ :"S1172" ] = "\'$1\' size_is 引数がエクスポートされている \'$2\' と一致しません"
    825736
    826737# S1173 $1: allocator mismatch from $2's allocator"
    827 @@error_message[ :"S1173" ] = "$1: アロケータが $2' のアロケータと一致しません"
     738@@error_message[ :"S1173" ] = "$1: アロケータが $2' のアロケータと一致しません"
    828739
    829740# S1174 $1 not suitable for lhs, suitable lhs: 'func.param'"
    830 @@error_message[ :"S1174" ] = "$1 左辺が不適切です。適切な左辺は 'func.param' の形式です"
     741@@error_message[ :"S1174" ] = "$1 左辺が不適切です。適切な左辺は 'func.param' の形式です"
    831742
    832743# S1175 $1 not found or not allocator entry port for $2"
    833 @@error_message[ :"S1175" ] = "$1  $2 のアロケータ受け口が見当たらないか、アロケータ受け口ではありません"
     744@@error_message[ :"S1175" ] = "$1  $2 のアロケータ受け口が見当たらないか、アロケータ受け口ではありません"
    834745
    835746# S1176 rhs not in 'call_port.func.param' form for $1_$2"
    836 @@error_message[ :"S1176" ] = "右辺が 'call_port.func.param' 形式でありません ($1_$2)"
     747@@error_message[ :"S1176" ] = "右辺が 'call_port.func.param' 形式でありません ($1_$2)"
    837748
    838749# S1177 cannot specify 'through' in composite in current version"
    839 @@error_message[ :"S1177" ] = "現在のバージョンでは、コンポジットセルに 'through'を指定できません"
     750@@error_message[ :"S1177" ] = "現在のバージョンでは、コンポジットセルに 'through'を指定できません"
    840751
    841752# S1178 $1 region type specifier duplicate, previous $2"
    842 @@error_message[ :"S1178" ] = "$1 リージョンタイプ指定子が重複しています。以前は $2 でした"
     753@@error_message[ :"S1178" ] = "$1 リージョンタイプ指定子が重複しています。以前は $2 でした"
    843754
    844755### syntaxobj.rb
    845756# S2001 \'$1\' duplicate $2"
    846 @@error_message[ :"S2001" ] = "\'$1\': 重複しています ($2)"
     757@@error_message[ :"S2001" ] = "\'$1\': 重複しています ($2)"
    847758
    848759# S2002 $1: $2"
     
    850761
    851762# S2003 $1: $2 cannot have initializer"
    852 @@error_message[ :"S2003" ] = "$1: $2 は初期化子をもつことができません."
     763@@error_message[ :"S2003" ] = "$1: $2 は初期化子をもつことができません."
    853764
    854765# S2004 $1: array subscript must be specified or omit"
    855 @@error_message[ :"S2004" ] = "$1: é
    856 åˆ—添数は指定されるかまたは省略されるå¿
    857 è¦ãŒã‚ります."
     766@@error_message[ :"S2004" ] = "$1: 配列添数は指定されるかまたは省略される必要があります."
    858767
    859768# S2005 $1: array subscript must be specified"
    860 @@error_message[ :"S2005" ] = "$1: é
    861 åˆ—添数は指定されるå¿
    862 è¦ãŒã‚ります."
     769@@error_message[ :"S2005" ] = "$1: 配列添数は指定される必要があります."
    863770
    864771# S2006 \'$1\' function"
    865 @@error_message[ :"S2006" ] = "\'$1\' 関数です."
     772@@error_message[ :"S2006" ] = "\'$1\' 関数です."
    866773
    867774# S2007 \'$1\' $2"
     
    869776
    870777# S2008 $1: inconsitent with previous one"
    871 @@error_message[ :"S2008" ] = "$1: 以前のものと一貫していません."
     778@@error_message[ :"S2008" ] = "$1: 以前のものと一貫していません."
    872779
    873780# S2009 $1: not found or not signature"
    874 @@error_message[ :"S2009" ] = "$1: 見つからないかまたはシグニチャではありません."
     781@@error_message[ :"S2009" ] = "$1: 見つからないかまたはシグニチャではありません."
    875782
    876783# S2010 $1: not allocator signature"
    877 @@error_message[ :"S2010" ] = "$1: アロケータシグニチャではありません."
     784@@error_message[ :"S2010" ] = "$1: アロケータシグニチャではありません."
    878785
    879786# S2011 size_is duplicate"
    880 @@error_message[ :"S2011" ] = "size_is が重複しています."
     787@@error_message[ :"S2011" ] = "size_is が重複しています."
    881788
    882789# S2012 count_is duplicate"
    883 @@error_message[ :"S2012" ] = "count_is が重複しています."
     790@@error_message[ :"S2012" ] = "count_is が重複しています."
    884791
    885792# S2013 string duplicate"
    886 @@error_message[ :"S2013" ] = "string が重複しています."
     793@@error_message[ :"S2013" ] = "string が重複しています."
    887794
    888795# S2014 $1 need pointer or more pointer"
    889 @@error_message[ :"S2014" ] = "$1 は一つ以上のポインタがå¿
    890 è¦ã§ã™ï¼Ž"
     796@@error_message[ :"S2014" ] = "$1 は一つ以上のポインタが必要です."
    891797
    892798# S2015 $1 must be const for \'in\' parameter $2"
    893 @@error_message[ :"S2015" ] = "'$1' は \'in\' パラメータ $2 に対して定数であるå¿
    894 è¦ãŒã‚ります."
     799@@error_message[ :"S2015" ] = "'$1' は \'in\' パラメータ $2 に対して定数である必要があります."
    895800
    896801# S2016 $1 can not be const for $2 parameter"
    897 @@error_message[ :"S2016" ] = "'$1' は $2 パラメータに対して定数指定できません. "
     802@@error_message[ :"S2016" ] = "'$1' は $2 パラメータに対して定数指定できません. "
    898803
    899804# S2017 size_is argument is not integer type"
    900 @@error_message[ :"S2017" ] = "size_is 引数が整数型ではありません."
     805@@error_message[ :"S2017" ] = "size_is 引数が整数型ではありません."
    901806
    902807# S2018 \'$1\' size_is parameter not integer"
    903 @@error_message[ :"S2018" ] = "\'$1\' size_is パラメータは整数ではありません."
     808@@error_message[ :"S2018" ] = "\'$1\' size_is パラメータは整数ではありません."
    904809
    905810# S2019 \'$1\' size_is parameter negative or zero"
    906 @@error_message[ :"S2019" ] = "\'$1\' size_is パラメータが負数またはゼロです."
     811@@error_message[ :"S2019" ] = "\'$1\' size_is パラメータが負数またはゼロです."
    907812
    908813# S2020 count_is argument is not integer type"
    909 @@error_message[ :"S2020" ] = "count_is 引数は整数型ではありません."
     814@@error_message[ :"S2020" ] = "count_is 引数は整数型ではありません."
    910815
    911816# S2021 \'$1\' count_is parameter not integer"
    912 @@error_message[ :"S2021" ] = "\'$1\' count_is パラメータは整数型ではありません."
     817@@error_message[ :"S2021" ] = "\'$1\' count_is パラメータは整数型ではありません."
    913818
    914819# S2022 \'$1\' count_is parameter negative or zero"
    915 @@error_message[ :"S2022" ] = "\'$1\' count_is パラメータは負数またはゼロです."
     820@@error_message[ :"S2022" ] = "\'$1\' count_is パラメータは負数またはゼロです."
    916821
    917822# S2023 string argument is not integer type"
    918 @@error_message[ :"S2023" ] = "string 引数は整数型ではありません."
     823@@error_message[ :"S2023" ] = "string 引数は整数型ではありません."
    919824
    920825# S2024 \'$1\' string parameter not integer"
    921 @@error_message[ :"S2024" ] = "\'$1\' string パラメータは整数型ではありません."
     826@@error_message[ :"S2024" ] = "\'$1\' string パラメータは整数型ではありません."
    922827
    923828# S2025 \'$1\' string parameter negative or zero"
    924 @@error_message[ :"S2025" ] = "\'$1\' string パラメータは負数またはゼロです."
     829@@error_message[ :"S2025" ] = "\'$1\' string パラメータは負数またはゼロです."
    925830
    926831# S2026 '$1' nullable specified for non-pointer type"
    927 @@error_message[ :"S2026" ] = "'$1' ポインタ型以外に nullable が指定されました"
     832@@error_message[ :"S2026" ] = "'$1' ポインタ型以外に nullable が指定されました"
    928833
    929834# S2027 '$1' parameter cannot be void type"
    930 @@error_message[ :"S2027" ] = "'$1' 引数を void 型にできません"
     835@@error_message[ :"S2027" ] = "'$1' 引数を void 型にできません"
    931836
    932837# S2028 '$1' max (size_is 2nd parameter) not constant"
    933 @@error_message[ :"S2028" ] = "'$1' max (size_is の第二引数)が定数でありません"
     838@@error_message[ :"S2028" ] = "'$1' max (size_is の第二引数)が定数でありません"
    934839
    935840# S2029 '$1' max (size_is 2nd parameter) negative or zero, or not integer"
    936 @@error_message[ :"S2029" ] = "'$1' max (size_is の第二引数) が負、ゼロまたは整数ではありません"
     841@@error_message[ :"S2029" ] = "'$1' max (size_is の第二引数) が負、ゼロまたは整数ではありません"
    937842
    938843# S2030 '$1' both size_is and max are const. size_is larger than max"
    939 @@error_message[ :"S2030" ] = "'$1' size_is max の両方が定数で. size_is の方が max をè¶
    940 ãˆã¦ã„ます"
     844@@error_message[ :"S2030" ] = "'$1' size_is max の両方が定数で. size_is の方が max を超えています"
    941845
    942846### optimize.rb
    943847# S3001 $1: id too large $2 (max=$3)"
    944 @@error_message[ :"S3001" ] = "$1: id に $2 は大きすぎます (最大値は$3)"
     848@@error_message[ :"S3001" ] = "$1: id に $2 は大きすぎます (最大値は$3)"
    945849
    946850# S3002 $1: id too large $2 (max=$3)"
     
    948852
    949853# S3003 $1: id number '$2' conflict with $3"
    950 @@error_message[ :"S3003" ] = "$1: id 番号 '$2' は $3 と衝突しています"
     854@@error_message[ :"S3003" ] = "$1: id 番号 '$2' は $3 と衝突しています"
    951855
    952856### types.rb
    953857# T1001 const duplicate"
    954 @@error_message[ :"T1001" ] = "const が重複しています."
     858@@error_message[ :"T1001" ] = "const が重複しています."
    955859
    956860# T1002 volatile duplicate"
    957 @@error_message[ :"T1002" ] = "volatile が重複しています."
     861@@error_message[ :"T1002" ] = "volatile が重複しています."
    958862
    959863# T1003 $1: unsuitable specifier for $2"
    960 @@error_message[ :"T1003" ] = "$1: $2 に対する不適切な指定子です."
     864@@error_message[ :"T1003" ] = "$1: $2 に対する不適切な指定子です."
    961865
    962866# T1004 cannot cast to $1"
    963 @@error_message[ :"T1004" ] = "$1 へキャストできません."
     867@@error_message[ :"T1004" ] = "$1 へキャストできません."
    964868
    965869# T1005 \'$1\' not defined"
    966 @@error_message[ :"T1005" ] = "\'$1\' は定義されていません."
     870@@error_message[ :"T1005" ] = "\'$1\' は定義されていません."
    967871
    968872# T1006 \'$1\' not type name. expecting type name here"
    969 @@error_message[ :"T1006" ] = "\'$1\' は型名ではありません.ここは型名がå¿
    970 è¦ã§ã™ï¼Ž"
     873@@error_message[ :"T1006" ] = "\'$1\' は型名ではありません.ここは型名が必要です."
    971874
    972875# T1007 $1: void type variable cannot have initializer"
    973 @@error_message[ :"T1007" ] = "$1: void 型変数は初期化子をもつことができません."
     876@@error_message[ :"T1007" ] = "$1: void 型変数は初期化子をもつことができません."
    974877
    975878# T1008 ambigous signed or unsigned"
    976 @@error_message[ :"T1008" ] = "符号付きであるかまたは符号無しであるかが曖昧です."
     879@@error_message[ :"T1008" ] = "符号付きであるかまたは符号無しであるかが曖昧です."
    977880
    978881# T1009 $1: $2: not integer"
    979 @@error_message[ :"T1009" ] = "$1: $2: 整数ではありません."
     882@@error_message[ :"T1009" ] = "$1: $2: 整数ではありません."
    980883
    981884# T1010 $1: initializer is not constant"
    982 @@error_message[ :"T1010" ] = "$1: 初期化子は定数ではありません."
     885@@error_message[ :"T1010" ] = "$1: 初期化子は定数ではありません."
    983886
    984887# T1011 $1: need cast to assign float to integer"
    985 @@error_message[ :"T1011" ] = "$1: 浮動小数点型から整数型へ割り当てのためにキャストがå¿
    986 è¦ã§ã™ï¼Ž"
     888@@error_message[ :"T1011" ] = "$1: 浮動小数点型から整数型へ割り当てのためにキャストが必要です."
    987889
    988890# T1012 $1: $2: not integer"
    989 @@error_message[ :"T1012" ] = "$1: $2: 整数ではありません."
     891@@error_message[ :"T1012" ] = "$1: $2: 整数ではありません."
    990892
    991893# T1013 $1: too large (max=$2)"
    992 @@error_message[ :"T1013" ] = "$1: 値が大きすぎます (max=$2)"
     894@@error_message[ :"T1013" ] = "$1: 値が大きすぎます (max=$2)"
    993895
    994896# T1014 $1: too large negative value (min=-$2)"
    995 @@error_message[ :"T1014" ] = "$1: 負数の絶対値が大きすぎます.(min=-$2)"
     897@@error_message[ :"T1014" ] = "$1: 負数の絶対値が大きすぎます.(min=-$2)"
    996898
    997899# T1015 $1: negative value for unsigned"
    998 @@error_message[ :"T1015" ] = "$1: 符号無し整数型に対し負数値が使用されています."
     900@@error_message[ :"T1015" ] = "$1: 符号無し整数型に対し負数値が使用されています."
    999901
    1000902# T1016 $1: too large (max=$2)"
    1001 @@error_message[ :"T1016" ] = "$1: 値が大きすぎます.(max=$2)"
     903@@error_message[ :"T1016" ] = "$1: 値が大きすぎます.(max=$2)"
    1002904
    1003905# T1017 $1: unsuitable initializer for scalar type"
    1004 @@error_message[ :"T1017" ] = "$1: スカラー型に対する不適当な初期化子です."
     906@@error_message[ :"T1017" ] = "$1: スカラー型に対する不適当な初期化子です."
    1005907
    1006908# T1018 $1: $2: not number"
    1007 @@error_message[ :"T1018" ] = "$1: $2: 数値ではありません."
     909@@error_message[ :"T1018" ] = "$1: $2: 数値ではありません."
    1008910
    1009911# T1019 $1: initializer is not constant"
    1010 @@error_message[ :"T1019" ] = "$1: 初期化子は定数ではありません."
     912@@error_message[ :"T1019" ] = "$1: 初期化子は定数ではありません."
    1011913
    1012914# T1020 $1: unsuitable initializer for scalar type"
    1013 @@error_message[ :"T1020" ] = "$1: スカラー型に対する不適当な初期化子です."
     915@@error_message[ :"T1020" ] = "$1: スカラー型に対する不適当な初期化子です."
    1014916
    1015917# T1021 \'$1\': struct not defined"
    1016 @@error_message[ :"T1021" ] = "\'$1\': 構造体が定義されていません."
     918@@error_message[ :"T1021" ] = "\'$1\': 構造体が定義されていません."
    1017919
    1018920# T1022 struct $1: not defined"
    1019 @@error_message[ :"T1022" ] = "構造体 $1: 定義されていません."
     921@@error_message[ :"T1022" ] = "構造体 $1: 定義されていません."
    1020922
    1021923# T1023 struct $1: not defined"
    1022 @@error_message[ :"T1023" ] = "構造体 $1: 定義されていません."
     924@@error_message[ :"T1023" ] = "構造体 $1: 定義されていません."
    1023925
    1024926# T1024 $1: unsuitable initializer for struct"
    1025 @@error_message[ :"T1024" ] = "$1: 構造体に対する不適当な初期化子です."
     927@@error_message[ :"T1024" ] = "$1: 構造体に対する不適当な初期化子です."
    1026928
    1027929# T1025 size_is argument is not integer type"
    1028 @@error_message[ :"T1025" ] = "size_is 引数 は整数型ではありません."
     930@@error_message[ :"T1025" ] = "size_is 引数 は整数型ではありません."
    1029931
    1030932# T1026 count_is argument is not integer type"
    1031 @@error_message[ :"T1026" ] = "count_is 引数 は整数型ではありません."
     933@@error_message[ :"T1026" ] = "count_is 引数 は整数型ではありません."
    1032934
    1033935# T1027 string argument is not integer type"
    1034 @@error_message[ :"T1027" ] = "string 引数は整数型ではありません."
     936@@error_message[ :"T1027" ] = "string 引数は整数型ではありません."
    1035937
    1036938# T1028 $1: cannot initialize function pointer"
    1037 @@error_message[ :"T1028" ] = "$1: 関数ポインタを初期化することはできません."
     939@@error_message[ :"T1028" ] = "$1: 関数ポインタを初期化することはできません."
    1038940
    1039941# T1029 oneway function cannot return type \'$1$2\', \'void\' or \'ER\' is permitted"
    1040 @@error_message[ :"T1029" ] = "一方向関数は型 \'$1$2\' を返すことができません.\'void\' または \'ER\' が使用できます."
     942@@error_message[ :"T1029" ] = "一方向関数は型 \'$1$2\' を返すことができません.\'void\' または \'ER\' が使用できます."
    1041943
    1042944# T1030 oneway function cannot have $1 parameter for \'$2\'"
    1043 @@error_message[ :"T1030" ] = "一方向関数は \'$2\' のために $1 パラメータを持つことができません."
     945@@error_message[ :"T1030" ] = "一方向関数は \'$2\' のために $1 パラメータを持つことができません."
    1044946
    1045947# T1031 $1: unsuitable initializer for array"
    1046 @@error_message[ :"T1031" ] = "$1: é
    1047 åˆ—に対する不適当な初期化子です."
     948@@error_message[ :"T1031" ] = "$1: 配列に対する不適当な初期化子です."
    1048949
    1049950# T1032 $1: incompatible pointer type"
    1050 @@error_message[ :"T1032" ] = "$1: 互換性のないポインタ型です."
     951@@error_message[ :"T1032" ] = "$1: 互換性のないポインタ型です."
    1051952
    1052953# T1033 $1: need cast to assign integer to pointer"
    1053 @@error_message[ :"T1033" ] = "$1: 整数型をポインタへ割り当てるためにはキャストがå¿
    1054 è¦ã§ã™ï¼Ž"
     954@@error_message[ :"T1033" ] = "$1: 整数型をポインタへ割り当てるためにはキャストが必要です."
    1055955
    1056956# T1034 $1: unsuitable string constant"
    1057 @@error_message[ :"T1034" ] = "$1: 不適当な文字列定数です."
     957@@error_message[ :"T1034" ] = "$1: 不適当な文字列定数です."
    1058958
    1059959# T1035 $1: unsuitable initializer for pointer"
    1060 @@error_message[ :"T1035" ] = "$1: ポインタに対する不適当な初期化子です."
     960@@error_message[ :"T1035" ] = "$1: ポインタに対する不適当な初期化子です."
    1061961
    1062962# T1036 $1: unsuitable initializer for pointer"
    1063 @@error_message[ :"T1036" ] = "$1: ポインタに対する不適当な初期化子です."
     963@@error_message[ :"T1036" ] = "$1: ポインタに対する不適当な初期化子です."
    1064964
    1065965# T1037 $1: not number"
    1066 @@error_message[ :"T1037" ] = "$1: 数値ではありません"
     966@@error_message[ :"T1037" ] = "$1: 数値ではありません"
    1067967
    1068968# T1038 $1: initializer type mismatch. '$2' & '$3'"
    1069 @@error_message[ :"T1038" ] = "$1: 初期化子の型が一致しません. '$2' と '$3'"
     969@@error_message[ :"T1038" ] = "$1: 初期化子の型が一致しません. '$2' と '$3'"
    1070970
    1071971# T1039 $1: struct tag mismatch $2 and $3"
    1072 @@error_message[ :"T1039" ] = "$1: 構造体タグが $2 と $3 で一致しません"
     972@@error_message[ :"T1039" ] = "$1: 構造体タグが $2 と $3 で一致しません"
    1073973
    1074974# T1040 $1 specified for void pointer type"
    1075 @@error_message[ :"T1040" ] = "$1 void ポインタ型に指定されました"
     975@@error_message[ :"T1040" ] = "$1 void ポインタ型に指定されました"
    1076976
    1077977### gen_xml.rb
    1078978# T2001 fail to create XML file $1"
    1079 @@error_message[ :"T2001" ] = "XML ファイル $1 の生成に失敗しました"
     979@@error_message[ :"T2001" ] = "XML ファイル $1 の生成に失敗しました"
    1080980
    1081981# TEMPORAL set_definition_join: uninitialized array member"
    1082 @@error_message[ :"TEMPORAL" ] = "set_definition_join: é
    1083 åˆ—メンバが初期化されていません."
     982@@error_message[ :"TEMPORAL" ] = "set_definition_join: 配列メンバが初期化されていません."
    1084983
    1085984# V1001 $1: unable for $2"
     
    1087986
    1088987# V1002 $1: cannot cast to bool (implicitly)"
    1089 @@error_message[ :"V1002" ] = "$1: ブール型への(暗黙的な)キャストを行うことができません."
     988@@error_message[ :"V1002" ] = "$1: ブール型への(暗黙的な)キャストを行うことができません."
    1090989
    1091990# V1003 $1: cannot cast to integer (implicitly)"
    1092 @@error_message[ :"V1003" ] = "$1: 整数型への(暗黙的な)キャストを行うことができません."
     991@@error_message[ :"V1003" ] = "$1: 整数型への(暗黙的な)キャストを行うことができません."
    1093992
    1094993# V1004 $1: cannot cast to float (implicitly)"
    1095 @@error_message[ :"V1004" ] = "$1: 浮動小数点型への(暗黙的な)キャストを行うことができません."
     994@@error_message[ :"V1004" ] = "$1: 浮動小数点型への(暗黙的な)キャストを行うことができません."
    1096995
    1097996# V1005 Cannot cast pointer to float"
    1098 @@error_message[ :"V1005" ] = "ポインタ型を浮動小数点型へキャストを行うことができません."
     997@@error_message[ :"V1005" ] = "ポインタ型を浮動小数点型へキャストを行うことができません."
    1099998
    1100999# V1006 pointer value cannot cast to $1"
    1101 @@error_message[ :"V1006" ] = "ポインタ値は $1 へキャストを行うことができません."
     1000@@error_message[ :"V1006" ] = "ポインタ値は $1 へキャストを行うことができません."
    11021001
    11031002# V1007 convert pointer value to bool"
    1104 @@error_message[ :"V1007" ] = "ポインタ値をブール型へ変換しました."
     1003@@error_message[ :"V1007" ] = "ポインタ値をブール型へ変換しました."
    11051004
    11061005# V1008 convert pointer value to integer without cast"
    1107 @@error_message[ :"V1008" ] = "ポインタ値をキャスト無しで整数型へ変換しました."
     1006@@error_message[ :"V1008" ] = "ポインタ値をキャスト無しで整数型へ変換しました."
    11081007
    11091008# V1009 / : divieded by zero"
    1110 @@error_message[ :"V1009" ] = "/ : ゼロ除算エラーです."
     1009@@error_message[ :"V1009" ] = "/ : ゼロ除算エラーです."
    11111010
    11121011# V1010 / : divieded by zero"
    1113 @@error_message[ :"V1010" ] = "/ : ゼロ除算エラーです."
     1012@@error_message[ :"V1010" ] = "/ : ゼロ除算エラーです."
    11141013
    11151014# V1011 % : divieded by zero"
    1116 @@error_message[ :"V1011" ] = "% : ゼロ除算エラーです."
     1015@@error_message[ :"V1011" ] = "% : ゼロ除算エラーです."
    11171016
    11181017# V1012 % : divieded by zero"
    1119 @@error_message[ :"V1012" ] = "% : ゼロ除算エラーです."
     1018@@error_message[ :"V1012" ] = "% : ゼロ除算エラーです."
    11201019
    11211020# V1013 integer value cannot cast to $1"
    1122 @@error_message[ :"V1013" ] = "整数値は $1 へキャストを行うことができません."
     1021@@error_message[ :"V1013" ] = "整数値は $1 へキャストを行うことができません."
    11231022
    11241023# V1014 comparing bool value with \'$1\'"
    1125 @@error_message[ :"V1014" ] = "ブール値を \'$1\' と比較しました."
     1024@@error_message[ :"V1014" ] = "ブール値を \'$1\' と比較しました."
    11261025
    11271026# V1015 comparing bool value with \'$1\'"
    1128 @@error_message[ :"V1015" ] = "ブール値を \'$1\' と比較しました."
     1027@@error_message[ :"V1015" ] = "ブール値を \'$1\' と比較しました."
    11291028
    11301029# V1016 bool value cannot cast to $1"
    1131 @@error_message[ :"V1016" ] = "ブール値は $1 へキャストを行うことができません."
     1030@@error_message[ :"V1016" ] = "ブール値は $1 へキャストを行うことができません."
    11321031
    11331032# V1017 / : divieded by zero"
    1134 @@error_message[ :"V1017" ] = "/ : ゼロ除算エラーです."
     1033@@error_message[ :"V1017" ] = "/ : ゼロ除算エラーです."
    11351034
    11361035# V1018 % : divieded by zero"
    1137 @@error_message[ :"V1018" ] = "% : ゼロ除算エラーです."
     1036@@error_message[ :"V1018" ] = "% : ゼロ除算エラーです."
    11381037
    11391038# V1019 floating value cannot cast to $1"
    1140 @@error_message[ :"V1019" ] = "浮動小数点値は $1 へのキャストを行うことができません."
     1039@@error_message[ :"V1019" ] = "浮動小数点値は $1 へのキャストを行うことができません."
    11411040
    11421041# V1020 convert floating value to bool without cast"
    1143 @@error_message[ :"V1020" ] = "浮動小数点値をキャスト無しでブール型へ変換しました."
     1042@@error_message[ :"V1020" ] = "浮動小数点値をキャスト無しでブール型へ変換しました."
    11441043
    11451044# V1021 convert floating value to integer without cast"
    1146 @@error_message[ :"V1021" ] = "浮動小数点型をキャスト無しで整数型へ変換しました."
     1045@@error_message[ :"V1021" ] = "浮動小数点型をキャスト無しで整数型へ変換しました."
    11471046
    11481047# V1022 string cannot cast to integer"
    1149 @@error_message[ :"V1022" ] = "文字列は整数型にキャストできません"
     1048@@error_message[ :"V1022" ] = "文字列は整数型にキャストできません"
    11501049
    11511050# V1023 string cannot cast to float"
    1152 @@error_message[ :"V1023" ] = "文字列は浮動小数点型にキャストできません"
     1051@@error_message[ :"V1023" ] = "文字列は浮動小数点型にキャストできません"
    11531052
    11541053# V1024 string cannot cast to pointer"
    1155 @@error_message[ :"V1024" ] = "文字列はポインタ型にキャストできません"
     1054@@error_message[ :"V1024" ] = "文字列はポインタ型にキャストできません"
    11561055
    11571056# V1025 string cannot cast to $1"
    1158 @@error_message[ :"V1025" ] = "文字列は $1 にキャストできません"
     1057@@error_message[ :"V1025" ] = "文字列は $1 にキャストできません"
    11591058
    11601059###
    1161 # warning メッセージ
     1060# warning メッセージ
    11621061@@warning_message = {}
    11631062
    11641063### componentobj.rb
    11651064# W1001 \'$1\': unknown context type. usually specifiy task, non-task or any"
    1166 @@warning_message[ :"W1001" ] = "\'$1\': 不明なコンテキスト型です.通常 task, non-task または any を指定して下さい."
     1065@@warning_message[ :"W1001" ] = "\'$1\': 不明なコンテキスト型です.通常 task, non-task または any を指定して下さい."
    11671066
    11681067# W1002 $1: non-active celltype has no entry port & factory"
    1169 @@warning_message[ :"W1002" ] = "$1: 非アクティブなセルタイプが受け口及びファクトリを持っていません."
     1068@@warning_message[ :"W1002" ] = "$1: 非アクティブなセルタイプが受け口及びファクトリを持っていません."
    11701069
    11711070# W1003 $1 : require call port overridden in $2"
    1172 @@warning_message[ :"W1003" ] = "$1 : リクワイア呼び口が $2 でオーバーライドされました."
     1071@@warning_message[ :"W1003" ] = "$1 : リクワイア呼び口が $2 でオーバーライドされました."
    11731072
    11741073# W1004 $1 : specified singleton but has no singleton in this celltype"
     
    11761075
    11771076# W1005 $1 : idx_is_id is ineffective for composite celltype"
    1178 @@warning_message[ :"W1005" ] = "$1 : idx_is_id は複合セルタイプに対しては無効です."
     1077@@warning_message[ :"W1005" ] = "$1 : idx_is_id は複合セルタイプに対しては無効です."
    11791078
    11801079# W1006 $1 : only prototype, unused and undefined cell"
    1181 @@warning_message[ :"W1006" ] = "$1 : プロトタイプのみ,未使用,かつ未定義のセルです."
     1080@@warning_message[ :"W1006" ] = "$1 : プロトタイプのみ,未使用,かつ未定義のセルです."
    11821081
    11831082# W1007 $1 : non-active cell has no entry join and no factory"
    1184 @@warning_message[ :"W1007" ] = "$1 : 非アクティブセルに受け口の結合及びファクトリがありません."
     1083@@warning_message[ :"W1007" ] = "$1 : 非アクティブセルに受け口の結合及びファクトリがありません."
    11851084
    11861085# W1008 $1: reuse designation mismatch with previous import"
    1187 @@warning_message[ :"W1008" ] = "$1: 再使用の指示が以前のインポートのと整合しません."
     1086@@warning_message[ :"W1008" ] = "$1: 再使用の指示が以前のインポートのと整合しません."
    11881087
    11891088# "W1009 $1: fixed join entry port has multi join"
    1190 @@warning_message[ :"W1009" ] = "$1: 固定結合受け口が複数の結合を持っています."
     1089@@warning_message[ :"W1009" ] = "$1: 固定結合受け口が複数の結合を持っています."
    11911090
    11921091### types.rb
    11931092# W2001 signed int$1_t: obsolete. use int$2_t"
    1194 @@warning_message[ :"W2001" ] = "signed int$1_t: 推奨されません.int$2_t をお使いください."
     1093@@warning_message[ :"W2001" ] = "signed int$1_t: 推奨されません.int$2_t をお使いください."
    11951094
    11961095# W2002 unsinged int$1_t: obsolete. use uint$2_t"
    1197 @@warning_message[ :"W2002" ] = "unsinged int$1_t: 推奨されません.uint$2_t をお使いください."
     1096@@warning_message[ :"W2002" ] = "unsinged int$1_t: 推奨されません.uint$2_t をお使いください."
    11981097
    11991098# W2003 $1: too large to cast to $2, clipped($3)"
    1200 @@warning_message[ :"W2003" ] = "$1: $2 へキャストするのに大きすぎます.切り詰めました($3)"
     1099@@warning_message[ :"W2003" ] = "$1: $2 へキャストするのに大きすぎます.切り詰めました($3)"
    12011100
    12021101# W2004 $1: too small to cast to $2, clipped($3)"
    1203 @@warning_message[ :"W2004" ] = "$1: $2 へキャストするのに小さすぎます.切り詰めました($3)"
     1102@@warning_message[ :"W2004" ] = "$1: $2 へキャストするのに小さすぎます.切り詰めました($3)"
    12041103
    12051104# W2005 $1: negative value for unsigned: convert to $2"
    1206 @@warning_message[ :"W2005" ] = "$1: 符号無し整数型に対して負数値です : $2 へ変換しました."
     1105@@warning_message[ :"W2005" ] = "$1: 符号無し整数型に対して負数値です : $2 へ変換しました."
    12071106
    12081107### syntaxobj.rb
    12091108# W3001 $1: duplicate"
    1210 @@warning_message[ :"W3001" ] = "$1: 重複しています."
     1109@@warning_message[ :"W3001" ] = "$1: 重複しています."
    12111110
    12121111# W3002 $1: this string might cause buffer over run"
    1213 @@warning_message[ :"W3002" ] = "$1: この文字列はバッファーオーバーランを引き起こすかもしれません."
     1112@@warning_message[ :"W3002" ] = "$1: この文字列はバッファーオーバーランを引き起こすかもしれません."
    12141113
    12151114# W3003 $1 pointer level mismatch"
    1216 @@warning_message[ :"W3003" ] = "$1 ポインターレベルの不整合です."
     1115@@warning_message[ :"W3003" ] = "$1 ポインターレベルの不整合です."
    12171116
    12181117# W3004 $1 pointer type has returned. specify deviate or stop return pointer"
    1219 @@error_message[ :"W3004" ] = "$1 ポインタ型が返されました。deviate を指定するかポインタを返すのを止めてください"
     1118@@error_message[ :"W3004" ] = "$1 ポインタ型が返されました。deviate を指定するかポインタを返すのを止めてください"
    12201119
    12211120# W3005 '$1' size_is always lower than max. max is ignored"
    1222 @@error_message[ :"W3005" ] = "'$1' size_is は常に max より小さい. max は無視されます"
     1121@@error_message[ :"W3005" ] = "'$1' size_is は常に max より小さい. max は無視されます"
    12231122
    12241123### bnf.y.rb
    12251124# W5001 bool: obsolete type. use bool_t"
    1226 @@warning_message[ :"W5001" ] = "bool: 推奨されないデータ型です.bool_t をお使いください."
     1125@@warning_message[ :"W5001" ] = "bool: 推奨されないデータ型です.bool_t をお使いください."
    12271126
    12281127# W5002 float: obsolete type. use float32_t"
    1229 @@warning_message[ :"W5002" ] = "float: 推奨されないデータ型です.float32_t をお使いください."
     1128@@warning_message[ :"W5002" ] = "float: 推奨されないデータ型です.float32_t をお使いください."
    12301129
    12311130# W5003 double: obsolete type. use double64_t"
    1232 @@warning_message[ :"W5003" ] = "double: 推奨されないデータ型です.double64_t をお使いください."
     1131@@warning_message[ :"W5003" ] = "double: 推奨されないデータ型です.double64_t をお使いください."
    12331132
    12341133# W5004 char: obsolete type. use char_t"
    1235 @@warning_message[ :"W5004" ] = "char: 推奨されないデータ型です.char_t をお使いください."
     1134@@warning_message[ :"W5004" ] = "char: 推奨されないデータ型です.char_t をお使いください."
    12361135
    12371136# W5005 int8: obsolete. use int8_t"
    1238 @@warning_message[ :"W5005" ] = "int8: 推奨されません.int8_t をお使いください."
     1137@@warning_message[ :"W5005" ] = "int8: 推奨されません.int8_t をお使いください."
    12391138
    12401139# W5006 int16: obsolete. use int16_t"
    1241 @@warning_message[ :"W5006" ] = "int16: 推奨されません.int16_t をお使いください."
     1140@@warning_message[ :"W5006" ] = "int16: 推奨されません.int16_t をお使いください."
    12421141
    12431142# W5007 int32: obsolete. use int32_t"
    1244 @@warning_message[ :"W5007" ] = "int32: 推奨されません.int32_t をお使いください."
     1143@@warning_message[ :"W5007" ] = "int32: 推奨されません.int32_t をお使いください."
    12451144
    12461145# W5008 int64: obsolete. use int64_t"
    1247 @@warning_message[ :"W5008" ] = "int64: 推奨されません.int64_t をお使いください."
     1146@@warning_message[ :"W5008" ] = "int64: 推奨されません.int64_t をお使いください."
    12481147
    12491148# W5009 int64: obsolete. use int64_t"
    1250 @@warning_message[ :"W5009" ] = "int64: 推奨されません.int64_t をお使いください."
     1149@@warning_message[ :"W5009" ] = "int64: 推奨されません.int64_t をお使いください."
    12511150
    12521151# W5010 need 'void' for no parameter"
    1253 @@warning_message[ :"W5010" ] = "パラメータが存在しない場合 'void' がå¿
    1254 è¦ã§ã™"
     1152@@warning_message[ :"W5010" ] = "パラメータが存在しない場合 'void' が必要です"
    12551153
    12561154# W5011 need 'void' for no parameter"
    1257 @@warning_message[ :"W5011" ] = "パラメータが存在しない場合 'void' がå¿
    1258 è¦ã§ã™"
     1155@@warning_message[ :"W5011" ] = "パラメータが存在しない場合 'void' が必要です"
    12591156
    12601157### C_parser.y.rb
    12611158# W6001 need 'void' for no parameter"
    1262 @@warning_message[ :"W6001" ] = "パラメータが存在しない場合 'void' がå¿
    1263 è¦ã§ã™"
     1159@@warning_message[ :"W6001" ] = "パラメータが存在しない場合 'void' が必要です"
    12641160
    12651161# W6002 need 'void' for no parameter"
    1266 @@warning_message[ :"W6002" ] = "パラメータが存在しない場合 'void' がå¿
    1267 è¦ã§ã™"
     1162@@warning_message[ :"W6002" ] = "パラメータが存在しない場合 'void' が必要です"
    12681163
    12691164# W6003 need 'void' for no parameter"
    1270 @@warning_message[ :"W6003" ] = "パラメータが存在しない場合 'void' がå¿
    1271 è¦ã§ã™"
     1165@@warning_message[ :"W6003" ] = "パラメータが存在しない場合 'void' が必要です"
    12721166
    12731167# W6004 need 'void' for no parameter"
    1274 @@warning_message[ :"W6004" ] = "パラメータが存在しない場合 'void' がå¿
    1275 è¦ã§ã™"
     1168@@warning_message[ :"W6004" ] = "パラメータが存在しない場合 'void' が必要です"
    12761169
    12771170end
  • asp3_gr_sakura/trunk/tecsgen/tecslib/messages/messages_file_en_US.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: messages_file_en_US.rb 2061 2014-05-31 22:15:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
     
    6247
    6348# MSg.note
    64 # @@comment[ :note ] = " * このファイルは tecsgen により自動生成されました
    65 #  * このファイルを編集して使用することは、意図されていません
     49# @@comment[ :note ] = " * このファイルは tecsgen により自動生成されました
     50#  * このファイルを編集して使用することは、意図されていません
    6651# "
    6752@@comment[ :note ] = " * This file was automatically generated by tecsgen.
     
    7055
    7156# @@comment[ :preamble_note ] = "/* #[<PREAMBLE>]#
    72 #  * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
    73 #  * tecsmerge によるマージに使用されます
     57#  * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
     58#  * tecsmerge によるマージに使用されます
    7459# "
    7560@@comment[ :preamble_note ] = "/* #[<PREAMBLE>]#
     
    7964
    8065# @@comment[ :postamble_note ] = "/* #[<POSTAMBLE>]#
    81 #  *   ã“れより下に非受け口関数を書きます
     66#  *   これより下に非受け口関数を書きます
    8267#  * #[</POSTAMBLE>]#*/
    8368# "
     
    8873
    8974# @@comment[ :template_note ] = "/*
    90 #  * このファイルは tecsgen によりテンプレートとして自動生成されました
    91 #  * このファイルを編集して使用することが意図されていますが
    92 #  * tecsgen の再実行により上書きされてしまうため、通常
     75#  * このファイルは tecsgen によりテンプレートとして自動生成されました
     76#  * このファイルを編集して使用することが意図されていますが
     77#  * tecsgen の再実行により上書きされてしまうため、通常
    9378#  *   gen/%s_template.c => src/%s.c
    94 #  * のように名前, フォルダを変更してから修正します
     79#  * のように名前, フォルダを変更してから修正します
    9580#  */
    9681# "
     
    10489
    10590# @@comment[ :inline_template_note ] = "/*
    106 #  * このファイルは tecsgen によりテンプレートとして自動生成されました
    107 #  * このファイルを編集して使用することが意図されていますが
    108 #  * tecsgen の再実行により上書きされてしまうため、通常
     91#  * このファイルは tecsgen によりテンプレートとして自動生成されました
     92#  * このファイルを編集して使用することが意図されていますが
     93#  * tecsgen の再実行により上書きされてしまうため、通常
    10994#  *   gen/%s_inline_template.h => src/%s_inline.h
    110 #  * のように名前, フォルダを変更してから修正します
     95#  * のように名前, フォルダを変更してから修正します
    11196#  */
    11297# "
     
    119104"
    120105
    121 # @@comment[ :Makefile_note ] = "# このファイルは tecsgen により自動生成されました
    122 # # Makefile.temp は gen の一つ上のディレクトリに移して使用します
     106# @@comment[ :Makefile_note ] = "# このファイルは tecsgen により自動生成されました
     107# # Makefile.temp は gen の一つ上のディレクトリに移して使用します
    123108# #  % mv Makefile.temp Makefile
    124109# #
    125 # # clean のデフォルト動作は $(GEN_DIR)/Makefile.* を削除します
     110# # clean のデフォルト動作は $(GEN_DIR)/Makefile.* を削除します
    126111#
    127112# "
     
    138123"
    139124
    140 # @@comment[ :oneway_ercd_note ] = "/* oneway の場合 E_OK しか返せません */"
     125# @@comment[ :oneway_ercd_note ] = "/* oneway の場合 E_OK しか返せません */"
    141126@@comment[ :oneway_ercd_note ] = "/* Oneway function always returns E_OK. */"
    142127
    143 # @@comment[ :ercd_note ] = "/* エラー処理コードをここに記述します */"
     128# @@comment[ :ercd_note ] = "/* エラー処理コードをここに記述します */"
    144129@@comment[ :ercd_note ] = "/* Write error processing code here */"
    145130
    146 # @@comment[ :IMP_comment ] = "\n/* import_C により import されるヘッダ %s */\n"
     131# @@comment[ :IMP_comment ] = "\n/* import_C により import されるヘッダ %s */\n"
    147132@@comment[ :IMP_comment ] = "\n/* header imported by import_C %s */\n"
    148133
    149 # @@comment[ :MVAR_comment ] = "# 変数 %s\n"
     134# @@comment[ :MVAR_comment ] = "# 変数 %s\n"
    150135@@comment[ :MVAR_comment ] = "# var %s\n"
    151136
    152 # @@comment[ :MRUL_comment ] = "# ルール %s\n"
     137# @@comment[ :MRUL_comment ] = "# ルール %s\n"
    153138@@comment[ :MRUL_comment ] = "# Rule %s\n"
    154139
    155 # @@comment[ :TCM_comment ] = "# テンプレートコードでメークしてみる場合 %s\n"
     140# @@comment[ :TCM_comment ] = "# テンプレートコードでメークしてみる場合 %s\n"
    156141@@comment[ :TCM_comment ] = "# in case build with template code %s\n"
    157142
    158 # @@comment[ :MDEP_comment ] = "\n# depend を include %s\n"
     143# @@comment[ :MDEP_comment ] = "\n# depend include %s\n"
    159144@@comment[ :MDEP_comment ] = "\n# include dependcy %s\n"
    160145
    161 # @@comment[ :SDI_comment ] = "/* シグニチャディスクリプタ参ç
    162 §ãƒ˜ãƒƒãƒ€ %s */\n"
     146# @@comment[ :SDI_comment ] = "/* シグニチャディスクリプタ参照ヘッダ %s */\n"
    163147@@comment[ :SDI_comment ] = "/* descriptor referencing signature header %s */\n"
    164148
    165 # @@comment[ :SD_comment ] = "/* シグニチャディスクリプタ %s */\n"
     149# @@comment[ :SD_comment ] = "/* シグニチャディスクリプタ %s */\n"
    166150@@comment[ :SD_comment ] = "/* signature descriptor %s */\n"
    167151
    168 # @@comment[ :SFT_comment ] = "/* シグニチャ関数テーブル %s */\n"
     152# @@comment[ :SFT_comment ] = "/* シグニチャ関数テーブル %s */\n"
    169153@@comment[ :SFT_comment ] = "/* signature function table %s */\n"
    170154
    171 # @@comment[ :SDES_comment ] = "/* シグニチャディスクリプタ(動的結合用) %s */\n"
     155# @@comment[ :SDES_comment ] = "/* シグニチャディスクリプタ(動的結合用) %s */\n"
    172156@@comment[ :SDES_comment ] = "/* signature descriptor %s for dynamic join */\n"
    173157
    174 # @@comment[ :IRTH_comment ] = "/* ランタイムヘッダ %s */\n"
    175 
    176 # @@comment[ :UDF_comment ] = "/* inline のための undef %s */\n"
     158# @@comment[ :IRTH_comment ] = "/* ランタイムヘッダ %s */\n"
     159
     160# @@comment[ :UDF_comment ] = "/* inline のための undef %s */\n"
    177161@@comment[ :UDF_comment ] = "/* undef for inline %s */\n"
    178162
    179 # @@comment[ :IGH_comment ] = "/* グローバルヘッダ %s */\n"
     163# @@comment[ :IGH_comment ] = "/* グローバルヘッダ %s */\n"
    180164@@comment[ :IGH_comment ] = "/* global header %s */\n"
    181165
    182 # @@comment[ :ISH_comment ] = "/* シグニチャヘッダ %s */\n"
     166# @@comment[ :ISH_comment ] = "/* シグニチャヘッダ %s */\n"
    183167@@comment[ :ISH_comment ] = "/* signature header %s */\n"
    184168
    185 # @@comment[ :ICT_comment ] = "/* 最適化のため参ç
    186 §ã™ã‚‹ã‚»ãƒ«ã‚¿ã‚¤ãƒ—の CB 型の定義を取込む %s */\n"
     169# @@comment[ :ICT_comment ] = "/* 最適化のため参照するセルタイプの CB 型の定義を取込む %s */\n"
    187170@@comment[ :ICT_comment ] = "/* to get the definition of CB type of referenced celltype for optimization %s */\n"
    188171
    189 # @@comment[ :NIDB_comment ] = "ID のベース "
     172# @@comment[ :NIDB_comment ] = "ID のベース "
    190173@@comment[ :NIDB_comment ] = "ID Base "
    191174
    192 # @@comment[ :NCEL_comment ] = "セルの個数"
     175# @@comment[ :NCEL_comment ] = "セルの個数"
    193176@@comment[ :NCEL_comment ] = " number of cells"
    194177
    195 # @@comment[ :CVI_comment ] = "/* IDXの正当性チェックマクロ %s */\n"
     178# @@comment[ :CVI_comment ] = "/* IDXの正当性チェックマクロ %s */\n"
    196179@@comment[ :CVI_comment ] = "/* IDX validation macro %s */\n"
    197180
    198 # @@comment[ :CVIA_comment ] = "/* IDXの正当性チェックマクロ(短縮形) %s */\n"
     181# @@comment[ :CVIA_comment ] = "/* IDXの正当性チェックマクロ(短縮形) %s */\n"
    199182@@comment[ :CVIA_comment ] = "/* IDX validation macro (abbrev.) %s */\n"
    200183
    201 # @@comment[ :NCPA_comment ] = "/* 呼び口é
    202 åˆ—の大きさを得るマクロ %s */\n"
     184# @@comment[ :NCPA_comment ] = "/* 呼び口配列の大きさを得るマクロ %s */\n"
    203185@@comment[ :NCPA_comment ] = "/* call port array size macro %s */\n"
    204186
    205 # @@comment[ :NEPA_comment ] = "/* 受け口é
    206 åˆ—の大きさを得るマクロ %s */\n"
     187# @@comment[ :NEPA_comment ] = "/* 受け口配列の大きさを得るマクロ %s */\n"
    207188@@comment[ :NEPA_comment ] = "/* entry port array size macro %s */\n"
    208189
    209 # @@comment[ :TOCP_comment ] = "/* optional 呼び口をテストするマクロ %s */\n"
     190# @@comment[ :TOCP_comment ] = "/* optional 呼び口をテストするマクロ %s */\n"
    210191@@comment[ :TOCP_comment ] = "/* optional call port test macro %s */\n"
    211192
    212 # @@comment[ :TOCPA_comment ] = "/* optional 呼び口をテストするマクロ(短縮形) %s */\n"
     193# @@comment[ :TOCPA_comment ] = "/* optional 呼び口をテストするマクロ(短縮形) %s */\n"
    213194@@comment[ :TOCPA_comment ] = "/* optional call port test macro (abbrev) %s */\n"
    214195
    215 # @@comment[ :GCB_comment ] = "\n/* セルCBを得るマクロ %s */\n"
     196# @@comment[ :GCB_comment ] = "\n/* セルCBを得るマクロ %s */\n"
    216197@@comment[ :GCB_comment ] = "\n/* celll CB macro %s */\n"
    217198
    218 # @@comment[ :GCBA_comment ] = "\n/* セルCBを得るマクロ(短縮形) %s */\n"
     199# @@comment[ :GCBA_comment ] = "\n/* セルCBを得るマクロ(短縮形) %s */\n"
    219200@@comment[ :GCBA_comment ] = "\n/* cell CB macro (abbrev) %s */\n"
    220201
    221 # @@comment[ :CCT_comment ] = "/* CELLCB 型(短縮形) %s */\n"
     202# @@comment[ :CCT_comment ] = "/* CELLCB 型(短縮形) %s */\n"
    222203@@comment[ :CCT_comment ] = "/* CELLCB type (abbrev) %s */\n"
    223204
    224 # @@comment[ :CTIXA_comment ] = "/* セルタイプのIDX型(短縮形) %s */\n"
     205# @@comment[ :CTIXA_comment ] = "/* セルタイプのIDX型(短縮形) %s */\n"
    225206@@comment[ :CTIXA_comment ] = "/* celltype IDX type (abbrev) %s */\n"
    226207
    227 # @@comment[ :AAM_comment ] = "\n/* 属性アクセスマクロ %s */\n"
     208# @@comment[ :AAM_comment ] = "\n/* 属性アクセスマクロ %s */\n"
    228209@@comment[ :AAM_comment ] = "\n/* attr access  %s */\n"
    229210
    230 # @@comment[ :VAM_comment ] = "\n/* var アクセスマクロ %s */\n"
     211# @@comment[ :VAM_comment ] = "\n/* var アクセスマクロ %s */\n"
    231212@@comment[ :VAM_comment ] = "\n/* var access macro %s */\n"
    232213
    233 # @@comment[ :AAMA_comment ] = "\n/* 属性アクセスマクロ(短縮形) %s */\n"
     214# @@comment[ :AAMA_comment ] = "\n/* 属性アクセスマクロ(短縮形) %s */\n"
    234215@@comment[ :AAMA_comment ] = "\n/* attr access macro (abbrev) %s */\n"
    235216
    236 # @@comment[ :VAMA_comment ] = "\n/* var アクセスマクロ(短縮形) %s */\n"
     217# @@comment[ :VAMA_comment ] = "\n/* var アクセスマクロ(短縮形) %s */\n"
    237218@@comment[ :VAMA_comment ] = "\n/* var access macro (abbrev) %s */\n"
    238219
    239 # @@comment[ :CPM_comment ] = " /* 呼び口関数マクロ %s */\n"
     220# @@comment[ :CPM_comment ] = " /* 呼び口関数マクロ %s */\n"
    240221@@comment[ :CPM_comment ] = " /* call port function macro %s */\n"
    241222
    242 # @@comment[ :CPMA_comment ] = "/* 呼び口関数マクロ(短縮形)%s */\n"
     223# @@comment[ :CPMA_comment ] = "/* 呼び口関数マクロ(短縮形)%s */\n"
    243224@@comment[ :CPMA_comment ] = "/* call port function macro (abbrev) %s */\n"
    244225
    245 # @@comment[ :EPM_comment ] = "\n/* 受け口関数マクロ(短縮形) %s */\n"
     226# @@comment[ :EPM_comment ] = "\n/* 受け口関数マクロ(短縮形) %s */\n"
    246227@@comment[ :EPM_comment ] = "\n/* entry port function macro (abbrev) %s */\n"
    247228
    248 # @@comment[ :CTIX_comment ] = "\n/* セルタイプのIDX型 %s */\n"
     229# @@comment[ :CTIX_comment ] = "\n/* セルタイプのIDX型 %s */\n"
    249230@@comment[ :CTIX_comment ] = "\n/* celltype IDX type %s */\n"
    250231
    251 # @@comment[ :EPP_comment ] = "\n/* 受け口関数プロトタイプ宣言 %s */\n"
     232# @@comment[ :EPP_comment ] = "\n/* 受け口関数プロトタイプ宣言 %s */\n"
    252233@@comment[ :EPP_comment ] = "\n/* prototype declaration of entry port function %s */\n"
    253234
    254 # @@comment[ :EPSP_comment ] = "\n/* 受け口スケルトン関数プロトタイプ宣言(VMT不要最適化により参ç
    255 §ã™ã‚‹ã‚‚の) %s */\n"
     235# @@comment[ :EPSP_comment ] = "\n/* 受け口スケルトン関数プロトタイプ宣言(VMT不要最適化により参照するもの) %s */\n"
    256236@@comment[ :EPSP_comment ] = "\n/* prototype declaration of entry port function (referenced when VMT useless optimise enabled) %s */\n"
    257237
    258 # @@comment[ :INL_comment ] = "/* inline ヘッダの include %s */\n"
     238# @@comment[ :INL_comment ] = "/* inline ヘッダの include %s */\n"
    259239@@comment[ :INL_comment ] = "/*  include inline header %s */\n"
    260240
    261 # @@comment[ :CIP_comment ] = "/* セル INIB 型宣言 %s */\n"
     241# @@comment[ :CIP_comment ] = "/* セル INIB 型宣言 %s */\n"
    262242@@comment[ :CIP_comment ] = "/* cell INIB type definition %s */\n"
    263243
    264 # @@comment[ :CCTPA_comment ] = "/* セル CB 型宣言 %s */\n"
     244# @@comment[ :CCTPA_comment ] = "/* セル CB 型宣言 %s */\n"
    265245@@comment[ :CCTPA_comment ] = "/* cell CB type definition %s */\n"
    266246
    267 # @@comment[ :CCDP_comment ] = "/* セル CB (ダミー)型宣言 %s */\n"
     247# @@comment[ :CCDP_comment ] = "/* セル CB (ダミー)型宣言 %s */\n"
    268248@@comment[ :CCDP_comment ] = "/* cell CB (dummy) type definition %s */\n"
    269249
    270 # @@comment[ :CCTPO_comment ] = "/* セル CB 型宣言 %s */\n"
     250# @@comment[ :CCTPO_comment ] = "/* セル CB 型宣言 %s */\n"
    271251@@comment[ :CCTPO_comment ] = "/* cell CB type definition %s */\n"
    272252
    273 # @@comment[ :SCP_comment ] = "/* シングルトンセル CB プロトタイプ宣言 %s */\n"
     253# @@comment[ :SCP_comment ] = "/* シングルトンセル CB プロトタイプ宣言 %s */\n"
    274254@@comment[ :SCP_comment ] = "/* singleton cell CB prototype declaration %s */\n"
    275255
    276 # @@comment[ :DCI_comment ] = "\n/* CB は存在しない。INIB を CB の代わりに使用するための define %s */\n"
     256# @@comment[ :DCI_comment ] = "\n/* CB は存在しない。INIB を CB の代わりに使用するための define %s */\n"
    277257@@comment[ :DCI_comment ] = "\n/* CB not exist. CB corresponding to INIB %s */\n"
    278258
    279 # @@comment[ :FEC_comment ] = "/* イテレータコード (FOREACH_CELL)の生成 %s */\n"
     259# @@comment[ :FEC_comment ] = "/* イテレータコード (FOREACH_CELL)の生成 %s */\n"
    280260@@comment[ :FEC_comment ] = "/* iteration code (FOREACH_CELL) %s */\n"
    281261
    282 # @@comment[ :DAL_comment ] = "/* deallocate マクロ %s */\n"
     262# @@comment[ :DAL_comment ] = "/* deallocate マクロ %s */\n"
    283263@@comment[ :DAL_comment ] = "/* deallocate macro %s */\n"
    284264
    285 # @@comment[ :NFEC_comment ] = "/* イテレータコード (FOREACH_CELL)の生成(CB,INIB は存在しない) %s */\n"
     265# @@comment[ :NFEC_comment ] = "/* イテレータコード (FOREACH_CELL)の生成(CB,INIB は存在しない) %s */\n"
    286266@@comment[ :NFEC_comment ] = "/* iteration code (FOREACH_CELL) (niether CB, nor NIB exit) %s */\n"
    287267
    288 # @@comment[ :CIM_comment ] = "/* CB 初期化マクロ %s */\n"
     268# @@comment[ :CIM_comment ] = "/* CB 初期化マクロ %s */\n"
    289269@@comment[ :CIM_comment ] = "/* CB initialize macro %s */\n"
    290270
    291 # @@comment[ :EDT_comment ] = "/* 受け口ディスクリプタ型 %s */\n"
     271# @@comment[ :EDT_comment ] = "/* 受け口ディスクリプタ型 %s */\n"
    292272@@comment[ :EDT_comment ] = "/* entry port descriptor type %s */\n"
    293273
    294 # @@comment[ :EPSF_comment ] = "/* 受け口スケルトン関数 %s */\n"
     274# @@comment[ :EPSF_comment ] = "/* 受け口スケルトン関数 %s */\n"
    295275@@comment[ :EPSF_comment ] = "/* entry port skelton function %s */\n"
    296276
    297 # @@comment[ :EPSFT_comment ] = "/* 受け口スケルトン関数テーブル %s */\n"
     277# @@comment[ :EPSFT_comment ] = "/* 受け口スケルトン関数テーブル %s */\n"
    298278@@comment[ :EPSFT_comment ] = "/* entry port skelton function table %s */\n"
    299279
    300 # @@comment[ :CPEPD_comment ] = "/* 呼び口の参ç
    301 §ã™ã‚‹å—け口ディスクリプタ(実際の型と相違した定義) %s */\n"
     280# @@comment[ :CPEPD_comment ] = "/* 呼び口の参照する受け口ディスクリプタ(実際の型と相違した定義) %s */\n"
    302281@@comment[ :CPEPD_comment ] = "/* entry port descriptor referenced by call port (differ from actual definition) %s */\n"
    303282
    304 # @@comment[ :CPA_comment ] = "/* 呼び口é
    305 åˆ— %s */\n"
     283# @@comment[ :CPA_comment ] = "/* 呼び口配列 %s */\n"
    306284@@comment[ :CPA_comment ] = "/* call port array %s */\n"
    307285
    308 # @@comment[ :CIC_comment ] = "/* CB 初期化コード %s */\n"
     286# @@comment[ :CIC_comment ] = "/* CB 初期化コード %s */\n"
    309287@@comment[ :CIC_comment ] = "/* CB initialize code %s */\n"
    310288
    311 # @@comment[ :AVAI_comment ] = "/* 属性・変数のé
    312 åˆ— %s */\n"
     289# @@comment[ :AVAI_comment ] = "/* 属性・変数の配列 %s */\n"
    313290@@comment[ :AVAI_comment ] = "/* array of attr/var %s */\n"
    314291
    315 # @@comment[ :AVI_comment ] = "/* 変数(構造体、é
    316 åˆ—)初期値 %s */\n"
     292# @@comment[ :AVI_comment ] = "/* 変数(構造体、配列)初期値 %s */\n"
    317293@@comment[ :AVI_comment ] = "/* var (struct, array) initial value %s */\n"
    318294
    319 # @@comment[ :INIB_comment ] = "/* セル INIB %s */\n"
     295# @@comment[ :INIB_comment ] = "/* セル INIB %s */\n"
    320296@@comment[ :INIB_comment ] = "/* cell INIB %s */\n"
    321297
    322 # @@comment[ :CB_comment ] = "/* セル CB %s */\n"
     298# @@comment[ :CB_comment ] = "/* セル CB %s */\n"
    323299@@comment[ :CB_comment ] = "/* cell CB %s */\n"
    324300
    325 # @@comment[ :EPD_comment ] = "/* 受け口ディスクリプタ %s */\n"
     301# @@comment[ :EPD_comment ] = "/* 受け口ディスクリプタ %s */\n"
    326302@@comment[ :EPD_comment ] = "/* entry port descriptor %s */\n"
    327303
    328 # @@comment[ :PAC_comment ] = "/* プロトタイプ宣言や変数の定義をここに書きます %s */\n"
     304# @@comment[ :PAC_comment ] = "/* プロトタイプ宣言や変数の定義をここに書きます %s */\n"
    329305@@comment[ :PAC_comment ] = "/* Put prototype declaration and/or variale definition here %s */\n"
    330306
    331 # @@comment[ :CAAM_comment ] = " *\n * 属性アクセスマクロ %s\n"
     307# @@comment[ :CAAM_comment ] = " *\n * 属性アクセスマクロ %s\n"
    332308@@comment[ :CAAM_comment ] = " *\n * attr access macro %s\n"
    333309
    334 # @@comment[ :CAAMI_comment ] = " *\n * 属性アクセスマクロ %s\n"
     310# @@comment[ :CAAMI_comment ] = " *\n * 属性アクセスマクロ %s\n"
    335311@@comment[ :CAAMI_comment ] = " *\n * attr access macro %s\n"
    336312
    337 # @@comment[ :TYP_comment ] = " *\n * 型 %s\n * CELLCB 型  : %s\n * CELLIDX 型 : %s\n"
     313# @@comment[ :TYP_comment ] = " *\n * 型 %s\n * CELLCB 型  : %s\n * CELLIDX 型 : %s\n"
    338314@@comment[ :TYP_comment ] = " *\n * type %s\n * CELLCB type  : %s\n * CELLIDX type : %s\n"
    339315
    340 # @@comment[ :TCPF_comment ] = " * 呼び口関数 %s\n"
     316# @@comment[ :TCPF_comment ] = " * 呼び口関数 %s\n"
    341317@@comment[ :TCPF_comment ] = " * call port function %s\n"
    342318
    343 # @@comment[ :TEPF_comment ] = "/* 受け口関数 %s */\n"
     319# @@comment[ :TEPF_comment ] = "/* 受け口関数 %s */\n"
    344320@@comment[ :TEPF_comment ] = "/* entry port function %s */\n"
    345321
    346 # @@comment[ :TEFB_comment ] = "\t/* ここに処理本体を記述します %s */\n"
     322# @@comment[ :TEFB_comment ] = "\t/* ここに処理本体を記述します %s */\n"
    347323@@comment[ :TEFB_comment ] = "\t/* Put statements here %s */\n"
    348324
  • asp3_gr_sakura/trunk/tecsgen/tecslib/messages/messages_file_ja_JP.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: messages_file_ja_JP.rb 2061 2014-05-31 22:15:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
     
    6247
    6348# MSg.note
    64 @@comment[ :note ] = " * このファイルは tecsgen により自動生成されました
    65  * このファイルを編集して使用することは、意図されていません
     49@@comment[ :note ] = " * このファイルは tecsgen により自動生成されました
     50 * このファイルを編集して使用することは、意図されていません
    6651"
    6752
    6853@@comment[ :preamble_note ] = "/* #[<PREAMBLE>]#
    69  * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
    70  * tecsmerge によるマージに使用されます
     54 * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
     55 * tecsmerge によるマージに使用されます
    7156"
    7257
    7358@@comment[ :postamble_note ] = "/* #[<POSTAMBLE>]#
    74  *   ã“れより下に非受け口関数を書きます
     59 *   これより下に非受け口関数を書きます
    7560 * #[</POSTAMBLE>]#*/
    7661"
    7762
    7863@@comment[ :template_note ] = "/*
    79  * このファイルは tecsgen によりテンプレートとして自動生成されました
    80  * このファイルを編集して使用することが意図されていますが
    81  * tecsgen の再実行により上書きされてしまうため、通常
     64 * このファイルは tecsgen によりテンプレートとして自動生成されました
     65 * このファイルを編集して使用することが意図されていますが
     66 * tecsgen の再実行により上書きされてしまうため、通常
    8267 *   gen/%s_template.c => src/%s.c
    83  * のように名前, フォルダを変更してから修正します
     68 * のように名前, フォルダを変更してから修正します
    8469 */
    8570"
    8671
    8772@@comment[ :inline_template_note ] = "/*
    88  * このファイルは tecsgen によりテンプレートとして自動生成されました
    89  * このファイルを編集して使用することが意図されていますが
    90  * tecsgen の再実行により上書きされてしまうため、通常
     73 * このファイルは tecsgen によりテンプレートとして自動生成されました
     74 * このファイルを編集して使用することが意図されていますが
     75 * tecsgen の再実行により上書きされてしまうため、通常
    9176 *   gen/%s_inline_template.h => src/%s_inline.h
    92  * のように名前, フォルダを変更してから修正します
     77 * のように名前, フォルダを変更してから修正します
    9378 */
    9479"
    9580
    96 @@comment[ :Makefile_note ] = "# このファイルは tecsgen により自動生成されました
    97 # Makefile.temp は gen の一つ上のディレクトリに移して使用します
     81@@comment[ :Makefile_note ] = "# このファイルは tecsgen により自動生成されました
     82# Makefile.temp は gen の一つ上のディレクトリに移して使用します
    9883#  % mv Makefile.temp Makefile
    9984#
    100 # clean のデフォルト動作は $(GEN_DIR)/Makefile.* を削除します
     85# clean のデフォルト動作は $(GEN_DIR)/Makefile.* を削除します
    10186#
    102 # このファイルは GNU make で gcc を用い POSIX 環境で動作するモジュールをビルドするのに適切なように生成されています
    103 # vpath, CFLAGS, OTHER_OBJS などを調整するå¿
    104 è¦ãŒã‚るかもしれません
    105 # 他の環境やターゲットの場合、このファイルをå
    106 ƒã«å¤‰æ›´ã™ã‚‹å¿
    107 è¦ãŒã‚ります
     87# このファイルは GNU make で gcc を用い POSIX 環境で動作するモジュールをビルドするのに適切なように生成されています
     88# vpath, CFLAGS, OTHER_OBJS などを調整する必要があるかもしれません
     89# 他の環境やターゲットの場合、このファイルを元に変更する必要があります
    10890
    10991"
    11092
    111 @@comment[ :oneway_ercd_note ] = "/* oneway の場合 E_OK しか返せません */"
    112 @@comment[ :ercd_note ] = "/* エラー処理コードをここに記述します */"
     93@@comment[ :oneway_ercd_note ] = "/* oneway の場合 E_OK しか返せません */"
     94@@comment[ :ercd_note ] = "/* エラー処理コードをここに記述します */"
    11395
    114 @@comment[ :IMP_comment ] = "\n/* import_C により import されるヘッダ %s */\n"
    115 @@comment[ :MVAR_comment ] = "# 変数 %s\n"
    116 @@comment[ :MRUL_comment ] = "# ルール %s\n"
    117 @@comment[ :TCM_comment ] = "# テンプレートコードでメークしてみる場合 %s \n"
    118 @@comment[ :MDEP_comment ] = "\n# depend を include %s\n"
    119 @@comment[ :SDI_comment ] = "/* シグニチャディスクリプタ参ç
    120 §ãƒ˜ãƒƒãƒ€ %s */\n"
    121 @@comment[ :SD_comment ] = "/* シグニチャディスクリプタ %s */\n"
    122 @@comment[ :SFT_comment ] = "/* シグニチャ関数テーブル %s */\n"
    123 @@comment[ :SDES_comment ] = "/* シグニチャディスクリプタ(動的結合用) %s */\n"
    124 # @@comment[ :IRTH_comment ] = "/* ランタイムヘッダ %s */\n"
    125 @@comment[ :UDF_comment ] = "/* inline のための undef %s */\n"
    126 @@comment[ :IGH_comment ] = "/* グローバルヘッダ %s */\n"
    127 @@comment[ :ISH_comment ] = "/* シグニチャヘッダ %s */\n"
    128 @@comment[ :ICT_comment ] = "/* 最適化のため参ç
    129 §ã™ã‚‹ã‚»ãƒ«ã‚¿ã‚¤ãƒ—の CB 型の定義を取込む %s */\n"
    130 @@comment[ :NIDB_comment ] = "ID のベース "
    131 @@comment[ :NCEL_comment ] = "セルの個数"
    132 @@comment[ :CVI_comment ] = "/* IDXの正当性チェックマクロ %s */\n"
    133 @@comment[ :CVIA_comment ] = "/* IDXの正当性チェックマクロ(短縮形) %s */\n"
    134 @@comment[ :NCPA_comment ] = "/* 呼び口é
    135 åˆ—の大きさを得るマクロ %s */\n"
    136 @@comment[ :NEPA_comment ] = "/* 受け口é
    137 åˆ—の大きさを得るマクロ %s */\n"
    138 @@comment[ :TOCP_comment ] = "/* optional 呼び口をテストするマクロ %s */\n"
    139 @@comment[ :TOCPA_comment ] = "/* optional 呼び口をテストするマクロ(短縮形) %s */\n"
    140 @@comment[ :GCB_comment ] = "\n/* セルCBを得るマクロ %s */\n"
    141 @@comment[ :GCBA_comment ] = "\n/* セルCBを得るマクロ(短縮形) %s */\n"
    142 @@comment[ :CCT_comment ] = "/* CELLCB 型(短縮形) %s */\n"
    143 @@comment[ :CTIXA_comment ] = "/* セルタイプのIDX型(短縮形) %s */\n"
    144 @@comment[ :AAM_comment ] = "\n/* 属性アクセスマクロ %s */\n"
    145 @@comment[ :VAM_comment ] = "\n/* var アクセスマクロ %s */\n"
    146 @@comment[ :AAMA_comment ] = "\n/* 属性アクセスマクロ(短縮形) %s */\n"
    147 @@comment[ :VAMA_comment ] = "\n/* var アクセスマクロ(短縮形) %s */\n"
    148 @@comment[ :CPM_comment ] = " /* 呼び口関数マクロ %s */\n"
    149 @@comment[ :CPMA_comment ] = "/* 呼び口関数マクロ(短縮形)%s */\n"
    150 @@comment[ :EPM_comment ] = "\n/* 受け口関数マクロ(短縮形) %s */\n"
    151 @@comment[ :CTIX_comment ] = "\n/* セルタイプのIDX型 %s */\n"
    152 @@comment[ :EPP_comment ] = "\n/* 受け口関数プロトタイプ宣言 %s */\n"
    153 @@comment[ :EPSP_comment ] = "\n/* 受け口スケルトン関数プロトタイプ宣言(VMT不要最適化により参ç
    154 §ã™ã‚‹ã‚‚の) %s */\n"
    155 @@comment[ :INL_comment ] = "/* inline ヘッダの include %s */\n"
    156 @@comment[ :CIP_comment ] = "/* セル INIB 型宣言 %s */\n"
    157 @@comment[ :CCTPA_comment ] = "/* セル CB 型宣言 %s */\n"
    158 @@comment[ :CCDP_comment ] = "/* セル CB (ダミー)型宣言 %s */\n"
    159 @@comment[ :CCTPO_comment ] = "/* セル CB 型宣言 %s */\n"
    160 @@comment[ :SCP_comment ] = "/* シングルトンセル CB プロトタイプ宣言 %s */\n"
    161 @@comment[ :DCI_comment ] = "\n/* CB は存在しない。INIB を CB の代わりに使用するための define %s */\n"
    162 @@comment[ :FEC_comment ] = "/* イテレータコード (FOREACH_CELL)の生成 %s */\n"
    163 @@comment[ :DAL_comment ] = "/* deallocate マクロ %s */\n"
    164 @@comment[ :NFEC_comment ] = "/* イテレータコード (FOREACH_CELL)の生成(CB,INIB は存在しない) %s */\n"
    165 @@comment[ :CIM_comment ] = "/* CB 初期化マクロ %s */\n"
    166 @@comment[ :EDT_comment ] = "/* 受け口ディスクリプタ型 %s */\n"
    167 @@comment[ :EPSF_comment ] = "/* 受け口スケルトン関数 %s */\n"
    168 @@comment[ :EPSFT_comment ] = "/* 受け口スケルトン関数テーブル %s */\n"
    169 @@comment[ :CPEPD_comment ] = "/* 呼び口の参ç
    170 §ã™ã‚‹å—け口ディスクリプタ(実際の型と相違した定義) %s */\n"
    171 @@comment[ :CPA_comment ] = "/* 呼び口é
    172 åˆ— %s */\n"
    173 @@comment[ :CIC_comment ] = "/* CB 初期化コード %s */\n"
    174 @@comment[ :AVAI_comment ] = "/* 属性・変数のé
    175 åˆ— %s */\n"
    176 @@comment[ :AVI_comment ] = "/* 変数(構造体、é
    177 åˆ—)初期値 %s */\n"
    178 @@comment[ :INIB_comment ] = "/* セル INIB %s */\n"
    179 @@comment[ :CB_comment ] = "/* セル CB %s */\n"
    180 @@comment[ :EPD_comment ] = "/* 受け口ディスクリプタ %s */\n"
    181 @@comment[ :PAC_comment ] = "/* プロトタイプ宣言や変数の定義をここに書きます %s */\n"
    182 @@comment[ :CAAM_comment ] = " *\n * 属性アクセスマクロ %s\n"
    183 @@comment[ :CAAMI_comment ] = " *\n * 属性アクセスマクロ %s\n"
    184 @@comment[ :TYP_comment ] = " *\n * 型 %s\n * CELLCB 型  : %s\n * CELLIDX 型 : %s\n"
    185 @@comment[ :TCPF_comment ] = " * 呼び口関数 %s\n"
    186 @@comment[ :TEPF_comment ] = "/* 受け口関数 %s */\n"
    187 @@comment[ :TEFB_comment ] = "\t/* ここに処理本体を記述します %s */\n"
     96@@comment[ :IMP_comment ] = "\n/* import_C により import されるヘッダ %s */\n"
     97@@comment[ :MVAR_comment ] = "# 変数 %s\n"
     98@@comment[ :MRUL_comment ] = "# ルール %s\n"
     99@@comment[ :TCM_comment ] = "# テンプレートコードでメークしてみる場合 %s \n"
     100@@comment[ :MDEP_comment ] = "\n# depend を include %s\n"
     101@@comment[ :SDI_comment ] = "/* シグニチャディスクリプタ参照ヘッダ %s */\n"
     102@@comment[ :SD_comment ] = "/* シグニチャディスクリプタ %s */\n"
     103@@comment[ :SFT_comment ] = "/* シグニチャ関数テーブル %s */\n"
     104@@comment[ :SDES_comment ] = "/* シグニチャディスクリプタ(動的結合用) %s */\n"
     105# @@comment[ :IRTH_comment ] = "/* ランタイムヘッダ %s */\n"
     106@@comment[ :UDF_comment ] = "/* inline のための undef %s */\n"
     107@@comment[ :IGH_comment ] = "/* グローバルヘッダ %s */\n"
     108@@comment[ :ISH_comment ] = "/* シグニチャヘッダ %s */\n"
     109@@comment[ :ICT_comment ] = "/* 最適化のため参照するセルタイプの CB 型の定義を取込む %s */\n"
     110@@comment[ :NIDB_comment ] = "ID のベース "
     111@@comment[ :NCEL_comment ] = "セルの個数"
     112@@comment[ :CVI_comment ] = "/* IDXの正当性チェックマクロ %s */\n"
     113@@comment[ :CVIA_comment ] = "/* IDXの正当性チェックマクロ(短縮形) %s */\n"
     114@@comment[ :NCPA_comment ] = "/* 呼び口配列の大きさを得るマクロ %s */\n"
     115@@comment[ :NEPA_comment ] = "/* 受け口配列の大きさを得るマクロ %s */\n"
     116@@comment[ :TOCP_comment ] = "/* optional 呼び口をテストするマクロ %s */\n"
     117@@comment[ :TOCPA_comment ] = "/* optional 呼び口をテストするマクロ(短縮形) %s */\n"
     118@@comment[ :GCB_comment ] = "\n/* セルCBを得るマクロ %s */\n"
     119@@comment[ :GCBA_comment ] = "\n/* セルCBを得るマクロ(短縮形) %s */\n"
     120@@comment[ :CCT_comment ] = "/* CELLCB 型(短縮形) %s */\n"
     121@@comment[ :CTIXA_comment ] = "/* セルタイプのIDX型(短縮形) %s */\n"
     122@@comment[ :AAM_comment ] = "\n/* 属性アクセスマクロ %s */\n"
     123@@comment[ :VAM_comment ] = "\n/* var アクセスマクロ %s */\n"
     124@@comment[ :AAMA_comment ] = "\n/* 属性アクセスマクロ(短縮形) %s */\n"
     125@@comment[ :VAMA_comment ] = "\n/* var アクセスマクロ(短縮形) %s */\n"
     126@@comment[ :CPM_comment ] = " /* 呼び口関数マクロ %s */\n"
     127@@comment[ :CPMA_comment ] = "/* 呼び口関数マクロ(短縮形)%s */\n"
     128@@comment[ :EPM_comment ] = "\n/* 受け口関数マクロ(短縮形) %s */\n"
     129@@comment[ :CTIX_comment ] = "\n/* セルタイプのIDX型 %s */\n"
     130@@comment[ :EPP_comment ] = "\n/* 受け口関数プロトタイプ宣言 %s */\n"
     131@@comment[ :EPSP_comment ] = "\n/* 受け口スケルトン関数プロトタイプ宣言(VMT不要最適化により参照するもの) %s */\n"
     132@@comment[ :INL_comment ] = "/* inline ヘッダの include %s */\n"
     133@@comment[ :CIP_comment ] = "/* セル INIB 型宣言 %s */\n"
     134@@comment[ :CCTPA_comment ] = "/* セル CB 型宣言 %s */\n"
     135@@comment[ :CCDP_comment ] = "/* セル CB (ダミー)型宣言 %s */\n"
     136@@comment[ :CCTPO_comment ] = "/* セル CB 型宣言 %s */\n"
     137@@comment[ :SCP_comment ] = "/* シングルトンセル CB プロトタイプ宣言 %s */\n"
     138@@comment[ :DCI_comment ] = "\n/* CB は存在しない。INIB を CB の代わりに使用するための define %s */\n"
     139@@comment[ :FEC_comment ] = "/* イテレータコード (FOREACH_CELL)の生成 %s */\n"
     140@@comment[ :DAL_comment ] = "/* deallocate マクロ %s */\n"
     141@@comment[ :NFEC_comment ] = "/* イテレータコード (FOREACH_CELL)の生成(CB,INIB は存在しない) %s */\n"
     142@@comment[ :CIM_comment ] = "/* CB 初期化マクロ %s */\n"
     143@@comment[ :EDT_comment ] = "/* 受け口ディスクリプタ型 %s */\n"
     144@@comment[ :EPSF_comment ] = "/* 受け口スケルトン関数 %s */\n"
     145@@comment[ :EPSFT_comment ] = "/* 受け口スケルトン関数テーブル %s */\n"
     146@@comment[ :CPEPD_comment ] = "/* 呼び口の参照する受け口ディスクリプタ(実際の型と相違した定義) %s */\n"
     147@@comment[ :CPA_comment ] = "/* 呼び口配列 %s */\n"
     148@@comment[ :CIC_comment ] = "/* CB 初期化コード %s */\n"
     149@@comment[ :AVAI_comment ] = "/* 属性・変数の配列 %s */\n"
     150@@comment[ :AVI_comment ] = "/* 変数(構造体、配列)初期値 %s */\n"
     151@@comment[ :INIB_comment ] = "/* セル INIB %s */\n"
     152@@comment[ :CB_comment ] = "/* セル CB %s */\n"
     153@@comment[ :EPD_comment ] = "/* 受け口ディスクリプタ %s */\n"
     154@@comment[ :PAC_comment ] = "/* プロトタイプ宣言や変数の定義をここに書きます %s */\n"
     155@@comment[ :CAAM_comment ] = " *\n * 属性アクセスマクロ %s\n"
     156@@comment[ :CAAMI_comment ] = " *\n * 属性アクセスマクロ %s\n"
     157@@comment[ :TYP_comment ] = " *\n * 型 %s\n * CELLCB 型  : %s\n * CELLIDX 型 : %s\n"
     158@@comment[ :TCPF_comment ] = " * 呼び口関数 %s\n"
     159@@comment[ :TEPF_comment ] = "/* 受け口関数 %s */\n"
     160@@comment[ :TEFB_comment ] = "\t/* ここに処理本体を記述します %s */\n"
    188161
    189162end
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/ATK1AlarmPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 by TOPPERS Project TECS-WG
    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
    5338#++
    5439
    55 #== celltype プラグインのå
    56 ±é€šã®è¦ªã‚¯ãƒ©ã‚¹
     40#== celltype プラグインの共通の親クラス
    5741class ATK1AlarmPlugin < CelltypePlugin
    5842#@celltype:: Celltype
    59 #@option:: String     :オプション文字列
    60 
    61   #signature::     Celltype        シグニチャ(インスタンス)
     43#@option:: String     :オプション文字列
     44
     45  #signature::     Celltype        シグニチャ(インスタンス)
    6246  def initialize( celltype, option )
    6347    super
    6448  end
    6549
    66   #===  CDL ファイルの生成
    67   #      typedef, signature, celltype, cell のコードを生成
    68   #      重複して生成してはならない
    69   #      すでに生成されている場合は出力しないこと。
    70   #      もしくは同名の import により、重複を避けること。
    71   #file::        FILE       ç”Ÿæˆã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«
     50  #===  CDL ファイルの生成
     51  #      typedef, signature, celltype, cell のコードを生成
     52  #      重複して生成してはならない
     53  #      すでに生成されている場合は出力しないこと。
     54  #      もしくは同名の import により、重複を避けること。
     55  #file::        FILE       生成するファイル
    7256#  def gen_cdl_file file
    7357#  end
     
    7660  end
    7761
    78   #===  受け口関数の本体(C言語)を生成する
    79   #     ã“のメソッドが未定義の場合、ジェネレータは受け口関数のテンプレートを生成する
    80   #     ã“のメソッドが定義済みの場合、(テンプレートではなく、変更するå¿
    81 è¦ã®ãªã„)セルタイプコードを生成する
    82   #file::           FILE        出力å
    83 ˆãƒ•ã‚¡ã‚¤ãƒ«
     62  #===  受け口関数の本体(C言語)を生成する
     63  #     このメソッドが未定義の場合、ジェネレータは受け口関数のテンプレートを生成する
     64  #     このメソッドが定義済みの場合、(テンプレートではなく、変更する必要のない)セルタイプコードを生成する
     65  #file::           FILE        出力先ファイル
    8466  #b_singleton::    bool        true if singleton
    8567  #ct_name::        Symbol
     
    190172  file2.close
    191173
    192   # 追記するために AppFile を使う(文字コード変換されない)
     174  # 追記するために AppFile を使う(文字コード変換されない)
    193175  file = AppFile.open( "#{$gen}/tAlarm_tecsgen.#{$c_suffix}" )
    194176  file.print "\n/* Generated by ATK1AlarmPlugin */\n"
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/ATK1DelayTaskPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 by TOPPERS Project TECS-WG
    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
    5338#++
    5439
    55 #== celltype プラグインのå
    56 ±é€šã®è¦ªã‚¯ãƒ©ã‚¹
     40#== celltype プラグインの共通の親クラス
    5741class ATK1DelayTaskPlugin < CelltypePlugin
    5842#@celltype:: Celltype
    59 #@option:: String     :オプション文字列
     43#@option:: String     :オプション文字列
    6044
    61   #signature::     Celltype        シグニチャ(インスタンス)
     45  #signature::     Celltype        シグニチャ(インスタンス)
    6246  def initialize( celltype, option )
    6347    super
    6448  end
    6549
    66   #===  CDL ファイルの生成
    67   #      typedef, signature, celltype, cell のコードを生成
    68   #      重複して生成してはならない
    69   #      すでに生成されている場合は出力しないこと。
    70   #      もしくは同名の import により、重複を避けること。
    71   #file::        FILE       ç”Ÿæˆã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«
     50  #===  CDL ファイルの生成
     51  #      typedef, signature, celltype, cell のコードを生成
     52  #      重複して生成してはならない
     53  #      すでに生成されている場合は出力しないこと。
     54  #      もしくは同名の import により、重複を避けること。
     55  #file::        FILE       生成するファイル
    7256#  def gen_cdl_file file
    7357#  end
     
    8367  end
    8468
    85   #===  受け口関数の本体(C言語)を生成する
    86   #     ã“のメソッドが未定義の場合、ジェネレータは受け口関数のテンプレートを生成する
    87   #     ã“のメソッドが定義済みの場合、(テンプレートではなく、変更するå¿
    88 è¦ã®ãªã„)セルタイプコードを生成する
    89   #file::           FILE        出力å
    90 ˆãƒ•ã‚¡ã‚¤ãƒ«
     69  #===  受け口関数の本体(C言語)を生成する
     70  #     このメソッドが未定義の場合、ジェネレータは受け口関数のテンプレートを生成する
     71  #     このメソッドが定義済みの場合、(テンプレートではなく、変更する必要のない)セルタイプコードを生成する
     72  #file::           FILE        出力先ファイル
    9173  #b_singleton::    bool        true if singleton
    9274  #ct_name::        Symbol
     
    10284  def gen_factory file
    10385
    104     # 追記するために AppFile を使う(文字コード変換されない)
     86    # 追記するために AppFile を使う(文字コード変換されない)
    10587    file2 = AppFile.open( "#{$gen}/tDelayTaskBody_factory.#{$h_suffix}" )
    10688    file2.print "\n/* Generated by ATK1DelayTaskPlugin */\n\n"
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/ATK1EventPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 by TOPPERS Project TECS-WG
    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
    5338#++
    5439
    55 #== ATK1 Event celltype プラグインクラス
     40#== ATK1 Event celltype プラグインクラス
    5641class ATK1EventPlugin < CelltypePlugin
    57 #@@instancies:: []     :セル実体群
     42#@@instancies:: []     :セル実体群
    5843@@instancies = []
    5944
    60   #===  初期化
    61   #      å
    62 ¨ã¦ã®ã‚»ãƒ«ã®å®Ÿä½“を意味解析後に参ç
    63 §ã™ã‚‹å¿
    64 è¦ãŒã‚るために
    65   #      初期化時に singleton の instancies に格納する
    66   #signature::     Celltype        シグニチャ(インスタンス)
     45  #===  初期化
     46  #      全てのセルの実体を意味解析後に参照する必要があるために
     47  #      初期化時に singleton の instancies に格納する
     48  #signature::     Celltype        シグニチャ(インスタンス)
    6749  def initialize( celltype, option )
    6850    super
     
    7052  end
    7153
    72   #===  cellの生成
     54  #===  cellの生成
    7355  def new_cell cell
    7456  end
    7557
    76   #===  意味解析実行後のコード生成
     58  #===  意味解析実行後のコード生成
    7759  def self.gen_post_code file
    7860
     
    8365  end
    8466
    85   #===  OILファイル出力
     67  #===  OILファイル出力
    8668  def gen_oil_code file
    8769
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/ATK1ISRPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 by TOPPERS Project TECS-WG
    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
    5338#++
    5439
    55 #== celltype プラグインのå
    56 ±é€šã®è¦ªã‚¯ãƒ©ã‚¹
     40#== celltype プラグインの共通の親クラス
    5741class ATK1ISRPlugin < CelltypePlugin
    5842#@celltype:: Celltype
    59 #@option:: String     :オプション文字列
     43#@option:: String     :オプション文字列
    6044
    61   #signature::     Celltype        シグニチャ(インスタンス)
     45  #signature::     Celltype        シグニチャ(インスタンス)
    6246  def initialize( celltype, option )
    6347    super
    6448  end
    6549
    66   #===  CDL ファイルの生成
    67   #      typedef, signature, celltype, cell のコードを生成
    68   #      重複して生成してはならない
    69   #      すでに生成されている場合は出力しないこと。
    70   #      もしくは同名の import により、重複を避けること。
    71   #file::        FILE       ç”Ÿæˆã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«
     50  #===  CDL ファイルの生成
     51  #      typedef, signature, celltype, cell のコードを生成
     52  #      重複して生成してはならない
     53  #      すでに生成されている場合は出力しないこと。
     54  #      もしくは同名の import により、重複を避けること。
     55  #file::        FILE       生成するファイル
    7256#  def gen_cdl_file file
    7357#  end
     
    7660  end
    7761
    78   #===  受け口関数の本体(C言語)を生成する
    79   #     ã“のメソッドが未定義の場合、ジェネレータは受け口関数のテンプレートを生成する
    80   #     ã“のメソッドが定義済みの場合、(テンプレートではなく、変更するå¿
    81 è¦ã®ãªã„)セルタイプコードを生成する
    82   #file::           FILE        出力å
    83 ˆãƒ•ã‚¡ã‚¤ãƒ«
     62  #===  受け口関数の本体(C言語)を生成する
     63  #     このメソッドが未定義の場合、ジェネレータは受け口関数のテンプレートを生成する
     64  #     このメソッドが定義済みの場合、(テンプレートではなく、変更する必要のない)セルタイプコードを生成する
     65  #file::           FILE        出力先ファイル
    8466  #b_singleton::    bool        true if singleton
    8567  #ct_name::        Symbol
     
    11698      end
    11799
    118       # ENTRY (entryはtecsgenの予約語のためNumberを付加)
     100      # ENTRY (entryはtecsgenの予約語のためNumberを付加)
    119101      join = cell.get_join_list.get_item( :entryNumber )
    120102      if join then
     
    152134  file2.close
    153135
    154   # 追記するために AppFile を使う(文字コード変換されない)
     136  # 追記するために AppFile を使う(文字コード変換されない)
    155137  file = AppFile.open( "#{$gen}/tISR_tecsgen.#{$c_suffix}" )
    156138  file.print "\n/* Generated by ATK1ISRPlugin */\n"
     
    165147#if defined( OMIT_ISR1_ENTRY )
    166148EOT
    167           file.print "/* ISR1å
    168 ¥ã‚Šå£æœªç”Ÿæˆæ™‚は本関数を割込み関数指定する  */\n"
     149          file.print "/* ISR1入り口未生成時は本関数を割込み関数指定する  */\n"
    169150          file.print <<EOT
    170151#pragma INTERRUPT  #{cell.get_name}
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/ATK1KernelPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 by TOPPERS Project TECS-WG
    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
    5338#++
    5439
    55 #== celltype プラグインのå
    56 ±é€šã®è¦ªã‚¯ãƒ©ã‚¹
     40#== celltype プラグインの共通の親クラス
    5741class ATK1KernelPlugin < CelltypePlugin
    5842#@celltype:: Celltype
    59 #@option:: String     :オプション文字列
     43#@option:: String     :オプション文字列
    6044  @@cell_list = []
    6145
    62   #signature::     Celltype        シグニチャ(インスタンス)
     46  #signature::     Celltype        シグニチャ(インスタンス)
    6347  def initialize( celltype, option )
    6448    super
    6549  end
    6650
    67   #===  CDL ファイルの生成
    68   #      typedef, signature, celltype, cell のコードを生成
    69   #      重複して生成してはならない
    70   #      すでに生成されている場合は出力しないこと。
    71   #      もしくは同名の import により、重複を避けること。
    72   #file::        FILE       ç”Ÿæˆã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«
     51  #===  CDL ファイルの生成
     52  #      typedef, signature, celltype, cell のコードを生成
     53  #      重複して生成してはならない
     54  #      すでに生成されている場合は出力しないこと。
     55  #      もしくは同名の import により、重複を避けること。
     56  #file::        FILE       生成するファイル
    7357#  def gen_cdl_file file
    7458#  end
     
    8569  end
    8670
    87   #===  受け口関数の本体(C言語)を生成する
    88   #     ã“のメソッドが未定義の場合、ジェネレータは受け口関数のテンプレートを生成する
    89   #     ã“のメソッドが定義済みの場合、(テンプレートではなく、変更するå¿
    90 è¦ã®ãªã„)セルタイプコードを生成する
    91   #file::           FILE        出力å
    92 ˆãƒ•ã‚¡ã‚¤ãƒ«
     71  #===  受け口関数の本体(C言語)を生成する
     72  #     このメソッドが未定義の場合、ジェネレータは受け口関数のテンプレートを生成する
     73  #     このメソッドが定義済みの場合、(テンプレートではなく、変更する必要のない)セルタイプコードを生成する
     74  #file::           FILE        出力先ファイル
    9375  #b_singleton::    bool        true if singleton
    9476  #ct_name::        Symbol
     
    184166    file2.close
    185167
    186     # 追記するために AppFile を使う(文字コード変換されない)
     168    # 追記するために AppFile を使う(文字コード変換されない)
    187169    file2 = AppFile.open( "#{$gen}/tKernel_tecsgen.#{$c_suffix}" )
    188170    file2.print "\n/* Generated by ATK1KernelPlugin */\n\n"
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/ATK1ResourcePlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 by TOPPERS Project TECS-WG
    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
    5338#++
    5439
    55 #== celltype プラグインのå
    56 ±é€šã®è¦ªã‚¯ãƒ©ã‚¹
     40#== celltype プラグインの共通の親クラス
    5741class ATK1ResourcePlugin < CelltypePlugin
    5842#@celltype:: Celltype
    59 #@option:: String     :オプション文字列
     43#@option:: String     :オプション文字列
    6044
    61   #signature::     Celltype        シグニチャ(インスタンス)
     45  #signature::     Celltype        シグニチャ(インスタンス)
    6246  def initialize( celltype, option )
    6347    super
    6448  end
    6549
    66   #===  CDL ファイルの生成
    67   #      typedef, signature, celltype, cell のコードを生成
    68   #      重複して生成してはならない
    69   #      すでに生成されている場合は出力しないこと。
    70   #      もしくは同名の import により、重複を避けること。
    71   #file::        FILE       ç”Ÿæˆã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«
     50  #===  CDL ファイルの生成
     51  #      typedef, signature, celltype, cell のコードを生成
     52  #      重複して生成してはならない
     53  #      すでに生成されている場合は出力しないこと。
     54  #      もしくは同名の import により、重複を避けること。
     55  #file::        FILE       生成するファイル
    7256#  def gen_cdl_file file
    7357#  end
     
    7660  end
    7761
    78   #===  受け口関数の本体(C言語)を生成する
    79   #     ã“のメソッドが未定義の場合、ジェネレータは受け口関数のテンプレートを生成する
    80   #     ã“のメソッドが定義済みの場合、(テンプレートではなく、変更するå¿
    81 è¦ã®ãªã„)セルタイプコードを生成する
    82   #file::           FILE        出力å
    83 ˆãƒ•ã‚¡ã‚¤ãƒ«
     62  #===  受け口関数の本体(C言語)を生成する
     63  #     このメソッドが未定義の場合、ジェネレータは受け口関数のテンプレートを生成する
     64  #     このメソッドが定義済みの場合、(テンプレートではなく、変更する必要のない)セルタイプコードを生成する
     65  #file::           FILE        出力先ファイル
    8466  #b_singleton::    bool        true if singleton
    8567  #ct_name::        Symbol
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/ATK1TaskPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 by TOPPERS Project TECS-WG
    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
    5338#++
    5439
    55 #== celltype プラグインのå
    56 ±é€šã®è¦ªã‚¯ãƒ©ã‚¹
     40#== celltype プラグインの共通の親クラス
    5741class ATK1TaskPlugin < CelltypePlugin
    5842#@celltype:: Celltype
    59 #@option:: String     :オプション文字列
    60 
    61   #signature::     Celltype        シグニチャ(インスタンス)
     43#@option:: String     :オプション文字列
     44
     45  #signature::     Celltype        シグニチャ(インスタンス)
    6246  def initialize( celltype, option )
    6347    super
    6448  end
    6549
    66   #===  CDL ファイルの生成
    67   #      typedef, signature, celltype, cell のコードを生成
    68   #      重複して生成してはならない
    69   #      すでに生成されている場合は出力しないこと。
    70   #      もしくは同名の import により、重複を避けること。
    71   #file::        FILE       ç”Ÿæˆã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«
     50  #===  CDL ファイルの生成
     51  #      typedef, signature, celltype, cell のコードを生成
     52  #      重複して生成してはならない
     53  #      すでに生成されている場合は出力しないこと。
     54  #      もしくは同名の import により、重複を避けること。
     55  #file::        FILE       生成するファイル
    7256#  def gen_cdl_file file
    7357#  end
     
    8367  end
    8468
    85   #===  受け口関数の本体(C言語)を生成する
    86   #     ã“のメソッドが未定義の場合、ジェネレータは受け口関数のテンプレートを生成する
    87   #     ã“のメソッドが定義済みの場合、(テンプレートではなく、変更するå¿
    88 è¦ã®ãªã„)セルタイプコードを生成する
    89   #file::           FILE        出力å
    90 ˆãƒ•ã‚¡ã‚¤ãƒ«
     69  #===  受け口関数の本体(C言語)を生成する
     70  #     このメソッドが未定義の場合、ジェネレータは受け口関数のテンプレートを生成する
     71  #     このメソッドが定義済みの場合、(テンプレートではなく、変更する必要のない)セルタイプコードを生成する
     72  #file::           FILE        出力先ファイル
    9173  #b_singleton::    bool        true if singleton
    9274  #ct_name::        Symbol
     
    218200  file2.close
    219201
    220   # 追記するために AppFile を使う(文字コード変換されない)
     202  # 追記するために AppFile を使う(文字コード変換されない)
    221203  file = AppFile.open( "#{$gen}/tTask_tecsgen.#{$c_suffix}" )
    222204  file.print "\n/* Generated by ATK1TaskPlugin */\n"
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/C2TECSBridgePlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2015 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: C2TECSBridgePlugin.rb 2278 2015-11-01 20:10:07Z okuma-top $
     37#   $Id$
    5338#++
    5439
    55 #== C => TECS 受け口呼び出しのプラグイン
     40#== C => TECS 受け口呼び出しのプラグイン
    5641class C2TECSBridgePlugin < SignaturePlugin
    57 #@signature:: Signature   ãƒ—ラグインの対象となるシグニチャ
    58 #@option:: String   '"', '"' で囲まれた文字列
    59 
    60   # プラグイン引数名と Proc
     42#@signature:: Signature   プラグインの対象となるシグニチャ
     43#@option:: String   '"', '"' で囲まれた文字列
     44
     45  # プラグイン引数名と Proc
    6146  C2TECSBridgePluginArgProc = {
    6247    "prefix" => Proc.new { |obj,rhs| obj.set_prefix rhs },
     
    6853  @@signature_list = { }
    6954
    70   #signature::     Signature        シグニチャ(インスタンス)
     55  #signature::     Signature        シグニチャ(インスタンス)
    7156  def initialize( signature, option )
    7257    super
     
    10085  end
    10186
    102   #=== 後ろのコードを生成
    103   #プラグインの後ろのコードを生成
     87  #=== 後ろのコードを生成
     88  #プラグインの後ろのコードを生成
    10489  #file:: File:
    10590  def self.gen_post_code( file )
    106     # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
     91    # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
    10792    # file.print "/* '#{self.class.name}' post code */\n"
    10893  end
    10994
    110   #===  受け口関数の本体(C言語)を生成する
    111   #     é€šå¸¸ã§ã‚れば、ジェネレータは受け口関数のテンプレートを生成する
    112   #     ãƒ—ラグインの場合、変更するå¿
    113 è¦ã®ãªã„セルタイプコードを生成する
    114   #file::           FILE        出力å
    115 ˆãƒ•ã‚¡ã‚¤ãƒ«
     95  #===  受け口関数の本体(C言語)を生成する
     96  #     通常であれば、ジェネレータは受け口関数のテンプレートを生成する
     97  #     プラグインの場合、変更する必要のないセルタイプコードを生成する
     98  #file::           FILE        出力先ファイル
    11699  #b_singleton::    bool        true if singleton
    117100  #ct_name::        Symbol
     
    212195  end
    213196
    214   #===  set_prefix - prefix プラグインオプション
     197  #===  set_prefix - prefix プラグインオプション
    215198  def set_prefix rhs
    216199    @prefix = rhs.to_s
    217200  end
    218   #===  set_suffix - suffix プラグインオプション
     201  #===  set_suffix - suffix プラグインオプション
    219202  def set_suffix rhs
    220203    @suffix = rhs.to_s
    221204  end
    222   #===  set_header_name - header_name プラグインオプション
     205  #===  set_header_name - header_name プラグインオプション
    223206  def set_header_name rhs
    224207    @header_name = "#{$gen}/" + rhs.to_s
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/CellPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2011 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: celltypePlugin.rb 1540 2011-08-12 14:04:37Z okuma-top $
     37#   $Id$
    5338#++
    5439
    55 #== celltype プラグインのå
    56 ±é€šã®è¦ªã‚¯ãƒ©ã‚¹
     40#== celltype プラグインの共通の親クラス
    5741class CellPlugin < Plugin
    5842
    5943  #=== CellPlugin# initialize
    60   #cell::     Cell        セル(インスタンス)
    61   # このメソッドは、セルの構文解析が終わったところで呼び出される
    62   # この段階では意味解析が終わっていない
     44  #cell::     Cell        セル(インスタンス)
     45  # このメソッドは、セルの構文解析が終わったところで呼び出される
     46  # この段階では意味解析が終わっていない
    6347  def initialize( cell, option )
    6448    super()
    6549    @cell = cell
    6650    @plugin_arg_str = CDLString.remove_dquote option
    67     # @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' )    # 前後の "" を取り除く
     51    # @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' )    # 前後の "" を取り除く
    6852    # @plugin_arg_str.sub!( /(.*)"\z/, '\1' )
    6953    @plugin_arg_list = {}
    7054  end
    7155
    72   #=== 後ろの CDL コードを生成
    73   #プラグインの後ろの CDL コードを生成
     56  #=== 後ろの CDL コードを生成
     57  #プラグインの後ろの CDL コードを生成
    7458  #file:: File:
    7559  def self.gen_post_code( file )
    76     # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
     60    # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
    7761    # file.print "/* '#{self.class.name}' post code */\n"
    7862  end
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/CelltypePlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: CelltypePlugin.rb 2061 2014-05-31 22:15:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
    55 #== celltype プラグインのå
    56 ±é€šã®è¦ªã‚¯ãƒ©ã‚¹
     40#== celltype プラグインの共通の親クラス
    5741class CelltypePlugin < Plugin
    5842
    59   #celltype::     Celltype        セルタイプ(インスタンス)
     43  #celltype::     Celltype        セルタイプ(インスタンス)
    6044  def initialize( celltype, option )
    6145    super()
    6246    @celltype = celltype
    63     # @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' )    # 前後の "" を取り除く
     47    # @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' )    # 前後の "" を取り除く
    6448    # @plugin_arg_str.sub!( /(.*)"\z/, '\1' )
    6549    @plugin_arg_str = CDLString.remove_dquote option
     
    6751  end
    6852
    69   #=== 新しいセル
    70   #cell::        Cell            セル
     53  #=== 新しいセル
     54  #cell::        Cell            セル
    7155  #
    72   # celltype プラグインを指定されたセルタイプのセルが生成された
    73   # セルタイププラグインに対する新しいセルの報告
     56  # celltype プラグインを指定されたセルタイプのセルが生成された
     57  # セルタイププラグインに対する新しいセルの報告
    7458  def new_cell( cell )
    7559  end
    7660
    7761
    78   #=== tCelltype_factory.h に挿å
    79 ¥ã™ã‚‹ã‚³ãƒ¼ãƒ‰ã‚’生成する
    80   # file 以外の他のファイルにファクトリコードを生成してもよい
    81   # セルタイププラグインが指定されたセルタイプのみ呼び出される
     62  #=== tCelltype_factory.h に挿入するコードを生成する
     63  # file 以外の他のファイルにファクトリコードを生成してもよい
     64  # セルタイププラグインが指定されたセルタイプのみ呼び出される
    8265  def gen_factory file
    8366  end
    8467
    85   #=== 後ろの CDL コードを生成
    86   #プラグインの後ろの CDL コードを生成
     68  #=== 後ろの CDL コードを生成
     69  #プラグインの後ろの CDL コードを生成
    8770  #file:: File:
    8871  def self.gen_post_code( file )
    89     # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
     72    # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
    9073    # file.print "/* '#{self.class.name}' post code */\n"
    9174  end
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/DomainPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: TracePlugin.rb 2032 2014-03-16 12:10:58Z okuma-top $
     37#   $Id$
    5338#++
    5439
    55 #== ドメインプラグインの親クラス
     40#== ドメインプラグインの親クラス
    5641class DomainPlugin < Plugin
    5742
    58   #== domain 指定されたリージョンが定義された
    59   # region で domain 指定があった
    60   #domain_type_name::Symbol : domain 指定子の第一引数
    61   #option::String : domain 指定子の第二引数
     43  #== domain 指定されたリージョンが定義された
     44  # region で domain 指定があった
     45  #domain_type_name::Symbol : domain 指定子の第一引数
     46  #option::String : domain 指定子の第二引数
    6247  def initialize( region, domain_type_name, option )
    6348  end
    6449
    65   #== 結合 join にプラグインを挿å
    66 ¥ã™ã‚‹
    67   #join::Join : 結合に関するæƒ
    68 å ±
    69   #return::[ plugin_name::String, option::String ]: 挿å
    70 ¥ã™ã‚‹ãƒ—ラグイン。 挿å
    71 ¥ã™ã‚‹ã‚‚のがなければ nil を返す
     50  #== 結合 join にプラグインを挿入する
     51  #join::Join : 結合に関する情報
     52  #return::[ plugin_name::String, option::String ]: 挿入するプラグイン。 挿入するものがなければ nil を返す
    7253  #return::(1) [ plugin_name, option ] or (2) [[ plugin_name, option ], ...], or [] or nil:  (2): not supported now
    73   #   nil: region 間の結合禁止, []: region 間の結合可(プラグイン挿å
    74 ¥ç„¡ã—)
    75   #   [ plugin_name, option ]: *_through( plugin_name, option ) 指定したのと同等
     54  #   nil: region 間の結合禁止, []: region 間の結合可(プラグイン挿入無し)
     55  #   [ plugin_name, option ]: *_through( plugin_name, option ) 指定したのと同等
    7656  #
    77   # region 間の through が指定されている場合、out_through, to_through
    78   # では、それらによって指定されたプラグインの後ろに、in_through の場合
    79   # in_through プラグインの前に挿å
    80 ¥ã•ã‚Œã‚‹
     57  # region 間の through が指定されている場合、out_through, to_through
     58  # では、それらによって指定されたプラグインの後ろに、in_through の場合
     59  # in_through プラグインの前に挿入される
    8160  #
    82   # このメソッドが呼出された時点では Join#get_rhs_cell など意味解析後
    83   # にしか呼び出せないメソッドを呼出しても、有効な値は得られない
     61  # このメソッドが呼出された時点では Join#get_rhs_cell など意味解析後
     62  # にしか呼び出せないメソッドを呼出しても、有効な値は得られない
    8463  #
    8564  def add_through_plugin( join, current_region, next_region, through_type )
    86     # join.get_owner:Cell  左辺のセル
    87     # join.get_definition:Port 呼び口
    88     # join.get_subscript:Integer or nil 呼び口é
    89 åˆ—の添数 (Join::@subscript の説明参ç
    90 §)
    91     # join.get_cell:Cell 右辺のセル
    92     # join.get_port_name:Symbol 受け口
    93     # get_rhs_subscript:Integer or nil 受け口é
    94 åˆ—の添数 (Join::@rhs_subscript の説明参ç
    95 §)
     65    # join.get_owner:Cell  左辺のセル
     66    # join.get_definition:Port 呼び口
     67    # join.get_subscript:Integer or nil 呼び口配列の添数 (Join::@subscript の説明参照)
     68    # join.get_cell:Cell 右辺のセル
     69    # join.get_port_name:Symbol 受け口
     70    # get_rhs_subscript:Integer or nil 受け口配列の添数 (Join::@rhs_subscript の説明参照)
    9671    # return []
    9772    return nil
    9873  end
    9974
    100   #== require が結合可能か?
     75  #== require が結合可能か?
    10176  def joinable?(current_region, next_region, through_type )
    10277    return false
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/HRP2AlarmHandlerPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2012 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#++
     
    5439#require "HRP2KernelObjectPlugin"
    5540require_tecsgen_lib "HRP2KernelObjectPlugin.rb"
    56 #== celltype プラグインのå
    57 ±é€šã®è¦ªã‚¯ãƒ©ã‚¹
     41#== celltype プラグインの共通の親クラス
    5842class HRP2AlarmHandlerPlugin < HRP2KernelObjectPlugin
    5943    @@ep = [:eStartAlarm, :eStopAlarm, :eManageAlarm, :eReferAlarm ]
     
    6650    def print_cfg_cre(file, cell, val, tab)
    6751        val[:id] = val[:id].gsub( /(^|[^\$])\$id\$/, "\\1#{@celltype.get_name.to_s}_#{cell.get_name.to_s}" )
    68         # $cbp$の代わり
     52        # $cbp$の代わり
    6953        index = cell.get_id - @celltype.get_id_base
    7054        cell_CB_name = "#{@celltype.get_global_name}_CB_tab[#{index}]"
    71         # CRE_XXXの生成
     55        # CRE_XXXの生成
    7256        if (cell.get_region.get_region_type != :DOMAIN) || (cell.get_region.get_param != :KERNEL_DOMAIN)
    73             # 無所属 or ユーザドメインに属する場合
     57            # 無所属 or ユーザドメインに属する場合
    7458                raise "alarm handler #{val[:id]} must belong to kernel domain."
    7559        else
     
    8468    end
    8569
    86     #tAlarmの受け口リスト
     70    #tAlarmの受け口リスト
    8771    def get_entry_ports_name_list()
    8872        @@ep
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/HRP2Cache.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/HRP2CyclicHandlerPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2012 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#++
     
    5540require_tecsgen_lib "HRP2KernelObjectPlugin.rb"
    5641
    57 #== celltype プラグインのå
    58 ±é€šã®è¦ªã‚¯ãƒ©ã‚¹
     42#== celltype プラグインの共通の親クラス
    5943class HRP2CyclicHandlerPlugin < HRP2KernelObjectPlugin
    6044    @@ep = [:eStartCyclic, :eStopCyclic, :eManageCyclic, :eReferCyclic ]
     
    6751    def print_cfg_cre(file, cell, val, tab)
    6852        val[:id] = val[:id].gsub( /(^|[^\$])\$id\$/, "\\1#{@celltype.get_name.to_s}_#{cell.get_name.to_s}" )
    69         # $cbp$の代わり
     53        # $cbp$の代わり
    7054        index = cell.get_id - @celltype.get_id_base
    7155        cell_CB_name = "#{@celltype.get_global_name}_CB_tab[#{index}]"
    72         # CRE_XXXの生成
     56        # CRE_XXXの生成
    7357        if (cell.get_region.get_region_type != :DOMAIN) || (cell.get_region.get_param != :KERNEL_DOMAIN)
    74             # 無所属 or ユーザドメインに属する場合
     58            # 無所属 or ユーザドメインに属する場合
    7559                raise "cyclic handler #{val[:id]} must belong to kernel domain."
    7660        else
     
    8569    end
    8670
    87     #tCyclicHandlerの受け口リスト
     71    #tCyclicHandlerの受け口リスト
    8872    def get_entry_ports_name_list()
    8973        @@ep
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/HRP2DataqueuePlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2012 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#++
     
    5944    @@ep = [:eSendDataqueue, :eReceiveDataqueue, :eManageDataqueue, :eReferDataqueue ]
    6045    #=== HRP2DataqueuePlugin#print_cfg_cre
    61     # CRE_DTQの出力
    62     # file:: FILE:     å‡ºåŠ›å
    63 ˆãƒ•ã‚¡ã‚¤ãƒ«
    64     # val :: string:   ã‚«ãƒ¼ãƒãƒ«ã‚ªãƒ–ジェクトの属性の解析結果
    65     # tab :: string:   ã‚¤ãƒ³ãƒ‡ãƒ³ãƒˆç”¨ã®tab
     46    # CRE_DTQの出力
     47    # file:: FILE:     出力先ファイル
     48    # val :: string:   カーネルオブジェクトの属性の解析結果
     49    # tab :: string:   インデント用のtab
    6650    def print_cfg_cre(file, cell, val, tab)
    6751        file.print tab
     
    6953    end
    7054    #=== HRP2DataqueuePlugin#print_cfg_sac
    71     # SAC_DTQの出力
    72     # file:: FILE:     å‡ºåŠ›å
    73 ˆãƒ•ã‚¡ã‚¤ãƒ«
    74     # val :: string:   ã‚«ãƒ¼ãƒãƒ«ã‚ªãƒ–ジェクトの属性の解析結果
    75     # acv :: string:   ã‚¢ã‚¯ã‚»ã‚¹ãƒ™ã‚¯ã‚¿   
     55    # SAC_DTQの出力
     56    # file:: FILE:     出力先ファイル
     57    # val :: string:   カーネルオブジェクトの属性の解析結果
     58    # acv :: string:   アクセスベクタ   
    7659    def print_cfg_sac(file, val, acv)
    7760        file.puts "SAC_DTQ(#{val[:id]}, {#{acv[0]}, #{acv[1]}, #{acv[2]}, #{acv[3]}});"
    7861    end
    79     #tDataqueueの受け口リスト
     62    #tDataqueueの受け口リスト
    8063    def get_entry_ports_name_list()
    8164        @@ep
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/HRP2EventflagPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2012 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#++
     
    5944    @@ep = [:eSetEventflag, :eWaitEventflag, :eManageEventflag, :eReferEventflag ]
    6045    #=== HRP2EventflagPlugin#print_cfg_cre
    61     # CRE_FLGの出力
    62     # file:: FILE:     å‡ºåŠ›å
    63 ˆãƒ•ã‚¡ã‚¤ãƒ«
    64     # val :: string:   ã‚«ãƒ¼ãƒãƒ«ã‚ªãƒ–ジェクトの属性の解析結果
    65     # tab :: string:   ã‚¤ãƒ³ãƒ‡ãƒ³ãƒˆç”¨ã®tab
     46    # CRE_FLGの出力
     47    # file:: FILE:     出力先ファイル
     48    # val :: string:   カーネルオブジェクトの属性の解析結果
     49    # tab :: string:   インデント用のtab
    6650    def print_cfg_cre(file, cell, val, tab)
    6751        file.print tab
     
    6953    end
    7054    #=== HRP2EventflagPlugin#print_cfg_sac
    71     # SAC_FLGの出力
    72     # file:: FILE:     å‡ºåŠ›å
    73 ˆãƒ•ã‚¡ã‚¤ãƒ«
    74     # val :: string:   ã‚«ãƒ¼ãƒãƒ«ã‚ªãƒ–ジェクトの属性の解析結果
    75     # acv :: string:   ã‚¢ã‚¯ã‚»ã‚¹ãƒ™ã‚¯ã‚¿   
     55    # SAC_FLGの出力
     56    # file:: FILE:     出力先ファイル
     57    # val :: string:   カーネルオブジェクトの属性の解析結果
     58    # acv :: string:   アクセスベクタ   
    7659    def print_cfg_sac(file, val, acv)
    7760        file.puts "SAC_FLG(#{val[:id]}, {#{acv[0]}, #{acv[1]}, #{acv[2]}, #{acv[3]}});"
    7861    end
    79     #tEventflagの受け口リスト
     62    #tEventflagの受け口リスト
    8063    def get_entry_ports_name_list()
    8164        @@ep
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/HRP2FixedSizeMemoryPoolPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2012 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#++
     
    5944    @@ep = [:eSendFixedSizeMemoryPool, :eReceiveFixedSizeMemoryPool, :eManageFixedSizeMemoryPool, :eReferFixedSizeMemoryPool ]
    6045    #=== HRP2FixedSizeMemoryPoolPlugin#print_cfg_cre
    61     # CRE_MPFの出力
    62     # file:: FILE:     å‡ºåŠ›å
    63 ˆãƒ•ã‚¡ã‚¤ãƒ«
    64     # val :: string:   ã‚«ãƒ¼ãƒãƒ«ã‚ªãƒ–ジェクトの属性の解析結果
    65     # tab :: string:   ã‚¤ãƒ³ãƒ‡ãƒ³ãƒˆç”¨ã®tab
     46    # CRE_MPFの出力
     47    # file:: FILE:     出力先ファイル
     48    # val :: string:   カーネルオブジェクトの属性の解析結果
     49    # tab :: string:   インデント用のtab
    6650    def print_cfg_cre(file, cell, val, tab)
    6751        file.print tab
     
    6953    end
    7054    #=== HRP2FixedSizeMemoryPoolPlugin#print_cfg_sac
    71     # SAC_MPFの出力
    72     # file:: FILE:     å‡ºåŠ›å
    73 ˆãƒ•ã‚¡ã‚¤ãƒ«
    74     # val :: string:   ã‚«ãƒ¼ãƒãƒ«ã‚ªãƒ–ジェクトの属性の解析結果
    75     # acv :: string:   ã‚¢ã‚¯ã‚»ã‚¹ãƒ™ã‚¯ã‚¿   
     55    # SAC_MPFの出力
     56    # file:: FILE:     出力先ファイル
     57    # val :: string:   カーネルオブジェクトの属性の解析結果
     58    # acv :: string:   アクセスベクタ   
    7659    def print_cfg_sac(file, val, acv)
    7760        file.puts "SAC_MPF(#{val[:id]}, {#{acv[0]}, #{acv[1]}, #{acv[2]}, #{acv[3]}});"
    7861    end
    79     #tFixedSizeMemoryPoolの受け口リスト
     62    #tFixedSizeMemoryPoolの受け口リスト
    8063    def get_entry_ports_name_list()
    8164        @@ep
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/HRP2HandlerPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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#++
     
    5641
    5742
    58 #== celltype プラグインのå
    59 ±é€šã®è¦ªã‚¯ãƒ©ã‚¹
     43#== celltype プラグインの共通の親クラス
    6044class HRP2HandlerPlugin < HRP2KernelObjectPlugin
    6145    @@ep = [:eStartAlarm, :eStopAlarm, :eManageAlarm, :eReferAlarm ]
     
    6852    def print_cfg_cre(file, cell, val, tab)
    6953        val[:id] = val[:id].gsub( /(^|[^\$])\$id\$/, "\\1#{@celltype.get_name.to_s}_#{cell.get_name.to_s}" )
    70         # $cbp$の代わり
     54        # $cbp$の代わり
    7155        index = cell.get_id - @celltype.get_id_base
    7256        cell_CB_name = "#{@celltype.get_global_name}_CB_tab[#{index}]"
    73         # CRE_XXXの生成
     57        # CRE_XXXの生成
    7458        domainOption = cell.get_region.get_domain_root.get_domain_type.get_option
    7559        # if (cell.get_region.get_region_type != :DOMAIN) || (cell.get_region.get_param != :KERNEL_DOMAIN)
    7660        if (domainOption == "OutOfDomain") || (domainOption != "trusted")
    77             # 無所属 or ユーザドメインに属する場合
     61            # 無所属 or ユーザドメインに属する場合
    7862                raise "#{@plugin_arg_str.to_s.downcase} handler #{val[:id]} must belong to kernel domain."
    7963        elsif @plugin_arg_str == "ALARM"
     
    10185
    10286=begin
    103     #tAlarmの受け口リスト
     87    #tAlarmの受け口リスト
    10488    def get_entry_ports_name_list()
    10589        @@ep
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/HRP2KernelObjectPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2012 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#++
    5338
    54 # Regionクラスにメソッドを追加
     39# Regionクラスにメソッドを追加
    5540=begin
    5641class Region
     
    6954=end
    7055
    71 # Cellクラスにインスタンス変数とメソッドを追加
     56# Cellクラスにインスタンス変数とメソッドを追加
    7257=begin
    7358class Cell
     
    8570    end
    8671
    87     # set_referenced_cellにしたほうがよい
     72    # set_referenced_cellにしたほうがよい
    8873    # def set_referenced_region( region, port_name )
    8974    def set_referenced_cell( cell, port_name )
     
    139124=end
    140125
    141 #== celltype プラグインのå
    142 ±é€šã®è¦ªã‚¯ãƒ©ã‚¹
     126#== celltype プラグインの共通の親クラス
    143127class HRP2KernelObjectPlugin < CelltypePlugin
    144128    # @@obj_hash = {}
    145129
    146130    #@celltype:: Celltype
    147     #@option:: String     :オプション文字列
     131    #@option:: String     :オプション文字列
    148132    def initialize( celltype, option )
    149133        super
    150         # それぞれのカーネルオブジェクトを解析対象セルタイプに追加
     134        # それぞれのカーネルオブジェクトを解析対象セルタイプに追加
    151135        HRP2KernelObjectPlugin.set_celltype(celltype)
    152136    end
    153137 
    154138    #=== HRP2KernelObjectPlugin#print_cfg_cre
    155     # 各種カーネルオブジェクトのCRE_*の出力
    156     # file:: FILE:     å‡ºåŠ›å
    157 ˆãƒ•ã‚¡ã‚¤ãƒ«
    158     # val :: string:   ã‚«ãƒ¼ãƒãƒ«ã‚ªãƒ–ジェクトの属性の解析結果
    159     # tab :: string:   ã‚¤ãƒ³ãƒ‡ãƒ³ãƒˆç”¨ã®tab
     139    # 各種カーネルオブジェクトのCRE_*の出力
     140    # file:: FILE:     出力先ファイル
     141    # val :: string:   カーネルオブジェクトの属性の解析結果
     142    # tab :: string:   インデント用のtab
    160143    def print_cfg_cre(file, cell, val, tab)
    161144        raise "called virtual method print_cfg_cre in #{@celltype.get_name} plugin"
     
    163146 
    164147    #=== HRP2KernelObjectPlugin#print_cfg_sac
    165     # 各種カーネルオブジェクトのSAC_*の出力
    166     # file:: FILE:     å‡ºåŠ›å
    167 ˆãƒ•ã‚¡ã‚¤ãƒ«
    168     # val :: string:   ã‚«ãƒ¼ãƒãƒ«ã‚ªãƒ–ジェクトの属性の解析結果
    169     # acv :: string:   ã‚¢ã‚¯ã‚»ã‚¹ãƒ™ã‚¯ã‚¿
     148    # 各種カーネルオブジェクトのSAC_*の出力
     149    # file:: FILE:     出力先ファイル
     150    # val :: string:   カーネルオブジェクトの属性の解析結果
     151    # acv :: string:   アクセスベクタ
    170152    def print_cfg_sac(file, val, acv)
    171153        raise "called virtual method print_cfg_sac in #{@celltype.get_name} plugin"
     
    173155 
    174156    #=== HRP2KernelObjectPlugin#get_entry_ports_name_list
    175     # カーネルオブジェクトの各種アクセスの種別の受け口名を取得
     157    # カーネルオブジェクトの各種アクセスの種別の受け口名を取得
    176158    def get_entry_ports_name_list()
    177159        raise "called virtual method get_entry_ports_name_list in #{@celltype.get_name} plugin"
     
    185167        puts "===== begin #{@celltype.get_name.to_s} plugin ====="
    186168
    187         # 対象となるすべてのセルについて、受け口に結合されている
    188         # セルの所属ドメインを解析
     169        # 対象となるすべてのセルについて、受け口に結合されている
     170        # セルの所属ドメインを解析
    189171        if !HRP2KernelObjectPlugin.isChecked()
    190172            HRP2KernelObjectPlugin.check_referenced_cells()
     
    193175        end
    194176
    195         # 追記するために AppFile を使う(文字コード変換されない)
     177        # 追記するために AppFile を使う(文字コード変換されない)
    196178        file2 = AppFile.open( "#{$gen}/tecsgen.cfg" )
    197179        file2.print "\n/* Generated by #{self.class.name} */\n\n"
     
    200182            if cell.is_generate?
    201183                puts "===== begin check my domain #{cell.get_name} ====="
    202                 # attrの値をハッシュにå
    203 ¥ã‚Œã‚‹
     184                # attrの値をハッシュに入れる
    204185                val = {}
    205186                @celltype.get_attribute_list.each{ |a|
     
    208189                        val[a.get_name] = []
    209190                        if j = cell.get_join_list.get_item(a.get_name)
    210                             # セル生成時に初期化する場合
     191                            # セル生成時に初期化する場合
    211192                            j.get_rhs.each { |elem|
    212193                                val[a.get_name] << elem.to_s
    213194                            }
    214195                        elsif i = a.get_initializer
    215                             # セルタイプの初期化値を使う場合
     196                            # セルタイプの初期化値を使う場合
    216197                            i.each { |elem|
    217198                                val[a.get_name] << elem.to_s
     
    222203                    else
    223204                        if j = cell.get_join_list.get_item(a.get_name)
    224                             # セル生成時に初期化する場合
     205                            # セル生成時に初期化する場合
    225206                            val[a.get_name] = j.get_rhs.to_s
    226207                        elsif i = a.get_initializer
    227                             # セルタイプの初期化値を使う場合
     208                            # セルタイプの初期化値を使う場合
    228209                            val[a.get_name] = i.to_s
    229210                        else
     
    232213                    end
    233214                }
    234                 # generate.rbを参考に
    235                 # $id$を置換
     215                # generate.rbを参考に
     216                # $id$を置換
    236217                if val[:id].nil? != true
    237218                    puts val[:id]
    238219                    val[:id] = val[:id].gsub( /(^|[^\$])\$id\$/, "\\1#{@celltype.get_name.to_s}_#{cell.get_name.to_s}" )
    239220                end
    240                 # $cbp$の代わり
     221                # $cbp$の代わり
    241222                index = cell.get_id - @celltype.get_id_base
    242223                cell_CB_name = "#{@celltype.get_global_name}_CB_tab[#{index}]"
     
    244225                cell_domain_type = cell.get_region.get_domain_root.get_domain_type
    245226
    246                 # CRE_XXX/DEF_XXXの生成
     227                # CRE_XXX/DEF_XXXの生成
    247228                if cell_domain_type.get_option.to_s != "OutOfDomain"
    248                     # 保護ドメインに属する場合
     229                    # 保護ドメインに属する場合
    249230                    if !HRP2KernelObjectPlugin.include_region(cell_domain_root.get_name.to_s)
    250                         # その保護ドメインの.cfgが生成されていない場合
     231                        # その保護ドメインの.cfgが生成されていない場合
    251232                        HRP2KernelObjectPlugin.set_region_list(cell_domain_root.get_name.to_s)
    252233                        puts "~~~~~ #{cell_domain_root.get_name.to_s} is registered!"
     
    269250                    file3.close
    270251                else
    271                     # 無所属の場合
     252                    # 無所属の場合
    272253                    puts "~~~~~ #{cell_domain_root.get_name.to_s} is OutOfDomain"
    273254                    print_cfg_cre(file2, cell, val, "")
     
    275256
    276257                puts "===== end check my domain #{cell.get_name} ====="
    277                 # SAC_XXXの生成
     258                # SAC_XXXの生成
    278259                puts "===== begin check regions #{cell.get_name} ====="
    279260                p val[:accessPattern]
     
    281262
    282263                #ep = [ :eTaskActivate, :eTaskControl, :eTaskManage, :eTaskRefer ]
    283                 #各カーネルオブジェクトの受け口名を取得
     264                #各カーネルオブジェクトの受け口名を取得
    284265                # ep = get_entry_ports_name_list()
    285266                i = 0
    286267                acv = []
    287                 # アクセス許可ベクタの生成
     268                # アクセス許可ベクタの生成
    288269                val[:accessPattern].each { |acptnx|
    289                     # アクセス許可パターンの生成
     270                    # アクセス許可パターンの生成
    290271                    if acptnx != "OMIT"
    291272                        acv << acptnx
     
    306287                p acv
    307288
    308                 #各種SACの生成
     289                #各種SACの生成
    309290                domainOption = cell_domain_type.get_option
    310291                # if cell.get_region.get_region_type == :DOMAIN
    311292                if domainOption != "OutOfDomain"
    312                     # 保護ドメインに属する場合
     293                    # 保護ドメインに属する場合
    313294                    file3 = AppFile.open( "#{$gen}/tecsgen_#{cell.get_region.get_name.to_s}.cfg" )
    314295                    print_cfg_sac(file3, val, acv)
    315296                    file3.close
    316297                else
    317                     # 無所属の場合
     298                    # 無所属の場合
    318299                    print_cfg_sac(file2, val, acv)
    319300                end
     
    327308    end
    328309
    329     # カーネルオブジェクトセルタイプの管理
    330     # HRP2KernelObjectPluginクラスに対してメソッド呼出しを行うことを想定
     310    # カーネルオブジェクトセルタイプの管理
     311    # HRP2KernelObjectPluginクラスに対してメソッド呼出しを行うことを想定
    331312    @@checked = false
    332313    @@celltype_list = []
     
    351332                printf "===== check call port : "
    352333                p p.get_name.to_s
    353                 next if j.nil? # 未結合の場合
     334                next if j.nil? # 未結合の場合
    354335                if @@celltype_list.include?(j.get_celltype)
    355336                    # j.get_cell.set_referenced_region(cell.get_region)
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/HRP2ObjectPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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#++
     
    6954
    7055    #=== HRP2SemaphorePlugin#print_cfg_cre
    71     # CRE_SEMの出力
    72     # file:: FILE:     å‡ºåŠ›å
    73 ˆãƒ•ã‚¡ã‚¤ãƒ«
    74     # val :: string:   ã‚«ãƒ¼ãƒãƒ«ã‚ªãƒ–ジェクトの属性の解析結果
    75     # tab :: string:   ã‚¤ãƒ³ãƒ‡ãƒ³ãƒˆç”¨ã®tab
     56    # CRE_SEMの出力
     57    # file:: FILE:     出力先ファイル
     58    # val :: string:   カーネルオブジェクトの属性の解析結果
     59    # tab :: string:   インデント用のtab
    7660    def print_cfg_cre(file, cell, val, tab)
    7761        if @@api.has_key?(@plugin_arg_str) == false
     
    8771    end
    8872    #=== HRP2SemaphorePlugin#print_cfg_sac
    89     # SAC_SEMの出力
    90     # file:: FILE:     å‡ºåŠ›å
    91 ˆãƒ•ã‚¡ã‚¤ãƒ«
    92     # val :: string:   ã‚«ãƒ¼ãƒãƒ«ã‚ªãƒ–ジェクトの属性の解析結果
    93     # acv :: string:   ã‚¢ã‚¯ã‚»ã‚¹ãƒ™ã‚¯ã‚¿   
     73    # SAC_SEMの出力
     74    # file:: FILE:     出力先ファイル
     75    # val :: string:   カーネルオブジェクトの属性の解析結果
     76    # acv :: string:   アクセスベクタ   
    9477    def print_cfg_sac(file, val, acv)
    9578        if @@api.has_key?(@plugin_arg_str) == false
     
    10386
    10487=begin
    105     #tSemaphoreの受け口リスト
     88    #tSemaphoreの受け口リスト
    10689    def get_entry_ports_name_list()
    10790        @@ep
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/HRP2Plugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2014 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#++
    5338
    5439#
    55 # 各メソッドの役割りは、DomainPlugin.rb を参ç
    56 §ã®ã“と
    57 # HRP2カーネル用ドメインプラグイン
     40# 各メソッドの役割りは、DomainPlugin.rb を参照のこと
     41# HRP2カーネル用ドメインプラグイン
    5842class HRP2Plugin < DomainPlugin
    5943
     
    6347
    6448  def add_through_plugin( join, current_region, next_region, through_type )
    65     # join.get_owner:Cell  左辺のセル
    66     # join.get_definition:Port 呼び口
    67     # join.get_subscript:Integer or nil 呼び口é
    68 åˆ—の添数 (Join::@subscript の説明参ç
    69 §)
    70     # join.get_cell:Cell 右辺のセル
    71     # join.get_port_name:Symbol 受け口
    72     # get_rhs_subscript:Integer or nil 受け口é
    73 åˆ—の添数 (Join::@rhs_subscript の説明参ç
    74 §)
     49    # join.get_owner:Cell  左辺のセル
     50    # join.get_definition:Port 呼び口
     51    # join.get_subscript:Integer or nil 呼び口配列の添数 (Join::@subscript の説明参照)
     52    # join.get_cell:Cell 右辺のセル
     53    # join.get_port_name:Symbol 受け口
     54    # get_rhs_subscript:Integer or nil 受け口配列の添数 (Join::@rhs_subscript の説明参照)
    7555    # return []
    7656    print "MyDomainPlugin: add_through_plugin: #{current_region.get_name}=>#{next_region.get_name}, #{join.get_owner.get_name}.#{join.get_definition.get_name}=>#{join.get_cell.get_name}.#{join.get_port_name}, #{through_type}\n"
     
    8969
    9070    if HRP2KernelObjectPlugin.include_celltype?(join.get_cell.get_celltype)
    91         # 結合å
    92 ˆãŒã‚«ãƒ¼ãƒãƒ«ã‚ªãƒ–ジェクトセル
     71        # 結合先がカーネルオブジェクトセル
    9372        # @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
    94         # 何もしないthrough
     73        # 何もしないthrough
    9574        puts "***** #{join.get_cell.get_celltype.get_name} is kernel object"
    9675        return []
     
    10079    # elsif next_domain.nil?
    10180    elsif next_domain.get_option.to_s == "OutOfDomain"
    102     #     # 結合å
    103 ˆãŒç„¡æ‰€å±ž
    104     #     # 何もしないthrough
     81    #     # 結合先が無所属
     82    #     # 何もしないthrough
    10583    #     # @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
    10684        puts "***** nil"
     
    10987    #elsif @start_region.get_param != :KERNEL_DOMAIN && @end_region.get_param == :KERNEL_DOMAIN
    11088    elsif current_domain.get_option.to_s != "trusted" && next_domain.get_option.to_s == "trusted"
    111         # ユーザドメインからカーネルドメインへの結合
     89        # ユーザドメインからカーネルドメインへの結合
    11290        # @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
    11391        puts "***** svc"
    11492        return [ :HRP2SVCPlugin, "" ]
    11593    elsif current_domain != next_domain
    116         # ユーザドメインから別のユーザドメインへの結合
     94        # ユーザドメインから別のユーザドメインへの結合
    11795        # @plugin_body = HRP2RPCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
    11896        puts "***** rpc"
    11997        return [ :HRP2RPCPlugin, "channelCelltype=tMessagebufferChannel,noClientSemaphore=true" ]
    12098    else
    121         # その他
    122         # 何もしないthrough
     99        # その他
     100        # 何もしないthrough
    123101        # @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
    124102        print "warning: at HRP2 Join Check"
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/HRP2PostHook.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2012 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#++
     
    6348
    6449    def generate
    65         # カーネルオブジェクトのセルタイプはメモリ保護しない
     50        # カーネルオブジェクトのセルタイプはメモリ保護しない
    6651#=begin
    67         # TODO: テストのために無効化
     52        # TODO: テストのために無効化
    6853        if HRP2KernelObjectPlugin.include_celltype?( @celltype )
    6954            puts "nothing is generated for kernel object component"
     
    7459        rlist = @celltype.get_region_list
    7560        if @celltype.is_singleton?
    76             # singletonの場合
     61            # singletonの場合
    7762            puts "<singleton>"
    7863
     
    8267                file = AppFile.open( "#{$gen}/tecsgen_#{rlist[0].get_param.to_s}.cfg" )
    8368            end
    84             # セル管理ブロックとスケルトンのメモリ保護
     69            # セル管理ブロックとスケルトンのメモリ保護
    8570            file.print "ATT_MOD(\"#{@celltype.get_global_name}_tecsgen.o\");\n"
    8671            if !@celltype.is_all_entry_inline?
    87                 # セルタイプコードのメモリ保護
     72                # セルタイプコードのメモリ保護
    8873                file.print "ATT_MOD(\"#{@celltype.get_global_name}.o\");\n"
    8974            end
     
    9277
    9378        else
    94             # singletonでない場合
     79            # singletonでない場合
    9580            puts "<non-singleton>"
    9681
    97             # スケルトンとセルタイプコードの保護
     82            # スケルトンとセルタイプコードの保護
    9883            if (rlist.length == 1) &&
    9984                (@celltype.get_n_cell_gen == @celltype.get_n_cell_gen_r( rlist[0] ))
    100                 # 所属する保護ドメインが1つの場合
     85                # 所属する保護ドメインが1つの場合
    10186                puts "<private celltype>"
    10287                file = AppFile.open( "#{$gen}/tecsgen_#{rlist[0].get_param.to_s}.cfg" )
    10388            else
    104                 # 無所属 or 所属する保護ドメインが複数の場合
     89                # 無所属 or 所属する保護ドメインが複数の場合
    10590                puts "<shared celltype>"
    10691                file = AppFile.open( "#{$gen}/tecsgen.cfg" )
    10792            end
    10893
    109             # スケルトンのメモリ保護
     94            # スケルトンのメモリ保護
    11095            file.print "ATT_MOD(\"#{@celltype.get_global_name}_tecsgen.o\");\n"
    11196            if !@celltype.is_all_entry_inline?
    112                 # セルタイプコードのメモリ保護
     97                # セルタイプコードのメモリ保護
    11398                file.print "ATT_MOD(\"#{@celltype.get_global_name}.o\");\n"
    11499            end
    115100            file.close
    116101
    117             # セル管理ブロックの保護
     102            # セル管理ブロックの保護
    118103            rlist.each { |reg|
    119104                file = AppFile.open( "#{$gen}/tecsgen_#{reg.get_param.to_s}.cfg" )
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/HRP2PriorityDataqueuePlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2012 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#++
     
    5742    @@ep = [:eSendPriorityDataqueue, :eReceivePriorityDataqueue, :eManagePriorityDataqueue, :eReferPriorityDataqueue ]
    5843    #=== HRP2PriorityDataqueuePlugin#print_cfg_cre
    59     # CRE_PDQの出力
    60     # file:: FILE:     å‡ºåŠ›å
    61 ˆãƒ•ã‚¡ã‚¤ãƒ«
    62     # val :: string:   ã‚«ãƒ¼ãƒãƒ«ã‚ªãƒ–ジェクトの属性の解析結果
    63     # tab :: string:   ã‚¤ãƒ³ãƒ‡ãƒ³ãƒˆç”¨ã®tab
     44    # CRE_PDQの出力
     45    # file:: FILE:     出力先ファイル
     46    # val :: string:   カーネルオブジェクトの属性の解析結果
     47    # tab :: string:   インデント用のtab
    6448    def print_cfg_cre(file, cell, val, tab)
    6549        file.print tab
     
    6751    end
    6852    #=== HRP2PriorityDataqueuePlugin#print_cfg_sac
    69     # SAC_PDQの出力
    70     # file:: FILE:     å‡ºåŠ›å
    71 ˆãƒ•ã‚¡ã‚¤ãƒ«
    72     # val :: string:   ã‚«ãƒ¼ãƒãƒ«ã‚ªãƒ–ジェクトの属性の解析結果
    73     # acv :: string:   ã‚¢ã‚¯ã‚»ã‚¹ãƒ™ã‚¯ã‚¿   
     53    # SAC_PDQの出力
     54    # file:: FILE:     出力先ファイル
     55    # val :: string:   カーネルオブジェクトの属性の解析結果
     56    # acv :: string:   アクセスベクタ   
    7457    def print_cfg_sac(file, val, acv)
    7558        file.puts "SAC_PDQ(#{val[:id]}, {#{acv[0]}, #{acv[1]}, #{acv[2]}, #{acv[3]}});"
    7659    end
    77     #tPriorityDataqueueの受け口リスト
     60    #tPriorityDataqueueの受け口リスト
    7861    def get_entry_ports_name_list()
    7962        @@ep
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/HRP2RPCPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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#++
     
    5641# require_tecsgen_lib "GenParamCopy.rb"
    5742
    58 #= Transparent RPC プラグイン
    59 # Transparent RPC チャンネルを生成する
    60 # プラグイン引数は以下の RPCPluginArgProc を参ç
    61 §
    62 
    63 # mikan through plugin: namespace が考æ
    64 ®ã•ã‚Œã¦ã„ない
    65 # これを利用する場合、以下のように toppers_jsp.cdl sChannel.cdl を指定するå¿
    66 è¦ãŒã‚ã‚‹
     43#= Transparent RPC プラグイン
     44# Transparent RPC チャンネルを生成する
     45# プラグイン引数は以下の RPCPluginArgProc を参照
     46
     47# mikan through plugin: namespace が考慮されていない
     48# これを利用する場合、以下のように toppers_jsp.cdl sChannel.cdl を指定する必要がある
    6749# tecsgen toppers_jsp.cdl sChannel.cdl your_description.cdl
    6850
    69 # 以下を仮定(制限事é 
    70 ï¼‰
    71 #  呼びå
    72 ƒã€å‘¼ã³å
    73 ˆã®ã‚¨ãƒ³ãƒ‡ã‚£ã‚¢ãƒ³ã€char, short, int_t, long_t, intptr_t のサイズが同じ
    74 #  有符号、無符号でサイズが同じ
     51# 以下を仮定(制限事項)
     52#  呼び元、呼び先のエンディアン、char, short, int_t, long_t, intptr_t のサイズが同じ
     53#  有符号、無符号でサイズが同じ
    7554
    7655#
    77 # RPCを用いたドメイン間通信の
    78 # throughプラグイン
    79 # HRP2ドメインプラグインによって挿å
    80 ¥ã•ã‚Œã‚‹
     56# RPCを用いたドメイン間通信の
     57# throughプラグイン
     58# HRP2ドメインプラグインによって挿入される
    8159#
    8260class HRP2RPCPlugin < ThroughPlugin
     
    8563  # include GenParamCopy
    8664
    87   # RPCPlugin 専用のオプション
    88   TransparentRPCPluginArgProc = RPCPluginArgProc.dup  # 複製を作ってå
    89 ƒã‚’変更しないようにする
     65  # RPCPlugin 専用のオプション
     66  TransparentRPCPluginArgProc = RPCPluginArgProc.dup  # 複製を作って元を変更しないようにする
    9067  TransparentRPCPluginArgProc[ "noClientSemaphore"  ] = Proc.new { |obj,rhs| obj.set_noClientSemaphore rhs }
    9168  TransparentRPCPluginArgProc[ "semaphoreCelltype"  ] = Proc.new { |obj,rhs| obj.set_semaphoreCelltype rhs }
    9269
    93   #=== RPCPlugin の initialize
    94   #  説明は ThroughPlugin (plugin.rb) を参ç
    95 §
     70  #=== RPCPlugin の initialize
     71  #  説明は ThroughPlugin (plugin.rb) を参照
    9672  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell )
    9773    super
     
    10076    initialize_transparent_marshaler cell_name
    10177
    102     # オプション:GenTransparentMarshaler 参ç
    103 §
     78    # オプション:GenTransparentMarshaler 参照
    10479    @plugin_arg_check_proc_tab = TransparentRPCPluginArgProc
    10580    parse_plugin_arg
     
    11186      if @PPAllocatorSize == nil then
    11287        cdl_error( "PPAllocatorSize must be speicified for oneway [in] array" )
    113         # @PPAllocatorSize = 0   # 仮に 0 としておく (cdl の構文エラーを避けるため)
     88        # @PPAllocatorSize = 0   # 仮に 0 としておく (cdl の構文エラーを避けるため)
    11489      end
    11590    end
     
    11893#      if func_decl.get_type.is_oneway? then
    11994#        if ( param_decl.get_size || param_decl.get_count ) && param_decl.get_string then
    120 #          cdl_error( "array of string not supported for oneway function in Transparent RPC" )  # mikan 文字列のé
    121 åˆ—
     95#          cdl_error( "array of string not supported for oneway function in Transparent RPC" )  # mikan 文字列の配列
    12296#        elsif param_decl.get_string == -1 then
    123 #          cdl_error( "length unspecified string is not permited for oneway function in Transparent RPC" )  # mikan 長さ未指定文字列
     97#          cdl_error( "length unspecified string is not permited for oneway function in Transparent RPC" )  # mikan 長さ未指定文字列
    12498#        end
    12599#      end
     
    127101  end
    128102
    129   #=== plugin の宣言コード (celltype の定義) 生成
     103  #=== plugin の宣言コード (celltype の定義) 生成
    130104  def gen_plugin_decl_code( file )
    131105
    132106    ct_name = "#{@ct_name}_#{@channelCelltype}"
    133107
    134     # このセルタイプ(同じシグニチャ)は既に生成されているか?
     108    # このセルタイプ(同じシグニチャ)は既に生成されているか?
    135109    if @@generated_celltype[ ct_name ] == nil then
    136110      @@generated_celltype[ ct_name ] = [ self ]
     
    165139
    166140    f = CFile.open( @rpc_channel_celltype_file_name, "w" )
    167     # 同じå†
    168 å®¹ã‚’二度書く可能性あり (AppFile は不可)
     141    # 同じ内容を二度書く可能性あり (AppFile は不可)
    169142
    170143    f.print <<EOT
     
    222195};
    223196EOT
    224     # mikan stackSize option & 最新 tecs_package 対応
     197    # mikan stackSize option & 最新 tecs_package 対応
    225198
    226199    f.close
    227200  end
    228201
    229   #===  through cell コードを生成
     202  #===  through cell コードを生成
    230203  #
    231204  #
     
    234207    gen_plugin_decl_code( file )
    235208
    236     # セルを探す
     209    # セルを探す
    237210    # path =["::",@next_cell.get_name]
    238211    # cell = Namespace.find( path )
     
    257230    indent_str = "  " * nest
    258231
    259     # #473 が解決された場合、composite リレーアロケータに変更すべき
    260     # アロケータの指定があるか?
     232    # #473 が解決された場合、composite リレーアロケータに変更すべき
     233    # アロケータの指定があるか?
    261234    if cell.get_allocator_list.length > 0 then
    262235
     
    268241
    269242        file.print delim
    270         delim = ",\n#{indent_str}           "        # 最終行には出さない
    271 
    272         if subsc then        # é
    273 åˆ—添数
     243        delim = ",\n#{indent_str}           "        # 最終行には出さない
     244
     245        if subsc then        # 配列添数
    274246          subsc_str = '[#{subsc}]'
    275247        else
     
    277249        end
    278250
    279         eport = "eThroughEntry" #RPCの受け口名に変更
     251        eport = "eThroughEntry" #RPCの受け口名に変更
    280252        file.print  "#{eport}#{subsc_str}.#{func}.#{buf} = #{alloc}"
    281253      end
     
    314286
    315287
    316   #=== プラグイン引数 noClientSemaphore のチェック
     288  #=== プラグイン引数 noClientSemaphore のチェック
    317289  def set_noClientSemaphore rhs
    318290    rhs = rhs.to_sym
     
    326298  end
    327299
    328   #=== プラグイン引数 semaphoreCelltype のチェック
     300  #=== プラグイン引数 semaphoreCelltype のチェック
    329301  def set_semaphoreCelltype rhs
    330302    @semaphoreCelltype = rhs.to_sym
     
    336308  end
    337309
    338   #=== NamespacePath を得る
    339   # 生成するセルの namespace path を生成する
     310  #=== NamespacePath を得る
     311  # 生成するセルの namespace path を生成する
    340312  def get_cell_namespace_path
    341313#    nsp = @region.get_namespace.get_namespace_path
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/HRP2SVCPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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#++
    5338
    54 # mikan through plugin: namespace が考æ
    55 ®ã•ã‚Œã¦ã„ない
    56 # これを利用する場合、以下のように toppers_jsp.cdl sChannel.cdl を指定するå¿
    57 è¦ãŒã‚ã‚‹
     39# mikan through plugin: namespace が考慮されていない
     40# これを利用する場合、以下のように toppers_jsp.cdl sChannel.cdl を指定する必要がある
    5841# tecsgen toppers_jsp.cdl sChannel.cdl your_description.cdl
    5942
    60 # 以下を仮定(制限事é 
    61 ï¼‰
    62 #  呼びå
    63 ƒã€å‘¼ã³å
    64 ˆã®ã‚¨ãƒ³ãƒ‡ã‚£ã‚¢ãƒ³ã€char, short, int_t, long_t, intptr_t のサイズが同じ
    65 #  有符号、無符号でサイズが同じ
     43# 以下を仮定(制限事項)
     44#  呼び元、呼び先のエンディアン、char, short, int_t, long_t, intptr_t のサイズが同じ
     45#  有符号、無符号でサイズが同じ
    6646
    6747class SVCManage
    68     # TODO: デフォルトの拡張サービスコール分を予約しておく
    69     # デフォルトの拡張サービスコール(syslogなど)もコンポーネント化するまで
     48    # TODO: デフォルトの拡張サービスコール分を予約しておく
     49    # デフォルトの拡張サービスコール(syslogなど)もコンポーネント化するまで
    7050    @@id = 20
    7151    @@func_ids = {}
     
    9373
    9474#
    95 # 拡張サービスコールを用いたドメイン間通信の
    96 # throughプラグイン
    97 # HRP2ドメインプラグインによって挿å
    98 ¥ã•ã‚Œã‚‹
     75# 拡張サービスコールを用いたドメイン間通信の
     76# throughプラグイン
     77# HRP2ドメインプラグインによって挿入される
    9978#
    10079class HRP2SVCPlugin < ThroughPlugin
    10180
    102   #=== RPCPlugin の initialize
    103   #  説明は ThroughPlugin (plugin.rb) を参ç
    104 §
     81  #=== RPCPlugin の initialize
     82  #  説明は ThroughPlugin (plugin.rb) を参照
    10583  @@generated_celltype_header = {}
    10684
     
    11694  end
    11795
    118   #=== NamespacePath を得る
    119   # 生成するセルの namespace path を生成する
     96  #=== NamespacePath を得る
     97  # 生成するセルの namespace path を生成する
    12098  def get_cell_namespace_path
    12199#    nsp = @region.get_namespace.get_namespace_path
     
    126104  def gen_plugin_decl_code( file )
    127105
    128     # このセルタイプ(同じシグニチャ)は既に生成されているか?
     106    # このセルタイプ(同じシグニチャ)は既に生成されているか?
    129107    if !HRP2KernelObjectPlugin.include_celltype?(@next_cell.get_celltype)
    130108    if @@generated_celltype[ @ct_name_body ] == nil then
     
    144122    end
    145123
    146     # このセルタイプ(同じシグニチャ)は既に生成されているか?
     124    # このセルタイプ(同じシグニチャ)は既に生成されているか?
    147125    if @@generated_celltype[ @ct_name ] == nil then
    148126        @@generated_celltype[ @ct_name ] = [ self ]
     
    155133EOT
    156134        else
    157             # TODO inlineにした方が効率がよいが,tecsgenの生成したヘッダファイルの
    158             # 読込順のためにエラーとなる
     135            # TODO inlineにした方が効率がよいが,tecsgenの生成したヘッダファイルの
     136            # 読込順のためにエラーとなる
    159137        file2.print <<EOT
    160138celltype #{@ct_name} {
     
    173151
    174152=begin
    175     # TODO: send. receive 対応
     153    # TODO: send. receive 対応
    176154    send_receive = []
    177155    if @signature != nil then
     
    205183  end
    206184
    207   #===  through cell コードを生成
     185  #===  through cell コードを生成
    208186  #
    209187  #
     
    214192
    215193    if !HRP2KernelObjectPlugin.include_celltype?(@next_cell.get_celltype)
    216     # セルを探す
     194    # セルを探す
    217195    # path =["::",@next_cell.get_name]  # mikan namespace
    218196    # cell = Namespace.find( path )
    219197    # cell = Namespace.find( @next_cell.get_namespace_path )
    220198
    221     ##### クライアント側のセルの生成 #####
     199    ##### クライアント側のセルの生成 #####
    222200    # file.print "[domain(HRP2, \"trusted\")]"
    223201    nest = @start_region.gen_region_str_pre file
    224202    nest_str = "  " * nest
    225203
    226     # クライアント側チャンネルの生成
    227     # 拡張サービスコール呼出し
     204    # クライアント側チャンネルの生成
     205    # 拡張サービスコール呼出し
    228206    file.print <<EOT
    229207#{nest_str}  //  Client Side Channel
     
    236214    file.print "\n\n"
    237215
    238     ##### サーバー側のセルの生成 #####
     216    ##### サーバー側のセルの生成 #####
    239217    nest = @end_region.gen_region_str_pre file
    240218    nest_str = "  " * nest
    241219
    242     # サーバー側チャンネルの生成
    243     # 拡張サービスコール本体
     220    # サーバー側チャンネルの生成
     221    # 拡張サービスコール本体
    244222    file.print <<EOT
    245223
     
    260238    else
    261239
    262     ##### クライアント側のセルの生成 #####
     240    ##### クライアント側のセルの生成 #####
    263241    nest = @start_region.gen_region_str_pre file
    264242    nest_str = "  " * nest
    265243
    266     # クライアント側チャンネルの生成
    267     # 拡張サービスコール呼出し
     244    # クライアント側チャンネルの生成
     245    # 拡張サービスコール呼出し
    268246    file.print <<EOT
    269247#{nest_str}  //  Client Side Channel
     
    280258   end
    281259
    282   #===  受け口関数の本体(C言語)を生成する
    283   #     é€šå¸¸ã§ã‚れば、ジェネレータは受け口関数のテンプレートを生成する
    284   #     ãƒ—ラグインの場合、変更するå¿
    285 è¦ã®ãªã„セルタイプコードを生成する
    286   #file::           FILE        出力å
    287 ˆãƒ•ã‚¡ã‚¤ãƒ«
     260  #===  受け口関数の本体(C言語)を生成する
     261  #     通常であれば、ジェネレータは受け口関数のテンプレートを生成する
     262  #     プラグインの場合、変更する必要のないセルタイプコードを生成する
     263  #file::           FILE        出力先ファイル
    288264  #b_singleton::    bool        true if singleton
    289265  #ct_name::        Symbol
     
    298274
    299275    if !HRP2KernelObjectPlugin.include_celltype?(@next_cell.get_celltype)
    300         # 拡張サービスコール呼出し
     276        # 拡張サービスコール呼出し
    301277        if ! func_type.get_type.kind_of?( VoidType ) then
    302278            file.print( "  #{func_type.get_type_str}  retval;\n" )
     
    310286    p_cellcb = #{global_ct_name}_GET_CELLCB(idx);
    311287  }else{
    312      /* エラー処理コードをここに記述 */
     288     /* エラー処理コードをここに記述 */
    313289  }
    314290
     
    361337        end
    362338
    363         # 拡張サービスコール本体
     339        # 拡張サービスコール本体
    364340        if new_func
    365341            file2 = AppFile.open( "#{$gen}/#{@ct_name_body}.c" )
     
    370346#                 file2.print <<EOT
    371347# /*
    372 #  * このファイルは tecsgen により自動生成されました
    373 #  * このファイルを編集して使用することは、意図されていません
     348#  * このファイルは tecsgen により自動生成されました
     349#  * このファイルを編集して使用することは、意図されていません
    374350#  */
    375351# /* #[<PREAMBLE>]#
    376 #  * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
    377 #  * tecsmerge によるマージに使用されます
     352#  * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
     353#  * tecsmerge によるマージに使用されます
    378354#  *
    379355#  * #[</PREAMBLE>]# */
    380356#
    381 # /* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
     357# /* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
    382358# #include "#{@ct_name_body}_tecsgen.h"
    383359#
     
    407383      p_cellcb = #{@ct_name_body}_GET_CELLCB(idx);
    408384    }else{
    409        /* エラー処理コードをここに記述 */
     385       /* エラー処理コードをここに記述 */
    410386    }
    411387#else
     
    463439            file2 = AppFile.open( "#{$gen}/tecsgen.cfg" )
    464440            file2.print "\n/* Generated by HRP2SVCPlugin */\n\n"
    465             # TODO: スタックサイズは適当
     441            # TODO: スタックサイズは適当
    466442            file2.print <<EOT
    467443KERNEL_DOMAIN{
     
    479455        end
    480456    else
    481         # カーネルドメインのセルは特別なことは何もせず,普通に呼び出す
     457        # カーネルドメインのセルは特別なことは何もせず,普通に呼び出す
    482458        super
    483459    end
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/HRP2SemaphorePlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2011 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#++
     
    5843    @@ep = [:eSignalSemaphore, :eWaitSemaphore, :eManageSemaphore, :eReferSemaphore ]
    5944    #=== HRP2SemaphorePlugin#print_cfg_cre
    60     # CRE_SEMの出力
    61     # file:: FILE:     å‡ºåŠ›å
    62 ˆãƒ•ã‚¡ã‚¤ãƒ«
    63     # val :: string:   ã‚«ãƒ¼ãƒãƒ«ã‚ªãƒ–ジェクトの属性の解析結果
    64     # tab :: string:   ã‚¤ãƒ³ãƒ‡ãƒ³ãƒˆç”¨ã®tab
     45    # CRE_SEMの出力
     46    # file:: FILE:     出力先ファイル
     47    # val :: string:   カーネルオブジェクトの属性の解析結果
     48    # tab :: string:   インデント用のtab
    6549    def print_cfg_cre(file, cell, val, tab)
    6650        file.print tab
     
    6852    end
    6953    #=== HRP2SemaphorePlugin#print_cfg_sac
    70     # SAC_SEMの出力
    71     # file:: FILE:     å‡ºåŠ›å
    72 ˆãƒ•ã‚¡ã‚¤ãƒ«
    73     # val :: string:   ã‚«ãƒ¼ãƒãƒ«ã‚ªãƒ–ジェクトの属性の解析結果
    74     # acv :: string:   ã‚¢ã‚¯ã‚»ã‚¹ãƒ™ã‚¯ã‚¿   
     54    # SAC_SEMの出力
     55    # file:: FILE:     出力先ファイル
     56    # val :: string:   カーネルオブジェクトの属性の解析結果
     57    # acv :: string:   アクセスベクタ   
    7558    def print_cfg_sac(file, val, acv)
    7659        file.puts "SAC_SEM(#{val[:id]}, {#{acv[0]}, #{acv[1]}, #{acv[2]}, #{acv[3]}});"
    7760    end
    78     #tSemaphoreの受け口リスト
     61    #tSemaphoreの受け口リスト
    7962    def get_entry_ports_name_list()
    8063        @@ep
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/HRP2TaskPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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#++
     
    5439#require "HRP2KernelObjectPlugin"
    5540require_tecsgen_lib "HRP2KernelObjectPlugin.rb"
    56 #== celltype プラグインのå
    57 ±é€šã®è¦ªã‚¯ãƒ©ã‚¹
     41#== celltype プラグインの共通の親クラス
    5842class HRP2TaskPlugin < HRP2KernelObjectPlugin
    5943    # @@ep = [:eActivateTask, :eControlTask, :eManageTask, :eReferTask ]
    60     # ATT_MODを生成済みかどうか
     44    # ATT_MODを生成済みかどうか
    6145    @@generate_memory_module = false
    6246
     
    6953    def print_cfg_cre(file, cell, val, tab)
    7054        val[:id] = val[:id].gsub( /(^|[^\$])\$id\$/, "\\1#{@celltype.get_name.to_s}_#{cell.get_name.to_s}" )
    71         # $cbp$の代わり
     55        # $cbp$の代わり
    7256        index = cell.get_id - @celltype.get_id_base
    7357        #cell_CB_name = "#{@celltype.get_global_name}_pCB_tab[#{index}]"
    7458        cell_CB_name = "#{index}"
    75         # CRE_XXX/DEF_XXXの生成
     59        # CRE_XXX/DEF_XXXの生成
    7660        print "assign task plugin\n"
    7761        domainOption = cell.get_region.get_domain_root.get_domain_type.get_option
    7862        # if cell.get_region.get_region_type == :DOMAIN
    7963        if domainOption != "OutOfDomain"
    80             # 保護ドメインに属する場合
     64            # 保護ドメインに属する場合
    8165            if domainOption == "trusted"
    82                 # カーネルドメイン
     66                # カーネルドメイン
    8367                if val[:userStackSize] != "OMIT"
    8468                    raise "system task cannot have user stack."
     
    8872EOT
    8973            else
    90                 # ユーザドメイン
     74                # ユーザドメイン
    9175                if val[:userStackSize] == "OMIT"
    9276                    raise "user task must have user stack."
     
    10387            end
    10488        else
    105             # 無所属の場合
     89            # 無所属の場合
    10690            raise "task #{val[:id]} must belong to a domain."
    10791        end
    10892   
    109         # 例外用のを生成
     93        # 例外用のを生成
    11094        file.print <<EOT
    11195#{tab}DEF_TEX(#{val[:id]}, { #{val[:exceptionAttribute]}, tTask_start_exception });
     
    118102
    119103=begin
    120     #tTaskの受け口リスト
     104    #tTaskの受け口リスト
    121105    def get_entry_ports_name_list()
    122106        @@ep
     
    124108=end
    125109    #
    126     #  ATT_MODの生成
    127     #  gen_factory実行時には,すべてのセルタイププラグインを生成済みのはずなので,
    128     #  カーネルAPIコードのメモリ保護を省略できる.
     110    #  ATT_MODの生成
     111    #  gen_factory実行時には,すべてのセルタイププラグインを生成済みのはずなので,
     112    #  カーネルAPIコードのメモリ保護を省略できる.
    129113    #
    130114    def gen_factory file
     
    134118
    135119            Cell.get_cell_list2.each { |cell|
    136                 # すべてのセルを走査してセルタイプをチェック
     120                # すべてのセルを走査してセルタイプをチェック
    137121                ct = cell.get_celltype
    138122                if ct.class == Celltype && check_celltype_list.include?( ct ) == false
    139                     # 未チェックのセルタイプだった場合
     123                    # 未チェックのセルタイプだった場合
    140124                    # puts "check for ATT_MOD : #{ct.classget_global_name}"
    141125                    puts "check for ATT_MOD : #{ct.get_global_name}"
    142126                       
    143                     # カーネルAPIのコード,データはメモリ保護しない
     127                    # カーネルAPIのコード,データはメモリ保護しない
    144128                    next if HRP2KernelObjectPlugin.include_celltype?( ct )
    145129
    146                     # å¿
    147 è¦ã®ãªã„セルタイプのコード,データはメモリ保護しない
     130                    # 必要のないセルタイプのコード,データはメモリ保護しない
    148131                    next if ! ct.need_generate?
    149132
    150                     # HRP2のドメインリージョンを取得
     133                    # HRP2のドメインリージョンを取得
    151134                    regions = ct.get_domain_roots
    152135                    regions_hrp2 = regions[ :HRP2 ]
     
    157140                    puts ""
    158141
    159                     # セル管理ブロックとスケルトンのメモリ保護
    160                     # gen_celltype_names_domain 相当の処理
     142                    # セル管理ブロックとスケルトンのメモリ保護
     143                    # gen_celltype_names_domain 相当の処理
    161144                    if regions_hrp2.include?( Region.get_root ) == false && regions_hrp2.length > 1
    162                         # ドメインが複数で,OutOfDomainにセルが存在しないセルタイプの場合
    163                         # å
    164 ±æœ‰ã®ã‚»ãƒ«ç®¡ç†ãƒ–ロックとスケルトンコードを登録する
     145                        # ドメインが複数で,OutOfDomainにセルが存在しないセルタイプの場合
     146                        # 共有のセル管理ブロックとスケルトンコードを登録する
    165147                        file = AppFile.open( "#{$gen}/tecsgen.cfg" )
    166148                        file.print "ATT_MOD(\"#{ct.get_global_name}_tecsgen.o\");\n"
     
    179161                    }
    180162
    181                     # セルタイプコードがない場合はスキップ
     163                    # セルタイプコードがない場合はスキップ
    182164                    next if ct.is_all_entry_inline? && ! ct.is_active?
    183165
    184                     # セルタイプコードのメモリ保護
    185                     # gen_celltype_names_domain2 相当の処理
     166                    # セルタイプコードのメモリ保護
     167                    # gen_celltype_names_domain2 相当の処理
    186168                    if regions_hrp2.include?( Region.get_root ) == true || regions_hrp2.length > 1
    187                         # OutOfDomainにセルが存在するセルタイプの場合
    188                         # または,複数のドメインにセルが存在するセルタイプの場合
    189                         # セルタイプコードをå
    190 ±æœ‰ã™ã‚‹ã‚ˆã†ã«ç™»éŒ²ã™ã‚‹
     169                        # OutOfDomainにセルが存在するセルタイプの場合
     170                        # または,複数のドメインにセルが存在するセルタイプの場合
     171                        # セルタイプコードを共有するように登録する
    191172                        file = AppFile.open( "#{$gen}/tecsgen.cfg" )
    192173                    else
    193                         # OutOfDomainでない単一のドメインにセルが存在するセルタイプの場合
    194                         # セルタイプコードを専有するように登録する
     174                        # OutOfDomainでない単一のドメインにセルが存在するセルタイプの場合
     175                        # セルタイプコードを専有するように登録する
    195176                        file = AppFile.open( "#{$gen}/tecsgen_#{regions_hrp2[0].get_namespace_path.get_global_name}.cfg" )
    196177                    end
     
    201182                    check_celltype_list << ct
    202183                else
    203                     # 何もしない
     184                    # 何もしない
    204185                end
    205186            }
     
    207188            @@generate_memory_module = true
    208189        else
    209             # 何もしない
     190            # 何もしない
    210191        end
    211192    end
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/Mruby2CBridgePlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    55#   Copyright (C) 2008-2014 by TOPPERS Project
    66#
    7 #   ä¸Šè¨˜è‘—作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã®(1)~(4)の条件を満たす場合に限り,本ソフトウェ
    9 #   ã‚¢ï¼ˆæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’改変したものを含む.以下同じ)を使用・複製・改
    10 #   å¤‰ãƒ»å†é
    11 å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
    12 #   (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    13 #       æ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定が,そのままの形でソー
    14 #       ã‚¹ã‚³ãƒ¼ãƒ‰ä¸­ã«å«ã¾ã‚Œã¦ã„ること.
    15 #   (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    16 #       ç”¨ã§ãã‚‹å½¢ã§å†é
    17 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    18 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    19 #       è€
    20 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    21 #       ã®ç„¡ä¿è¨¼è¦å®šã‚’掲載すること.
    22 #   (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    23 #       ç”¨ã§ããªã„形で再é
    24 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
    25 #       ã¨ï¼Ž
    26 #     (a) 再é
    27 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    28 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    29 #         ä½œæ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定を掲載すること.
    30 #     (b) 再é
    31 å¸ƒã®å½¢æ
    32 ‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
    33 #         å ±å‘Šã™ã‚‹ã“と.
    34 #   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    35 #       å®³ã‹ã‚‰ã‚‚,上記著作権è€
    36 ãŠã‚ˆã³TOPPERSプロジェクトをå
    37 è²¬ã™ã‚‹ã“と.
    38 #       ã¾ãŸï¼Œæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ãƒ¦ãƒ¼ã‚¶ã¾ãŸã¯ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ã‹ã‚‰ã®ã„かなる理
    39 #       ç”±ã«åŸºã¥ãè«‹æ±‚からも,上記著作権è€
    40 ãŠã‚ˆã³TOPPERSプロジェクトを
    41 #       å
    42 è²¬ã™ã‚‹ã“と.
     7#   上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
     8#   ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     9#   変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     10#   (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     11#       権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     12#       スコード中に含まれていること.
     13#   (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     14#       用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     15#       者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     16#       の無保証規定を掲載すること.
     17#   (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     18#       用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     19#       と.
     20#     (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     21#         作権表示,この利用条件および下記の無保証規定を掲載すること.
     22#     (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     23#         報告すること.
     24#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     25#       害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     26#       また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     27#       由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     28#       免責すること.
    4329
    44 #   æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ï¼Œç„¡ä¿è¨¼ã§æä¾›ã•ã‚Œã¦ã„るものである.上記著作権è€
    45 ãŠ
    46 #   ã‚ˆã³TOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    47 #   ã«å¯¾ã™ã‚‹é©åˆæ€§ã‚‚含めて,いかなる保証も行わない.また,本ソフトウェ
    48 #   ã‚¢ã®åˆ©ç”¨ã«ã‚ˆã‚Šç›´æŽ¥çš„または間接的に生じたいかなる損害に関しても,そ
    49 #   ã®è²¬ä»»ã‚’負わない.
     30#   本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     31#   よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     32#   に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     33#   アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     34#   の責任を負わない.
    5035
    51 #   $Id: Mruby2CBridgePlugin.rb 2061 2014-05-31 22:15:33Z okuma-top $
     36#   $Id$
    5237#
    5338
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/MrubyBridgePlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    55#   Copyright (C) 2008-2015 by TOPPERS Project
    66#
    7 #   ä¸Šè¨˜è‘—作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã®(1)~(4)の条件を満たす場合に限り,本ソフトウェ
    9 #   ã‚¢ï¼ˆæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’改変したものを含む.以下同じ)を使用・複製・改
    10 #   å¤‰ãƒ»å†é
    11 å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
    12 #   (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    13 #       æ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定が,そのままの形でソー
    14 #       ã‚¹ã‚³ãƒ¼ãƒ‰ä¸­ã«å«ã¾ã‚Œã¦ã„ること.
    15 #   (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    16 #       ç”¨ã§ãã‚‹å½¢ã§å†é
    17 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    18 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    19 #       è€
    20 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    21 #       ã®ç„¡ä¿è¨¼è¦å®šã‚’掲載すること.
    22 #   (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    23 #       ç”¨ã§ããªã„形で再é
    24 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
    25 #       ã¨ï¼Ž
    26 #     (a) 再é
    27 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    28 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    29 #         ä½œæ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定を掲載すること.
    30 #     (b) 再é
    31 å¸ƒã®å½¢æ
    32 ‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
    33 #         å ±å‘Šã™ã‚‹ã“と.
    34 #   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    35 #       å®³ã‹ã‚‰ã‚‚,上記著作権è€
    36 ãŠã‚ˆã³TOPPERSプロジェクトをå
    37 è²¬ã™ã‚‹ã“と.
    38 #       ã¾ãŸï¼Œæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ãƒ¦ãƒ¼ã‚¶ã¾ãŸã¯ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ã‹ã‚‰ã®ã„かなる理
    39 #       ç”±ã«åŸºã¥ãè«‹æ±‚からも,上記著作権è€
    40 ãŠã‚ˆã³TOPPERSプロジェクトを
    41 #       å
    42 è²¬ã™ã‚‹ã“と.
     7#   上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
     8#   ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     9#   変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     10#   (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     11#       権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     12#       スコード中に含まれていること.
     13#   (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     14#       用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     15#       者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     16#       の無保証規定を掲載すること.
     17#   (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     18#       用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     19#       と.
     20#     (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     21#         作権表示,この利用条件および下記の無保証規定を掲載すること.
     22#     (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     23#         報告すること.
     24#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     25#       害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     26#       また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     27#       由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     28#       免責すること.
    4329
    44 #   æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ï¼Œç„¡ä¿è¨¼ã§æä¾›ã•ã‚Œã¦ã„るものである.上記著作権è€
    45 ãŠ
    46 #   ã‚ˆã³TOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    47 #   ã«å¯¾ã™ã‚‹é©åˆæ€§ã‚‚含めて,いかなる保証も行わない.また,本ソフトウェ
    48 #   ã‚¢ã®åˆ©ç”¨ã«ã‚ˆã‚Šç›´æŽ¥çš„または間接的に生じたいかなる損害に関しても,そ
    49 #   ã®è²¬ä»»ã‚’負わない.
     30#   本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     31#   よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     32#   に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     33#   アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     34#   の責任を負わない.
    5035
    51 #   $Id: MrubyBridgePlugin.rb 2554 2016-02-27 06:11:34Z okuma-top $
     36#   $Id$
    5237#
    5338
    5439# Todo:
    55 # 生成するもの
     40# 生成するもの
    5641#  gen_cdl_file
    57 #    ブリッジ初期化セルタイプ (シグニチャごと)
    58 #       @@init_celltypes に記録
    59 #    ブリッジセルタイプ (シグニチャごと)
    60 #       @@celltypes に記録
    61 #    構造体セルタイプ
    62 #       @@struct_list に記録
     42#    ブリッジ初期化セルタイプ (シグニチャごと)
     43#       @@init_celltypes に記録
     44#    ブリッジセルタイプ (シグニチャごと)
     45#       @@celltypes に記録
     46#    構造体セルタイプ
     47#       @@struct_list に記録
    6348#  new_cell
    64 #    TECS 初期化セル(プロトタイプ宣言)
    65 #       @@VM_init_cells に記録
    66 #       @@VM_struct_list に記録
    67 #       @@VM_ptr_list に記録
     49#    TECS 初期化セル(プロトタイプ宣言)
     50#       @@VM_init_cells に記録
     51#       @@VM_struct_list に記録
     52#       @@VM_ptr_list に記録
    6853#  gen_post_code
    69 #    構造体初期化セル
    70 #    ポインタ初期化セル
    71 #    TECS 初期化セル
     54#    構造体初期化セル
     55#    ポインタ初期化セル
     56#    TECS 初期化セル
    7257#
    73 #   ep_func の作成
    74 #     signature, ポインタ、構造体 … 初期化受け口=mruby VM への登録
    75 #     ãƒã‚¤ãƒ³ã‚¿
    76 #   preamble の作成
    77 #     ãƒã‚¤ãƒ³ã‚¿ã€æ§‹é€ ä½“ … アクセス用コードの生成
    78 #     signature … ブリッジ関数のプロトタイプ宣言
    79 #   postamble の作成
    80 #     signature … ブリッジ関数の定義
     58#   ep_func の作成
     59#     signature, ポインタ、構造体 … 初期化受け口=mruby VM への登録
     60#     ポインタ
     61#   preamble の作成
     62#     ポインタ、構造体 … アクセス用コードの生成
     63#     signature … ブリッジ関数のプロトタイプ宣言
     64#   postamble の作成
     65#     signature … ブリッジ関数の定義
    8166
    8267class MrubyBridgePlugin < SignaturePlugin
    8368
    84   # プラグイン引数名 => Proc
     69  # プラグイン引数名 => Proc
    8570  MrubyBridgePluginArgProc = {
    8671      "ignoreUnsigned" => Proc.new { |obj,rhs| obj.set_ignoreUnsigned rhs },
     
    8974  }
    9075
    91   @@celltypes = { }             # {celltype_name => [ BridgePlugin のインスタンスのé
    92 åˆ— }
    93   @@init_celltypes = { }        # {celltype_name => [ BridgePlugin のインスタンスのé
    94 åˆ— }
     76  @@celltypes = { }             # {celltype_name => [ BridgePlugin のインスタンスの配列 }
     77  @@init_celltypes = { }        # {celltype_name => [ BridgePlugin のインスタンスの配列 }
    9578  @@struct_list = { }           # {struct_name=>StructType}
    96   @@ptr_list = { }              # {ptr_celltype_name=> @@TYPE_MAP の対応するもの}
     79  @@ptr_list = { }              # {ptr_celltype_name=> @@TYPE_MAP の対応するもの}
    9780  @@VM_list = { }               # VM_name => true
    98   @@VM_celltypes = {  }             # VM_name => { @celltype_name => セルのé
    99 åˆ— }
     81  @@VM_celltypes = {  }             # VM_name => { @celltype_name => セルの配列 }
    10082  @@VM_struct_list = { }           # {name=>StructType}
    101   @@VM_ptr_list = { }              # { VM_name => {name=> @@TYPE_MAP の対応するもの} }
     83  @@VM_ptr_list = { }              # { VM_name => {name=> @@TYPE_MAP の対応するもの} }
    10284  @@TYPE_MAP = {           # type_str   class             GET_SET
    10385    :char_t            => [:char_t,    "Char",     :Char,  :INT   ],
     
    11698
    11799    :int               => [:int,       "Int",      :Int,  :INT   ],
    118     :char              => [:char,      "Char",     :Char, :INT   ],    # char は char_t として扱う
     100    :char              => [:char,      "Char",     :Char, :INT   ],    # char は char_t として扱う
    119101    :short             => [:short,     "Short",    :Int,  :INT   ],
    120102    :long              => [:long,      "Long",     :Int,  :INT   ],
     
    138120  # included  or excluded functions
    139121
    140   ### ロードされた時点で実行される ###
    141 
    142   # -I に $(TECSPATH)/mruby を追加
     122  ### ロードされた時点で実行される ###
     123
     124  # -I に $(TECSPATH)/mruby を追加
    143125  # TECSGEN::Makefile.add_obj "$(MRUBY_MAIN_OBJ)"
    144126  TECSGEN::Makefile.add_ldflag "-lmruby -L$(MRUBYPATH)/lib -lm"
     
    148130
    149131
    150   #=== プラグインインスタンスの初期化
    151   # 戻り値、引数の型が使用可能なものかチェックする
     132  #=== プラグインインスタンスの初期化
     133  # 戻り値、引数の型が使用可能なものかチェックする
    152134  #
    153135  def initialize( signature, option )
     
    178160
    179161    if signature.get_function_head_array == nil then
    180       return   # 以前に文法エラー発生
     162      return   # 以前に文法エラー発生
    181163    end
    182164
     
    257239        when FloatType
    258240        when PtrType
    259           ttype_org = type_org.get_type       # ポインタの指しているå
    260 ˆã®åž‹
    261           ttype = ttype_org.get_original_type # 上記の typedef されている場合、å
    262 ƒã®åž‹
     241          ttype_org = type_org.get_type       # ポインタの指している先の型
     242          ttype = ttype_org.get_original_type # 上記の typedef されている場合、元の型
    263243          register_ptr_type ttype_org
    264244
     
    298278  end
    299279
    300   #=== 構造体のメンバーの型のチェック
     280  #=== 構造体のメンバーの型のチェック
    301281  def check_struct_member struct_type
    302282    #p "tag name:#{struct_type.get_name}"
     
    345325      return
    346326    end
    347     tstr = ttype.get_type_str.sub( /const /, "" )    # const は無視
    348     tstr = tstr.sub( /volatile /, "" )               # volatile も無視
     327    tstr = ttype.get_type_str.sub( /const /, "" )    # const は無視
     328    tstr = tstr.sub( /volatile /, "" )               # volatile も無視
    349329    if @b_ignoreUnsigned then
    350       tstr = tstr.sub( /unsigned /, "" )             # volatile も無視
    351       tstr = tstr.sub( /uint/, "int" )               # volatile も無視
    352       tstr = tstr.sub( /[cs]char/, "char" )          # volatile も無視
     330      tstr = tstr.sub( /unsigned /, "" )             # volatile も無視
     331      tstr = tstr.sub( /uint/, "int" )               # volatile も無視
     332      tstr = tstr.sub( /[cs]char/, "char" )          # volatile も無視
    353333    end
    354334    return @@TYPE_MAP[ tstr.to_sym ]
    355335  end
    356336
    357   #===  CDL ファイルの生成
    358   #      typedef, signature, celltype, cell コードを生成
    359   #file::        FILE       ç”Ÿæˆã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«
     337  #===  CDL ファイルの生成
     338  #      typedef, signature, celltype, cell コードを生成
     339  #file::        FILE       生成するファイル
    360340  def gen_cdl_file(file)
    361341
    362     # ブリッジセルタイプの生成
     342    # ブリッジセルタイプの生成
    363343    if @@celltypes[ @celltype_name ] == nil then
    364344      @@celltypes[ @celltype_name ] = [ self ]
     
    389369EOT
    390370
    391       # 構造体セルタイプの生成
     371      # 構造体セルタイプの生成
    392372      @struct_list.each{ |name, sttype|
    393373        if @@struct_list[ name ] == nil then
     
    410390  end
    411391
    412   #=== gen_cdl_file で定義したセルタイプに 新しいセルが定義された
    413   # cell のセルタイプの名前は @celltype_name
     392  #=== gen_cdl_file で定義したセルタイプに 新しいセルが定義された
     393  # cell のセルタイプの名前は @celltype_name
    414394  def new_cell cell
    415395    if cell.get_celltype.get_name != @celltype_name then
     
    430410      file = CFile.open( initializer_celltype_cdl, "w" )
    431411
    432       # TECS 初期化セル(プロトタイプ宣言)
     412      # TECS 初期化セル(プロトタイプ宣言)
    433413      print_msg "  MrubyBridgePlugin: join your VM's cInitialize to #{vm_name}_TECSInitializer.eInitialize\n"
    434414
     
    475455  end
    476456
    477   #=== プラグインが CDL の POST コードを生成
    478   # tmp_plugin_post_code.cdl への出力
     457  #=== プラグインが CDL の POST コードを生成
     458  # tmp_plugin_post_code.cdl への出力
    479459  def self.gen_post_code file
    480460
     
    498478# EOT
    499479
    500 # gen_post_code で生成した celltype は gen_ep_func が呼び出されない #847
     480# gen_post_code で生成した celltype は gen_ep_func が呼び出されない #847
    501481#    @@struct_list.each{ |name,sttype|
    502482#      file.print <<EOT
     
    566546  end
    567547
    568   ####### 以下コード生成段階 ######
    569 
    570   #===  受け口関数の本体コードを生成(頭部と末尾は別途出力)
    571   #ct_name:: Symbol    (プラグインで生成された) セルタイプ名 .Symbol として送られてくる
     548  ####### 以下コード生成段階 ######
     549
     550  #===  受け口関数の本体コードを生成(頭部と末尾は別途出力)
     551  #ct_name:: Symbol    (プラグインで生成された) セルタイプ名 .Symbol として送られてくる
    572552  def gen_ep_func_body( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
    573553    if @@celltypes[ ct_name ] then
     
    673653  end
    674654
    675   #===  受け口関数の preamble (C言語)を生成する
    676   #     å¿
    677 è¦ãªã‚‰ preamble 部に出力する
    678   #file::           FILE        出力å
    679 ˆãƒ•ã‚¡ã‚¤ãƒ«
     655  #===  受け口関数の preamble (C言語)を生成する
     656  #     必要なら preamble 部に出力する
     657  #file::           FILE        出力先ファイル
    680658  #b_singleton::    bool        true if singleton
    681659  #ct_name::        Symbol
     
    11351113    if( param.get_size ) then
    11361114      sz_str = param.get_size.to_s
    1137     elsif param.get_string then      # mikan とりあえず size_is と string の同時指定 (二重ポインタ) はなし
     1115    elsif param.get_string then      # mikan とりあえず size_is と string の同時指定 (二重ポインタ) はなし
    11381116      sz_str = param.get_string.to_s
    11391117    else
    11401118      sz_str = "1"
    11411119    end
    1142     # unsigned 型の場合には cast がå¿
    1143 è¦
     1120    # unsigned 型の場合には cast が必要
    11441121    if ttype.get_original_type.get_type_str != param.get_type.get_type.get_type_str then
    11451122      cast_str = "(#{param.get_type.get_type_str})"
     
    11711148  end
    11721149
    1173   #=== プラグイン引数 ignoreUnsigned
     1150  #=== プラグイン引数 ignoreUnsigned
    11741151  def set_ignoreUnsigned rhs
    11751152    if rhs == "true" || rhs == nil then
     
    11771154    end
    11781155  end
    1179   #=== プラグイン引数 include
     1156  #=== プラグイン引数 include
    11801157  def set_include rhs
    11811158    funcs = rhs.split ','
     
    11951172    }
    11961173  end
    1197   #=== プラグイン引数 exclude
     1174  #=== プラグイン引数 exclude
    11981175  def set_exclude rhs
    11991176    funcs = rhs.split ','
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/NotifierPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    1414class NotifierPlugin < CelltypePlugin
    1515
    16         # ---------- アダプタ関数の生成 -------------
     16        # ---------- アダプタ関数の生成 -------------
    1717        #
    18         # siHandlerBodyの受け口関数は,タイムイベント通知の通知å
    19 ˆã¨ã—て直接指定する
    20         # ことはできない.シグネチャが一致していないことが理由である.このため,アダ
    21         # プタとして動作する関数を生成し,カーネルからの呼出しをTECSの呼出しに変換で
    22         # きるようにするå¿
    23 è¦ãŒã‚る.
     18        # siHandlerBodyの受け口関数は,タイムイベント通知の通知先として直接指定する
     19        # ことはできない.シグネチャが一致していないことが理由である.このため,アダ
     20        # プタとして動作する関数を生成し,カーネルからの呼出しをTECSの呼出しに変換で
     21        # きるようにする必要がある.
    2422        #
    25         # 基本的には,受け口毎にアダプタ関数を生成すれば十分である.しかし,これでは
    26         # メモリ消費量が不å¿
    27 è¦ã«å¢—加してしまう.そこで,通知å
    28 ˆé–¢æ•°ã«intptr_t型の引数
    29         # を渡せることに着目し,関数の"一般化"を図る.すなわち受け口のある属性(ここ
    30         # では,結合å
    31 ˆã®ã‚»ãƒ«ï¼Œæ·»å­—などを指す)を,アダプタ関数の引数として受け取れる
    32         # ようにし,1個のアダプタ関数を2個以上の結合に対し用いることができるように
    33         # する.
     23        # 基本的には,受け口毎にアダプタ関数を生成すれば十分である.しかし,これでは
     24        # メモリ消費量が不必要に増加してしまう.そこで,通知先関数にintptr_t型の引数
     25        # を渡せることに着目し,関数の"一般化"を図る.すなわち受け口のある属性(ここ
     26        # では,結合先のセル,添字などを指す)を,アダプタ関数の引数として受け取れる
     27        # ようにし,1個のアダプタ関数を2個以上の結合に対し用いることができるように
     28        # する.
    3429        #
    35         # アダプタ関数の属性について整理すると,
    36         #  - 受け口関数 - 一般化を行うと,実行時コストが大きく増大してしまうことが
    37         #    確認されている.このため,一般化は行わない.EntryPropertyにも含めない.
    38         #  - セルインデックス - CELLIDX型で,型の規定はないが,"ポインタ値であったり
    39         #    整数値であったりする。" (TECS 5.3.6) より,インデックスかポインタある
    40         #    ことが分かる.インデックスだとすると,この値はセルCBのアドレッシングに
    41         #    使用されるので,intptr_tに収まる筈である.ポインタの場合,当然intptr_t
    42         #    に収まる.
    43         #  - 受け口é
    44 åˆ—の添字 - int_t.同様にintptr_tに収まる筈である.
    45         # これらのうち,セルインデックスと受け口é
    46 åˆ—の添字はパラメータに含めることが
    47         # できそうであるが,両方は無理である.
    48         # 両方を格納したé
    49 åˆ—を生成し,そのé
    50 åˆ—の要素へのポインタを渡すようにするとい
    51         # う選択肢も可能であるが,実行速度を優å
    52 ˆã™ã‚‹ãŸã‚ã«ï¼Œã“の方法はとらなかった.
     30        # アダプタ関数の属性について整理すると,
     31        #  - 受け口関数 - 一般化を行うと,実行時コストが大きく増大してしまうことが
     32        #    確認されている.このため,一般化は行わない.EntryPropertyにも含めない.
     33        #  - セルインデックス - CELLIDX型で,型の規定はないが,"ポインタ値であったり
     34        #    整数値であったりする。" (TECS 5.3.6) より,インデックスかポインタある
     35        #    ことが分かる.インデックスだとすると,この値はセルCBのアドレッシングに
     36        #    使用されるので,intptr_tに収まる筈である.ポインタの場合,当然intptr_t
     37        #    に収まる.
     38        #  - 受け口配列の添字 - int_t.同様にintptr_tに収まる筈である.
     39        # これらのうち,セルインデックスと受け口配列の添字はパラメータに含めることが
     40        # できそうであるが,両方は無理である.
     41        # 両方を格納した配列を生成し,その配列の要素へのポインタを渡すようにするとい
     42        # う選択肢も可能であるが,実行速度を優先するために,この方法はとらなかった.
    5343        #
    54         # このため,一般化は以下のパターンに分類して行う.
     44        # このため,一般化は以下のパターンに分類して行う.
    5545        #
    56         # 1. セルインデックスのみ一般化.セルインデックスのパターン数が受け口é
    57 åˆ—の
    58         #    添字のパターン数より多いか,あるいは受け口がé
    59 åˆ—でない場合に行われる.
    60         # 2. 受け口é
    61 åˆ—の添字のみ一般化.この場合,セルごとに異なる関数を用いる.
     46        # 1. セルインデックスのみ一般化.セルインデックスのパターン数が受け口配列の
     47        #    添字のパターン数より多いか,あるいは受け口が配列でない場合に行われる.
     48        # 2. 受け口配列の添字のみ一般化.この場合,セルごとに異なる関数を用いる.
    6249        #
    63         # これより,各受け口関数について,アダプタ関数の生成個数は,
    64         #         O(min{セルインデックスのパターン数, 添字のパターン数})
    65         # となる.
     50        # これより,各受け口関数について,アダプタ関数の生成個数は,
     51        #         O(min{セルインデックスのパターン数, 添字のパターン数})
     52        # となる.
    6653        #
    67         # プラグインでの処理をワンパスで行うために,tecsgen.cfgではアダプタ関数を直
    68         # 接指定するのではなく,代わりにアダプタ関数を表すマクロを使用する.この
    69         # マクロはアダプタ関数ハンドルと呼ぶことにする.
    70         # アダプタ関数ハンドルは,次の2個の要素から成る.
    71         #  - アダプタ関数へののポインタ
    72         #  - アダプタ関数の引数
     54        # プラグインでの処理をワンパスで行うために,tecsgen.cfgではアダプタ関数を直
     55        # 接指定するのではなく,代わりにアダプタ関数を表すマクロを使用する.この
     56        # マクロはアダプタ関数ハンドルと呼ぶことにする.
     57        # アダプタ関数ハンドルは,次の2個の要素から成る.
     58        #  - アダプタ関数へののポインタ
     59        #  - アダプタ関数の引数
    7360
    7461        # @private
    7562        class AdapterGenerator
    7663
    77                 # 結合å
    78 ˆã«é–¢ã™ã‚‹å±žæ€§ã‚’含む.セル,受け口é
    79 åˆ—の添字から成る.
    80                 # 同一のEntryPropertyとなる結合は,å
    81 ¨ãåŒã˜æ–¹æ³•ã§ãã®å—け口関数を呼び
    82                 # 出せる.
     64                # 結合先に関する属性を含む.セル,受け口配列の添字から成る.
     65                # 同一のEntryPropertyとなる結合は,全く同じ方法でその受け口関数を呼び
     66                # 出せる.
    8367                # @private
    8468                class EntryProperty
    85                         # @return [Cell] 受け口側のセル.
     69                        # @return [Cell] 受け口側のセル.
    8670                        attr_reader :cell
    8771
    88                         # @return [Integer, nil] 受け口é
    89 åˆ—の添字.é
    90 åˆ—でない場合はnil.
     72                        # @return [Integer, nil] 受け口配列の添字.配列でない場合はnil.
    9173                        attr_reader :subscript
    9274
     
    10082                        end
    10183
    102                         # 同値性の定義.Hashのキーとして使用するのにå¿
    103 è¦ï¼Ž
     84                        # 同値性の定義.Hashのキーとして使用するのに必要.
    10485                        def eql?(o) @cell == o.cell && @subscript == o.subscript end
    10586                        def hash() @cell.hash ^ @subscript.hash end
     
    10889                # @private
    10990                class EntryPort
    110                         # @param [Port] port 結合å
    111 ˆã®ã‚»ãƒ«ã®ã‚»ãƒ«ã‚¿ã‚¤ãƒ—の受け口.
     91                        # @param [Port] port 結合先のセルのセルタイプの受け口.
    11292                        def initialize(port, prefix)
    11393                                @port = port
    11494                                @global_name = "#{prefix}_#{@port.get_celltype.get_global_name}_#{@port.get_name}"
    11595
    116                                 # 受け口関数名.siHandlerBodyを想定しているので,関数名はmainで固定である.
     96                                # 受け口関数名.siHandlerBodyを想定しているので,関数名はmainで固定である.
    11797                                @entry_fn_name = "#{@port.get_celltype.get_global_name}_#{@port.get_name}_main"
    11898
     
    121101                        end
    122102
    123                         # @return [String] グローバルに一意(なものとして扱えるよう)な識別子.
     103                        # @return [String] グローバルに一意(なものとして扱えるよう)な識別子.
    124104                        attr_reader :global_name
    125105
     
    127107                        attr_reader :port
    128108
    129                         # 指定したEntryPropertyに対応するアダプタ関数ハンドルを取得する.
     109                        # 指定したEntryPropertyに対応するアダプタ関数ハンドルを取得する.
    130110                        # @param [EntryProperty] ep
    131                         # @return [String] アダプタ関数ハンドル.
     111                        # @return [String] アダプタ関数ハンドル.
    132112                        # @private
    133113                        def adapter_handle_for_entry_property(ep)
     
    139119                        end
    140120
    141                         # 結合å
    142 ˆã®æƒ
    143 å ±ã«å¿œã˜ãŸã‚¢ãƒ€ãƒ—タ関数をソース・ヘッダーに出力する.
    144                         # 一般化指定は,`cell`または`subscript`の一方のみ行うことができる.
     121                        # 結合先の情報に応じたアダプタ関数をソース・ヘッダーに出力する.
     122                        # 一般化指定は,`cell`または`subscript`の一方のみ行うことができる.
    145123                        #
    146124                        # @param [AdapterGenerator] context
    147                         # @param [String] fn_name 関数名.
    148                         # @param [Cell, Symbol] cell セル.セルについて一般化する場合は `:generic`
    149                         # @param [Integer, Symbol, nil] subscript 添字.添字について一般化する場合は `:generic`
     125                        # @param [String] fn_name 関数名.
     126                        # @param [Cell, Symbol] cell セル.セルについて一般化する場合は `:generic`
     127                        # @param [Integer, Symbol, nil] subscript 添字.添字について一般化する場合は `:generic`
    150128                        # @private
    151129                        def generate_inner(context, fn_name, cell, subscript)
     
    158136                                ct = @port.get_celltype
    159137
    160                                 # シングルトンセルタイプ以外では,CELLIDXの指定がå¿
    161 è¦ï¼Ž
     138                                # シングルトンセルタイプ以外では,CELLIDXの指定が必要.
    162139                                unless ct.is_singleton?
    163140                                        if cell == :generic
    164141                                                params << "(CELLIDX)extinf"
    165142                                        else
    166                                                 # セルのCELLIDXを得る
     143                                                # セルのCELLIDXを得る
    167144                                                if ct.has_INIB? || ct.has_CB?
    168145                                                        params << ct.get_name_array(cell)[7]
     
    173150                                end
    174151
    175                                 # 受け口é
    176 åˆ—の添字.
     152                                # 受け口配列の添字.
    177153                                if @port.get_array_size
    178154                                        if subscript == :generic
     
    192168                        end
    193169
    194                         # 指定したJoinに対応するアダプタ関数ハンドルを取得する.
    195                         # @return [Array] アダプタ関数ハンドル.
     170                        # 指定したJoinに対応するアダプタ関数ハンドルを取得する.
     171                        # @return [Array] アダプタ関数ハンドル.
    196172                        def make_adapter_handle(join)
    197173                                prop = EntryProperty.from_join(join)
     
    203179                        end
    204180
    205                         # ソース・ヘッダーの記述を生成する.
     181                        # ソース・ヘッダーの記述を生成する.
    206182                        # @param [AdapterGenerator] context
    207183                        def generate(context)
     
    217193                                no_cellidx = false
    218194                                if !(ct.has_INIB? || ct.has_CB?)
    219                                         # CB, INIB最適化により,CB, INIBが両方不要になったケース.
    220                                         # CELLIDXが不要であるので,セルについて一般化しても意味
    221                                         # はないので,添字による一般化を選択する.
     195                                        # CB, INIB最適化により,CB, INIBが両方不要になったケース.
     196                                        # CELLIDXが不要であるので,セルについて一般化しても意味
     197                                        # はないので,添字による一般化を選択する.
    222198                                        generalize_by_cell_idx = false
    223199                                        no_cellidx = true
    224200
    225                                         # å
    226 ¨ã¦ã®ã‚»ãƒ«ã‚’同一視する.
     201                                        # 全てのセルを同一視する.
    227202                                        cells = { @props[0].cell => @props }
    228203
    229204                                        header_file.print " * No INIB & CB: generalized by subscript\n"
    230205                                elsif @port.get_array_size
    231                                         # 一般化パターンの分類を行うために,受け口側セルや添字の
    232                                         # パターン数を分析して,最適な方を選択する.
     206                                        # 一般化パターンの分類を行うために,受け口側セルや添字の
     207                                        # パターン数を分析して,最適な方を選択する.
    233208                                        generalize_by_cell_idx = cells.length >= subscripts.length
    234209                                        if generalize_by_cell_idx
     
    238213                                        end
    239214                                else
    240                                         # 常にCELLIDXで一般化
     215                                        # 常にCELLIDXで一般化
    241216                                        generalize_by_cell_idx = true
    242217                                        header_file.print " * non-array entry port: generalized by cell\n"
     
    246221
    247222                                if generalize_by_cell_idx
    248                                         # CELLIDXについて一般化
     223                                        # CELLIDXについて一般化
    249224                                        subscripts.each { |subscript, props|
    250225                                                if subscript
    251226                                                        fn_name = "#{@global_name}_adap_#{subscript}"
    252227                                                else
    253                                                         # 受け口é
    254 åˆ—でない場合
     228                                                        # 受け口配列でない場合
    255229                                                        fn_name = "#{@global_name}_adap"
    256230                                                end
     
    262236                                                        handle = adapter_handle_for_entry_property(prop)
    263237
    264                                                         # セルのCELLIDXを得る
     238                                                        # セルのCELLIDXを得る
    265239                                                        if ct.has_INIB? || ct.has_CB?
    266240                                                                idx = ct.get_name_array(prop.cell)[7]
     
    273247                                        }
    274248                                else
    275                                         # 添字について一般化
     249                                        # 添字について一般化
    276250                                        cells.each { |cell, props|
    277251                                                if no_cellidx
    278                                                         # CB/INIB なし
     252                                                        # CB/INIB なし
    279253                                                        fn_name = "#{@global_name}_adap"
    280254                                                else
     
    302276                attr :header_file
    303277
    304                 # @param [String] celltype_name ハンドラ関数のセルタイプ.
    305                 # @param [String] prefix 名前衝突を防ぐためのプレフィックス.
     278                # @param [String] celltype_name ハンドラ関数のセルタイプ.
     279                # @param [String] prefix 名前衝突を防ぐためのプレフィックス.
    306280                def initialize(celltype_name, prefix)
    307281                        @celltype_name = celltype_name
     
    313287
    314288                # ===AdapterGenerator#make_adapter_handle===
    315                 # 指定した結合の呼出しを行うためのアダプタ関数ハンドルを生成する.
    316                 # @return [Array] アダプタ関数ハンドル.
     289                # 指定した結合の呼出しを行うためのアダプタ関数ハンドルを生成する.
     290                # @return [Array] アダプタ関数ハンドル.
    317291                def make_adapter_handle(join)
    318292                        entry_port = @entry_ports[join.get_rhs_port]
     
    326300
    327301                # ===AdapterGenerator#finish===
    328                 # 各受け口に対し,アダプタ関数を生成する.
     302                # 各受け口に対し,アダプタ関数を生成する.
    329303                def finish
    330304                        @source_file = AppFile.open( "#{$gen}/#{@celltype_name}.c" )
     
    336310                @header_file.print "\n/* Generated by #{self.class.name} */\n\n"
    337311
    338                         # NotifierPluginを使用するセルタイプが複数ある場合,それぞれに
    339                         # 対しAdapterGenerator#finishが呼び出される.tTimeEventHandler.hに
    340                         # 続けて書き込んでしまうと,ヘッダーガードの関係で2回目以降の記述
    341                         # が読み込まれなくなってしまう.このため,ファイル名 + セルタイプ名
    342                         # という少し特殊なヘッダーガードを用いる.
     312                        # NotifierPluginを使用するセルタイプが複数ある場合,それぞれに
     313                        # 対しAdapterGenerator#finishが呼び出される.tTimeEventHandler.hに
     314                        # 続けて書き込んでしまうと,ヘッダーガードの関係で2回目以降の記述
     315                        # が読み込まれなくなってしまう.このため,ファイル名 + セルタイプ名
     316                        # という少し特殊なヘッダーガードを用いる.
    343317                        header_guard = "#{@celltype_name}_H_#{@prefix}"
    344318
     
    346320                @header_file.print "\#define #{header_guard}\n\n"
    347321
    348                 # カーネルコンフィギュレータを実行する際,ハンドラ受け口のセルタイプ
    349                 # のセルCBの定義がå¿
    350 è¦ãªå ´åˆãŒã‚る.
     322                # カーネルコンフィギュレータを実行する際,ハンドラ受け口のセルタイプ
     323                # のセルCBの定義が必要な場合がある.
    351324                @header_file.print "\#include \"#{@celltype_name}_aux.h\"\n\n"
    352325
    353                         # 結合å
    354 ˆã®ã‚»ãƒ«ã‚¿ã‚¤ãƒ—の定義は,自分のセルのtecsgen.hよりもå
    355 ˆã«
    356                         # 読み込まなければならないが,このプラグインが複数実行されると,
    357                         # 順序が崩れてしまう.そこで,結合å
    358 ˆã®ã‚»ãƒ«ã‚¿ã‚¤ãƒ—の定義はもう一つの
    359                         # ヘッダーファイル(tCelltypeName_aux.h)から読み込むようにする.
     326                        # 結合先のセルタイプの定義は,自分のセルのtecsgen.hよりも先に
     327                        # 読み込まなければならないが,このプラグインが複数実行されると,
     328                        # 順序が崩れてしまう.そこで,結合先のセルタイプの定義はもう一つの
     329                        # ヘッダーファイル(tCelltypeName_aux.h)から読み込むようにする.
    360330                        aux_header_file = AppFile.open( "#{$gen}/#{@celltype_name}_aux.h" )
    361331                aux_header_file.print "\n/* Generated by #{self.class.name} */\n\n"
     
    368338                        cb_type_only_guard = "#{@celltype_name}_AUX_H_#{@prefix}_CB_TYPE_ONLY"
    369339
    370                         # 結合å
    371 ˆã®ã‚»ãƒ«ã‚¿ã‚¤ãƒ—の定義を読み込む
     340                        # 結合先のセルタイプの定義を読み込む
    372341                        aux_header_file.print "#ifndef TOPPERS_CB_TYPE_ONLY\n"
    373342                    aux_header_file.print "#define TOPPERS_CB_TYPE_ONLY\n"
     
    400369        end
    401370
    402         # ------ 通知のハンドラの種類の定義 -------
     371        # ------ 通知のハンドラの種類の定義 -------
    403372
    404373        class Handler
     
    410379        end
    411380
    412         # 通常のハンドラ
     381        # 通常のハンドラ
    413382        EVENT_HANDLER = Handler::new("ciNotificationHandler")
    414383
    415         # エラーハンドラ (通常のハンドラが失敗した場合に呼び出される)
     384        # エラーハンドラ (通常のハンドラが失敗した場合に呼び出される)
    416385        ERROR_HANDLER = Handler::new("ciErrorNotificationHandler")
    417386
     
    436405        end
    437406
    438         # ------ 通知の属性の定義 -------
     407        # ------ 通知の属性の定義 -------
    439408        #
    440         # ハンドラタイプに合致しない属性が指定された場合に
    441         # エラーを出力できるよう、å
    442 ¨ã¦ã®å±žæ€§ã‚’ここで列挙する。
     409        # ハンドラタイプに合致しない属性が指定された場合に
     410        # エラーを出力できるよう、全ての属性をここで列挙する。
    443411
    444412        SETVAR_ADDR_ATTR =   HandlerAttribute::new("setVariableAddress")
     
    456424        ]
    457425
    458         # ------ ハンドラタイプの定義 -------
     426        # ------ ハンドラタイプの定義 -------
    459427
    460428        class BaseHandlerType
     
    470438
    471439            #=== NotifierPlugin#BaseHandlerType#validate_join
    472             # 指定したセルの結合å
    473 ˆãŒã€ã“のハンドラタイプに該当するかを検証
    474             # handler:: Handler : ハンドラ
    475             # cell:: Cell : セル
    476             # join:: Join : 結合 (declarationがPortであるもの)
     440            # 指定したセルの結合先が、このハンドラタイプに該当するかを検証
     441            # handler:: Handler : ハンドラ
     442            # cell:: Cell : セル
     443            # join:: Join : 結合 (declarationがPortであるもの)
    477444                def validate_join(handler, cell, join)
    478445                return !generate_attr_map(handler, cell).nil?
     
    480447
    481448            #=== NotifierPlugin#BaseHandlerType#generate_attr_map
    482             # 指定したセルの属性と、既知のHandlerAttributeのマッピングを
    483             # 生成し、Hash<HandlerAttribute, Join> (各属性とそれに対応する
    484             # Join(declarationがDeclのもの)を表すHash)、あるいは、
    485                 # マッピングが行えない場合(属性の不足、過剰)はnilを返す。
     449            # 指定したセルの属性と、既知のHandlerAttributeのマッピングを
     450            # 生成し、Hash<HandlerAttribute, Join> (各属性とそれに対応する
     451            # Join(declarationがDeclのもの)を表すHash)、あるいは、
     452                # マッピングが行えない場合(属性の不足、過剰)はnilを返す。
    486453            #
    487             # handler:: Handler : ハンドラ
    488             # cell:: Cell : セル
     454            # handler:: Handler : ハンドラ
     455            # cell:: Cell : セル
    489456                def generate_attr_map(handler, cell)
    490457                        map = {}
     
    496463                                join = join_list.get_item(attr_name.to_sym)
    497464
    498                                 # このセルタイプにおいてå¿
    499 é ˆã®å±žæ€§ã‹?
     465                                # このセルタイプにおいて必須の属性か?
    500466                                is_required = @required_attributes.include?(known_attr)
    501467
    502                                 # 属性の指定が不足している? or 過剰?
    503                                 # 注: ハンドラタイプの判別には、セルで値が指定されているか
    504                                 #     ãŒè€ƒæ
    505 ®ã•ã‚Œã‚‹ã€‚セルタイプで初期値が指定されていても、
    506                                 #     ãã‚Œã¯ãƒãƒ³ãƒ‰ãƒ©ã‚¿ã‚¤ãƒ—の決定に影響しない。
     468                                # 属性の指定が不足している? or 過剰?
     469                                # 注: ハンドラタイプの判別には、セルで値が指定されているか
     470                                #     が考慮される。セルタイプで初期値が指定されていても、
     471                                #     それはハンドラタイプの決定に影響しない。
    507472                                return nil if join.nil? != !is_required
    508473
    509                                 # å¿
    510 è¦ã®ãªã„属性であり、指定もされていないので飛ばす
     474                                # 必要のない属性であり、指定もされていないので飛ばす
    511475                                next if join.nil?
    512476
    513                                 # TODO: attrの結合であることを検証
     477                                # TODO: attrの結合であることを検証
    514478
    515479                                map[known_attr] = join
     
    520484
    521485            #=== NotifierPlugin#BaseHandlerType#gen_cfg_handler_type
    522             # タイムイベントの通知の種類を表すコンフィギュレータの記述を生成し、Stringまたはnilを返す
    523             # handler:: Handler : ハンドラ
     486            # タイムイベントの通知の種類を表すコンフィギュレータの記述を生成し、Stringまたはnilを返す
     487            # handler:: Handler : ハンドラ
    524488                def gen_cfg_handler_type(handler)
    525489                raise "called abstract method gen_cfg_handler_type"
     
    527491
    528492            #=== NotifierPlugin#BaseHandlerType#gen_cfg_handler_parameters
    529             # タイムイベントの通知の引数を表すコンフィギュレータの記述を生成し、String[]を返す
    530             # handler:: Handler : ハンドラ
    531             # join:: Join : 結合 (declarationがPortであるもの)
     493            # タイムイベントの通知の引数を表すコンフィギュレータの記述を生成し、String[]を返す
     494            # handler:: Handler : ハンドラ
     495            # join:: Join : 結合 (declarationがPortであるもの)
    532496            # attrMap:: Hash<HandlerAttribute, Join> :
    533             #     å„属性とそれに対応するJoin (declarationがDeclのもの)
    534             # cell:: Cell : セル
    535                 # adpt_gen:: AdapterGenerator : アダプタ関数を生成するオブジェクト
     497            #     各属性とそれに対応するJoin (declarationがDeclのもの)
     498            # cell:: Cell : セル
     499                # adpt_gen:: AdapterGenerator : アダプタ関数を生成するオブジェクト
    536500                def gen_cfg_handler_parameters(handler, join, attrMap, cell, adpt_gen)
    537501                return nil
     
    539503
    540504            #=== NotifierPlugin#BaseHandlerType#might_fail
    541             # 通知の際、エラーが発生し、その結果エラー通知を呼ぶå¿
    542 è¦ãŒç”Ÿã˜ã‚‹
    543             # かどうかを返す。
     505            # 通知の際、エラーが発生し、その結果エラー通知を呼ぶ必要が生じる
     506            # かどうかを返す。
    544507                def might_fail
    545508                        return false
     
    557520                        id_attr = join.get_rhs_cell.get_celltype.find(:id)
    558521                        if id_attr_join
    559                                 # セル生成時に初期化する場合
     522                                # セル生成時に初期化する場合
    560523                                id = id_attr_join.get_rhs.to_s
    561524                        else
    562                                 # セルタイプの初期化値を使う場合
     525                                # セルタイプの初期化値を使う場合
    563526                                id = id_attr.get_initializer.to_s
    564527                        end
    565528
    566                         # $id$等の置換
     529                        # $id$等の置換
    567530                        name_array = taskCell.get_celltype.get_name_array(taskCell)
    568531                        id = taskCell.get_celltype.subst_name(id, name_array)
     
    617580                        var_value = attrMap[SETVAR_VALUE_ATTR].get_rhs.to_s
    618581
    619                         # $id$等の置換
     582                        # $id$等の置換
    620583                        name_array = cell.get_celltype.get_name_array(cell)
    621584                        var_addr = cell.get_celltype.subst_name(var_addr, name_array)
     
    646609                        var_addr = attrMap[SETVAR_ADDR_ATTR].get_rhs.to_s
    647610
    648                         # $id$等の置換
     611                        # $id$等の置換
    649612                        name_array = cell.get_celltype.get_name_array(cell)
    650613                        var_addr = cell.get_celltype.subst_name(var_addr, name_array)
     
    673636                        var_addr = attrMap[INCVAR_ADDR_ATTR].get_rhs.to_s
    674637
    675                         # $id$等の置換
     638                        # $id$等の置換
    676639                        name_array = cell.get_celltype.get_name_array(cell)
    677640                        var_addr = cell.get_celltype.subst_name(var_addr, name_array)
     
    697660                        id_attr = join.get_rhs_cell.get_celltype.find(:id)
    698661                        if id_attr_join
    699                                 # セル生成時に初期化する場合
     662                                # セル生成時に初期化する場合
    700663                                id = id_attr_join.get_rhs.to_s
    701664                        else
    702                                 # セルタイプの初期化値を使う場合
     665                                # セルタイプの初期化値を使う場合
    703666                                id = id_attr.get_initializer.to_s
    704667                        end
    705668
    706                         # $id$等の置換
     669                        # $id$等の置換
    707670                        name_array = semaphoreCell.get_celltype.get_name_array(semaphoreCell)
    708671                        id = semaphoreCell.get_celltype.subst_name(id, name_array)
     
    737700                        id_attr = join.get_rhs_cell.get_celltype.find(:id)
    738701                        if id_attr_join
    739                                 # セル生成時に初期化する場合
     702                                # セル生成時に初期化する場合
    740703                                id = id_attr_join.get_rhs.to_s
    741704                        else
    742                                 # セルタイプの初期化値を使う場合
     705                                # セルタイプの初期化値を使う場合
    743706                                id = id_attr.get_initializer.to_s
    744707                        end
    745708                        flg_pattern = attrMap[SETFLG_FLAG_ATTR].get_rhs.to_s
    746709
    747                         # $id$等の置換
     710                        # $id$等の置換
    748711                        name_array = eventflagCell.get_celltype.get_name_array(eventflagCell)
    749712                        id = eventflagCell.get_celltype.subst_name(id, name_array)
     
    778741                        id_attr = join.get_rhs_cell.get_celltype.find(:id)
    779742                        if id_attr_join
    780                                 # セル生成時に初期化する場合
     743                                # セル生成時に初期化する場合
    781744                                id = id_attr_join.get_rhs.to_s
    782745                        else
    783                                 # セルタイプの初期化値を使う場合
     746                                # セルタイプの初期化値を使う場合
    784747                                id = id_attr.get_initializer.to_s
    785748                        end
    786749
    787                         # $id$等の置換
     750                        # $id$等の置換
    788751                        name_array = dataqueueCell.get_celltype.get_name_array(dataqueueCell)
    789752                        id = dataqueueCell.get_celltype.subst_name(id, name_array)
     
    812775                        sent_value = attrMap[SNDDTQ_VALUE_ATTR].get_rhs.to_s
    813776
    814                         # $id$等の置換
     777                        # $id$等の置換
    815778                        name_array = cell.get_celltype.get_name_array(cell)
    816779                        sent_value = cell.get_celltype.subst_name(sent_value, name_array)
     
    854817                end
    855818                def gen_cfg_handler_parameters(handler, join, attrMap, cell, adpt_gen)
    856                         # tTimeEventHandlerの結合å
    857 ˆã‚’取得
     819                        # tTimeEventHandlerの結合先を取得
    858820                        handler_cell = join.get_rhs_cell
    859821                call_join = handler_cell.get_join_list.get_item(:ciHandlerBody)
    860822
    861                         # 結合されていない場合はtecsgenがエラーを出すはずなのでここでは
    862                         # エラーにせず無視する.
     823                        # 結合されていない場合はtecsgenがエラーを出すはずなのでここでは
     824                        # エラーにせず無視する.
    863825                        return [] unless call_join
    864826
    865                         # アダプタ関数ハンドルを取得
     827                        # アダプタ関数ハンドルを取得
    866828                        adapter_handle = adpt_gen.make_adapter_handle(call_join)
    867829                return [adapter_handle[1], adapter_handle[0]]
     
    897859
    898860    #@celltype:: Celltype
    899     #@option:: String     :オプション文字列
     861    #@option:: String     :オプション文字列
    900862    def initialize( celltype, option )
    901863        super
    902864        @plugin_arg_check_proc_tab = NotifierPluginArgProc
    903865        @plugin_arg_str = option
    904         @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' )    # 前後の "" を取り除く
     866        @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' )    # 前後の "" を取り除く
    905867        @plugin_arg_str.sub!( /(.*)"\z/, '\1' )
    906868        @factory = nil
     
    940902        kernelCfg.print "\#include \"tTimeEventHandler.h\"\n"
    941903
    942                 # アダプタ関数を生成する準備
     904                # アダプタ関数を生成する準備
    943905                @adpt_gen = AdapterGenerator.new("tTimeEventHandler", @celltype.get_global_name)
    944906
    945         # 属性置換が行えることを検証する。
    946         # ここで行うのは、factoryで指定された属性名が
    947         # 存在することを確認し、しなければエラーを出力することのみである。
    948         # セルごとの処理の最中にエラーを出力することも可能ではあるが、
    949         # そうするとセルタイプ側の問題であるのにもかかわらず、セルごとに
    950         # エラーが表示されてしまう。
     907        # 属性置換が行えることを検証する。
     908        # ここで行うのは、factoryで指定された属性名が
     909        # 存在することを確認し、しなければエラーを出力することのみである。
     910        # セルごとの処理の最中にエラーを出力することも可能ではあるが、
     911        # そうするとセルタイプ側の問題であるのにもかかわらず、セルごとに
     912        # エラーが表示されてしまう。
    951913        # {{attribute_name}} -> attribute_value
    952914        @factory.scan(/\{\{([a-zA-Z0-9_]*?)\}\}/) { |match|
    953915                name = $1.to_sym
    954916
    955                 # {{_handler_params_}} はハンドラに関する指定。プラグインå†
    956 ã§å€¤ãŒç”Ÿæˆã•ã‚Œã‚‹
     917                # {{_handler_params_}} はハンドラに関する指定。プラグイン内で値が生成される
    957918                next if name == :_handler_params_
    958919
     
    968929        }
    969930
    970                 # アダプタ関数の生成を完了させる
     931                # アダプタ関数の生成を完了させる
    971932                @adpt_gen.finish
    972933
     
    982943        handler_flag = nil
    983944
    984                 # ignoreErrorsを取得
     945                # ignoreErrorsを取得
    985946                ignoreErrors_attr_join = cell.get_join_list.get_item(:ignoreErrors)
    986947                ignoreErrors_attr = cell.get_celltype.find(:ignoreErrors)
    987948                if ignoreErrors_attr_join
    988                         # セル生成時に初期化する場合
     949                        # セル生成時に初期化する場合
    989950                        ignoreErrors = ignoreErrors_attr_join.get_rhs.to_s
    990951                else
    991                         # セルタイプの初期化値を使う場合
     952                        # セルタイプの初期化値を使う場合
    992953                        ignoreErrors = ignoreErrors_attr.get_initializer.to_s
    993954                end
     
    1002963
    1003964        [EVENT_HANDLER, ERROR_HANDLER].each { |handler|
    1004                 # 呼び口の結合を取得
     965                # 呼び口の結合を取得
    1005966                call_join = cell.get_join_list.get_item(handler.call_port_name.to_sym)
    1006967
    1007                 # ハンドラタイプを判別する
     968                # ハンドラタイプを判別する
    1008969                matches = HANDLER_TYPES.select { |handler_type|
    1009970                        handler_type.validate_join(handler, cell, call_join)
     
    1015976                end
    1016977
    1017                         # 最初に見つかった有効なハンドラタイプを使用
     978                        # 最初に見つかった有効なハンドラタイプを使用
    1018979                ht = matches[0]
    1019980
    1020                         # 通知ハンドラで「エラーが発生するはずがない」のに「エラーハンドラが指定されている」
    1021                         # もしくはその逆のパターンを検出する。
    1022                         # (handler_flagがnilである場合、ハンドラタイプが不明であり、エラーが発生するか不明
    1023                         #  なため、検出は行わない。)
     981                        # 通知ハンドラで「エラーが発生するはずがない」のに「エラーハンドラが指定されている」
     982                        # もしくはその逆のパターンを検出する。
     983                        # (handler_flagがnilである場合、ハンドラタイプが不明であり、エラーが発生するか不明
     984                        #  なため、検出は行わない。)
    1024985                if handler == ERROR_HANDLER && !ht.is_a?(NullHandlerType) && !event_handler_might_fail
    1025986                        cdl_error( "ASP1004 cell $1: handler type $2 which never raises an error was inferred for the normal notification handler, but an error notification handler was specified.",
     
    1036997                end
    1037998
    1038                         # 通知方法の静的API記述を生成する
     999                        # 通知方法の静的API記述を生成する
    10391000                handler_flag = ht.gen_cfg_handler_type(handler)
    10401001                handler_flags << handler_flag if handler_flag
     
    10501011        }
    10511012
    1052                 # $id$等の置換
     1013                # $id$等の置換
    10531014                name_array = cell.get_celltype.get_name_array(cell)
    10541015                handler_args.collect! { |e|
     
    10601021                }
    10611022
    1062         # tecsgen.cfgの記述を生成する。
    1063         # factoryに対し、パラメータ置換を行う。
     1023        # tecsgen.cfgの記述を生成する。
     1024        # factoryに対し、パラメータ置換を行う。
    10641025        # {{attribute_name}} -> attribute_value
    10651026        text = @factory.gsub(/\{\{([a-zA-Z0-9_]*?)\}\}/) { |match|
     
    10671028                        subst_attr = cell.get_celltype.find(name)
    10681029
    1069                         # {{_handler_params_}} はハンドラの指定に置換する。
     1030                        # {{_handler_params_}} はハンドラの指定に置換する。
    10701031                        if name == :_handler_params_
    10711032                        args_joined = handler_flags.join(' | ')
     
    10781039
    10791040                        unless subst_attr
    1080                                 # 属性が見つからないというエラーはすでに報告されているので
    1081                                 # ここではダミー値を返しておくだけである。
     1041                                # 属性が見つからないというエラーはすでに報告されているので
     1042                                # ここではダミー値を返しておくだけである。
    10821043                                next ""
    10831044                        end
     
    10851046                        subst_attr_join = cell.get_join_list.get_item(name)
    10861047                        if subst_attr_join
    1087                                 # セル生成時に初期化する場合
     1048                                # セル生成時に初期化する場合
    10881049                                subst = subst_attr_join.get_rhs.to_s
    10891050                        else
    1090                                 # セルタイプの初期化値を使う場合
     1051                                # セルタイプの初期化値を使う場合
    10911052                                subst = subst_attr.get_initializer.to_s
    10921053                        end
    10931054
    1094                         # $id$等の置換
     1055                        # $id$等の置換
    10951056                        cell.get_celltype.subst_name(subst, name_array)
    10961057        }
    10971058
    1098         # 出力
     1059        # 出力
    10991060        kernelCfg.puts text
    11001061
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/OpaqueMarshalerPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: OpaqueMarshalerPlugin.rb 2061 2014-05-31 22:15:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
    5540#== OpaqueMarshaler
    56 # OpaqueRPC 用のマーシャラ、アンマーシャラセルタイプを生成するシグニチャプラグイン
     41# OpaqueRPC 用のマーシャラ、アンマーシャラセルタイプを生成するシグニチャプラグイン
    5742
    5843require_tecsgen_lib "lib/GenOpaqueMarshaler.rb"
     
    7661    # check_PPAllocator
    7762    if @signature.need_PPAllocator?(true) then
    78       @PPAllocatorSize = 1    # PPAllocatorのå¿
    79 è¦æ€§æœ‰ã®ãŸã‚ã«è¨­å®š (サイズは使われない)
     63      @PPAllocatorSize = 1    # PPAllocatorの必要性有のために設定 (サイズは使われない)
    8064      necessity = "Necessary"
    8165    else
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/OpaqueRPCPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: OpaqueRPCPlugin.rb 2061 2014-05-31 22:15:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
    55 # 以下を仮定(制限事é 
    56 ï¼‰
    57 #  呼びå
    58 ƒã€å‘¼ã³å
    59 ˆã®ã‚¨ãƒ³ãƒ‡ã‚£ã‚¢ãƒ³ã€char, short, int_t, long_t, intptr_t のサイズが同じ
    60 #  有符号、無符号でサイズが同じ
     40# 以下を仮定(制限事項)
     41#  呼び元、呼び先のエンディアン、char, short, int_t, long_t, intptr_t のサイズが同じ
     42#  有符号、無符号でサイズが同じ
    6143
    6244require_tecsgen_lib "lib/GenOpaqueMarshaler.rb"
     
    6850  include GenParamCopy
    6951
    70   # OpaqueRPCPlugin 専用のオプション
    71   OpaqueRPCPluginArgProc = RPCPluginArgProc.dup  # 複製を作ってå
    72 ƒã‚’変更しないようにする
     52  # OpaqueRPCPlugin 専用のオプション
     53  OpaqueRPCPluginArgProc = RPCPluginArgProc.dup  # 複製を作って元を変更しないようにする
    7354  OpaqueRPCPluginArgProc[ "noClientSemaphore"  ] = Proc.new { |obj,rhs| obj.set_noClientSemaphore rhs }
    7455
    75   #=== RPCPlugin の initialize
    76   #  説明は ThroughPlugin (plugin.rb) を参ç
    77 §
     56  #=== RPCPlugin の initialize
     57  #  説明は ThroughPlugin (plugin.rb) を参照
    7858  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell )
    7959    super
     
    9878    gen_marshaler_celltype
    9979
    100     # チャンネル composite セルタイプの生成
    101     #  ここで生成された CDL ファイルは、tecsgen が直接 import するのではなく
    102     #  セルコードの CDL から import される
     80    # チャンネル composite セルタイプの生成
     81    #  ここで生成された CDL ファイルは、tecsgen が直接 import するのではなく
     82    #  セルコードの CDL から import される
    10383
    10484    f = CFile.open( @rpc_client_channel_celltype_file_name, "w" )
    105     # 同じå†
    106 å®¹ã‚’二度書く可能性あり (AppFile は不可)
     85    # 同じ内容を二度書く可能性あり (AppFile は不可)
    10786
    10887    f.print <<EOT
     
    142121
    143122    f = CFile.open( @rpc_server_channel_celltype_file_name, "w" )
    144     # 同じå†
    145 å®¹ã‚’二度書く可能性あり (AppFile は不可)
     123    # 同じ内容を二度書く可能性あり (AppFile は不可)
    146124
    147125    f.print <<EOT
     
    173151  end
    174152
    175   #===  through cell コードを生成
     153  #===  through cell コードを生成
    176154  #
    177155  #
     
    180158    gen_plugin_decl_code( file )
    181159
    182     # セルを探す
     160    # セルを探す
    183161    # path =["::",@next_cell.get_name]  # mikan namespace
    184162    # cell = Namespace.find( path )
     
    191169EOT
    192170
    193     ##### クライアント側のセルの生成 #####
     171    ##### クライアント側のセルの生成 #####
    194172    nest = @start_region.gen_region_str_pre file
    195173    nest_str = "  " * nest
    196174
    197     # セマフォの生成
     175    # セマフォの生成
    198176    if @b_noClientSemaphore == false then
    199177      file.print <<EOT
     
    206184    end
    207185
    208     # クライアント側チャンネル (TINET, Socket など)の生成
     186    # クライアント側チャンネル (TINET, Socket など)の生成
    209187    file.print <<EOT
    210188#{nest_str}  //  Client Side Channel
     
    216194EOT
    217195
    218     # セマフォの結合文
     196    # セマフォの結合文
    219197    if @b_noClientSemaphore == false then
    220198      semaphore = "#{nest_str}    cLockChannel = #{@serverChannelCell}_Semaphore.eSemaphore;\n"
     
    223201    end
    224202
    225     ### クライアント側チャンネル (マーシャラ+TDR)の生成 ###
    226     # アロケータの指定があるか?
     203    ### クライアント側チャンネル (マーシャラ+TDR)の生成 ###
     204    # アロケータの指定があるか?
    227205    if cell.get_allocator_list.length > 0 then
    228206
     
    240218
    241219        file.print delim
    242         delim = ",\n"        # 最終行には出さない
    243 
    244         if subsc then        # é
    245 åˆ—添数
     220        delim = ",\n"        # 最終行には出さない
     221
     222        if subsc then        # 配列添数
    246223          subsc_str = '[#{subsc}]'
    247224        else
     
    249226        end
    250227
    251         eport = "eThroughEntry" #RPCの受け口名に変更
     228        eport = "eThroughEntry" #RPCの受け口名に変更
    252229        file.print nest_str
    253230        file.print  "#{eport}#{subsc_str}.#{func}.#{buf} = #{alloc_str}"
     
    269246
    270247EOT
    271     ### END: クライアント側チャンネル (マーシャラ+TDR)の生成 ###
     248    ### END: クライアント側チャンネル (マーシャラ+TDR)の生成 ###
    272249
    273250    @start_region.gen_region_str_post file
    274251    file.print "\n\n"
    275252
    276     ##### サーバー側のセルの生成 #####
     253    ##### サーバー側のセルの生成 #####
    277254    nest = @end_region.gen_region_str_pre file
    278255    nest_str = "  " * nest
     
    290267    end
    291268
    292     # サーバー側チャンネル (TINET, Socket など)
     269    # サーバー側チャンネル (TINET, Socket など)
    293270    file.print <<EOT
    294271
     
    299276EOT
    300277
    301     # サーバー側チャンネル (アンマーシャラ+TDR)
     278    # サーバー側チャンネル (アンマーシャラ+TDR)
    302279    file.print <<EOT
    303280
     
    309286EOT
    310287
    311     # サーバー側タスクメイン
     288    # サーバー側タスクメイン
    312289    file.print <<EOT
    313290
     
    318295EOT
    319296
    320     # サーバー側タスク
     297    # サーバー側タスク
    321298    file.print <<EOT
    322299
     
    332309  end
    333310
    334   #=== プラグイン引数 noClientSemaphore のチェック
     311  #=== プラグイン引数 noClientSemaphore のチェック
    335312  def set_noClientSemaphore rhs
    336313    rhs = rhs.to_sym
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/RPCPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: RPCPlugin.rb 2061 2014-05-31 22:15:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
     
    5641require_tecsgen_lib "lib/GenParamCopy.rb"
    5742
    58 #= Transparent RPC プラグイン
    59 # Transparent RPC チャンネルを生成する
    60 # プラグイン引数は以下の RPCPluginArgProc を参ç
    61 §
    62 
    63 # mikan through plugin: namespace が考æ
    64 ®ã•ã‚Œã¦ã„ない
    65 # これを利用する場合、以下のように toppers_jsp.cdl sChannel.cdl を指定するå¿
    66 è¦ãŒã‚ã‚‹
     43#= Transparent RPC プラグイン
     44# Transparent RPC チャンネルを生成する
     45# プラグイン引数は以下の RPCPluginArgProc を参照
     46
     47# mikan through plugin: namespace が考慮されていない
     48# これを利用する場合、以下のように toppers_jsp.cdl sChannel.cdl を指定する必要がある
    6749# tecsgen toppers_jsp.cdl sChannel.cdl your_description.cdl
    6850
    69 # 以下を仮定(制限事é 
    70 ï¼‰
    71 #  呼びå
    72 ƒã€å‘¼ã³å
    73 ˆã®ã‚¨ãƒ³ãƒ‡ã‚£ã‚¢ãƒ³ã€char, short, int_t, long_t, intptr_t のサイズが同じ
    74 #  有符号、無符号でサイズが同じ
     51# 以下を仮定(制限事項)
     52#  呼び元、呼び先のエンディアン、char, short, int_t, long_t, intptr_t のサイズが同じ
     53#  有符号、無符号でサイズが同じ
    7554
    7655class RPCPlugin < ThroughPlugin
     
    7958  include GenParamCopy
    8059
    81   # RPCPlugin 専用のオプション
    82   TransparentRPCPluginArgProc = RPCPluginArgProc.dup  # 複製を作ってå
    83 ƒã‚’変更しないようにする
     60  # RPCPlugin 専用のオプション
     61  TransparentRPCPluginArgProc = RPCPluginArgProc.dup  # 複製を作って元を変更しないようにする
    8462  TransparentRPCPluginArgProc[ "noClientSemaphore"  ] = Proc.new { |obj,rhs| obj.set_noClientSemaphore rhs }
    8563  TransparentRPCPluginArgProc[ "semaphoreCelltype"  ] = Proc.new { |obj,rhs| obj.set_semaphoreCelltype rhs }
    8664
    87   #=== RPCPlugin の initialize
    88   #  説明は ThroughPlugin (plugin.rb) を参ç
    89 §
     65  #=== RPCPlugin の initialize
     66  #  説明は ThroughPlugin (plugin.rb) を参照
    9067  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell )
    9168    super
     
    9471    initialize_transparent_marshaler cell_name
    9572
    96     # オプション:GenTransparentMarshaler 参ç
    97 §
     73    # オプション:GenTransparentMarshaler 参照
    9874    @plugin_arg_check_proc_tab = TransparentRPCPluginArgProc
    9975    parse_plugin_arg
     
    10581      if @PPAllocatorSize == nil then
    10682        cdl_error( "PPAllocatorSize must be speicified for oneway [in] array" )
    107         # @PPAllocatorSize = 0   # 仮に 0 としておく (cdl の構文エラーを避けるため)
     83        # @PPAllocatorSize = 0   # 仮に 0 としておく (cdl の構文エラーを避けるため)
    10884      end
    10985    end
     
    11288#      if func_decl.get_type.is_oneway? then
    11389#        if ( param_decl.get_size || param_decl.get_count ) && param_decl.get_string then
    114 #          cdl_error( "array of string not supported for oneway function in Transparent RPC" )  # mikan 文字列のé
    115 åˆ—
     90#          cdl_error( "array of string not supported for oneway function in Transparent RPC" )  # mikan 文字列の配列
    11691#        elsif param_decl.get_string == -1 then
    117 #          cdl_error( "length unspecified string is not permited for oneway function in Transparent RPC" )  # mikan 長さ未指定文字列
     92#          cdl_error( "length unspecified string is not permited for oneway function in Transparent RPC" )  # mikan 長さ未指定文字列
    11893#        end
    11994#      end
     
    12196  end
    12297
    123   #=== plugin の宣言コード (celltype の定義) 生成
     98  #=== plugin の宣言コード (celltype の定義) 生成
    12499  def gen_plugin_decl_code( file )
    125100
    126101    ct_name = "#{@ct_name}_#{@channelCelltype}"
    127102
    128     # このセルタイプ(同じシグニチャ)は既に生成されているか?
     103    # このセルタイプ(同じシグニチャ)は既に生成されているか?
    129104    if @@generated_celltype[ ct_name ] == nil then
    130105      @@generated_celltype[ ct_name ] = [ self ]
     
    159134
    160135    f = CFile.open( @rpc_channel_celltype_file_name, "w" )
    161     # 同じå†
    162 å®¹ã‚’二度書く可能性あり (AppFile は不可)
     136    # 同じ内容を二度書く可能性あり (AppFile は不可)
    163137
    164138    f.print <<EOT
     
    199173};
    200174EOT
    201     # mikan stackSize option & 最新 tecs_package 対応
     175    # mikan stackSize option & 最新 tecs_package 対応
    202176
    203177    f.close
    204178  end
    205179
    206   #===  through cell コードを生成
     180  #===  through cell コードを生成
    207181  #
    208182  #
     
    211185    gen_plugin_decl_code( file )
    212186
    213     # セルを探す
     187    # セルを探す
    214188    # path =["::",@next_cell.get_global_name]
    215189    # cell = Namespace.find( path )
     
    225199
    226200    file.print <<EOT
    227 #{indent_str}// 一方向チャンネルセル
     201#{indent_str}// 一方向チャンネルセル
    228202#{indent_str}cell #{@channelCelltype} #{@channelCellName} {
    229203#{indent_str}};
    230204
    231 #{indent_str}// RPC チャンネルセル
    232 EOT
    233 
    234     # #473 が解決された場合、composite リレーアロケータに変更すべき
    235     # アロケータの指定があるか?
     205#{indent_str}// RPC チャンネルセル
     206EOT
     207
     208    # #473 が解決された場合、composite リレーアロケータに変更すべき
     209    # アロケータの指定があるか?
    236210    if cell.get_allocator_list.length > 0 then
    237211
     
    242216
    243217        file.print delim
    244         delim = ",\n#{indent_str}           "        # 最終行には出さない
    245 
    246         if subsc then        # é
    247 åˆ—添数
     218        delim = ",\n#{indent_str}           "        # 最終行には出さない
     219
     220        if subsc then        # 配列添数
    248221          subsc_str = '[#{subsc}]'
    249222        else
     
    251224        end
    252225
    253         eport = "eThroughEntry" #RPCの受け口名に変更
     226        eport = "eThroughEntry" #RPCの受け口名に変更
    254227        file.print  "#{eport}#{subsc_str}.#{func}.#{buf} = #{alloc}"
    255228      end
     
    270243
    271244
    272   #=== プラグイン引数 noClientSemaphore のチェック
     245  #=== プラグイン引数 noClientSemaphore のチェック
    273246  def set_noClientSemaphore rhs
    274247    rhs = rhs.to_sym
     
    282255  end
    283256
    284   #=== プラグイン引数 semaphoreCelltype のチェック
     257  #=== プラグイン引数 semaphoreCelltype のチェック
    285258  def set_semaphoreCelltype rhs
    286259    @semaphoreCelltype = rhs.to_sym
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/SharedOpaqueRPCPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: SharedOpaqueRPCPlugin.rb 2061 2014-05-31 22:15:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
     
    5641require_tecsgen_lib "lib/GenParamCopy.rb"
    5742
    58 #= SharedOpaqueRPC プラグイン
    59 # SharedOpaqueRPC チャンネルを生成する
    60 # プラグイン引数は GenTransparentMarshaler 参ç
    61 §
    62 
    63 # mikan through plugin: namespace が考æ
    64 ®ã•ã‚Œã¦ã„ない
    65 # これを利用する場合、以下のように toppers_jsp.cdl sChannel.cdl を指定するå¿
    66 è¦ãŒã‚ã‚‹
     43#= SharedOpaqueRPC プラグイン
     44# SharedOpaqueRPC チャンネルを生成する
     45# プラグイン引数は GenTransparentMarshaler 参照
     46
     47# mikan through plugin: namespace が考慮されていない
     48# これを利用する場合、以下のように toppers_jsp.cdl sChannel.cdl を指定する必要がある
    6749# tecsgen toppers_jsp.cdl sChannel.cdl your_description.cdl
    6850
    69 # 以下を仮定(制限事é 
    70 ï¼‰
    71 #  呼びå
    72 ƒã€å‘¼ã³å
    73 ˆã®ã‚¨ãƒ³ãƒ‡ã‚£ã‚¢ãƒ³ã€char, short, int_t, long_t, intptr_t のサイズが同じ
    74 #  有符号、無符号でサイズが同じ
     51# 以下を仮定(制限事項)
     52#  呼び元、呼び先のエンディアン、char, short, int_t, long_t, intptr_t のサイズが同じ
     53#  有符号、無符号でサイズが同じ
    7554
    7655class SharedOpaqueRPCPlugin < ThroughPlugin
    7756
    78   # チャンネルをå
    79 ±æœ‰ã™ã‚‹ãƒ—ラグインオブジェクトへのハッシュリスト
     57  # チャンネルを共有するプラグインオブジェクトへのハッシュリスト
    8058  @@shared_channel_list = {}    # { chan_name => [ Plugin_obj0, Plugin_Obj1, ... ] }
    8159
     
    8462  include GenParamCopy
    8563
    86   # SharedOpaqueRPCPlugin 専用のオプション
    87   SharedOpaqueRPCPluginArgProc = RPCPluginArgProc.dup  # 複製を作ってå
    88 ƒã‚’変更しないようにする
     64  # SharedOpaqueRPCPlugin 専用のオプション
     65  SharedOpaqueRPCPluginArgProc = RPCPluginArgProc.dup  # 複製を作って元を変更しないようにする
    8966  SharedOpaqueRPCPluginArgProc[ "sharedChannelName"  ] = Proc.new { |obj,rhs| obj.set_sharedChannelName rhs }
    9067
    91   #=== RPCPlugin の initialize
    92   #  説明は ThroughPlugin (plugin.rb) を参ç
    93 §
     68  #=== RPCPlugin の initialize
     69  #  説明は ThroughPlugin (plugin.rb) を参照
    9470  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell )
    9571    super
    9672    initialize_opaque_marshaler
    97     @entry_port_name = :"eClientEntry"   # Marshaler の受け口名 (through セルのå
    98 ¥ã‚Šå£)
    99 
    100     # オプション:GenOpaqueMarshaler 参ç
    101 §
     73    @entry_port_name = :"eClientEntry"   # Marshaler の受け口名 (through セルの入り口)
     74
     75    # オプション:GenOpaqueMarshaler 参照
    10276    @plugin_arg_check_proc_tab = SharedOpaqueRPCPluginArgProc
    10377    @sharedChannelName = nil
     
    12599    prev_start = @@shared_channel_list[ @shared_channel_cell ][0].start_region
    126100    if @start_region != prev_start then
    127       # 初出と start リージョン不一致 (初出は、自分自身とチェックされる。無駄だが小さいので放置)
     101      # 初出と start リージョン不一致 (初出は、自分自身とチェックされる。無駄だが小さいので放置)
    128102      cdl_error( "SharedRPCPlugin: start region mismatch current: #{@region.get_name} previous: #{prev_start.get_name}")
    129103    end
     
    131105    prev_end = @@shared_channel_list[ @shared_channel_cell ][0].end_region
    132106    if @end_region != prev_end then
    133       # 初出と end リージョン不一致  (初出は、自分自身とチェックされる。無駄だが小さいので放置)
     107      # 初出と end リージョン不一致  (初出は、自分自身とチェックされる。無駄だが小さいので放置)
    134108      cdl_error( "SharedRPCPlugin: end region mismatch current: #{@region.get_name} previous: #{prev_end.get_name}")
    135109    end
     
    141115  # end
    142116
    143   #=== プラグイン引数 sharedChannelCell のチェック
     117  #=== プラグイン引数 sharedChannelCell のチェック
    144118  def set_sharedChannelName( rhs )
    145119    @sharedChannelName = rhs
     
    153127  def gen_plugin_decl_code( file )
    154128
    155     # このセルタイプ(同じシグニチャ)は既に生成されているか?
     129    # このセルタイプ(同じシグニチャ)は既に生成されているか?
    156130    if @@generated_celltype[ @shared_channel_server_ct_name ] == nil then
    157131      @@generated_celltype[ @shared_channel_server_ct_name ] = [ self ]
     
    162136    gen_marshaler_celltype
    163137
    164     # 同じå†
    165 å®¹ã‚’二度書く可能性あり (AppFile は不可)
     138    # 同じ内容を二度書く可能性あり (AppFile は不可)
    166139
    167140    if @PPAllocatorSize then
     
    174147
    175148    f = CFile.open( @shared_channel_ct_file_name, "w" )
    176     # 同じå†
    177 å®¹ã‚’二度書く可能性あり (AppFile は不可)
     149    # 同じ内容を二度書く可能性あり (AppFile は不可)
    178150
    179151    f.print <<EOT
     
    233205  end
    234206
    235   #===  through cell コードを生成
     207  #===  through cell コードを生成
    236208  #
    237209  #
     
    250222    indent_str = "  " * nest
    251223
    252     # セルを探す
     224    # セルを探す
    253225    # path =["::",@next_cell.get_name]
    254226    # cell = Namespace.find( path )
    255227    cell = Namespace.find( @next_cell.get_namespace_path )
    256228
    257     # å
    258 ±æœ‰ã•ã‚Œã‚‹é€šä¿¡ãƒãƒ£ãƒ³ãƒãƒ«ã®ç”Ÿæˆã®ãƒ—ロトタイプ宣言
     229    # 共有される通信チャンネルの生成のプロトタイプ宣言
    259230    file.print <<EOT
    260231#{indent_str}cell #{@shared_channel_client_ct_name} #{@shared_channel_cell};
    261232EOT
    262233
    263     # マーシャラセルの生成(アロケータコードの生成から)
    264     # アロケータの指定があるか?
     234    # マーシャラセルの生成(アロケータコードの生成から)
     235    # アロケータの指定があるか?
    265236    if cell.get_allocator_list.length > 0 then
    266237
     
    278249
    279250        file.print delim
    280         delim = ",\n#{indent_str}           "        # 最終行には出さない
    281 
    282         if subsc then        # é
    283 åˆ—添数
     251        delim = ",\n#{indent_str}           "        # 最終行には出さない
     252
     253        if subsc then        # 配列添数
    284254          subsc_str = '[#{subsc}]'
    285255        else
     
    287257        end
    288258
    289         eport = @entry_port_name #RPCの受け口名に変更
     259        eport = @entry_port_name #RPCの受け口名に変更
    290260        file.print  "#{eport}#{subsc_str}.#{func}.#{buf} = #{alloc_str}"
    291261      end
     
    294264    end
    295265
    296     # マーシャラセル本体生成
     266    # マーシャラセル本体生成
    297267    file.print <<EOT
    298268/* OpaqueRPC Marshaler Cell */
     
    305275    @start_region.gen_region_str_post file
    306276
    307     # アンマーシャラセルの出力
    308     # セル本体の生成
     277    # アンマーシャラセルの出力
     278    # セル本体の生成
    309279    nest = @end_region.gen_region_str_pre file
    310280
     
    315285EOT
    316286
    317     # PPAllocator がå¿
    318 è¦ã‹?
     287    # PPAllocator が必要か?
    319288    if @PPAllocatorSize then
    320289      if @sub_channel_no == 0 then
     
    341310  end
    342311
    343   #=== post コード(CDL) を生成
    344   # プラグインの後のコードを生成
     312  #=== post コード(CDL) を生成
     313  # プラグインの後のコードを生成
    345314  #file:: File:
    346315  def self.gen_post_code( file )
     
    355324  end
    356325
    357   #=== post コード(CDL) を生成
    358   # å
    359 ±æœ‰ãƒãƒ£ãƒ³ãƒãƒ«ã‚’生成する
    360   # このメソッドは、チャンネルをå
    361 ±æœ‰ã™ã‚‹æœ€åˆã®ãƒ—ラグインオブジェクトのみ呼び出される
     326  #=== post コード(CDL) を生成
     327  # 共有チャンネルを生成する
     328  # このメソッドは、チャンネルを共有する最初のプラグインオブジェクトのみ呼び出される
    362329  def gen_post_code( file, plugin_obj_array )
    363330
    364     # å
    365 ±æœ‰ã•ã‚Œã¦ã„る通信チャンネルの生成
    366     # 各プラグインインスタンスでは @shared_channel_ct_name として記憶している
     331    # 共有されている通信チャンネルの生成
     332    # 各プラグインインスタンスでは @shared_channel_ct_name として記憶している
    367333    # region = @caller_cell.get_region
    368334    nest = @start_region.gen_region_str_pre file
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/SharedRPCPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: SharedRPCPlugin.rb 2061 2014-05-31 22:15:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
     
    5641require_tecsgen_lib "lib/GenParamCopy.rb"
    5742
    58 #= SharedRPC プラグイン
    59 # SharedRPC チャンネルを生成する
    60 # プラグイン引数は GenTransparentMarshaler 参ç
    61 §
    62 
    63 # mikan through plugin: namespace が考æ
    64 ®ã•ã‚Œã¦ã„ない
    65 # これを利用する場合、以下のように toppers_jsp.cdl sChannel.cdl を指定するå¿
    66 è¦ãŒã‚ã‚‹
     43#= SharedRPC プラグイン
     44# SharedRPC チャンネルを生成する
     45# プラグイン引数は GenTransparentMarshaler 参照
     46
     47# mikan through plugin: namespace が考慮されていない
     48# これを利用する場合、以下のように toppers_jsp.cdl sChannel.cdl を指定する必要がある
    6749# tecsgen toppers_jsp.cdl sChannel.cdl your_description.cdl
    6850
    69 # 以下を仮定(制限事é 
    70 ï¼‰
    71 #  呼びå
    72 ƒã€å‘¼ã³å
    73 ˆã®ã‚¨ãƒ³ãƒ‡ã‚£ã‚¢ãƒ³ã€char, short, int_t, long_t, intptr_t のサイズが同じ
    74 #  有符号、無符号でサイズが同じ
     51# 以下を仮定(制限事項)
     52#  呼び元、呼び先のエンディアン、char, short, int_t, long_t, intptr_t のサイズが同じ
     53#  有符号、無符号でサイズが同じ
    7554
    7655class SharedRPCPlugin < ThroughPlugin
     
    8160  include GenParamCopy
    8261
    83   #=== RPCPlugin の initialize
    84   #  説明は ThroughPlugin (plugin.rb) を参ç
    85 §
     62  #=== RPCPlugin の initialize
     63  #  説明は ThroughPlugin (plugin.rb) を参照
    8664  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell )
    8765
    88     # mikan プラグインオプション指定の不一致のチェック task_priority,
     66    # mikan プラグインオプション指定の不一致のチェック task_priority,
    8967
    9068    super
    9169    initialize_transparent_marshaler cell_name
    9270
    93     # オプション:GenTransparentMarshaler 参ç
    94 §
     71    # オプション:GenTransparentMarshaler 参照
    9572    @plugin_arg_check_proc_tab = RPCPluginArgProc
    96     @channelCellName = ""     # nil にしておく
     73    @channelCellName = ""     # nil にしておく
    9774    parse_plugin_arg
    9875
     
    10885
    10986    if @@shared_channel_list[ @shared_channel_cell ] == nil then
    110       # 初出
     87      # 初出
    11188      @@shared_channel_list[ @shared_channel_cell ] = [ self ]
    11289    else
    113       # 二番目以降
     90      # 二番目以降
    11491      @@shared_channel_list[ @shared_channel_cell ] << self
    11592    end
     
    11794
    11895    if @region != @@shared_channel_list[ @shared_channel_cell ][0].region then
    119       # 初出とリージョン不一致 (初出は、自分自身とチェックされる。無駄だが小さいので放置)
     96      # 初出とリージョン不一致 (初出は、自分自身とチェックされる。無駄だが小さいので放置)
    12097      cdl_error( "SharedRPCPlugin: preferred region mismatch current: #{@region.get_name} previous: #{@@shared_channel_list[ @shared_channel_cell ][0].region.get_name}")
    12198    else
     
    138115  def gen_plugin_decl_code( file )
    139116
    140     # このセルタイプ(同じシグニチャ)は既に生成されているか?
     117    # このセルタイプ(同じシグニチャ)は既に生成されているか?
    141118    if @@generated_celltype[ @shared_channel_ct_name ] == nil then
    142119      @@generated_celltype[ @shared_channel_ct_name ] = [ self ]
     
    152129
    153130    gen_marshaler_celltype
    154     # 同じå†
    155 å®¹ã‚’二度書く可能性あり (AppFile は不可)
     131    # 同じ内容を二度書く可能性あり (AppFile は不可)
    156132
    157133    if @signature.need_PPAllocator? then
     
    164140
    165141    f = CFile.open( @rpc_channel_celltype_file_name, "w" )
    166     # 同じå†
    167 å®¹ã‚’二度書く可能性あり (AppFile は不可)
     142    # 同じ内容を二度書く可能性あり (AppFile は不可)
    168143
    169144    f.print <<EOT
     
    196171};
    197172EOT
    198     # mikan stackSize option & 最新 tecs_package 対応
     173    # mikan stackSize option & 最新 tecs_package 対応
    199174
    200175    f.close
    201176
    202177    f = CFile.open( "#{$gen}/#{@shared_channel_ct_name}.cdl", "w" )
    203     # 同じå†
    204 å®¹ã‚’二度書く可能性あり (AppFile は不可)
     178    # 同じ内容を二度書く可能性あり (AppFile は不可)
    205179
    206180    f.print <<EOT
     
    247221  end
    248222
    249   #===  through cell コードを生成
     223  #===  through cell コードを生成
    250224  #
    251225  #
     
    263237    indent_str = "  " * nest
    264238
    265     # セルを探す
     239    # セルを探す
    266240    # path =["::",@next_cell.get_name]
    267241    # cell = Namespace.find( path )
    268242    cell = Namespace.find( @next_cell.get_namespace_path )
    269243
    270     # PPAllocator がå¿
    271 è¦ã‹?
     244    # PPAllocator が必要か?
    272245    if @signature.need_PPAllocator? then
    273246      if @sub_channel_no == 0 then
     
    284257    end
    285258
    286     # å
    287 ±æœ‰ã•ã‚Œã‚‹é€šä¿¡ãƒãƒ£ãƒ³ãƒãƒ«ã®ç”Ÿæˆã®ãƒ—ロトタイプ宣言
     259    # 共有される通信チャンネルの生成のプロトタイプ宣言
    288260    file.print <<EOT
    289261#{indent_str}cell #{@shared_channel_ct_name} #{@shared_channel_cell};
    290262EOT
    291263
    292     # ここから各結合ごとのセルを生成
    293 
    294     # アロケータの指定があるか?
     264    # ここから各結合ごとのセルを生成
     265
     266    # アロケータの指定があるか?
    295267    if cell.get_allocator_list.length > 0 then
    296268
     
    301273
    302274        file.print delim
    303         delim = ",\n#{indent_str}           "        # 最終行には出さない
    304 
    305         if subsc then        # é
    306 åˆ—添数
     275        delim = ",\n#{indent_str}           "        # 最終行には出さない
     276
     277        if subsc then        # 配列添数
    307278          subsc_str = '[#{subsc}]'
    308279        else
     
    310281        end
    311282
    312         eport = "eThroughEntry" #RPCの受け口名に変更
     283        eport = "eThroughEntry" #RPCの受け口名に変更
    313284        file.print  "#{eport}#{subsc_str}.#{func}.#{buf} = #{alloc}"
    314285      end
     
    317288    end
    318289
    319     # セル本体の生成
     290    # セル本体の生成
    320291    file.print <<EOT
    321292#{indent_str}cell #{@rpc_channel_celltype_name} #{@cell_name} {
     
    329300  end
    330301
    331   #=== 後ろのコードを生成
    332   #プラグインの後ろのコードを生成
     302  #=== 後ろのコードを生成
     303  #プラグインの後ろのコードを生成
    333304  #file:: File:
    334305  def self.gen_post_code( file )
     
    339310  end
    340311
    341   #=== 後ろのコードを生成
    342   # plugin_obj[0] が代表して出力する(インスタンス変数にアクセスしたいため)
     312  #=== 後ろのコードを生成
     313  # plugin_obj[0] が代表して出力する(インスタンス変数にアクセスしたいため)
    343314  def gen_post_code( file, plugin_obj )
    344315
     
    348319    indent_str = "  " * nest
    349320
    350     # å
    351 ±æœ‰ã•ã‚Œã¦ã„る通信チャンネルの生成
    352     # 各プラグインインスタンスでは @shared_channel_ct_name として記憶している
     321    # 共有されている通信チャンネルの生成
     322    # 各プラグインインスタンスでは @shared_channel_ct_name として記憶している
    353323    file.print "#{indent_str}cell tSharedRPCPlugin_#{@channelCelltype} #{chan_name} {\n"
    354324    plugin_obj.each{ |po|
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/SignaturePlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: SignaturePlugin.rb 2061 2014-05-31 22:15:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
    55 #== signature プラグインのå
    56 ±é€šã®è¦ªã‚¯ãƒ©ã‚¹
     40#== signature プラグインの共通の親クラス
    5741class SignaturePlugin < Plugin
    58 #@signature:: Signature   ãƒ—ラグインの対象となるシグニチャ
    59 #@option:: String   '"', '"' で囲まれた文字列
     42#@signature:: Signature   プラグインの対象となるシグニチャ
     43#@option:: String   '"', '"' で囲まれた文字列
    6044
    61   #signature::     Signature        シグニチャ(インスタンス)
     45  #signature::     Signature        シグニチャ(インスタンス)
    6246  def initialize( signature, option )
    6347    super()
    6448    @signature = signature
    65     # @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' )    # 前後の "" を取り除く
     49    # @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' )    # 前後の "" を取り除く
    6650    # @plugin_arg_str.sub!( /(.*)"\z/, '\1' )
    6751    @plugin_arg_str = CDLString.remove_dquote option
     
    6953  end
    7054
    71   #=== 後ろのコードを生成
    72   #プラグインの後ろの CDL コードを生成
     55  #=== 後ろのコードを生成
     56  #プラグインの後ろの CDL コードを生成
    7357  #file:: File:
    7458  def self.gen_post_code( file )
    75     # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
     59    # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
    7660    # file.print "/* '#{self.class.name}' post code */\n"
    7761  end
    7862
    79   #===  受け口関数の本体(C言語)を生成する
    80   #     é€šå¸¸ã§ã‚れば、ジェネレータは受け口関数のテンプレートを生成する
    81   #     ãƒ—ラグインの場合、変更するå¿
    82 è¦ã®ãªã„セルタイプコードを生成する
    83   #file::           FILE        出力å
    84 ˆãƒ•ã‚¡ã‚¤ãƒ«
     63  #===  受け口関数の本体(C言語)を生成する
     64  #     通常であれば、ジェネレータは受け口関数のテンプレートを生成する
     65  #     プラグインの場合、変更する必要のないセルタイプコードを生成する
     66  #file::           FILE        出力先ファイル
    8567  #b_singleton::    bool        true if singleton
    8668  #ct_name::        Symbol
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/TECS2CBridgePlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: TECS2CBridgePlugin.rb 2068 2014-06-21 07:04:08Z okuma-top $
     37#   $Id$
    5338#++
    5439
    55 #== TECS => C 呼び出しプラグイン
     40#== TECS => C 呼び出しプラグイン
    5641class TECS2CBridgePlugin < SignaturePlugin
    57 #@signature:: Signature   ãƒ—ラグインの対象となるシグニチャ
    58 #@option:: String   '"', '"' で囲まれた文字列
     42#@signature:: Signature   プラグインの対象となるシグニチャ
     43#@option:: String   '"', '"' で囲まれた文字列
    5944
    6045  @@signature_list = { }
    6146
    62   #signature::     Signature        シグニチャ(インスタンス)
     47  #signature::     Signature        シグニチャ(インスタンス)
    6348  def initialize( signature, option )
    6449    super
     
    9176  end
    9277
    93   #=== 後ろのコードを生成
    94   #プラグインの後ろのコードを生成
     78  #=== 後ろのコードを生成
     79  #プラグインの後ろのコードを生成
    9580  #file:: File:
    9681  def self.gen_post_code( file )
    97     # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
     82    # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
    9883    # file.print "/* '#{self.class.name}' post code */\n"
    9984  end
    10085
    101   #===  受け口関数の本体(C言語)を生成する
    102   #     é€šå¸¸ã§ã‚れば、ジェネレータは受け口関数のテンプレートを生成する
    103   #     ãƒ—ラグインの場合、変更するå¿
    104 è¦ã®ãªã„セルタイプコードを生成する
    105   #file::           FILE        出力å
    106 ˆãƒ•ã‚¡ã‚¤ãƒ«
     86  #===  受け口関数の本体(C言語)を生成する
     87  #     通常であれば、ジェネレータは受け口関数のテンプレートを生成する
     88  #     プラグインの場合、変更する必要のないセルタイプコードを生成する
     89  #file::           FILE        出力先ファイル
    10790  #b_singleton::    bool        true if singleton
    10891  #ct_name::        Symbol
     
    129112    p_cellcb = #{global_ct_name}_GET_CELLCB(idx);
    130113  }else{
    131      /* エラー処理コードをここに記述 */
     114     /* エラー処理コードをここに記述 */
    132115  }
    133116
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/ThroughPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: ThroughPlugin.rb 2061 2014-05-31 22:15:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
    55 # mikan through plugin: namespace が考æ
    56 ®ã•ã‚Œã¦ã„ない
    57 
    58 #==  スループラグインのå
    59 ±é€šã®è¦ªã‚¯ãƒ©ã‚¹ã€€ã‹ã¤ (何もせず)スルーするセルを挿å
    60 ¥ã™ã‚‹ã‚¹ãƒ«ãƒ¼ãƒ—ラグイン
    61 #    スループラグインは ThroughPlugin の子クラスとして定義する
     40# mikan through plugin: namespace が考慮されていない
     41
     42#==  スループラグインの共通の親クラス かつ (何もせず)スルーするセルを挿入するスループラグイン
     43#    スループラグインは ThroughPlugin の子クラスとして定義する
    6244class ThroughPlugin < Plugin
    63 #@cell_name::      Symbol             ç”Ÿæˆã™ã‚‹ã‚»ãƒ«åï¼ˆè¤‡æ•°ã‚»ãƒ«ã‚’生成する場合、受け口側のセル)
    64 #@plugin_arg_str:: string             through で指定された引数
    65 #@next_cell:: Cell                    呼び口を結合するセル
    66 #@next_cell_port_name:: Symbol       å‘¼ã³å£ã‚’結合する受口の名前
    67 #@signature::      Signature          シグニチャ
    68 #@celltype::       Celltype           å‘¼ã³å
    69 ˆã®ã‚»ãƒ«ã®ã‚»ãƒ«ã‚¿ã‚¤ãƒ—. through が連接する場合、最終的な呼びå
    70 ˆã®ã‚»ãƒ«ã®ã‚»ãƒ«ã‚¿ã‚¤ãƒ—
    71 #@entry_port_name::Symbol             ç”Ÿæˆã™ã‚‹ã‚»ãƒ«ã®å—け口名  "eThroughEntry"
    72 #@call_port_name:: Symbol             ç”Ÿæˆã™ã‚‹ã‚»ãƒ«ã®å‘¼ã³å£å  "cCall"
    73 #@ct_name::        Symbol             ç”Ÿæˆã™ã‚‹ã‚»ãƒ«ã®ã‚»ãƒ«ã‚¿ã‚¤ãƒ—名   "t#{self.class.name}_#{@signature.get_global_name}"
    74 #@plugin_arg_list:: Hash              プラグイン引数をパースした結果のハッシュ変数
    75 #@caller_cell::    Cell               å‘¼ã³å
    76 ƒã®ã‚»ãƒ«ï¼Žthrough プラグインが連接する場合では、最も呼びå
    77 ƒã®ã‚»ãƒ«ï¼Ž($source$)
    78 #                                     through プラグインが合流するケースでは、1つ目の呼びå
    79 ƒã‚»ãƒ«ã®ã¿å¼•æ•°ã¨ã—て与えられる
    80 #                                     å¾“って TracePlugin の呼びå
    81 ƒã®åˆ¤åˆ¥ã«åˆ©ç”¨ã™ã‚‹å ´åˆã¯ã€ç•°ãªã‚‹å‘¼ã³å
    82 ƒã‹ã‚‰å‘¼ã°ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ることに注意しなくてはならない
    83 #@callee_cell:: Cell                  呼びå
    84 ˆã®ã‚»ãƒ«($destination$)
    85 #@plugin_arg_check_proc_tab:: [string => Proc]  プラグイン引数名⇒チェック関数
    86 # 以下の変数は、initialize ではなく、後から設定される
    87 #@start_@region::  Region             å§‹ã¾ã‚Šã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼š caller_cell のリージョンとは異なる可能性がある ($start_region$)
    88 #@end_region::  Region                終わりのリージョン: next_cell のリージョンとは異なる可能性がある ($end_region$)
    89 #@region:: Region                     @start_region と @end_region のいずれかで、cell を置くのが好ましいリージョン ($preferred_region$)
    90 #@through_type:: Symbol              :THROUGH, :TO_THROUGH, :IN_THROUGH, :OUT_THROUGH のいずれか
    91 
    92   # この Plugin が生成したセルタイプのリスト
     45#@cell_name::      Symbol             生成するセル名(複数セルを生成する場合、受け口側のセル)
     46#@plugin_arg_str:: string             through で指定された引数
     47#@next_cell:: Cell                    呼び口を結合するセル
     48#@next_cell_port_name:: Symbol       呼び口を結合する受口の名前
     49#@signature::      Signature          シグニチャ
     50#@celltype::       Celltype           呼び先のセルのセルタイプ. through が連接する場合、最終的な呼び先のセルのセルタイプ
     51#@entry_port_name::Symbol             生成するセルの受け口名  "eThroughEntry"
     52#@call_port_name:: Symbol             生成するセルの呼び口名  "cCall"
     53#@ct_name::        Symbol             生成するセルのセルタイプ名   "t#{self.class.name}_#{@signature.get_global_name}"
     54#@plugin_arg_list:: Hash              プラグイン引数をパースした結果のハッシュ変数
     55#@caller_cell::    Cell               呼び元のセル.through プラグインが連接する場合では、最も呼び元のセル.($source$)
     56#                                     through プラグインが合流するケースでは、1つ目の呼び元セルのみ引数として与えられる
     57#                                     従って TracePlugin の呼び元の判別に利用する場合は、異なる呼び元から呼ばれる可能性があることに注意しなくてはならない
     58#@callee_cell:: Cell                  呼び先のセル($destination$)
     59#@plugin_arg_check_proc_tab:: [string => Proc]  プラグイン引数名⇒チェック関数
     60# 以下の変数は、initialize ではなく、後から設定される
     61#@start_@region::  Region             始まりのリージョン: caller_cell のリージョンとは異なる可能性がある ($start_region$)
     62#@end_region::  Region                終わりのリージョン: next_cell のリージョンとは異なる可能性がある ($end_region$)
     63#@region:: Region                     @start_region と @end_region のいずれかで、cell を置くのが好ましいリージョン ($preferred_region$)
     64#@through_type:: Symbol              :THROUGH, :TO_THROUGH, :IN_THROUGH, :OUT_THROUGH のいずれか
     65
     66  # この Plugin が生成したセルタイプのリスト
    9367  @@generated_celltype = {}
    9468
    95   #=== ThroughPlugin の初期化
    96   #     through が指定された時点で生成が行われる
    97   #         åˆæœŸåŒ–では、指定された引数を記録するに留める
    98   #cell_name::      Symbol             ç”Ÿæˆã™ã¹ãã‚»ãƒ«åï¼ˆå—口側)
    99   #plugin_arg::     string             through で指定された引数
    100   #next_cell::      Cell               å‘¼ã³å£ã‚’接続するセル
    101   #next_cell_port_name:: Symbol        呼び口を接続する受口の名前
    102   #signature::      Signature          シグニチャ
    103   #celltype::       Celltype           ã‚»ãƒ«ã‚¿ã‚¤ãƒ— (呼びå
    104 ˆã®ã‚»ãƒ«ã®ã‚»ãƒ«ã‚¿ã‚¤ãƒ—)
    105   #caller_cell::    Cell               å‘¼ã³å
    106 ƒã®ã‚»ãƒ«ï¼Ž@caller_cell のé 
    107 ã‚’参ç
    108 §
     69  #=== ThroughPlugin の初期化
     70  #     through が指定された時点で生成が行われる
     71  #         初期化では、指定された引数を記録するに留める
     72  #cell_name::      Symbol             生成すべきセル名(受口側)
     73  #plugin_arg::     string             through で指定された引数
     74  #next_cell::      Cell               呼び口を接続するセル
     75  #next_cell_port_name:: Symbol        呼び口を接続する受口の名前
     76  #signature::      Signature          シグニチャ
     77  #celltype::       Celltype           セルタイプ (呼び先のセルのセルタイプ)
     78  #caller_cell::    Cell               呼び元のセル.@caller_cell の項を参照
    10979  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell )
    11080    super()
    111     @cell_name = cell_name                      # 生成すべきセル名(受け口側のセル名)
    112                                                 # この呼びå
    113 ˆã«åˆ¥ã‚»ãƒ«ã‚’生成する場合、この名前を接頭辞とすべき
    114     @next_cell = next_cell                      # 呼びå
    115 ˆã®ã‚»ãƒ«
     81    @cell_name = cell_name                      # 生成すべきセル名(受け口側のセル名)
     82                                                # この呼び先に別セルを生成する場合、この名前を接頭辞とすべき
     83    @next_cell = next_cell                      # 呼び先のセル
    11684    @next_cell_port_name = next_cell_port_name
    11785    @signature = signature
     
    12189    @celltype = celltype
    12290    @plugin_arg_str = plugin_arg
    123     @plugin_arg_list = {}                       # プラグイン引数をパースした結果のハッシュ変数
     91    @plugin_arg_list = {}                       # プラグイン引数をパースした結果のハッシュ変数
    12492    @caller_cell     = caller_cell
    125     Join.set_through_info self                  # 引数で渡らない(後から追加された)ものは set_through_info で設定される
     93    Join.set_through_info self                  # 引数で渡らない(後から追加された)ものは set_through_info で設定される
    12694    print( "#{self.class.name}.new( '#{cell_name}', '#{plugin_arg}', '#{next_cell.get_name}', '#{next_cell_port_name}', #{celltype.get_name} )\n" )
    12795  end
    12896
    129   #=== æƒ
    130 å ±ã‚’設定する
    131   # å
    132 ±æœ‰ãƒãƒ£ãƒ³ãƒãƒ«ã®å ´åˆ caller_cell, next_cell のいずれの region でもないケースがある
    133   # 後から追加したので initialize の引数ではなく、別メソッドで設定
    134   # このメソッドは、オーバーライドしないでください
    135   # Join と ThrougPlugin の間の連絡用で、今後とも引数が追加される可能性があるため
    136   # このメソッドは V1.C.0.34 で位置が移動され、ThroughPlugin#initialize で呼び出される
     97  #=== 情報を設定する
     98  # 共有チャンネルの場合 caller_cell, next_cell のいずれの region でもないケースがある
     99  # 後から追加したので initialize の引数ではなく、別メソッドで設定
     100  # このメソッドは、オーバーライドしないでください
     101  # Join と ThrougPlugin の間の連絡用で、今後とも引数が追加される可能性があるため
     102  # このメソッドは V1.C.0.34 で位置が移動され、ThroughPlugin#initialize で呼び出される
    137103  def set_through_info( start_region, end_region, through_type, join, callee_cell, count )
    138104    @start_region = start_region
     
    143109    @count = count
    144110
    145     # preferred_region の設定
     111    # preferred_region の設定
    146112    case through_type
    147113    when :IN_THROUGH, :THROUGH
     
    154120  end
    155121
    156   #===  セルの名前を得る
     122  #===  セルの名前を得る
    157123  def get_cell_name
    158124    @cell_name
    159125  end
    160126
    161   #=== NamespacePath を得る
    162   # 生成するセルの namespace path を生成する
     127  #=== NamespacePath を得る
     128  # 生成するセルの namespace path を生成する
    163129  def get_cell_namespace_path
    164130#    nsp = @region.get_namespace.get_namespace_path
     
    167133  end
    168134
    169   #===  生成されたセルの受け口の名前を得る
     135  #===  生成されたセルの受け口の名前を得る
    170136  def get_through_entry_port_name
    171137    @entry_port_name
    172138  end
    173139
    174   #===  宣言コードの生成
    175   #      typedef, signature, celltype など(cell 以外)のコードを生成
    176   #          重複して生成してはならない(すでに生成されている場合は出力しないこと)
    177   #file::        FILE       ç”Ÿæˆã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«
     140  #===  宣言コードの生成
     141  #      typedef, signature, celltype など(cell 以外)のコードを生成
     142  #          重複して生成してはならない(すでに生成されている場合は出力しないこと)
     143  #file::        FILE       生成するファイル
    178144  def gen_plugin_decl_code( file )
    179145
    180     # このセルタイプ(同じシグニチャ)は既に生成されているか?
     146    # このセルタイプ(同じシグニチャ)は既に生成されているか?
    181147    if @@generated_celltype[ @ct_name ] == nil then
    182148      @@generated_celltype[ @ct_name ] = [ self ]
     
    223189  end
    224190
    225   #=== CDL ファイルの生成
    226   #file::     FILE    生成するファイル
     191  #=== CDL ファイルの生成
     192  #file::     FILE    生成するファイル
    227193  def gen_cdl_file( file )
    228194    gen_plugin_decl_code( file )
     
    230196  end
    231197
    232   #===  セルコードの生成
    233   #     through 指定により生じるセルコード(CDL)を生成する
    234   #file::        FILE       ç”Ÿæˆã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«
     198  #===  セルコードの生成
     199  #     through 指定により生じるセルコード(CDL)を生成する
     200  #file::        FILE       生成するファイル
    235201  def gen_through_cell_code( file )
    236202
     
    247213  end
    248214
    249   #=== 後ろのコードを生成
    250   #プラグインの後ろのコード (CDL) を生成
     215  #=== 後ろのコードを生成
     216  #プラグインの後ろのコード (CDL) を生成
    251217  #file:: File:
    252218  def self.gen_post_code( file )
    253     # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
     219    # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
    254220    # file.print "/* '#{self.class.name}' post code */\n"
    255221  end
    256222
    257   #===  受け口関数の本体(C言語)を生成する
    258   #     é€šå¸¸ã§ã‚れば、ジェネレータは受け口関数のテンプレートを生成する
    259   #     ãƒ—ラグインの場合、変更するå¿
    260 è¦ã®ãªã„セルタイプコードを生成する
    261   #file::           FILE        出力å
    262 ˆãƒ•ã‚¡ã‚¤ãƒ«
     223  #===  受け口関数の本体(C言語)を生成する
     224  #     通常であれば、ジェネレータは受け口関数のテンプレートを生成する
     225  #     プラグインの場合、変更する必要のないセルタイプコードを生成する
     226  #file::           FILE        出力先ファイル
    263227  #b_singleton::    bool        true if singleton
    264228  #ct_name::        Symbol
     
    285249    p_cellcb = #{global_ct_name}_GET_CELLCB(idx);
    286250  }else{
    287      /* エラー処理コードをここに記述 */
     251     /* エラー処理コードをここに記述 */
    288252  }
    289253
     
    318282  end
    319283
    320   #=== Through プラグインの引数の名前を置換する
     284  #=== Through プラグインの引数の名前を置換する
    321285  def check_plugin_arg( ident, rhs )
    322286    rhs = subst_name rhs
     
    324288  end
    325289
    326   #=== ThroughPlugin#名前の置換
    327   # プラグインオプション引数å†
    328 ã®æ–‡å­—列を置換する
    329   #   $source$       â€¦ 呼びå
    330 ƒã®ã‚»ãƒ«å
    331   #   $destination$  … 呼びå
    332 ˆã®ã‚»ãƒ«å
    333   #   $SOURCE$       â€¦ 呼びå
    334 ƒã®ã‚»ãƒ«å (リージョン名を '_' で連結した global_name)
    335   #   $DESTINATION$  … 呼びå
    336 ˆã®ã‚»ãƒ«å (リージョン名を '_' で連結した global_name)
    337   #   $next$         â€¦ 次のセル名
    338   #                     è¤‡æ•°ã® through がつながっている場合、すぐ後ろに来るもの
    339   #   $NEXT$         â€¦ 次のセル名 (リージョン名を '_' で連結した global_name)
    340   #                     è¤‡æ•°ã® through がつながっている場合、すぐ後ろに来るもの
    341   #   $start_region$ … $source$ のセルの存在する region (global_name)
    342   #   $end_region$   â€¦ $destination$ のセルの存在する region (global_name)
    343   #   $preferred_region$  … 適切な region (global_name), start_region または end_region
    344   #   $count$        … region 間の through の適用数
    345   #   $$             â€¦ $ に置換
     290  #=== ThroughPlugin#名前の置換
     291  # プラグインオプション引数内の文字列を置換する
     292  #   $source$       … 呼び元のセル名
     293  #   $destination$  … 呼び先のセル名
     294  #   $SOURCE$       … 呼び元のセル名 (リージョン名を '_' で連結した global_name)
     295  #   $DESTINATION$  … 呼び先のセル名 (リージョン名を '_' で連結した global_name)
     296  #   $next$         … 次のセル名
     297  #                     複数の through がつながっている場合、すぐ後ろに来るもの
     298  #   $NEXT$         … 次のセル名 (リージョン名を '_' で連結した global_name)
     299  #                     複数の through がつながっている場合、すぐ後ろに来るもの
     300  #   $start_region$ … $source$ のセルの存在する region (global_name)
     301  #   $end_region$   … $destination$ のセルの存在する region (global_name)
     302  #   $preferred_region$  … 適切な region (global_name), start_region または end_region
     303  #   $count$        … region 間の through の適用数
     304  #   $$             … $ に置換
    346305  def subst_name( str )
    347     # セル名の置換
     306    # セル名の置換
    348307    str = str.gsub( /(^|[^\$])\$source\$/, "\\1#{@caller_cell.get_name}" )
    349308    str = str.gsub( /(^|[^\$])\$destination\$/, "\\1#{@callee_cell.get_name}" )
     
    352311    str = str.gsub( /(^|[^\$])\$next\$/, "\\1#{@next_cell.get_name}" )
    353312    str = str.gsub( /(^|[^\$])\$NEXT\$/, "\\1#{@next_cell.get_global_name}" )
    354     # region 名の置換
     313    # region 名の置換
    355314    str = str.gsub( /(^|[^\$])\$start_region\$/, "\\1#{@start_region.get_global_name}" )
    356315    str = str.gsub( /(^|[^\$])\$end_region\$/, "\\1#{@end_region.get_global_name}" )
     
    358317    str = str.gsub( /(^|[^\$])\$count\$/, "\\1#{@count}" )
    359318
    360     str = str.gsub( /\$\$/, "\$" )                       # $$ を $ に置換
     319    str = str.gsub( /\$\$/, "\$" )                       # $$ を $ に置換
    361320
    362321    return str
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/TracePlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: TracePlugin.rb 2270 2015-10-25 12:08:44Z okuma-top $
     37#   $Id$
    5338#++
    5439
    5540class TracePlugin < ThroughPlugin
    5641#@cellEntry_list::[ "Cell.eEntry", "Cell2.eEntry2", ... ]
    57 #@b_generate::bool  : true : TracePlugin を生成するå¿
    58 è¦ãŒã‚ã‚‹
    59 
    60   #=== TracePlugin の initialize
    61   #  説明は ThroughPlugin (plugin.rb) を参ç
    62 §
     42#@b_generate::bool  : true : TracePlugin を生成する必要がある
     43
     44  #=== TracePlugin の initialize
     45  #  説明は ThroughPlugin (plugin.rb) を参照
    6346  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell )
    6447
     
    8669
    8770    if @b_generate == false then
    88       # å
    89 ƒã€
    90 å‘¼ã³å‡ºã™ã‚»ãƒ«ã«çµåˆã™ã‚‹ã‚‚のとする
     71      # 元々呼び出すセルに結合するものとする
    9172      @entry_port_name = next_cell_port_name
    9273      @cell_name = next_cell.get_name
     
    9475  end
    9576
    96   #===  宣言コードの生成
    97   #      typedef, signature, celltype など(cell 以外)のコードを生成
    98   #          重複して生成してはならない(すでに生成されている場合は出力しないこと)
    99   #file::        FILE       ç”Ÿæˆã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«
     77  #===  宣言コードの生成
     78  #      typedef, signature, celltype など(cell 以外)のコードを生成
     79  #          重複して生成してはならない(すでに生成されている場合は出力しないこと)
     80  #file::        FILE       生成するファイル
    10081  def gen_plugin_decl_code( file )
    10182
    102     # このセルタイプ(同じシグニチャ)は既に生成されているか?
     83    # このセルタイプ(同じシグニチャ)は既に生成されているか?
    10384    if @@generated_celltype[ @ct_name ] == nil then
    10485      @@generated_celltype[ @ct_name ] = [ self ]
     
    439420  end
    440421
    441   # プラグイン引数名と Proc
     422  # プラグイン引数名と Proc
    442423  TracePluginArgProc = {
    443424    "maxArrayDisplay"    => Proc.new { |obj,rhs| obj.set_maxArrayDisplay rhs },
     
    479460  end
    480461
    481   #=== プラグイン引数 tKernel のチェック
     462  #=== プラグイン引数 tKernel のチェック
    482463  def set_kernelCelltype( rhs )
    483464    @kernelCelltype = rhs.to_sym
     
    489470  end
    490471
    491   #=== プラグイン引数 tSyslog のチェック
     472  #=== プラグイン引数 tSyslog のチェック
    492473  def set_syslogCelltype( rhs )
    493474    @syslogCelltype = rhs.to_sym
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/lib/GenHRP2Marshaler.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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#++
    5338
    54 #プラグインオプション用変数
     39#プラグインオプション用変数
    5540#@task_priority:: Integer
    5641#@channelCelltype:: String
     
    5944module GenTransparentMarshaler
    6045
    61   # プラグイン引数名と Proc
     46  # プラグイン引数名と Proc
    6247  RPCPluginArgProc = {
    6348    "taskPriority"    => Proc.new { |obj,rhs| obj.set_taskPriority rhs },
     
    6853  }
    6954
    70   #=== プラグイン引数 taskPriority のチェック
     55  #=== プラグイン引数 taskPriority のチェック
    7156  def set_taskPriority( rhs )
    7257    @task_priority = rhs
    7358  end
    7459
    75   #=== プラグイン引数 channelCelltype のチェック
     60  #=== プラグイン引数 channelCelltype のチェック
    7661  def set_channelCelltype( rhs )
    7762    @channelCelltype = rhs.to_sym
     
    8570  end
    8671
    87   #=== プラグイン引数 TDRCelltype のチェック
     72  #=== プラグイン引数 TDRCelltype のチェック
    8873  def set_TDRCelltype( rhs )
    8974    @TDRCelltype = rhs.to_sym
     
    9782  end
    9883
    99   #=== プラグイン引数 channelCellName のチェック
     84  #=== プラグイン引数 channelCellName のチェック
    10085  def set_channelCellName( rhs )
    10186    @channelCellName = rhs
     
    10792  end
    10893
    109   #=== プラグイン引数 PPAllocatorSize のチェック
     94  #=== プラグイン引数 PPAllocatorSize のチェック
    11095  def set_PPAllocatorSize( rhs )
    11196    @PPAllocatorSize = rhs
    11297  end
    11398
    114   #=== marshaler のセルタイプ名を設定する
     99  #=== marshaler のセルタイプ名を設定する
    115100  def initialize_transparent_marshaler cell_name
    116101    @task_priority = 8
     
    134119
    135120    f = CFile.open( @marshaler_celltype_file_name, "w" )
    136     # 同じå†
    137 å®¹ã‚’二度書く可能性あり (AppFile は不可)
     121    # 同じ内容を二度書く可能性あり (AppFile は不可)
    138122
    139123    # modified by ishikawa
     
    163147  end
    164148
    165   #===  受け口関数の本体コードを生成(頭部と末尾は別途出力)
    166   #ct_name:: Symbol    (through プラグインで生成された) セルタイプ名 .Symbol として送られてくる(らしい)
     149  #===  受け口関数の本体コードを生成(頭部と末尾は別途出力)
     150  #ct_name:: Symbol    (through プラグインで生成された) セルタイプ名 .Symbol として送られてくる(らしい)
    167151  def gen_ep_func_body( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
    168152
    169     # unmarshaler クラスか?
     153    # unmarshaler クラスか?
    170154    if ct_name == @unmarshaler_celltype_name.to_sym then
    171155      gen_ep_func_body_unmarshal( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
     
    175159  end
    176160
    177   #===  marshal コードの生成
     161  #===  marshal コードの生成
    178162  def gen_ep_func_body_marshal( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
    179163
     
    181165    b_ret_er = false
    182166
    183     # 関数の戻り値のå
    184 ƒã®åž‹ã‚’å¾—ã‚‹(typedef されている場合)
     167    # 関数の戻り値の元の型を得る(typedef されている場合)
    185168    type = func_type.get_type.get_original_type
    186169
    187     # 戻り値記憶用の変数を出力(void 型の関数では出力しない)
     170    # 戻り値記憶用の変数を出力(void 型の関数では出力しない)
    188171    if ! type.kind_of?( VoidType ) then
    189172      if func_type.get_type.kind_of?( DefinedType ) && ( func_type.get_type.get_type_str == "ER" || func_type.get_type.get_type_str == "ER_INT" ) then
     
    200183    file.print( "    FLGPTN  flgptn;\n" )
    201184
    202     # 呼びå
    203 ˆã® signature を取り出す
     185    # 呼び先の signature を取り出す
    204186    signature = @signature
    205187
    206     # 関数 ID (整数値)
     188    # 関数 ID (整数値)
    207189    func_id = signature.get_id_from_func_name( func_name )
    208190    file.print( "    int16_t  func_id_ = #{func_id};    /* id of #{func_name}: #{func_id} */\n" )
     
    210192    file.print( "    uint8_t  msg[256];\n" )
    211193
    212     # シングルトンでないか?
     194    # シングルトンでないか?
    213195    if ! b_singleton then
    214196
    215       # singleton でなければ p_cellcb 取得コードを出力
     197      # singleton でなければ p_cellcb 取得コードを出力
    216198      file.print <<EOT
    217199    #{ct_name}_CB *p_cellcb;
     
    221203EOT
    222204
    223       # エラーを返すか?
     205      # エラーを返すか?
    224206      if b_ret_er then
    225207        file.print <<EOT
     
    231213        file.print <<EOT
    232214    }else{
    233         /* エラー処理コードをここに記述 */
    234     }
    235 EOT
    236       end
    237     end
    238 
    239     # channel lock コード
     215        /* エラー処理コードをここに記述 */
     216    }
     217EOT
     218      end
     219    end
     220
     221    # channel lock コード
    240222    file.print <<EOT
    241223    ///* Channel Lock */
     
    246228
    247229=begin
    248     # SOP を送信
    249     file.print "    /* SOPの送出 */\n"
     230    # SOP を送信
     231    file.print "    /* SOPの送出 */\n"
    250232    file.print "    if( ( ercd_ = cTDR_sendSOP( true ) ) != E_OK )\n"
    251233    file.print "      goto error_reset;\n"
    252234=end
    253235
    254     # func_id を送信
    255     file.print "    /* 関数 id の送出 */\n"
     236    # func_id を送信
     237    file.print "    /* 関数 id の送出 */\n"
    256238=begin
    257239    file.print "    if( ( ercd_ = cTDR_putInt16( func_id_ ) ) != E_OK )\n"
     
    263245    # p "#{ct_name}, #{sig_name}, #{func_name}, #{func_global_name}"
    264246
    265     b_get = false    # marshal なら put
     247    b_get = false    # marshal なら put
    266248    b_marshal = true  # marshal
    267249
    268     # in 方向のå
    269 ¥å‡ºåŠ›ã‚’出力
     250    # in 方向の入出力を出力
    270251    @index = 2
    271     file.print "    /* å
    272 ¥åŠ›å¼•æ•°é€å‡º */\n"
     252    file.print "    /* 入力引数送出 */\n"
    273253    print_params( params, file, 1, b_marshal, b_get, true, func_type.is_oneway? )
    274254    print_params( params, file, 1, b_marshal, b_get, false, func_type.is_oneway? )
     
    280260=end
    281261
    282     file.print "    /* EOPの送出(パケットの掃きだし) */\n"
     262    file.print "    /* EOPの送出(パケットの掃きだし) */\n"
    283263    if ! func_type.is_oneway? then
    284264      b_continue = "true"
     
    315295
    316296    if( b_void == false )then
    317       # 呼びå
    318 ƒã«æˆ»ã‚Šå€¤ã‚’リターン
     297      # 呼び元に戻り値をリターン
    319298      file.print( "    cMessageBuffer_receive(&retval_);\n" )
    320299      file.print( "    return retval_;\n" )
     
    332311EOT
    333312
    334     # channel lock コード
     313    # channel lock コード
    335314    file.print <<EOT
    336315    ///* Channel Lock */
     
    341320
    342321    if( b_ret_er != false )then
    343       # 呼びå
    344 ƒã«æˆ»ã‚Šå€¤ã‚’リターン
     322      # 呼び元に戻り値をリターン
    345323      file.print( "    return ercd_;\n" )
    346324    else
     
    350328  end
    351329
    352   #===  unmarshal コードの生成
     330  #===  unmarshal コードの生成
    353331  def gen_ep_func_body_unmarshal( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
    354332
     
    356334    b_ret_er = false
    357335
    358     # func_id を得るコードを生成
     336    # func_id を得るコードを生成
    359337    file.print <<EOT
    360338
     
    377355        file.print <<EOT
    378356    }else{
    379         /* エラー処理コードをここに記述 */
     357        /* エラー処理コードをここに記述 */
    380358    }
    381359EOT
     
    387365
    388366#if 0
    389     /* SOPのチェック */
     367    /* SOPのチェック */
    390368    if( (ercd_=cTDR_receiveSOP( false )) != E_OK )
    391369        goto error_reset;
    392     /* func_id の取得 */
     370    /* func_id の取得 */
    393371    if( (ercd_=cTDR_getInt16( &func_id_ )) != E_OK )
    394372        goto error_reset;
     
    405383EOT
    406384
    407     # 呼びå
    408 ˆã® signature を取り出す
     385    # 呼び先の signature を取り出す
    409386    # port = @celltype.find( @next_cell_port_name )
    410387    # signature = port.get_signature
    411388    signature = @signature
    412389
    413     # through の signature に含まれる すべての関数について
     390    # through の signature に含まれる すべての関数について
    414391    signature.get_function_head_array.each { |f|
    415392      f_name = f.get_name
     
    417394      id = signature.get_id_from_func_name( f_name )
    418395
    419       # 関数は返り値を持つか?
     396      # 関数は返り値を持つか?
    420397      if f_type.get_type.kind_of?( VoidType ) then
    421398        b_void = true
     
    424401      end
    425402
    426       # パケットの終わりをチェック(未受け取りのデータが残っていないかチェック)
     403      # パケットの終わりをチェック(未受け取りのデータが残っていないかチェック)
    427404      file.print "    case #{id}:       /*** #{f_name} ***/ \n"
    428405      file.print "        if( tTransparentUnmarshaler_#{@signature.get_name}_#{f_name}() != E_OK )\n"
     
    433410
    434411    if @PPAllocatorSize then
    435       ppallocator_dealloc_str = "    /* PPAllocator のすべてを解放 */\n    cPPAllocator_dealloc_all();"
     412      ppallocator_dealloc_str = "    /* PPAllocator のすべてを解放 */\n    cPPAllocator_dealloc_all();"
    436413    else
    437414      ppallocator_dealloc_str = ""
     
    441418    file.print <<EOT
    442419    default:
    443 #if 0 // deleted by ishikawa: tSysLogが未実è£
    444 
     420#if 0 // deleted by ishikawa: tSysLogが未実装
    445421        syslog(LOG_INFO, "unmarshaler task: ERROR: unknown func_id: %d", func_id_ );
    446422#endif /* 0 */
     
    463439
    464440  # IN b_marshal, b_get
    465   #  b_marshal = true  && b_get == false   :  マーシャラでå
    466 ¥åŠ›å¼•æ•°é€å‡º
    467   #  b_marshal = true  && b_get == true    :  マーシャラで出力引数受取
    468   #  b_marshal = false && b_get == true    :  アンマーシャラでå
    469 ¥åŠ›å¼•æ•°å—取
    470   #  b_marshal = false && b_get == get     :  アンマーシャラで出力引数送出
     441  #  b_marshal = true  && b_get == false   :  マーシャラで入力引数送出
     442  #  b_marshal = true  && b_get == true    :  マーシャラで出力引数受取
     443  #  b_marshal = false && b_get == true    :  アンマーシャラで入力引数受取
     444  #  b_marshal = false && b_get == get     :  アンマーシャラで出力引数送出
    471445  def print_params( params, file, nest, b_marshal, b_get, b_referenced, b_oneway = false )
    472446    params.each{ |param|
     
    479453      type = param.get_type
    480454      if b_oneway && dir == :IN && type.get_original_type.kind_of?( PtrType ) || type.get_original_type.kind_of?( ArrayType ) then
    481         # oneway, in, PtrType の場合コピー
     455        # oneway, in, PtrType の場合コピー
    482456        alloc_cp = "cPPAllocator_alloc"
    483457        alloc_cp_extra = nil
     
    501475  end
    502476
    503   #=== コピーしない引数渡しコードの出力
     477  #=== コピーしない引数渡しコードの出力
    504478  def print_param_nc( name, type, file, nest, b_marshal, outer, outer2, b_get )
    505479    indent = "    " * ( nest + 1 )
     
    521495        when :SIGNED
    522496          if bit_size == -1 || bit_size == -11 then
    523             # signed char の場合、signed を指定する
     497            # signed char の場合、signed を指定する
    524498            signC = "S"
    525499            sign  = "s"
     
    640614
    641615
    642   #=== PREAMBLE 部のコード生成
    643   # アンマーシャラセルタイプの場合、アンマーシャラ関数のプロトタイプ宣言を生成
     616  #=== PREAMBLE 部のコード生成
     617  # アンマーシャラセルタイプの場合、アンマーシャラ関数のプロトタイプ宣言を生成
    644618  def gen_preamble file, b_singleton, ct_name, global_name
    645619    if ct_name != @unmarshaler_celltype_name.to_sym then
     
    647621    end
    648622
    649     file.print "/* アンマーシャラ関数のプロトタイプ宣言 */\n"
    650     # signature に含まれる すべての関数について
     623    file.print "/* アンマーシャラ関数のプロトタイプ宣言 */\n"
     624    # signature に含まれる すべての関数について
    651625    @signature.get_function_head_array.each { |f|
    652626      f_name = f.get_name
     
    660634  end
    661635
    662   #=== POSTAMBLE 部のコード生成
    663   # アンマーシャラセルタイプの場合、アンマーシャラ関数の生成
     636  #=== POSTAMBLE 部のコード生成
     637  # アンマーシャラセルタイプの場合、アンマーシャラ関数の生成
    664638  def gen_postamble file, b_singleton, ct_name, global_name
    665639    if ct_name != @unmarshaler_celltype_name.to_sym then
     
    667641    end
    668642
    669     file.print "\n/*** アンマーシャラ関数 ***/\n\n"
     643    file.print "\n/*** アンマーシャラ関数 ***/\n\n"
    670644    @signature.get_function_head_array.each { |f|
    671645      f_name = f.get_name
     
    673647      id = @signature.get_id_from_func_name( f_name )
    674648
    675       # 関数は返り値を持つか?
     649      # 関数は返り値を持つか?
    676650      if f_type.get_type.kind_of?( VoidType ) then
    677651        b_void = true
     
    691665      file.print "      ER  ercd_;\n"
    692666
    693       # 引数を受取る変数の定義
     667      # 引数を受取る変数の定義
    694668      param_list = f.get_declarator.get_type.get_paramlist.get_items
    695669           # FuncHead->  Decl->    FuncType->ParamList
     
    706680        end
    707681
    708         type_str = type.get_type_str.gsub( /\bconst\b */, "" ) # "const" を外す
     682        type_str = type.get_type_str.gsub( /\bconst\b */, "" ) # "const" を外す
    709683
    710684        file.printf( "    %-12s %s%s%s%s;\n", type_str, aster, name, aster2, type.get_type_str_post )
    711685      }
    712686
    713       # 戻り値を受け取る変数の定義
     687      # 戻り値を受け取る変数の定義
    714688      if ! b_void then
    715689        if f.is_oneway? then
    716           retval_ptr = ""   # oneway の場合、受け取るが捨てられる
     690          retval_ptr = ""   # oneway の場合、受け取るが捨てられる
    717691        else
    718692          # =begin ishikawa modified
     
    724698      end
    725699
    726       # in 方向のå
    727 ¥å‡ºåŠ›ã‚’å
    728 ¥åŠ›
    729       file.print "\n        /* å
    730 ¥åŠ›å¼•æ•°å—取 */\n"
    731       b_get = true    # unmarshal では get
     700      # in 方向の入出力を入力
     701      file.print "\n        /* 入力引数受取 */\n"
     702      b_get = true    # unmarshal では get
    732703      b_marshal  = false
    733704      @index = 2
     
    740711      end
    741712=end
    742       # パケットの受信完了
    743       # mikan 本当は、対象関数を呼出す後に実施したい.呼出しパケットの使用終わりを宣言する目的として
    744       file.print "        /* パケット終わりをチェック */\n"
     713      # パケットの受信完了
     714      # mikan 本当は、対象関数を呼出す後に実施したい.呼出しパケットの使用終わりを宣言する目的として
     715      file.print "        /* パケット終わりをチェック */\n"
    745716      if ! f.is_oneway? then
    746717        b_continue = "true"
     
    752723      file.print "        goto error_reset;\n\n"
    753724=end
    754       # 対象関数を呼出す
    755       file.print "    /* 対象関数の呼出し */\n"
     725      # 対象関数を呼出す
     726      file.print "    /* 対象関数の呼出し */\n"
    756727      if b_void then
    757728        file.print( "    cServerCall_#{f_name}(" )
     
    768739      file.print( " );\n" )
    769740
    770       # 戻り値、出力引数の受取コードの生成
     741      # 戻り値、出力引数の受取コードの生成
    771742
    772743      if ! b_void && ! f.is_oneway? then
     
    775746
    776747      end
    777       # oneway の場合出力、戻り値が無く、受取をå¾
    778 ãŸãªã„(非同期な呼出し)
     748      # oneway の場合出力、戻り値が無く、受取を待たない(非同期な呼出し)
    779749      if ! f.is_oneway? then
    780750        file.print <<EOT
    781     /* 関数処理の終了を通知 */
     751    /* 関数処理の終了を通知 */
    782752    if( ( ercd_ = cEventflag_set( 0x01 ) ) != E_OK ){
    783753      goto error_reset;
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/lib/GenOpaqueMarshaler.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: GenOpaqueMarshaler.rb 2061 2014-05-31 22:15:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
    5540#== GenOpaqueMarshaler
    56 # OpaqueRPCPlugin, sharedOpaqueRPCPlugin å
    57 ±é€šã®è¦ç´ ã‚’集めたモジュール
     41# OpaqueRPCPlugin, sharedOpaqueRPCPlugin 共通の要素を集めたモジュール
    5842module GenOpaqueMarshaler
    5943
    60   # プラグイン引数名と Proc
     44  # プラグイン引数名と Proc
    6145  RPCPluginArgProc = {
    6246    "clientChannelCelltype" => Proc.new { |obj,rhs| obj.set_clientChannelCelltype rhs },
     
    7963  }
    8064
    81   ##### プラグイン引数チェック関数
    82 
    83   #=== プラグイン引数 taskPriority のチェック
     65  ##### プラグイン引数チェック関数
     66
     67  #=== プラグイン引数 taskPriority のチェック
    8468  def set_taskPriority( rhs )
    8569    @taskPriority = rhs
    8670  end
    8771
    88   #=== プラグイン引数 serverChannelCelltype のチェック
     72  #=== プラグイン引数 serverChannelCelltype のチェック
    8973  def set_serverChannelCelltype( rhs )
    9074    @serverChannelCelltype = rhs.to_sym
     
    9882  end
    9983
    100   #=== プラグイン引数 clientChannelCelltype のチェック
     84  #=== プラグイン引数 clientChannelCelltype のチェック
    10185  def set_clientChannelCelltype( rhs )
    10286    @clientChannelCelltype = rhs.to_sym
     
    11094  end
    11195
    112   #=== プラグイン引数 serverChannelCell のチェック
     96  #=== プラグイン引数 serverChannelCell のチェック
    11397  def set_serverChannelCell( rhs )
    11498    @serverChannelCell = rhs.to_sym
    115     # ChannelCell はプラグインで生成されるため、ここではチェックできない
     99    # ChannelCell はプラグインで生成されるため、ここではチェックできない
    116100    # path = [ "::", @serverChannelCell ]
    117101    # obj = Namespace.find( path )
     
    121105  end
    122106
    123   #=== プラグイン引数 clientChannelCell のチェック
     107  #=== プラグイン引数 clientChannelCell のチェック
    124108  def set_clientChannelCell( rhs )
    125109    @clientChannelCell = rhs.to_sym
    126     # ChannelCell はプラグインで生成されるため、ここではチェックできない
     110    # ChannelCell はプラグインで生成されるため、ここではチェックできない
    127111    # path = [ "::", @clientChannelCell ]
    128112    # obj = Namespace.find( path )
     
    132116  end
    133117
    134   #=== プラグイン引数 serverChannelInitializer のチェック
     118  #=== プラグイン引数 serverChannelInitializer のチェック
    135119  def set_serverChannelInitializer( rhs )
    136120    @serverChannelInitializer = rhs.to_sym
    137121  end
    138122
    139   #=== プラグイン引数 clientChannelInitializer のチェック
     123  #=== プラグイン引数 clientChannelInitializer のチェック
    140124  def set_clientChannelInitializer( rhs )
    141125    @clientChannelInitializer = rhs.to_sym
    142126  end
    143127
    144   #=== タスクタイプ taskCellype のチェック
     128  #=== タスクタイプ taskCellype のチェック
    145129  def set_taskCelltype( rhs )
    146130    @taskCelltype = rhs.to_sym
     
    154138  end
    155139
    156   #=== タスクタイプ stack\size のチェック
     140  #=== タスクタイプ stack\size のチェック
    157141  def set_stackSize( rhs )
    158142    @stackSize = rhs
    159143  end
    160144
    161   #=== プラグイン引数 PPAllocatorSize のチェック
     145  #=== プラグイン引数 PPAllocatorSize のチェック
    162146  def set_PPAllocatorSize( rhs )
    163147    @PPAllocatorSize = rhs
    164148  end
    165149
    166   #=== プラグイン引数 TDRCelltype のチェック
     150  #=== プラグイン引数 TDRCelltype のチェック
    167151  def set_TDRCelltype( rhs )
    168152    @TDRCelltype = rhs.to_sym
     
    176160  end
    177161
    178   #=== プラグイン引数 substituteAllocator のチェック
    179   # オプション引数が、以下の形式であることをチェック
     162  #=== プラグイン引数 substituteAllocator のチェック
     163  # オプション引数が、以下の形式であることをチェック
    180164  #     substituteAllocator(Alloc.eAlloc=>Subst.eAlloc,Alloc2.eAlloc=>Subst2.eAlloc)
    181165  def set_substituteAllocator( rhs )
    182     #str::String : 破壊される(マッチした残りになる)。str.empty? で空になったことをチェックできる
    183     #regexp::Regexp : 期å¾
    184 ã™ã‚‹ãƒˆãƒ¼ã‚¯ãƒ³ã«ãƒžãƒƒãƒã™ã‚‹æ­£è¦è¡¨ç¾ã€‚ "\A" 出始める
    185     #expected::String: 期å¾
    186 ã™ã‚‹ãƒˆãƒ¼ã‚¯ãƒ³ã€regexp が出現しなかった場合にエラーメッセージとして表示
     166    #str::String : 破壊される(マッチした残りになる)。str.empty? で空になったことをチェックできる
     167    #regexp::Regexp : 期待するトークンにマッチする正規表現。 "\A" 出始める
     168    #expected::String: 期待するトークン、regexp が出現しなかった場合にエラーメッセージとして表示
    187169    def optparse (str,regexp,expected)
    188170      str.strip!
     
    198180    ident_rexpr = /\A(\w[\w\d]*)/
    199181
    200     # "Alloc.eAlloc=>CAlloc.eAlloc" の形式になっていることをチェック
     182    # "Alloc.eAlloc=>CAlloc.eAlloc" の形式になっていることをチェック
    201183    while true
    202184      lhs_alloc_cell = optparse( opt, ident_rexpr, "allocator cell name" )
     
    221203      break if ! rhs_alloc_ent
    222204
    223 #  ここでは、右辺のチェックはできない。右辺のセルは前方参ç
    224 §ã¨ãªã‚‹
     205#  ここでは、右辺のチェックはできない。右辺のセルは前方参照となる
    225206#      path = [ "::", rhs_alloc_cell.to_sym ]   # mikan namespace
    226207#      obj = Namespace.find( path )
     
    229210#      else
    230211#        ct = obj.get_celltype
    231 #        if ct #  nil なら既にエラー
     212#        if ct #  nil なら既にエラー
    232213#          ent = ct.find rhs_alloc_ent
    233214#          if ! ent.instance_of? Port || ent.get_port_type != :ENTRY || ent.get_signature == nil || ! ent.get_signature.is_allocator?
     
    250231  end
    251232
    252   #=== プラグイン引数 noServerChannelOpenerCode のチェック
     233  #=== プラグイン引数 noServerChannelOpenerCode のチェック
    253234  def set_noServerChannelOpenerCode( rhs )
    254235    rhs = rhs.to_sym
     
    262243  end
    263244
    264   #=== プラグイン引数 clientSemaphoreCelltype のチェック
     245  #=== プラグイン引数 clientSemaphoreCelltype のチェック
    265246  def set_clientSemaphoreCelltype rhs
    266247    @semaphoreCelltype = rhs.to_sym
     
    272253  end
    273254
    274   #=== プラグイン引数 clientSemaphoreInitializer のチェック
     255  #=== プラグイン引数 clientSemaphoreInitializer のチェック
    275256  def set_clientSemaphoreInitializer rhs
    276257    @semaphoreInitializer = rhs.to_sym
    277258  end
    278259
    279   #=== プラグイン引数 clientErrorHandler のチェック
     260  #=== プラグイン引数 clientErrorHandler のチェック
    280261  def set_clientErrorHandler rhs
    281262    @clientErrorHandler = rhs.to_sym
    282263  end
    283264
    284   #=== プラグイン引数 serverErrorHandler のチェック
     265  #=== プラグイン引数 serverErrorHandler のチェック
    285266  def set_serverErrorHandler rhs
    286267    @serverErrorHandler = rhs.to_sym
     
    288269
    289270
    290   #===  セルの名前を得る
    291   # ThroughPlugin::get_cell_name plugin.rb をオーバーライド
     271  #===  セルの名前を得る
     272  # ThroughPlugin::get_cell_name plugin.rb をオーバーライド
    292273  def get_cell_name
    293274    @cell_name
     
    295276  end
    296277
    297   #=== marshaler のセルタイプ名を設定する
     278  #=== marshaler のセルタイプ名を設定する
    298279  def initialize_opaque_marshaler
    299280
    300     # オプション設定される変数のデフォルトを設定
     281    # オプション設定される変数のデフォルトを設定
    301282    @taskPriority = 11
    302283    @stackSize  = 4096
     
    309290    @taskCelltype = :"tTask"
    310291    @PPAllocatorSize = nil
    311     # @TDRCelltype  = :"tTDR"   # "tNBOTDR" に変更の予定
     292    # @TDRCelltype  = :"tTDR"   # "tNBOTDR" に変更の予定
    312293    @TDRCelltype  = :"tNBOTDR"
    313294    @substituteAllocator = {}
     
    324305    @marshaler_celltype_file_name = "#{$gen}/#{@marshaler_celltype_name}.cdl"
    325306
    326     # signature で対応できないものをチェック
     307    # signature で対応できないものをチェック
    327308    @signature.each_param{ |func_decl, param_decl|
    328309      if param_decl.get_direction == :OUT then
     
    337318  end
    338319
    339   #=== GenOpaqueMarshaler# Opener Code の生成時のチェック
     320  #=== GenOpaqueMarshaler# Opener Code の生成時のチェック
    340321  def check_opener_code
    341     # サーバーチャンネルセルタイプが entry sServerChannelOpener eOpener を持つかどうかをチェック
    342     # mikan entry か (call でないか) をチェックしていない
     322    # サーバーチャンネルセルタイプが entry sServerChannelOpener eOpener を持つかどうかをチェック
     323    # mikan entry か (call でないか) をチェックしていない
    343324    # scct = Namespace.find ["::", @serverChannelCelltype] # mikan namespace
    344325    nsp = NamespacePath.analyze( @serverChannelCelltype.to_s )
     
    360341  end
    361342
    362   #=== GenOpaqueMarshaler# PPAllocator のå¿
    363 è¦æ€§ã‚’チェックする
     343  #=== GenOpaqueMarshaler# PPAllocator の必要性をチェックする
    364344  def check_PPAllocator
    365345    if @signature.need_PPAllocator?(true) then
     
    374354  def gen_marshaler_celltype
    375355    f = CFile.open( @marshaler_celltype_file_name, "w" )
    376     # 同じå†
    377 å®¹ã‚’二度書く可能性あり (AppFile は不可)
     356    # 同じ内容を二度書く可能性あり (AppFile は不可)
    378357
    379358    if @PPAllocatorSize then
     
    404383  end
    405384
    406   #===  受け口関数の本体コードを生成(頭部と末尾は別途出力)
    407   #ct_name:: Symbol    (through プラグインで生成された) セルタイプ名 .Symbol として送られてくる(らしい)
     385  #===  受け口関数の本体コードを生成(頭部と末尾は別途出力)
     386  #ct_name:: Symbol    (through プラグインで生成された) セルタイプ名 .Symbol として送られてくる(らしい)
    408387  def gen_ep_func_body( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
    409388
    410     # unmarshaler クラスか?
     389    # unmarshaler クラスか?
    411390    if ct_name == @unmarshaler_celltype_name.to_sym then
    412391      gen_ep_func_body_unmarshal( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
     
    416395  end
    417396
    418   #===  marshal コードの生成
     397  #===  marshal コードの生成
    419398  def gen_ep_func_body_marshal( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
    420399
     
    422401    b_ret_er = false
    423402
    424     # 関数の戻り値のå
    425 ƒã®åž‹ã‚’å¾—ã‚‹(typedef されている場合)
     403    # 関数の戻り値の元の型を得る(typedef されている場合)
    426404    type = func_type.get_type.get_original_type
    427405
    428     # 戻り値記憶用の変数を出力(void 型の関数では出力しない)
     406    # 戻り値記憶用の変数を出力(void 型の関数では出力しない)
    429407    if ! type.is_void? then
    430408      file.print( "\t#{func_type.get_type.get_type_str}\t\tretval_;\n" )
     
    439417    file.print( "\tint16_t\tstate_;\n" )
    440418
    441     # 関数 ID (整数値)
     419    # 関数 ID (整数値)
    442420    func_id = "FUNCID_#{@signature.get_global_name}_#{func_name}".upcase
    443421    fid = @signature.get_id_from_func_name( func_name )
    444422    file.print( "\tint16_t\tfunc_id_ = #{func_id};      /* (id of '#{func_name}') = #{fid}*/\n" )
    445423
    446     # シングルトンでないか?
     424    # シングルトンでないか?
    447425    if ! b_singleton then
    448426
    449       # singleton でなければ p_cellcb 取得コードを出力
     427      # singleton でなければ p_cellcb 取得コードを出力
    450428      file.print <<EOT
    451429        #{ct_name}_CB *p_cellcb;
     
    455433EOT
    456434
    457       # エラーを返すか?
     435      # エラーを返すか?
    458436      if b_ret_er then
    459437        file.print <<EOT
     
    465443        file.print <<EOT
    466444        }else{
    467                 /* エラー処理コードをここに記述 */
     445                /* エラー処理コードをここに記述 */
    468446        }
    469447
     
    481459    end
    482460
    483     # channel lock コード
     461    # channel lock コード
    484462    file.print <<EOT
    485463
     
    490468EOT
    491469
    492     # SOP を送信
    493     file.print "        /* SOPの送出 */\n"
     470    # SOP を送信
     471    file.print "        /* SOPの送出 */\n"
    494472    file.print "        SET_RPC_STATE( state_, RPCSTATE_CLIENT_SEND_SOP );\n"
    495473    file.print "        if( ( ercd_ = cTDR_sendSOP( true ) ) != E_OK )\n"
    496474    file.print "                goto error_reset;\n"
    497475
    498     # func_id を送信
    499     file.print "        /* 関数 id の送出 */\n"
     476    # func_id を送信
     477    file.print "        /* 関数 id の送出 */\n"
    500478    file.print "        if( ( ercd_ = cTDR_putInt16( func_id_ ) ) != E_OK )\n"
    501479    file.print "                goto error_reset;\n"
     
    504482    # p "#{ct_name}, #{sig_name}, #{func_name}, #{func_global_name}"
    505483
    506     b_get = false    # marshal なら put
     484    b_get = false    # marshal なら put
    507485    b_marshal = true  # marshal
    508486
    509     # in 方向のå
    510 ¥å‡ºåŠ›ã‚’出力
     487    # in 方向の入出力を出力
    511488    if func_type.has_inward? then
    512       file.print "      /* å
    513 ¥åŠ›å¼•æ•°é€å‡º */\n"
     489      file.print "      /* 入力引数送出 */\n"
    514490      file.print "      SET_RPC_STATE( state_, RPCSTATE_CLIENT_SEND_BODY );\n"
    515491      print_params( params, file, 1, b_marshal, b_get, true, "eClientEntry", func_name )
     
    523499      b_continue = "false"
    524500    end
    525     file.print "        /* EOPの送出(パケットの掃きだし) */\n"
     501    file.print "        /* EOPの送出(パケットの掃きだし) */\n"
    526502    file.print "        SET_RPC_STATE( state_, RPCSTATE_CLIENT_SEND_EOP );\n"
    527503    file.print "        if( (ercd_=cTDR_sendEOP(#{b_continue})) != E_OK )\n"
    528504    file.print "                goto error_reset;\n\n"
    529505
    530     # send のメモリをデアロケート
     506    # send のメモリをデアロケート
    531507    if func_type.has_send? then
    532508      file.print "      /* dealloc send parameter while executing */\n"
     
    539515    if ! func_type.is_oneway? then
    540516
    541       file.print "      /* パケットの始まりをチェック */\n"
     517      file.print "      /* パケットの始まりをチェック */\n"
    542518      file.print "      SET_RPC_STATE( state_, RPCSTATE_CLIENT_RECV_SOP );\n"
    543519      file.print "      if( (ercd_=cTDR_receiveSOP( true )) != E_OK )\n"
    544520      file.print "              goto error_reset;\n"
    545521
    546       b_get = true     # marshaler は get
    547       file.print "      /* 戻り値の受け取り */\n"
     522      b_get = true     # marshaler get
     523      file.print "      /* 戻り値の受け取り */\n"
    548524      print_param( "retval_", func_type.get_type, file, 1, :RETURN, nil, nil, b_marshal, b_get )
    549525
     
    557533        indent = "      " * indent_level
    558534
    559         file.print "#{indent}/* 出力値の受け取り */\n"
     535        file.print "#{indent}/* 出力値の受け取り */\n"
    560536        file.print "#{indent}SET_RPC_STATE( state_, RPCSTATE_CLIENT_RECV_BODY );\n"
    561537        print_params( params, file, indent_level, b_marshal, b_get, true, "eClientEntry", func_name )
     
    567543      end
    568544
    569       file.print "\n    /* パケットの終わりをチェック */\n"
     545      file.print "\n    /* パケットの終わりをチェック */\n"
    570546      file.print "      SET_RPC_STATE( state_, RPCSTATE_CLIENT_RECV_EOP );\n"
    571547      file.print "      if( (ercd_=cTDR_receiveEOP(false)) != E_OK )\n"  # b_continue = false
     
    574550    end # ! func_type.is_oneway?
    575551
    576     # channel lock コード
     552    # channel lock コード
    577553    file.print <<EOT
    578554        /* Channel Unlock */
     
    583559
    584560    if( b_void == false )then
    585       # 呼びå
    586 ƒã«æˆ»ã‚Šå€¤ã‚’リターン
     561      # 呼び元に戻り値をリターン
    587562      file.print( "     return retval_;\n" )
    588563    else
     
    594569error_reset:
    595570EOT
    596     # send のメモリをデアロケート
     571    # send のメモリをデアロケート
    597572    if func_type.has_send? then
    598573      file.print "      /* dealloc send parameter */\n"
     
    603578    end
    604579
    605     # receive のメモリをデアロケート
     580    # receive のメモリをデアロケート
    606581    if func_type.has_receive? then
    607582      file.print( "     /* receive parameter */\n" )
     
    615590EOT
    616591
    617     # channel lock コード
     592    # channel lock コード
    618593    file.print <<EOT
    619594        /* Channel Unlock */
     
    626601
    627602    if( b_ret_er != false )then
    628       # 呼びå
    629 ƒã«æˆ»ã‚Šå€¤ã‚’リターン
     603      # 呼び元に戻り値をリターン
    630604      file.print( "     return ERCD( E_RPC, MERCD( ercd_ ) );\n" )
    631605    else
     
    635609  end
    636610
    637   #===  unmarshal コードの生成
     611  #===  unmarshal コードの生成
    638612  def gen_ep_func_body_unmarshal( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
    639613
    640614    b_ret_er = true
    641615
    642     # func_id を得るコードを生成
     616    # func_id を得るコードを生成
    643617    file.print <<EOT
    644618
     
    662636        file.print <<EOT
    663637        }else{
    664                 /* エラー処理コードをここに記述 */
     638                /* エラー処理コードをここに記述 */
    665639        }
    666640EOT
     
    673647#endif
    674648
    675         /* SOPのチェック */
     649        /* SOPのチェック */
    676650        SET_RPC_STATE( state_, RPCSTATE_SERVER_RECV_SOP );
    677651        if( (ercd_=cTDR_receiveSOP( false )) != E_OK )
    678652                goto error_reset;
    679         /* func_id の取得 */
     653        /* func_id の取得 */
    680654        if( (ercd_=cTDR_getInt16( &func_id_ )) != E_OK )
    681655                goto error_reset;
     
    687661EOT
    688662
    689     # signature に含まれる すべての関数について
     663    # signature に含まれる すべての関数について
    690664    @signature.get_function_head_array.each { |f|
    691665      f_name = f.get_name
     
    701675
    702676    if @PPAllocatorSize then
    703       ppallocator_dealloc_str = "       /* PPAllocator のすべてを解放 */\n       cPPAllocator_dealloc_all();"
     677      ppallocator_dealloc_str = "       /* PPAllocator のすべてを解放 */\n     cPPAllocator_dealloc_all();"
    704678    else
    705679      ppallocator_dealloc_str = ""
     
    724698  end
    725699
    726   #=== PREAMBLE 部のコード生成
    727   # アンマーシャラセルタイプの場合、アンマーシャラ関数のプロトタイプ宣言を生成
     700  #=== PREAMBLE 部のコード生成
     701  # アンマーシャラセルタイプの場合、アンマーシャラ関数のプロトタイプ宣言を生成
    728702  def gen_preamble file, b_singleton, ct_name, global_name
    729703    if ct_name != @unmarshaler_celltype_name.to_sym then
     
    731705    end
    732706
    733     # string.h の include (memset, strlen のため)
     707    # string.h の include (memset, strlen のため)
    734708    file.print "/* header file (strlen, memset) */\n"
    735709    file.print "#include\t<string.h>\n\n"
    736710
    737     file.print "/* アンマーシャラ関数のプロトタイプ宣言 */\n"
    738     # signature に含まれる すべての関数について
     711    file.print "/* アンマーシャラ関数のプロトタイプ宣言 */\n"
     712    # signature に含まれる すべての関数について
    739713    @signature.get_function_head_array.each { |f|
    740714      f_name = f.get_name
     
    746720  end
    747721
    748   #=== POSTAMBLE 部のコード生成
    749   # アンマーシャラセルタイプの場合、個ã€
    750 ã®ã‚¢ãƒ³ãƒžãƒ¼ã‚·ãƒ£ãƒ©é–¢æ•°ã®ç”Ÿæˆ
     722  #=== POSTAMBLE 部のコード生成
     723  # アンマーシャラセルタイプの場合、個々のアンマーシャラ関数の生成
    751724  def gen_postamble file, b_singleton, ct_name, global_name
    752725    if ct_name != @unmarshaler_celltype_name.to_sym then
     
    754727    end
    755728
    756     file.print "\n/*** アンマーシャラ関数 ***/\n\n"
     729    file.print "\n/*** アンマーシャラ関数 ***/\n\n"
    757730    @signature.get_function_head_array.each { |f|
    758731      f_name = f.get_name
     
    760733      id = @signature.get_id_from_func_name( f_name )
    761734
    762       # 関数は返り値を持つか?
     735      # 関数は返り値を持つか?
    763736      b_ret_er = false
    764737      init_retval = ""
     
    784757      file.print "      ER      ercd_;\n"
    785758
    786       # 引数を受取る変数の定義
     759      # 引数を受取る変数の定義
    787760      params = f.get_declarator.get_type.get_paramlist.get_items
    788761           # FuncHead->  Decl->    FuncType->ParamList
     
    793766        dir = par.get_direction
    794767        if( dir == :RECEIVE )then
    795           # type は PtrType で、それを取り除いた型
     768          # type は PtrType で、それを取り除いた型
    796769          type = type.get_type
    797770        end
     
    811784        end
    812785
    813         type_str = type.get_type_str.gsub( /\bconst\b */, "" ) # "const" を外す
     786        type_str = type.get_type_str.gsub( /\bconst\b */, "" ) # "const" を外す
    814787        file.printf( "  %-12s %s%s%s%s%s;\n", type_str, aster, name, aster2, type.get_type_str_post, init )
    815788
     
    823796      end
    824797
    825       # in 方向のå
    826 ¥å‡ºåŠ›ã‚’å
    827 ¥åŠ›
    828       file.print "\n    /* å
    829 ¥åŠ›å¼•æ•°å—取 */\n"
     798      # in 方向の入出力を入力
     799      file.print "\n    /* 入力引数受取 */\n"
    830800      file.print "      SET_RPC_STATE( *state_, RPCSTATE_SERVER_RECV_BODY );\n"
    831       b_get = true    # unmarshal では get
     801      b_get = true    # unmarshal では get
    832802      b_marshal  = false
    833803      print_params( params, file, 1, b_marshal, b_get, true, "cServerCall", f_name )
     
    836806
    837807
    838       # パケットの受信完了
    839       file.print "      /* パケット終わりをチェック */\n"
     808      # パケットの受信完了
     809      file.print "      /* パケット終わりをチェック */\n"
    840810      file.print "      SET_RPC_STATE( *state_, RPCSTATE_SERVER_RECV_EOP );\n"
    841811      if ! f_type.is_oneway? then
     
    847817      file.print "              goto error_reset;\n\n"
    848818
    849       # out のメモリをアロケート
     819      # out のメモリをアロケート
    850820      dir = :OUT; alloc_cp = "cPPAllocator_alloc"; alloc_cp_extra = nil; nest = 1
    851821      alloc_for_out_params( params, file, nest, dir, alloc_cp, alloc_cp_extra )
    852822
    853       # 対象関数を呼出す
    854       file.print "      /* 対象関数の呼出し */\n"
     823      # 対象関数を呼出す
     824      file.print "      /* 対象関数の呼出し */\n"
    855825      file.print "      SET_RPC_STATE( *state_, RPCSTATE_SERVER_EXEC );\n"
    856826      if b_void then
     
    871841      file.print( " );\n" )
    872842
    873       # 戻り値、出力引数の受取コードの生成
    874 
    875       # oneway の場合出力、戻り値が無く、受取をå¾
    876 ãŸãªã„(非同期な呼出し)
     843      # 戻り値、出力引数の受取コードの生成
     844
     845      # oneway の場合出力、戻り値が無く、受取を待たない(非同期な呼出し)
    877846      if ! f.is_oneway? then
    878847
    879         file.print "\n  /* SOPの送出 */\n"
     848        file.print "\n  /* SOPの送出 */\n"
    880849        file.print "    SET_RPC_STATE( *state_, RPCSTATE_SERVER_SEND_SOP );\n"
    881850
     
    883852        file.print "            goto error_reset;\n"
    884853
    885         b_get = false     # unmarshaler は put
     854        b_get = false     # unmarshaler put
    886855        if( ! b_void )then
    887           file.print "  /* 戻り値の送出 */\n"
     856          file.print "  /* 戻り値の送出 */\n"
    888857          print_param( "retval_", f_type.get_type, file, 1, :RETURN, nil, nil, b_marshal, b_get )
    889858        end
     
    898867          indent = "    " * indent_level
    899868
    900           file.print "#{indent}/* 出力値の送出 */\n"
     869          file.print "#{indent}/* 出力値の送出 */\n"
    901870          file.print "#{indent}SET_RPC_STATE( *state_, RPCSTATE_SERVER_SEND_BODY );\n"
    902871          print_params( params, file, indent_level, b_marshal, b_get, true, "cServerCall", f_name )
    903872          print_params( params, file, indent_level, b_marshal, b_get, false, "cServerCall", f_name )
    904873
    905           # receive のメモリをデアロケート
     874          # receive のメモリをデアロケート
    906875          if f_type.has_receive? then
    907876            file.print "#{indent}/* dealloc receive parameter */\n"
     
    915884        end
    916885
    917         file.print "    /* パケットの終わり(掃きだし) */\n"
     886        file.print "    /* パケットの終わり(掃きだし) */\n"
    918887        file.print "    SET_RPC_STATE( *state_, RPCSTATE_SERVER_SEND_EOP );\n"
    919888        file.print "    if( (ercd_=cTDR_sendEOP(false)) != E_OK )\n"  # b_continue = false
     
    926895error_reset:
    927896EOT
    928       # send のリセット用デアロケート
     897      # send のリセット用デアロケート
    929898      if f_type.has_send? then
    930899        file.print "    /* dealloc send parameter */\n"
     
    935904      end
    936905
    937       # receive のメモリをデアロケート
     906      # receive のメモリをデアロケート
    938907      if f_type.has_receive? && b_ret_er then
    939908        file.print "    /* dealloc receive parameter */\n"
     
    947916      file.print "}\n\n"
    948917
    949       # ここ(個ã€
    950 ã®é–¢æ•°ï¼‰ã§ã¯ã‚¨ãƒ©ãƒ¼ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯å‘¼ã³å‡ºã•ãªã„。呼びå
    951 ƒï¼ˆã‚µãƒ¼ãƒãƒ¼ã®ãƒ¡ã‚¤ãƒ³é–¢æ•°ï¼‰ã§å‘¼ã³å‡ºã™ã€‚
     918      # ここ(個々の関数)ではエラーハンドラーは呼び出さない。呼び元(サーバーのメイン関数)で呼び出す。
    952919    }
    953920  end
     
    956923  #b_marshal:: bool
    957924  #b_get:: bool
    958   #  b_marshal = true  && b_get == false   :  マーシャラでå
    959 ¥åŠ›å¼•æ•°é€å‡º
    960   #  b_marshal = true  && b_get == true    :  マーシャラで出力引数受取
    961   #  b_marshal = false && b_get == false   :  アンマーシャラでå
    962 ¥åŠ›å¼•æ•°å—取
    963   #  b_marshal = false && b_get == true    :  アンマーシャラで出力引数送出
    964   #b_referenced:: size_is, count_is, string で参ç
    965 §ã•ã‚Œã¦ã„るものを出力
     925  #  b_marshal = true  && b_get == false   :  マーシャラで入力引数送出
     926  #  b_marshal = true  && b_get == true    :  マーシャラで出力引数受取
     927  #  b_marshal = false && b_get == false   :  アンマーシャラで入力引数受取
     928  #  b_marshal = false && b_get == true    :  アンマーシャラで出力引数送出
     929  #b_referenced:: size_is, count_is, string で参照されているものを出力
    966930  def print_params( params, file, nest, b_marshal, b_get, b_referenced, port_name, func_name )
    967931    params.each{ |param|
     
    986950        case dir
    987951        when :OUT, :INOUT
    988           alloc_cp = nil        # inout の b_get==true&&b_marsha==true のときアロケータコードは不用
     952          alloc_cp = nil        # inout の b_get==true&&b_marsha==true のときアロケータコードは不用
    989953          alloc_cp_extra = nil
    990954          print_param( param.get_name, param.get_type, file, nest, dir, nil, nil, b_marshal, b_get, alloc_cp, alloc_cp_extra )
     
    993957          alloc_cp_extra = nil
    994958          if b_get then
    995             outer = "(*"         # マーシャラ側では、ポインタが (send と比べ) 一つ多い
     959            outer = "(*"         # マーシャラ側では、ポインタが (send と比べ) 一つ多い
    996960            outer2 = ")"
    997961          else
    998             outer = nil          # アンマーシャラ側では、ポインタが一つ外されている
     962            outer = nil          # アンマーシャラ側では、ポインタが一つ外されている
    999963            outer2 = nil
    1000964          end
     
    1006970  end
    1007971
    1008   #=== アロケータコードを生成 (out のアンマーシャラ用)
     972  #=== アロケータコードを生成 (out のアンマーシャラ用)
    1009973  def alloc_for_out_params( params, file, nest, dir, alloc_cp, alloc_cp_extra )
    1010974    params.each{ |param|
     
    1016980  end
    1017981
    1018   #=== アロケータコードを生成 (out のアンマーシャラ用個別パラメータの生成)
     982  #=== アロケータコードを生成 (out のアンマーシャラ用個別パラメータの生成)
    1019983  def alloc_for_out_param( name, type, file, nest, outer, outer2, alloc_cp, alloc_cp_extra )
    1020984    org_type = type.get_original_type
     
    1029993      count = type.get_count; size = type.get_size; string = type.get_string
    1030994      if count || size || string then
    1031         loop_counter_type = IntType.new(16)   # mikan 方を size_is, count_is の引数の型とする
     995        loop_counter_type = IntType.new(16)   # mikan 方を size_is, count_is の引数の型とする
    1032996        if count then
    1033997          len = type.get_count.to_s
     
    10421006        end
    10431007
    1044         # size_is に max 指定がある場合、length が max をè¶
    1045 ãˆã¦ã„るかチェックするコードを生成
     1008        # size_is に max 指定がある場合、length が max を超えているかチェックするコードを生成
    10461009        if org_type.get_max != nil && string == nil then
    10471010          file.print "#{indent}if( #{len} > #{type.get_max} ){\t/* GenOpaqueMarshaler max check 2 */\n"
     
    10821045  end
    10831046
    1084   #=== 引数の一括デアロケートコードの生成
    1085   # send:マーシャラの最後、receive:アンマーシャラの最後で一括して引数をデアロケートする
     1047  #=== 引数の一括デアロケートコードの生成
     1048  # send:マーシャラの最後、receive:アンマーシャラの最後で一括して引数をデアロケートする
    10861049  def dealloc_for_params( params, file, nest, dir, dealloc_cp, b_reset = false )
    10871050    if b_reset then
     
    10971060        aster = ""
    10981061        if dir == :RECEIVE then
    1099           type = type.get_type.get_original_type   # ポインタを一つ外す
     1062          type = type.get_type.get_original_type   # ポインタを一つ外す
    11001063          if b_reset then
    11011064            aster = "*"
     
    11181081  end
    11191082
    1120   #== out で nullable な引数のæƒ
    1121 å ±ã‚’渡す
    1122   # out nullable の場合、in, send, receive のように、値を渡す直前ではなく、呼出し時に渡す
     1083  #== out で nullable な引数の情報を渡す
     1084  # out nullable の場合、in, send, receive のように、値を渡す直前ではなく、呼出し時に渡す
    11231085  def  print_out_nullable( params, file, nest, b_marshal );
    11241086    indent = "\t" * nest
     
    11301092        file.print "#{indent}\tgoto error_reset;\n"
    11311093      else
    1132         # 呼びå
    1133 ˆã¯ alloc_for_out_param で nullable の対応する
     1094        # 呼び先は alloc_for_out_param で nullable の対応する
    11341095        file.print "#{indent}if( (ercd_=cTDR_getInt8( &b_#{param.get_name}_null_)) != E_OK )\n"
    11351096        file.print "#{indent}\tgoto error_reset;\n"
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/lib/GenParamCopy.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: GenParamCopy.rb 2061 2014-05-31 22:15:33Z okuma-top $
     37#   $Id$
    5338#++
    5439
    5540#= ParamCopy
    5641#
    57 # パラメータコピーするマーシャラ/アンマーシャラコードを生成するメソッド print_param を提供する.
    58 # RPCPlugin, OpaqueRPCPlugin に include される.
    59 # RPCPlugin (トランスペアレント) では、oneway 関数で in のポインタ引数の場合に限って print_param が用いられる.
     42# パラメータコピーするマーシャラ/アンマーシャラコードを生成するメソッド print_param を提供する.
     43# RPCPlugin, OpaqueRPCPlugin に include される.
     44# RPCPlugin (トランスペアレント) では、oneway 関数で in のポインタ引数の場合に限って print_param が用いられる.
    6045#
    6146module  GenParamCopy
    6247
    63   #=== 引数の転送コードを生成
     48  #=== 引数の転送コードを生成
    6449
    6550  def print_param( name, type, file, nest, dir, outer, outer2, b_marshal, b_get, alloc_cp = nil, alloc_cp_extra = nil, name_list = nil )
     
    7661EOT
    7762        if ( dir == :SEND || dir == :RECEIVE ) && type.get_type.has_pointer? then
    78           # send, receive の場合は、エラーリセットに備え NULL にする
     63          # send, receive の場合は、エラーリセットに備え NULL にする
    7964          file.print <<EOT
    8065#{indent}memset( (void *)#{outer}#{name}#{outer2}#{alloc_cp_extra}, 0, sizeof(#{type.get_type.get_type_str}#{type.get_type.get_type_str_post})*(#{size_str});   /* GenParamCopy Alloc1 */
     
    10388        when :SIGNED
    10489          if bit_size == -1 || bit_size == -11 then
    105             sign = "S"   # signed char の場合のみ S がつく
     90            sign = "S"   # signed char の場合のみ S がつく
    10691          else
    10792            sign = ""
     
    156141        nest = print_nullable_pre( name, type, file, nest, dir, outer, outer2, b_marshal, b_get )
    157142        indent = "\t" * nest
    158         loop_counter_type = IntType.new(32)   # mikan 型を size_is, count_is の引数の型とする
     143        loop_counter_type = IntType.new(32)   # mikan 型を size_is, count_is の引数の型とする
    159144        file.print "#{indent}{\t/* GenParamCopy 4 */\n"
    160145        file.print "#{indent}   #{loop_counter_type.get_type_str}  i__#{nest}, length__#{nest};\n"
     
    168153            count_str = count.to_str( name_list, outer, outer2 )
    169154          else
    170             # size_is はå¿
    171 é ˆ. count_is はオプション
     155            # size_is は必須. count_is はオプション
    172156            count_str = size_str
    173157          end
    174158          file.print "#{indent} length__#{nest} = #{count_str};\t/* GenParamCopy 5 */\n"
    175159
    176           # size_is に max 指定がある場合、length が max をè¶
    177 ãˆã¦ã„るかチェックするコードを生成
    178               # alloc_cp == nil のとき dir は INOUT, OUT のはず (条件が冗長)。試験が終わっているので、次回見直し時に外す
     160          # size_is に max 指定がある場合、length が max を超えているかチェックするコードを生成
     161              # alloc_cp == nil のとき dir は INOUT, OUT のはず (条件が冗長)。試験が終わっているので、次回見直し時に外す
    179162          if b_get && type.get_max != nil && ! ( ( dir == :INOUT || dir == :OUT ) && alloc_cp == nil ) then
    180163            file.print "#{indent}       if( length__#{nest} > #{type.get_max.to_s} ){\t/* GenParamCopy max check 1 */\n"
     
    202185              file.print "#{indent}     length__#{nest} = STRLEN#{b_size}(#{outer}#{name}#{outer2})+1;\t/* GenParamCopy 7 */\n"
    203186            end
    204             size_str = "length__#{nest}"     # string の場合、strnlen 以上の領域を確保しない
     187            size_str = "length__#{nest}"     # string の場合、strnlen 以上の領域を確保しない
    205188          else
    206189            if ( dir == :INOUT ) then
    207190              if ( string.instance_of? Expression ) then
    208191                len = string.to_str( name_list, outer, outer2 )
    209                 size_str = "#{len}"              # string(len) の場合 len を確保する
     192                size_str = "#{len}"              # string(len) の場合 len を確保する
    210193              else
    211194                raise "unsuscripted string used for inout parameter #{name}"
    212195              end
    213196            else
    214               size_str = "length__#{nest}"     # string の場合、strnlen 以上の領域を確保しない
     197              size_str = "length__#{nest}"     # string の場合、strnlen 以上の領域を確保しない
    215198            end
    216199          end
     
    224207EOT
    225208          if ( dir == :SEND || dir == :RECEIVE ) && type.get_type.has_pointer? then
    226             # send, receive の場合は、エラーリセットに備え NULL にする
     209            # send, receive の場合は、エラーリセットに備え NULL にする
    227210            file.print <<EOT
    228211#{indent}       memset( (void *)#{outer}#{name}#{outer2}#{alloc_cp_extra}, 0, sizeof(#{type.get_type.get_type_str}#{type.get_type.get_type_str_post})*(#{size_str}) );   /* GenParamCopy Alloc2 */
     
    251234EOT
    252235          if ( dir == :SEND || dir == :RECEIVE ) && type.get_type.has_pointer? then
    253             # send, receive の場合は、エラーリセットに備え NULL にする
     236            # send, receive の場合は、エラーリセットに備え NULL にする
    254237            file.print <<EOT
    255238#{indent}memset( (void *)#{outer}#{name}#{outer2}#{alloc_cp_extra}, 0, sizeof(#{type.get_type.get_type_str}#{type.get_type.get_type_str_post}) );   /* GenParamCopy Alloc3 */
     
    286269        size_str = subsc.to_str( name_list, outer, outer2 )
    287270
    288         loop_counter_type = IntType.new(32)   # mikan 型を size_is, count_is の引数の型とする
     271        loop_counter_type = IntType.new(32)   # mikan 型を size_is, count_is の引数の型とする
    289272        file.print "#{indent}{\t/* GenParamCopy 11 */\n"
    290273        file.print "#{indent}   #{loop_counter_type.get_type_str}  i__#{nest}, length__#{nest} = #{size_str};\n"
     
    302285    if type.is_nullable? then
    303286      indent = "        " * nest
    304       if dir == :OUT then  # OUT の場合 print_out_nullable で NULL かどうかのæƒ
    305 å ±ã‚’渡す
     287      if dir == :OUT then  # OUT の場合 print_out_nullable で NULL かどうかの情報を渡す
    306288        # 'null or not' is sent in the function 'print_out_nullable'
    307289        if b_get then
     
    321303#{indent}       if( ! b_null_ ){
    322304EOT
    323           else # dir = :INOUT, b_marshal = true, b_get = true の場合、NULL かどうかのæƒ
    324 å ±ã‚’渡さない
     305          else # dir = :INOUT, b_marshal = true, b_get = true の場合、NULL かどうかの情報を渡さない
    325306            file.print <<EOT
    326307#{indent}       int8_t  b_null_ = (#{outer}#{name}#{outer2} == NULL);\t/* GenParamCopy Null 21 */
     
    335316
    336317          if ! ( dir == :INOUT && b_marshal == false ) then
    337             # dir = :INOUT, b_marshal = false, b_get = false の場合
     318            # dir = :INOUT, b_marshal = false, b_get = false の場合
    338319            file.print <<EOT
    339320#{indent}       if((ercd_=cTDR_putInt8( b_null_ )) != E_OK )\t/* GenParamCopy Null 32 */
     
    355336  def print_nullable_post( name, type, file, nest, dir, outer, outer2, b_marshal, b_get )
    356337    if type.is_nullable? then
    357       if dir == :OUT then  # OUT の場合 print_out_nullable で NULL かどうかのæƒ
    358 å ±ã‚’渡す
     338      if dir == :OUT then  # OUT の場合 print_out_nullable で NULL かどうかの情報を渡す
    359339        nest -= 1
    360340        indent = "      " * nest
     
    371351#{indent}       }  /* ! b_null_ */
    372352EOT
    373           else # dir = :INOUT, b_marshal = true   # inout の out 方向
     353          else # dir = :INOUT, b_marshal = true   # inout の out 方向
    374354            file.print "#{indent}       }  /* ! b_null_  GenParamCopy Null 52 */\n"
    375355          end
  • asp3_gr_sakura/trunk/tecsgen/tecslib/plugin/lib/GenTransparentMarshaler.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r317 r318  
    66#   Copyright (C) 2008-2014 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: GenTransparentMarshaler.rb 2418 2016-01-04 12:17:36Z okuma-top $
     37#   $Id$
    5338#++
    5439
    55 #プラグインオプション用変数
     40#プラグインオプション用変数
    5641#@task_priority:: Integer
    5742#@channelCelltype:: String
     
    6045module GenTransparentMarshaler
    6146
    62   # プラグイン引数名と Proc
     47  # プラグイン引数名と Proc
    6348  RPCPluginArgProc = {
    6449    "taskPriority"    => Proc.new { |obj,rhs| obj.set_taskPriority rhs },
     
    6954  }
    7055
    71   #=== プラグイン引数 taskPriority のチェック
     56  #=== プラグイン引数 taskPriority のチェック
    7257  def set_taskPriority( rhs )
    7358    @task_priority = rhs
    7459  end
    7560
    76   #=== プラグイン引数 channelCelltype のチェック
     61  #=== プラグイン引数 channelCelltype のチェック
    7762  def set_channelCelltype( rhs )
    7863    @channelCelltype = rhs.to_sym
     
    8671  end
    8772
    88   #=== プラグイン引数 TDRCelltype のチェック
     73  #=== プラグイン引数 TDRCelltype のチェック
    8974  def set_TDRCelltype( rhs )
    9075    @TDRCelltype = rhs.to_sym
     
    9883  end
    9984
    100   #=== プラグイン引数 channelCellName のチェック
     85  #=== プラグイン引数 channelCellName のチェック
    10186  def set_channelCellName( rhs )
    10287    @channelCellName = rhs
     
    10893  end
    10994
    110   #=== プラグイン引数 PPAllocatorSize のチェック
     95  #=== プラグイン引数 PPAllocatorSize のチェック
    11196  def set_PPAllocatorSize( rhs )
    11297    @PPAllocatorSize = rhs
    11398  end
    11499
    115   #=== marshaler のセルタイプ名を設定する
     100  #=== marshaler のセルタイプ名を設定する
    116101  def initialize_transparent_marshaler cell_name
    117102    @task_priority = 8
     
    135120
    136121    f = CFile.open( @marshaler_celltype_file_name, "w" )
    137     # 同じå†
    138 å®¹ã‚’二度書く可能性あり (AppFile は不可)
     122    # 同じ内容を二度書く可能性あり (AppFile は不可)
    139123
    140124    f.print <<EOT
     
    157141  end
    158142
    159   #===  受け口関数の本体コードを生成(頭部と末尾は別途出力)
    160   #ct_name:: Symbol    (through プラグインで生成された) セルタイプ名 .Symbol として送られてくる(らしい)
     143  #===  受け口関数の本体コードを生成(頭部と末尾は別途出力)
     144  #ct_name:: Symbol    (through プラグインで生成された) セルタイプ名 .Symbol として送られてくる(らしい)
    161145  def gen_ep_func_body( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
    162146
    163     # unmarshaler クラスか?
     147    # unmarshaler クラスか?
    164148    if ct_name == @unmarshaler_celltype_name.to_sym then
    165149      gen_ep_func_body_unmarshal( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
     
    169153  end
    170154
    171   #===  marshal コードの生成
     155  #===  marshal コードの生成
    172156  def gen_ep_func_body_marshal( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
    173157
     
    175159    b_ret_er = false
    176160
    177     # 関数の戻り値のå
    178 ƒã®åž‹ã‚’å¾—ã‚‹(typedef されている場合)
     161    # 関数の戻り値の元の型を得る(typedef されている場合)
    179162    type = func_type.get_type.get_original_type
    180163
    181     # 戻り値記憶用の変数を出力(void 型の関数では出力しない)
     164    # 戻り値記憶用の変数を出力(void 型の関数では出力しない)
    182165    if ! type.is_void? then
    183166      if func_type.get_type.kind_of?( DefinedType ) && ( func_type.get_type.get_type_str == "ER" || func_type.get_type.get_type_str == "ER_INT" ) then
     
    194177    file.print( "    FLGPTN  flgptn;\n" )
    195178
    196     # 呼びå
    197 ˆã® signature を取り出す
     179    # 呼び先の signature を取り出す
    198180    signature = @signature
    199181
    200     # 関数 ID (整数値)
     182    # 関数 ID (整数値)
    201183    func_id = signature.get_id_from_func_name( func_name )
    202184    file.print( "    int16_t  func_id_ = #{func_id};    /* id of #{func_name}: #{func_id} */\n" )
    203185
    204     # シングルトンでないか?
     186    # シングルトンでないか?
    205187    if ! b_singleton then
    206188
    207       # singleton でなければ p_cellcb 取得コードを出力
     189      # singleton でなければ p_cellcb 取得コードを出力
    208190      file.print <<EOT
    209191    #{ct_name}_CB *p_cellcb;
     
    213195EOT
    214196
    215       # エラーを返すか?
     197      # エラーを返すか?
    216198      if b_ret_er then
    217199        file.print <<EOT
     
    223205        file.print <<EOT
    224206    }else{
    225         /* エラー処理コードをここに記述 */
    226     }
    227 EOT
    228       end
    229     end
    230 
    231     # channel lock コード
     207        /* エラー処理コードをここに記述 */
     208    }
     209EOT
     210      end
     211    end
     212
     213    # channel lock コード
    232214    file.print <<EOT
    233215    /* Channel Lock */
     
    237219EOT
    238220
    239     # SOP を送信
    240     file.print "    /* SOPの送出 */\n"
     221    # SOP を送信
     222    file.print "    /* SOPの送出 */\n"
    241223    file.print "    if( ( ercd_ = cTDR_sendSOP( true ) ) != E_OK )\n"
    242224    file.print "      goto error_reset;\n"
    243225
    244     # func_id を送信
    245     file.print "    /* 関数 id の送出 */\n"
     226    # func_id を送信
     227    file.print "    /* 関数 id の送出 */\n"
    246228    file.print "    if( ( ercd_ = cTDR_putInt16( func_id_ ) ) != E_OK )\n"
    247229    file.print "        goto error_reset;\n"
     
    250232    # p "#{ct_name}, #{sig_name}, #{func_name}, #{func_global_name}"
    251233
    252     b_get = false    # marshal なら put
     234    b_get = false    # marshal なら put
    253235    b_marshal = true  # marshal
    254236
    255     # in 方向のå
    256 ¥å‡ºåŠ›ã‚’出力
    257     file.print "    /* å
    258 ¥åŠ›å¼•æ•°é€å‡º */\n"
     237    # in 方向の入出力を出力
     238    file.print "    /* 入力引数送出 */\n"
    259239    print_params( params, file, 1, b_marshal, b_get, true, func_type.is_oneway? )
    260240    print_params( params, file, 1, b_marshal, b_get, false, func_type.is_oneway? )
     
    264244    end
    265245
    266     file.print "    /* EOPの送出(パケットの掃きだし) */\n"
     246    file.print "    /* EOPの送出(パケットの掃きだし) */\n"
    267247    if ! func_type.is_oneway? then
    268248      b_continue = "true"
     
    293273
    294274    if( b_void == false )then
    295       # 呼びå
    296 ƒã«æˆ»ã‚Šå€¤ã‚’リターン
     275      # 呼び元に戻り値をリターン
    297276      file.print( "    return retval_;\n" )
    298277    else
     
    307286EOT
    308287
    309     # channel lock コード
     288    # channel lock コード
    310289    file.print <<EOT
    311290    /* Channel Lock */
     
    316295
    317296    if( b_ret_er != false )then
    318       # 呼びå
    319 ƒã«æˆ»ã‚Šå€¤ã‚’リターン
     297      # 呼び元に戻り値をリターン
    320298      file.print( "    return ercd_;\n" )
    321299    else
     
    325303  end
    326304
    327   #===  unmarshal コードの生成
     305  #===  unmarshal コードの生成
    328306  def gen_ep_func_body_unmarshal( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
    329307
     
    331309    b_ret_er = false
    332310
    333     # func_id を得るコードを生成
     311    # func_id を得るコードを生成
    334312    file.print <<EOT
    335313
     
    352330        file.print <<EOT
    353331    }else{
    354         /* エラー処理コードをここに記述 */
     332        /* エラー処理コードをここに記述 */
    355333    }
    356334EOT
     
    359337    file.print <<EOT
    360338
    361     /* SOPのチェック */
     339    /* SOPのチェック */
    362340    if( (ercd_=cTDR_receiveSOP( false )) != E_OK )
    363341        goto error_reset;
    364     /* func_id の取得 */
     342    /* func_id の取得 */
    365343    if( (ercd_=cTDR_getInt16( &func_id_ )) != E_OK )
    366344        goto error_reset;
     
    372350EOT
    373351
    374     # 呼びå
    375 ˆã® signature を取り出す
     352    # 呼び先の signature を取り出す
    376353    # port = @celltype.find( @next_cell_port_name )
    377354    # signature = port.get_signature
    378355    signature = @signature
    379356
    380     # through の signature に含まれる すべての関数について
     357    # through の signature に含まれる すべての関数について
    381358    signature.get_function_head_array.each { |f|
    382359      f_name = f.get_name
     
    384361      id = signature.get_id_from_func_name( f_name )
    385362
    386       # 関数は返り値を持つか?
     363      # 関数は返り値を持つか?
    387364      if f_type.get_type.is_void? then
    388365        b_void = true
     
    391368      end
    392369
    393       # パケットの終わりをチェック(未受け取りのデータが残っていないかチェック)
     370      # パケットの終わりをチェック(未受け取りのデータが残っていないかチェック)
    394371      file.print "    case #{id}:       /*** #{f_name} ***/ \n"
    395372      file.print "        if( tTransparentUnmarshaler_#{@signature.get_global_name}_#{f_name}() != E_OK )\n"
     
    400377
    401378    if @PPAllocatorSize then
    402       ppallocator_dealloc_str = "    /* PPAllocator のすべてを解放 */\n    cPPAllocator_dealloc_all();"
     379      ppallocator_dealloc_str = "    /* PPAllocator のすべてを解放 */\n    cPPAllocator_dealloc_all();"
    403380    else
    404381      ppallocator_dealloc_str = ""
     
    422399
    423400  # IN b_marshal, b_get
    424   #  b_marshal = true  && b_get == false   :  マーシャラでå
    425 ¥åŠ›å¼•æ•°é€å‡º
    426   #  b_marshal = true  && b_get == true    :  マーシャラで出力引数受取
    427   #  b_marshal = false && b_get == true    :  アンマーシャラでå
    428 ¥åŠ›å¼•æ•°å—取
    429   #  b_marshal = false && b_get == get     :  アンマーシャラで出力引数送出
     401  #  b_marshal = true  && b_get == false   :  マーシャラで入力引数送出
     402  #  b_marshal = true  && b_get == true    :  マーシャラで出力引数受取
     403  #  b_marshal = false && b_get == true    :  アンマーシャラで入力引数受取
     404  #  b_marshal = false && b_get == get     :  アンマーシャラで出力引数送出
    430405  def print_params( params, file, nest, b_marshal, b_get, b_referenced, b_oneway = false )
    431406    params.each{ |param|
     
    438413      type = param.get_type
    439414      if b_oneway && dir == :IN && type.get_original_type.kind_of?( PtrType ) || type.get_original_type.kind_of?( ArrayType ) then
    440         # oneway, in, PtrType の場合コピー
     415        # oneway, in, PtrType の場合コピー
    441416        alloc_cp = "cPPAllocator_alloc"
    442417        alloc_cp_extra = nil
     
    460435  end
    461436
    462   #=== コピーしない引数渡しコードの出力
     437  #=== コピーしない引数渡しコードの出力
    463438  def print_param_nc( name, type, file, nest, b_marshal, outer, outer2, b_get )
    464439    indent = "    " * ( nest + 1 )
     
    480455        when :SIGNED
    481456          if bit_size == -1 || bit_size == -11 then
    482             # signed char の場合、signed を指定する
     457            # signed char の場合、signed を指定する
    483458            signC = "S"
    484459            sign  = "s"
     
    573548
    574549
    575   #=== PREAMBLE 部のコード生成
    576   # アンマーシャラセルタイプの場合、アンマーシャラ関数のプロトタイプ宣言を生成
     550  #=== PREAMBLE 部のコード生成
     551  # アンマーシャラセルタイプの場合、アンマーシャラ関数のプロトタイプ宣言を生成
    577552  def gen_preamble file, b_singleton, ct_name, global_name
    578553    if ct_name != @unmarshaler_celltype_name.to_sym then
     
    580555    end
    581556
    582     file.print "/* アンマーシャラ関数のプロトタイプ宣言 */\n"
    583     # signature に含まれる すべての関数について
     557    file.print "/* アンマーシャラ関数のプロトタイプ宣言 */\n"
     558    # signature に含まれる すべての関数について
    584559    @signature.get_function_head_array.each { |f|
    585560      f_name = f.get_name
     
    591566  end
    592567
    593   #=== POSTAMBLE 部のコード生成
    594   # アンマーシャラセルタイプの場合、アンマーシャラ関数の生成
     568  #=== POSTAMBLE 部のコード生成
     569  # アンマーシャラセルタイプの場合、アンマーシャラ関数の生成
    595570  def gen_postamble file, b_singleton, ct_name, global_name
    596571    if ct_name != @unmarshaler_celltype_name.to_sym then
     
    598573    end
    599574
    600     file.print "\n/*** アンマーシャラ関数 ***/\n\n"
     575    file.print "\n/*** アンマーシャラ関数 ***/\n\n"
    601576    @signature.get_function_head_array.each { |f|
    602577      f_name = f.get_name
     
    604579      id = @signature.get_id_from_func_name( f_name )
    605580
    606       # 関数は返り値を持つか?
     581      # 関数は返り値を持つか?
    607582      if f_type.get_type.is_void? then
    608583        b_void = true
     
    623598      file.print "      CELLCB  *p_cellcb;\n"
    624599
    625       # 引数を受取る変数の定義
     600      # 引数を受取る変数の定義
    626601      param_list = f.get_declarator.get_type.get_paramlist.get_items
    627602           # FuncHead->  Decl->    FuncType->ParamList
     
    638613        end
    639614
    640         type_str = type.get_type_str.gsub( /\bconst\b */, "" ) # "const" を外す
     615        type_str = type.get_type_str.gsub( /\bconst\b */, "" ) # "const" を外す
    641616
    642617        file.printf( "    %-12s %s%s%s%s;\n", type_str, aster, name, aster2, type.get_type_str_post )
    643618      }
    644619
    645       # 戻り値を受け取る変数の定義
     620      # 戻り値を受け取る変数の定義
    646621      if ! b_void then
    647622        if f.is_oneway? then
    648           retval_ptr = ""   # oneway の場合、受け取るが捨てられる
     623          retval_ptr = ""   # oneway の場合、受け取るが捨てられる
    649624        else
    650625          retval_ptr = "*"
     
    653628      end
    654629
    655       # in 方向のå
    656 ¥å‡ºåŠ›ã‚’å
    657 ¥åŠ›
    658       file.print "\n        /* å
    659 ¥åŠ›å¼•æ•°å—取 */\n"
    660       b_get = true    # unmarshal では get
     630      # in 方向の入出力を入力
     631      file.print "\n        /* 入力引数受取 */\n"
     632      b_get = true    # unmarshal では get
    661633      b_marshal  = false
    662634      print_params( param_list, file, 1, b_marshal, b_get, true, f.is_oneway? )
     
    667639      end
    668640
    669       # パケットの受信完了
    670       # mikan 本当は、対象関数を呼出す後に実施したい.呼出しパケットの使用終わりを宣言する目的として
    671       file.print "        /* パケット終わりをチェック */\n"
     641      # パケットの受信完了
     642      # mikan 本当は、対象関数を呼出す後に実施したい.呼出しパケットの使用終わりを宣言する目的として
     643      file.print "        /* パケット終わりをチェック */\n"
    672644      if ! f.is_oneway? then
    673645        b_continue = "true"
     
    678650      file.print "        goto error_reset;\n\n"
    679651
    680       # 対象関数を呼出す
    681       file.print "    /* 対象関数の呼出し */\n"
     652      # 対象関数を呼出す
     653      file.print "    /* 対象関数の呼出し */\n"
    682654      if b_void then
    683655        file.print( "    cServerCall_#{f_name}(" )
     
    694666      file.print( " );\n" )
    695667
    696       # 戻り値、出力引数の受取コードの生成
    697 
    698       # oneway の場合出力、戻り値が無く、受取をå¾
    699 ãŸãªã„(非同期な呼出し)
     668      # 戻り値、出力引数の受取コードの生成
     669
     670      # oneway の場合出力、戻り値が無く、受取を待たない(非同期な呼出し)
    700671      if ! f.is_oneway? then
    701672        file.print <<EOT
    702     /* 関数処理の終了を通知 */
     673    /* 関数処理の終了を通知 */
    703674    if( ( ercd_ = cEventflag_set( 0x01 ) ) != E_OK ){
    704675      goto error_reset;
  • asp3_gr_sakura/trunk/tecsgen/tecslib/version.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
Note: See TracChangeset for help on using the changeset viewer.