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/types.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 #= 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
     
    774733#  @members_decl:: NamedList
    775734#  @definition:: StructType
    776 #  @b_has_pointer_member:: bool : メンバにポインタ型がある
    777 #  @b_has_sized_pointer_member:: bool : メンバにポインタ型がある
    778 #  @b_has_unsized_string_member:: bool : メンバにポインタ型がある
    779 #  @b_hasTag:: bool : タグがある
    780 #  @member_types_symbol:: Symbol : tag が無い時のみ設定 (それ以外では nil)
     735#  @b_has_pointer_member:: bool : メンバにポインタ型がある
     736#  @b_has_sized_pointer_member:: bool : メンバにポインタ型がある
     737#  @b_has_unsized_string_member:: bool : メンバにポインタ型がある
     738#  @b_hasTag:: bool : タグがある
     739#  @member_types_symbol:: Symbol : tag が無い時のみ設定 (それ以外では nil)
    781740
    782741  @@structtype_current_stack = []
    783742  @@structtype_current_sp = -1
    784743
    785   # tag なし struct
     744  # tag なし struct
    786745  @@no_struct_tag_num = 0
    787746  @@no_tag_struct_list = {}
     
    811770    if @b_define then
    812771      @members_decl = NamedList.new( nil, "in struct #{@tag}" )
    813       # if @tag then    登録タイミングを終わりに変更 V1.0.2.19
     772      # if @tag then    登録タイミングを終わりに変更 V1.0.2.19
    814773      #  Namespace.new_structtype( self )
    815774      # end
    816775    else
    817776      @definition = Namespace.find_tag( @tag )
    818       # check_struct_tag に移す V1.0.2.19
     777      # check_struct_tag に移す V1.0.2.19
    819778      # if @definition == nil then
    820779      #  cdl_error( "T1021 \'$1\': struct not defined" , @tag )
     
    841800  end
    842801
    843   def check     # 意味的誤りがあれば、文字列を返す
     802  def check     # 意味的誤りがあれば、文字列を返す
    844803    nil
    845804  end
    846805
    847   #=== 構造体のタグをチェック
    848   #  declarator の時点でチェックする
    849   #kind:: Decl の @kind を参ç
    850 §
     806  #=== 構造体のタグをチェック
     807  #  declarator の時点でチェックする
     808  #kind:: Decl の @kind を参照
    851809  def check_struct_tag kind
    852810    if @tag == nil
     
    860818  end
    861819
    862   # mikan Float 型の C_EXP 対応 (generate.rb にも変更å¿
    863 è¦)
     820  # mikan Float 型の C_EXP 対応 (generate.rb にも変更必要)
    864821  def check_init( locale, ident, initializer, kind, attribute = nil )
    865822
     
    870827    end
    871828
    872     # 初期化子が式の場合、型(タグ)が一致するかチェック
     829    # 初期化子が式の場合、型(タグ)が一致するかチェック
    873830    if initializer.instance_of?( Expression ) then
    874831      t = initializer.get_type( attribute )
     
    906863
    907864  def end_of_parse()
    908     if @members_decl == nil   # @b_define = false またはメンバーのない構造体(エラー)
     865    if @members_decl == nil   # @b_define = false またはメンバーのない構造体(エラー)
    909866      return
    910867    end
     
    932889      string = md.get_string
    933890      if string == -1 then
    934         # 長さ指定なし
     891        # 長さ指定なし
    935892      elsif string then
    936893        val = string.eval_const( @members_decl )
     
    970927
    971928    if @b_hasTag then
    972       # typedef struct tag StructType; の形式の場合
    973       # struct の本体は、別に生成される
     929      # typedef struct tag StructType; の形式の場合
     930      # struct の本体は、別に生成される
    974931      return "#{str}struct #{@tag}"
    975932
    976933    else
    977       # typedef struct { int a; } StructType; の形式の場合
     934      # typedef struct { int a; } StructType; の形式の場合
    978935      str += "struct {"
    979936      @members_decl.get_items.each{ |i|
     
    1026983  end
    1027984
    1028   #=== 同じ構造体かどうかチェックする
    1029   # tag のチェックは行わない
    1030   # すべてのメンバの名前と型が一致することを確認する
     985  #=== 同じ構造体かどうかチェックする
     986  # tag のチェックは行わない
     987  # すべてのメンバの名前と型が一致することを確認する
    1031988  def same? another
    1032989    md = another.get_members_decl
     
    11181075  end
    11191076
    1120   def check     # 意味的誤りがあれば、文字列を返す
    1121     if @type.class == ArrayType then    # é
    1122 åˆ—を返す関数
     1077  def check     # 意味的誤りがあれば、文字列を返す
     1078    if @type.class == ArrayType then    # 配列を返す関数
    11231079      return "function returning array"
    1124     elsif @type.class == FuncType then  # 関数を返す関数
     1080    elsif @type.class == FuncType then  # 関数を返す関数
    11251081      return "function returning function"
    11261082    end
    1127     return @type.check   # 関数の return する型のチェック
    1128 
    1129     # パラメータの型のチェックは ParamList#check_param で行う
     1083    return @type.check   # 関数の return する型のチェック
     1084
     1085    # パラメータの型のチェックは ParamList#check_param で行う
    11301086  end
    11311087
    11321088  def check_struct_tag kind
    11331089    @type.check_struct_tag kind
    1134     # ParamDecl でもチェックされるので、ここではチェックしない
     1090    # ParamDecl でもチェックされるので、ここではチェックしない
    11351091    # @paramlist.check_struct_tag kind
    11361092  end
     
    11491105  end
    11501106
    1151   #=== return type を返す
     1107  #=== return type を返す
    11521108  #
    1153   # return type を返す
    1154   # get_return_type とすべきだった
     1109  # return type を返す
     1110  # get_return_type とすべきだった
    11551111  def get_type
    11561112    @type
     
    11621118
    11631119  def get_type_str_post
    1164     # 型だけを返す (仮引数の名前を含めない)
     1120    # 型だけを返す (仮引数の名前を含めない)
    11651121    @paramlist.to_str( false )
    11661122  end
     
    11901146  end
    11911147
    1192   #=== Push Pop Allocator がå¿
    1193 è¦ã‹ï¼Ÿ
    1194   # Transparent RPC の場合 oneway かつ in のé
    1195 åˆ—(size_is, count_is, string のいずれかで修飾)がある
     1148  #=== Push Pop Allocator が必要か?
     1149  # Transparent RPC の場合 oneway かつ in の配列(size_is, count_is, string のいずれかで修飾)がある
    11961150  def need_PPAllocator?( b_opaque = false )
    11971151    if @b_oneway || b_opaque then
     
    12021156  end
    12031157
    1204   #=== パラメータが in, inout, out, send, receive を持つか
     1158  #=== パラメータが in, inout, out, send, receive を持つか
    12051159  def has_in?
    12061160    @has_in
     
    12191173  end
    12201174
    1221   #=== å
    1222 ¥åŠ›æ–¹å‘のパラメータを持つか
     1175  #=== 入力方向のパラメータを持つか
    12231176  def has_inward?
    12241177    @has_in || @has_inout || @has_send
    12251178  end
    1226   #=== 出力方向のパラメータを持つか
     1179  #=== 出力方向のパラメータを持つか
    12271180  def has_outward?
    12281181    @has_inout || @has_out || @has_receive
     
    12661219  end
    12671220
    1268   #=== Array#qualifier(const, volatile) の設定
     1221  #=== Array#qualifier(const, volatile) の設定
    12691222  def set_qualifier( qualifier )
    12701223    clone_type
     
    12731226  end
    12741227
    1275   # é
    1276 åˆ—要素が const なら const
     1228  # 配列要素が const なら const
    12771229  def is_const?
    12781230    @type.is_const?
    12791231  end
    12801232
    1281   # é
    1282 åˆ—要素が volatile なら volatile
     1233  # 配列要素が volatile なら volatile
    12831234  def is_volatile?
    12841235    @type.is_volatile?
     
    13061257  end
    13071258
    1308   def check     # 意味的誤りがあれば、文字列を返す
    1309     if @type.class == FuncType then             # 関数のé
    1310 åˆ—
     1259  def check     # 意味的誤りがあれば、文字列を返す
     1260    if @type.class == FuncType then             # 関数の配列
    13111261      return "array of function"
    1312     elsif @type.class == ArrayType then # 添数なしé
    1313 åˆ—のé
    1314 åˆ—
     1262    elsif @type.class == ArrayType then # 添数なし配列の配列
    13151263      unless @type.get_subscript then
    13161264        return "subscript not specified"
     
    13181266    end
    13191267
    1320     return @type.check    # é
    1321 åˆ—要素の型をチェック
     1268    return @type.check    # 配列要素の型をチェック
    13221269  end
    13231270
     
    13281275  def check_init( locale, ident, initializer, kind, attribute = nil )
    13291276    if ( initializer.instance_of?( Array ) ) then
    1330       # 要素数が指定されている場合、初期化要素数をチェック
     1277      # 要素数が指定されている場合、初期化要素数をチェック
    13311278      if @subscript then
    13321279        n_sub = @subscript.eval_const( nil )
     
    13811328#  @size:: Expr, or nil if not specified
    13821329#  @count:: Expr, or nil if not specified
    1383 #  @string:: Expr or -1(if size not specified) (string 引数), or nil if not specified
     1330#  @string:: Expr or -1(if size not specified) (string 引数), or nil if not specified
    13841331
    13851332  include HasType
     
    13981345      @type = type
    13991346    else
    1400       @type.set_type( type )    # 枝å
    1401 ˆã® type を設定
     1347      @type.set_type( type )    # 枝先の type を設定
    14021348    end
    14031349  end
     
    14211367  end
    14221368
    1423   def check     # 意味的誤りがあれば、文字列を返す
     1369  def check     # 意味的誤りがあれば、文字列を返す
    14241370    return nil if @type == nil
    14251371    @type.check
     
    14271373
    14281374  def check_struct_tag kind
    1429     if kind != :MEMBER  # 構造体メンバーの場合、ポインタのå
    1430 ˆã®æ§‹é€ ä½“タグをチェックしない
     1375    if kind != :MEMBER  # 構造体メンバーの場合、ポインタの先の構造体タグをチェックしない
    14311376      @type.check_struct_tag kind
    14321377    end
     
    14451390          if ( t1.class == t2.class ) && ( t1.get_bit_size == t2.get_bit_size ) then
    14461391          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
    1447             # int8_t などが、一方は .h に定義されているケース
     1392            # int8_t などが、一方は .h に定義されているケース
    14481393          else
    14491394            cdl_error2( locale, "T1032 $1: incompatible pointer type" , ident )
     
    14561401        end
    14571402      elsif val.kind_of? StringVal then
    1458         # 文字列定数
     1403        # 文字列定数
    14591404        # mikan L"wide string"
    14601405        if @type.get_bit_size != -1 && @type.get_bit_size != -11 then  # -1: char_t
     
    15001445    @b_nullable = b_nullable
    15011446
    1502     # string は最も左側の ptr に作用する
     1447    # string は最も左側の ptr に作用する
    15031448    if @type.kind_of?( PtrType ) then
    1504       # ptr_level が 2 以上であることは ParamDecl#initializer でチェックされる
     1449      # ptr_level が 2 以上であることは ParamDecl#initializer でチェックされる
    15051450      clone_type
    15061451      @type.set_scs( nil, nil, string, nil, false )
     
    15491494  end
    15501495
    1551   #=== PtrType# size_is の最大値
     1496  #=== PtrType# size_is の最大値
    15521497  def get_max
    15531498    @max
     
    16121557end
    16131558
    1614 #==  DescriptorType クラス
    1615 # 動的結合で渡すデスクリプタ型
     1559#==  DescriptorType クラス
     1560# 動的結合で渡すデスクリプタ型
    16161561class DescriptorType < Type
    16171562  # @sinagure_nsp::NamespacePath
     
    16431588    case kind
    16441589    when :PARAMETER
    1645       # 引数は初期化できない
     1590      # 引数は初期化できない
    16461591    else
    16471592      cdl_error2( locale, "T9999 Descriptor cannot be used for $1", kind)
     
    16771622end
    16781623
    1679 # 以下単体テストコード
     1624# 以下単体テストコード
    16801625if $unit_test then
    16811626  puts( "===== Unit Test: IntType ===== (types.rb)")
Note: See TracChangeset for help on using the changeset viewer.