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

ビルドが通るよう更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/syntaxobj.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby;charset=UTF-8
    r388 r389  
    66#   Copyright (C) 2008-2017 by TOPPERS Project
    77#--
    8 #   ä¸Šè¨˜è‘—作権è€
    9 ã¯ï¼Œä»¥ä¸‹ã®(1)~(4)の条件を満たす場合に限り,本ソフトウェ
    10 #   ã‚¢ï¼ˆæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’改変したものを含む.以下同じ)を使用・複製・改
    11 #   å¤‰ãƒ»å†é
    12 å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
    13 #   (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    14 #       æ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定が,そのままの形でソー
    15 #       ã‚¹ã‚³ãƒ¼ãƒ‰ä¸­ã«å«ã¾ã‚Œã¦ã„ること.
    16 #   (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    17 #       ç”¨ã§ãã‚‹å½¢ã§å†é
    18 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    19 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    20 #       è€
    21 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    22 #       ã®ç„¡ä¿è¨¼è¦å®šã‚’掲載すること.
    23 #   (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    24 #       ç”¨ã§ããªã„形で再é
    25 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
    26 #       ã¨ï¼Ž
    27 #     (a) 再é
    28 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    29 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    30 #         ä½œæ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定を掲載すること.
    31 #     (b) 再é
    32 å¸ƒã®å½¢æ
    33 ‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
    34 #         å ±å‘Šã™ã‚‹ã“と.
    35 #   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    36 #       å®³ã‹ã‚‰ã‚‚,上記著作権è€
    37 ãŠã‚ˆã³TOPPERSプロジェクトをå
    38 è²¬ã™ã‚‹ã“と.
    39 #       ã¾ãŸï¼Œæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ãƒ¦ãƒ¼ã‚¶ã¾ãŸã¯ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ã‹ã‚‰ã®ã„かなる理
    40 #       ç”±ã«åŸºã¥ãè«‹æ±‚からも,上記著作権è€
    41 ãŠã‚ˆã³TOPPERSプロジェクトを
    42 #       å
    43 è²¬ã™ã‚‹ã“と.
     8#   上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
     9#   ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     10#   変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     11#   (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     12#       権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     13#       スコード中に含まれていること.
     14#   (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     15#       用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     16#       者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     17#       の無保証規定を掲載すること.
     18#   (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     19#       用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     20#       と.
     21#     (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22#         作権表示,この利用条件および下記の無保証規定を掲載すること.
     23#     (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     24#         報告すること.
     25#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     26#       害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     27#       また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     28#       由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     29#       免責すること.
    4430
    45 #   æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ï¼Œç„¡ä¿è¨¼ã§æä¾›ã•ã‚Œã¦ã„るものである.上記著作権è€
    46 ãŠ
    47 #   ã‚ˆã³TOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    48 #   ã«å¯¾ã™ã‚‹é©åˆæ€§ã‚‚含めて,いかなる保証も行わない.また,本ソフトウェ
    49 #   ã‚¢ã®åˆ©ç”¨ã«ã‚ˆã‚Šç›´æŽ¥çš„または間接的に生じたいかなる損害に関しても,そ
    50 #   ã®è²¬ä»»ã‚’負わない.
     31#   本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     32#   よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     33#   に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     34#   アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     35#   の責任を負わない.
    5136
    5237#   $Id$
    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, *arg )
    10889    Generator.info2( @locale, message, *arg )
    10990  end
    11091
    111   #=== æƒ
    112 å ±ã‚’表示する
     92  #=== 情報を表示する
    11393  def cdl_info2( locale, message, *arg )
    11494    Generator.info2( locale, message, *arg )
     
    128108end
    129109
    130 #== 双方向 Node (Bi Direction Node)
     110#== 双方向 Node (Bi Direction Node)
    131111#
    132 #  Node の子クラス
    133 #  owner Node から参ç
    134 §ã•ã‚Œã¦ã„るもの (owner へのリンクも取り出せる)
     112#  Node の子クラス
     113#  owner Node から参照されているもの (owner へのリンクも取り出せる)
    135114#
    136 #  get_owner で得られるもの
     115#  get_owner で得られるもの
    137116#    FuncHead => Signature
    138117#    Decl => Namespace(const), Typedef(typedef),
     
    140119#            Struct(member), ParamDecl(parameter), FuncHead(funchead)
    141120#    Signature, Celltype, CompositeCelltype, Typedef => Namespace
    142 #,   Namespace => Namespace, Generator.class (root Namespace の場合)
     121#,   Namespace => Namespace, Generator.class (root Namespace の場合)
    143122#    Cell => Region, CompositeCelltype(in_composite)
    144123#    Port => Celltype, Composite
     
    150129#    ParamList => FuncHead
    151130#    Expression => Namespace
    152 #    大半のものは new_* メソッドで owner Node に伝達される
    153 #    そのメソッドが呼び出されたときに owner Node が記録される
    154 #    new_* がないもの:
     131#    大半のものは new_* メソッドで owner Node に伝達される
     132#    そのメソッドが呼び出されたときに owner Node が記録される
     133#    new_* がないもの:
    155134#            Decl(parameter), ParamDecl, ParamList, FuncHead, Expression
    156135#
    157 #    Expression は、owner Node となるものが多くあるが、改造が困難であるため
    158 #    Expression が定義されたときの Namespace を owner Node とする
    159 #    StructType は Type の一種なので owner を持たない
     136#    Expression は、owner Node となるものが多くあるが、改造が困難であるため
     137#    Expression が定義されたときの Namespace を owner Node とする
     138#    StructType は Type の一種なので owner を持たない
    160139#
    161140class BDNode < Node
     
    173152  end
    174153
    175   #=== owner を設定する
     154  #=== owner を設定する
    176155  def set_owner owner
    177156    dbgPrint "set_owner: #{owner.class.name}\n"
     
    179158  end
    180159
    181   #=== owner を得る
    182   # class の説明を参ç
    183 §
     160  #=== owner を得る
     161  # class の説明を参照
    184162  def get_owner
    185163    if @owner == nil
     
    190168end
    191169
    192 #== Namespace 名を持つ BDNode
     170#== Namespace 名を持つ BDNode
    193171# Namespace(Region), Signature, Celltype, CompositeCelltype, Cell
    194172class NSBDNode < BDNode
     
    198176  end
    199177
    200   #=== 属する namespace を得る
    201   # owner を namespace にたどり着くまで上にたどる
     178  #=== 属する namespace を得る
     179  # owner を namespace にたどり着くまで上にたどる
    202180  def get_namespace
    203181    if @owner.kind_of? Namespace
     
    206184      return @owner.get_namespace
    207185    else
    208       # @owner == nil なら "::"
     186      # @owner == nil なら "::"
    209187      if @name != "::" then
    210188        raise "non-root namespace has no owner #{self.class.name}##{@name} #{self}"
     
    223201  end
    224202
    225   #=== NamespacePath を得る
     203  #=== NamespacePath を得る
    226204  def get_namespace_path
    227205    return @NamespacePath
     
    232210      return @import.is_imported?
    233211    else
    234       return false    # mikan: ä»® @import が nil になるケースが追求できていない
     212      return false    # mikan: 仮 @import が nil になるケースが追求できていない
    235213    end
    236214  end
     
    239217class NamedList
    240218#  @names:: {} of items
    241 #  @items:: [] of items : item の CLASS は get_name メソッドを持つこと get_name の戻り値は Symbol でなくてはならない
    242 #                         NamedList を clone_for_composite する場合は、item にもメソッドがå¿
    243 è¦
    244 #  @type:: string       ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸
     219#  @items:: [] of items : item の CLASS は get_name メソッドを持つこと get_name の戻り値は Symbol でなくてはならない
     220#                         NamedList を clone_for_composite する場合は、item にもメソッドが必要
     221#  @type:: string       エラーメッセージ
    245222
    246223  def initialize( item, type )
     
    251228  end
    252229
    253   #=== 要素を加える
    254   # parse した時点で加えること(場所を記憶する)
     230  #=== 要素を加える
     231  # parse した時点で加えること(場所を記憶する)
    255232  def add_item( item )
    256233
     
    311288  end
    312289
    313   #=== composite cell を clone した時に要素(JOIN) の clone する
     290  #=== composite cell を clone した時に要素(JOIN) の clone する
    314291  #
    315   # mikan このメソッドは Join に特化されているので NamedList から分離すべき
     292  # mikan このメソッドは Join に特化されているので NamedList から分離すべき
    316293  def clone_for_composite( ct_name, cell_name, locale )
    317294    cl = self.clone
     
    320297  end
    321298
    322   #=== clone された NamedList インスタンスの参ç
    323 §ã™ã‚‹ã‚‚の(item)を clone
     299  #=== clone された NamedList インスタンスの参照するもの(item)を clone
    324300  #
    325   # mikan このメソッドは Join に特化されているので NamedList から分離すべき
     301  # mikan このメソッドは Join に特化されているので NamedList から分離すべき
    326302  def set_cloned( ct_name, cell_name, locale )
    327303    items = []
     
    385361end
    386362
    387 #== 関数頭部
    388 # signature に登録される関数
     363#== 関数頭部
     364# signature に登録される関数
    389365class FuncHead <BDNode
    390366#  @declarator:: Decl
     
    431407  end
    432408
    433   #=== FuncHead# 関数の名前を返す
     409  #=== FuncHead# 関数の名前を返す
    434410  def get_name
    435411    return @declarator.get_name
    436412  end
    437413
    438   #=== FuncHead# 関数の戻り値の型を返す
    439   # types.rb に定義されている型
    440   # 関数ヘッダの定義として不完å
    441 ¨ãªå ´åˆ nil を返す
     414  #=== FuncHead# 関数の戻り値の型を返す
     415  # types.rb に定義されている型
     416  # 関数ヘッダの定義として不完全な場合 nil を返す
    442417  def get_return_type
    443418    if is_function? then
     
    446421  end
    447422
    448   #=== FuncHead# 関数の引数のリストを返す
    449   # ParamList を返す
    450   # 関数ヘッダの定義として不完å
    451 ¨ãªå ´åˆ nil を返す
     423  #=== FuncHead# 関数の引数のリストを返す
     424  # ParamList を返す
     425  # 関数ヘッダの定義として不完全な場合 nil を返す
    452426  def get_paramlist
    453427    if is_function? then
     
    463437end
    464438
    465 #=== 宣言
    466 # @kind で示される各種の宣言
     439#=== 宣言
     440# @kind で示される各種の宣言
    467441class Decl < BDNode
    468442
    469443# @identifer:: String
    470 # @global_name:: String | nil : String(@kind=TYPEDEF||:CONSTANT), nil(@kind=その他)
    471 #                set_kind にて設定される
     444# @global_name:: String | nil : String(@kind=TYPEDEF||:CONSTANT), nil(@kind=その他)
     445#                set_kind にて設定される
    472446# @type:: ArrayType, FuncType, PtrType, IntType, StructType
    473447#         VoidType, FloatType, DefinedType, BoolType
    474448# @initializer:: constant_expression, mikan { initlist }
    475 # @kind:: :VAR, :ATTRIBUTE, :PARAMETER, :TYPEDEF, :CONSTANT, :MEMBER, :FUNCHEAD(signatureの関数定義)
     449# @kind:: :VAR, :ATTRIBUTE, :PARAMETER, :TYPEDEF, :CONSTANT, :MEMBER, :FUNCHEAD(signatureの関数定義)
    476450# @b_referenced:: bool
    477451#
    478 # 以下は、@kind が :VAR, :ATTRIBUTE のときに有効
    479 # @rw:: bool     # 古い文法では attr に指定可能だった(消すには generate の修正もå¿
    480 è¦ï¼‰
     452# 以下は、@kind が :VAR, :ATTRIBUTE のときに有効
     453# @rw:: bool     # 古い文法では attr に指定可能だった(消すには generate の修正も必要)
    481454# @omit:: bool
    482 # @choice_list:: [String]  attr 初期値の選択肢
    483 # 以下は、@kind が :VAR, :ATTRIBUTE, :MEMBER のときに有効
     455# @choice_list:: [String]  attr 初期値の選択肢
     456# 以下は、@kind が :VAR, :ATTRIBUTE, :MEMBER のときに有効
    484457# @size_is:: Expression or nil unless specified
    485 # 以下は、@kind が :MEMBER のときに有効
     458# 以下は、@kind が :MEMBER のときに有効
    486459# @count_is:: Expression or nil unless specified
    487 #             attr, var の場合、count_is は指定できない
     460#             attr, var の場合、count_is は指定できない
    488461# @string:: Expression, -1 (length not specified) or nil (not specified)
    489462#
    490 # mikan  ParamDecl だけ別に設けたが、MemberDecl, AttrDecl なども分けるべきか(?)
     463# mikan  ParamDecl だけ別に設けたが、MemberDecl, AttrDecl なども分けるべきか(?)
    491464
    492465  def initialize( identifier )
     
    518491  end
    519492
    520   #== Decl の意味的誤りをチェックする
     493  #== Decl の意味的誤りをチェックする
    521494  def check
    522495    # return nil if @type == nil
    523496
    524     # 構造体タグチェック(ポインタ型から構造体が参ç
    525 §ã•ã‚Œã¦ã„る場合は、タグの存在をチェックしない)
     497    # 構造体タグチェック(ポインタ型から構造体が参照されている場合は、タグの存在をチェックしない)
    526498    @type.check_struct_tag @kind
    527499
    528     # 型のチェックを行う
     500    # 型のチェックを行う
    529501    res = @type.check
    530502    if res then
     
    532504    end
    533505
    534     # 不要の初期化子をチェックする
     506    # 不要の初期化子をチェックする
    535507    if @initializer then
    536508      case @kind
     
    538510        cdl_error( "S2003 $1: $2 cannot have initializer" , @identifier, @kind.to_s.downcase )
    539511      when :VAR, :ATTRIBUTE, :CONSTANT
    540         # p @initializer  ここでは代å
    541 ¥å¯èƒ½ã‹ã©ã†ã‹ã€ãƒã‚§ãƒƒã‚¯ã—ない
    542         # :VAR, :ATTRIBUTE, :CONSTANT はそれぞれでチェックする
     512        # p @initializer  ここでは代入可能かどうか、チェックしない
     513        # :VAR, :ATTRIBUTE, :CONSTANT はそれぞれでチェックする
    543514        # return @type.check_init( @identifier, @initializer, @kind )
    544515      else
     
    558529  end
    559530
    560   #== ポインタレベルを得る
    561   # 戻り値:
    562   #   éžãƒã‚¤ãƒ³ã‚¿å¤‰æ•°   = 0
    563   #   ãƒã‚¤ãƒ³ã‚¿å¤‰æ•°     = 1
    564   #   äºŒé‡ãƒã‚¤ãƒ³ã‚¿å¤‰æ•° = 2
     531  #== ポインタレベルを得る
     532  # 戻り値:
     533  #   非ポインタ変数   = 0
     534  #   ポインタ変数     = 1
     535  #   二重ポインタ変数 = 2
    565536  def get_ptr_level
    566537    level = 0
     
    570541        level += 1
    571542        type = type.get_referto
    572 #      elsif type.kind_of?( ArrayType ) then  # 添数なしé
    573 åˆ—はポインタとみなす
     543#      elsif type.kind_of?( ArrayType ) then  # 添数なし配列はポインタとみなす
    574544#        if type.get_subscript == nil then
    575545#          level += 1
     
    578548#          break
    579549#        end
    580         # mikan ポインタの添数ありé
    581 åˆ—のポインタレベルは0でよい?
     550        # mikan ポインタの添数あり配列のポインタレベルは0でよい?
    582551      elsif type.kind_of?( DefinedType ) then
    583552        type = type.get_type
     
    602571      @type = type
    603572    else
    604       @type.set_type( type )             # 葉に設定
     573      @type.set_type( type )             # 葉に設定
    605574    end
    606575  end
     
    744713end
    745714
    746 # 関数パラメータの宣言
     715# 関数パラメータの宣言
    747716class ParamDecl < BDNode
    748717
    749718# @declarator:: Decl:  Token, ArrayType, FuncType, PtrType
    750719# @direction:: :IN, :OUT, :INOUT, :SEND, :RECEIVE
    751 # @size:: Expr   (size_is 引数)
    752 # @count:: Expr   (count_is 引数)
    753 # @max:: Expr (size_is の第二引数)
     720# @size:: Expr   (size_is 引数)
     721# @count:: Expr   (count_is 引数)
     722# @max:: Expr (size_is の第二引数)
    754723# @b_nullable:: Bool : nullable
    755 # @string:: Expr or -1(if size not specified) (string 引数)
     724# @string:: Expr or -1(if size not specified) (string 引数)
    756725# @allocator:: Signature of allocator
    757 # @b_ref:: bool : size_is, count_is, string_is 引数として参ç
    758 §ã•ã‚Œã¦ã„ã‚‹
     726# @b_ref:: bool : size_is, count_is, string_is 引数として参照されている
    759727#
    760 # 1. 関数型でないこと
    761 # 2. 2次å
    762 ƒä»¥ä¸Šã®é
    763 åˆ—であって最もå†
    764 å´ä»¥å¤–の添数があること
    765 # 3. in, out, ..., size_is, count_is, ... の重複指定がないこと
    766 # 4. ポインタレベルが適切なこと
     728# 1. 関数型でないこと
     729# 2. 2次元以上の配列であって最も内側以外の添数があること
     730# 3. in, out, ..., size_is, count_is, ... の重複指定がないこと
     731# 4. ポインタレベルが適切なこと
    767732
    768733  def initialize( declarator, specifier, param_specifier )
     
    831796        end
    832797      when :MAX_IS
    833         # max_is は、å†
    834 éƒ¨çš„なもの bnf.y.rb 参ç
    835 §
    836         # size_is で重複チェックされる
     798        # max_is は、内部的なもの bnf.y.rb 参照
     799        # size_is で重複チェックされる
    837800        @max = i[1]
    838801      when :NULLABLE
     
    854817    end
    855818
    856     # mikan ポインタのé
    857 åˆ—(添数有)のレベルが0
     819    # mikan ポインタの配列(添数有)のレベルが0
    858820    ptr_level = @declarator.get_ptr_level
    859821
     
    898860      cdl_error( "S2014 $1 need pointer or more pointer" , @declarator.get_identifier )
    899861    elsif ptr_level > max_level then
    900       # note: 構文解析段階で実行のため get_current 可
     862      # note: 構文解析段階で実行のため get_current 可
    901863      if Signature.get_current == nil || Signature.get_current.is_deviate? == false then
    902864        cdl_warning( "W3003 $1 pointer level mismatch" , @declarator.get_identifier )
     
    910872
    911873    if ptr_level > 0 then
    912       # size_is, count_is, string をセット
     874      # size_is, count_is, string をセット
    913875      if @direction == :RECEIVE && ptr_level > 1 then
    914876        type.get_type.set_scs( @size, @count, @string, @max, @b_nullable )
     
    920882#type.show_tree 1
    921883
    922       # ポインタが指しているå
    923 ˆã®ãƒ‡ãƒ¼ã‚¿åž‹ã‚’å¾—ã‚‹
     884      # ポインタが指している先のデータ型を得る
    924885      i = 0
    925886      t2 = type
     
    936897# p t2.is_const?
    937898
    938       # const 修飾が適切かチェック
     899      # const 修飾が適切かチェック
    939900      if @direction == :IN then
    940901        if ! t2.is_const? then
     
    947908      end
    948909    else
    949       # 非ポインタタイプ
     910      # 非ポインタタイプ
    950911      if @size != nil || @count != nil || @string != nil || @max != nil || @b_nullable then
    951912        type.set_scs( @size, @count, @string, @max, @b_nullable )
     
    1019980  end
    1020981
    1021   #=== PPAllocator がå¿
    1022 è¦ã‹
    1023   # Transparent RPC の場合 in で size_is, count_is, string のいずれかが指定されている場合 oneway では PPAllocator がå¿
    1024 è¦
    1025   # Transparent PC で oneway かどうかは、ここでは判断しないので別途判断がå¿
    1026 è¦
    1027   # Opaque RPC の場合 size_is, count_is, string のいずれかが指定されている場合、PPAllocator がå¿
    1028 è¦
     982  #=== PPAllocator が必要か
     983  # Transparent RPC の場合 in で size_is, count_is, string のいずれかが指定されている場合 oneway では PPAllocator が必要
     984  # Transparent PC で oneway かどうかは、ここでは判断しないので別途判断が必要
     985  # Opaque RPC の場合 size_is, count_is, string のいずれかが指定されている場合、PPAllocator が必要
    1029986  def need_PPAllocator?( b_opaque = false )
    1030987    if ! b_opaque then
     
    10731030end
    10741031
    1075 # 関数パラメータリスト
     1032# 関数パラメータリスト
    10761033class ParamList < BDNode
    10771034# @param_list:: NamedList : item: ParamDecl
     
    10861043
    10871044  def add_param( paramdecl )
    1088     return if paramdecl == nil    # 既にエラー
     1045    return if paramdecl == nil    # 既にエラー
    10891046
    10901047    @param_list.add_item( paramdecl )
     
    10961053  end
    10971054
    1098   #=== size_is, count_is, string の引数の式をチェック
    1099   # 変数は前方参ç
    1100 §å¯èƒ½ãªãŸã‚ã€é–¢æ•°é ­éƒ¨ã®æ§‹æ–‡è§£é‡ˆãŒçµ‚わった後にチェックする
     1055  #=== size_is, count_is, string の引数の式をチェック
     1056  # 変数は前方参照可能なため、関数頭部の構文解釈が終わった後にチェックする
    11011057  def check_param
    11021058    @param_list.get_items.each { |i|
    1103       next if i == nil                      # i == nil : エラー時
     1059      next if i == nil                      # i == nil : エラー時
    11041060
    11051061      if i.get_type.class == VoidType then
    1106         # 単一の void 型はここにはこない
     1062        # 単一の void 型はここにはこない
    11071063        cdl_error( "S2027 '$1' parameter cannot be void type", i.get_name )
    11081064      end
     
    11111067      if size then
    11121068        val = size.eval_const( @param_list )
    1113         if val == nil then                      # 定数式でないか?
    1114           # mikan 変数を含む式:単一の変数のみ OK
     1069        if val == nil then                      # 定数式でないか?
     1070          # mikan 変数を含む式:単一の変数のみ OK
    11151071          type = size.get_type( @param_list )
    11161072          unless type.kind_of?( IntType ) then
     
    11501106      if count then
    11511107        val = count.eval_const( @param_list )
    1152         if val == nil then                      # 定数式でないか?
    1153           # mikan 変数を含む式:単一の変数のみ OK
     1108        if val == nil then                      # 定数式でないか?
     1109          # mikan 変数を含む式:単一の変数のみ OK
    11541110          type = count.get_type( @param_list )
    11551111          unless type.kind_of?( IntType ) then
     
    11701126      if string != -1 && string then
    11711127        val = string.eval_const( @param_list )
    1172         if val == nil then                      # 定数式でないか?
    1173           # mikan 変数を含む式:単一の変数のみ OK
     1128        if val == nil then                      # 定数式でないか?
     1129          # mikan 変数を含む式:単一の変数のみ OK
    11741130          type = string.get_type( @param_list )
    11751131          unless type.kind_of?( IntType ) then
     
    11951151  end
    11961152
    1197   #=== Push Pop Allocator がå¿
    1198 è¦ã‹ï¼Ÿ
    1199   # Transparent RPC の場合 (oneway かつ) in のé
    1200 åˆ—(size_is, count_is, string のいずれかで修飾)がある
     1153  #=== Push Pop Allocator が必要か?
     1154  # Transparent RPC の場合 (oneway かつ) in の配列(size_is, count_is, string のいずれかで修飾)がある
    12011155  def need_PPAllocator?( b_opaque = false )
    12021156    @param_list.get_items.each { |i|
     
    12121166  end
    12131167
    1214   #== ParamList# 文字列化
    1215   #b_name:: Bool: パラメータ名を含める
     1168  #== ParamList# 文字列化
     1169  #b_name:: Bool: パラメータ名を含める
    12161170  def to_str( b_name )
    12171171    str = "("
     
    12361190end
    12371191
    1238 #== CDL の文字列リテラルを扱うためのクラス
    1239 # CDL の文字列リテラルそのものではない
     1192#== CDL の文字列リテラルを扱うためのクラス
     1193# CDL の文字列リテラルそのものではない
    12401194class CDLString
    1241   # エスケープ文字を変換
     1195  # エスケープ文字を変換
    12421196  def self.escape str
    12431197    str = str.dup
     
    12511205    str.gsub!( /(\\[Xx][0-9A-Fa-f]{1,2})/, '{printf \"\\1\"}' )
    12521206    str.gsub!( /(\\[0-7]{1,3})/, '{printf \"\\1\"}' )
    1253     str.gsub!( /\\(.)/, "\\1" )   # mikan 未定義のエスケープシーケンスを変換してしまう (gcc V3.4.4 では警告が出される)
     1207    str.gsub!( /\\(.)/, "\\1" )   # mikan 未定義のエスケープシーケンスを変換してしまう (gcc V3.4.4 では警告が出される)
    12541208    return str
    12551209  end
    12561210
    1257   #=== CDLString#前後の " を取り除く
     1211  #=== CDLString#前後の " を取り除く
    12581212  def self.remove_dquote str
    12591213    s = str.sub( /\A"/, "" )
     
    12631217end
    12641218
    1265 #== CDL の初期化子を扱うためのクラス
    1266 # CDL の初期化子そのものではない
     1219#== CDL の初期化子を扱うためのクラス
     1220# CDL の初期化子そのものではない
    12671221class CDLInitializer
    1268   #=== 初期化子のクローン
    1269   # 初期化子は Expression, C_EXP, Array のいずれか
     1222  #=== 初期化子のクローン
     1223  # 初期化子は Expression, C_EXP, Array のいずれか
    12701224  def self.clone_for_composite( rhs, ct_name, cell_name, locale )
    12711225    if rhs.instance_of? C_EXP then
    1272       # C_EXP の clone を作るとともに置換
     1226      # C_EXP の clone を作るとともに置換
    12731227      rhs = rhs.clone_for_composite( ct_name, cell_name, locale )
    12741228    elsif rhs.instance_of? Expression then
     
    12821236  end
    12831237
    1284   #=== 初期化子(é
    1285 åˆ—)のクローン
    1286   # 要素は clone_for_composite を持つものだけ
     1238  #=== 初期化子(配列)のクローン
     1239  # 要素は clone_for_composite を持つものだけ
    12871240  def self.clone_for_compoiste_array( array, ct_name, cell_name, locale )
    1288     # "compoiste.identifier" の場合 (CDL としては誤り)
     1241    # "compoiste.identifier" の場合 (CDL としては誤り)
    12891242    if array[0] == :COMPOSITE then
    12901243      return array.clone
Note: See TracChangeset for help on using the changeset viewer.