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/plugin.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 #== Plugin クラス
    56 # ThroughPlugin, SignaturePlugin, CelltypePlugin に include する
     40#== Plugin クラス
     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 # generate 指定子の場合、構文解釈次第(end_of_parseで)呼び出される
    94 # generate 文の場合、出現次第呼び出される
    95   ### 意味解析段階で呼び出されるメソッド ### <<< コメント誤り (V1.4.2)
    96   #===  CDL ファイルの生成
    97   #      typedef, signature, celltype, cell のコードを生成
    98   #      重複して生成してはならない
    99   #      すでに生成されている場合は出力しないこと。
    100   #      もしくは同名の import により、重複を避けること。
    101   #file::        FILE       ç”Ÿæˆã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«
     77### 構文解釈 または 意味解析段階で呼び出されるメソッド ###
     78# generate 指定子の場合、構文解釈次第(end_of_parseで)呼び出される
     79# generate 文の場合、出現次第呼び出される
     80  ### 意味解析段階で呼び出されるメソッド ### <<< コメント誤り (V1.4.2)
     81  #===  CDL ファイルの生成
     82  #      typedef, signature, celltype, cell のコードを生成
     83  #      重複して生成してはならない
     84  #      すでに生成されている場合は出力しないこと。
     85  #      もしくは同名の import により、重複を避けること。
     86  #file::        FILE       生成するファイル
    10287  def gen_cdl_file file
    10388  end
    10489
    10590
    106 ### コード生段階で呼び出されるメソッド ###
    107   #=== プラグインは gen_ep_func を提供するか
    108   # gen_ep_func 定義   â‡’ テンプレートではない、セルタイプコード(tCelltype.c)を生成
    109   # gen_ep_func 未定義 ⇒ テンプレート(tCelltype_templ.c)を生成
     91### コード生段階で呼び出されるメソッド ###
     92  #=== プラグインは gen_ep_func を提供するか
     93  # gen_ep_func 定義   ⇒ テンプレートではない、セルタイプコード(tCelltype.c)を生成
     94  # gen_ep_func 未定義 ⇒ テンプレート(tCelltype_templ.c)を生成
    11095  def gen_ep_func?
    11196    self.class.method_defined?( :gen_ep_func_body )
    11297  end
    11398
    114   #===  受け口関数の本体(C言語)を生成する
    115   #     ãƒ—ラグインの場合、変更するå¿
    116 è¦ã®ãªã„セルタイプコードを生成する
    117   #     ã“のメソッドが未定義であれば、プラグインはセルタイプコードを生成しない (通常通りテンプレートを生成する)
    118   #      gen_cdl_file の中で生成されたセルタイプに対して呼び出される
    119   #file::           FILE        出力å
    120 ˆãƒ•ã‚¡ã‚¤ãƒ« (tCelltype.c)
     99  #===  受け口関数の本体(C言語)を生成する
     100  #     プラグインの場合、変更する必要のないセルタイプコードを生成する
     101  #     このメソッドが未定義であれば、プラグインはセルタイプコードを生成しない (通常通りテンプレートを生成する)
     102  #      gen_cdl_file の中で生成されたセルタイプに対して呼び出される
     103  #file::           FILE        出力先ファイル (tCelltype.c)
    121104  #b_singleton::    bool        true if singleton
    122105  #ct_name::        Symbol
     
    130113#  end
    131114
    132   #===  受け口関数の preamble (C言語)を生成する
    133   #     å¿
    134 è¦ãªã‚‰ preamble 部に出力する
    135   #      gen_cdl_file の中でで生成されたセルタイプに対して呼び出される
    136   #file::           FILE        出力å
    137 ˆãƒ•ã‚¡ã‚¤ãƒ«
     115  #===  受け口関数の preamble (C言語)を生成する
     116  #     必要なら preamble 部に出力する
     117  #      gen_cdl_file の中でで生成されたセルタイプに対して呼び出される
     118  #file::           FILE        出力先ファイル
    138119  #b_singleton::    bool        true if singleton
    139120  #ct_name::        Symbol
    140121  #global_ct_name:: string
    141122  def gen_preamble( file, b_singleton, ct_name, global_ct_name )
    142     # デフォルトでは何も出力しない
    143   end
    144 
    145   #===  受け口関数の postamble (C言語)を生成する
    146   #     å¿
    147 è¦ãªã‚‰ postamble 部に出力する
    148   #      gen_cdl_file の中で生成されたセルタイプに対して呼び出される
    149   #file::           FILE        出力å
    150 ˆãƒ•ã‚¡ã‚¤ãƒ«
     123    # デフォルトでは何も出力しない
     124  end
     125
     126  #===  受け口関数の postamble (C言語)を生成する
     127  #     必要なら postamble 部に出力する
     128  #      gen_cdl_file の中で生成されたセルタイプに対して呼び出される
     129  #file::           FILE        出力先ファイル
    151130  #b_singleton::    bool        true if singleton
    152131  #ct_name::        Symbol
    153132  #global_ct_name:: string
    154133  def gen_postamble( file, b_singleton, ct_name, global_ct_name )
    155     # デフォルトでは何も出力しない
    156   end
    157 
    158   #=== gen_cdl_file の中で生成されたセルタイプに新しいセルが生成された
    159   # どのセルタイプかは cell.get_celltype で分かる
     134    # デフォルトでは何も出力しない
     135  end
     136
     137  #=== gen_cdl_file の中で生成されたセルタイプに新しいセルが生成された
     138  # どのセルタイプかは cell.get_celltype で分かる
    160139  #
    161   #file::           FILE        出力å
    162 ˆãƒ•ã‚¡ã‚¤ãƒ«
     140  #file::           FILE        出力先ファイル
    163141  #b_singleton::    bool        true if singleton
    164142  #ct_name::        Symbol
    165143  #global_ct_name:: string
    166144  def new_cell cell
    167     # デフォルトでは何もしない
    168   end
    169 
    170 ### プラグイン引数の解釈 ###
     145    # デフォルトでは何もしない
     146  end
     147
     148### プラグイン引数の解釈 ###
    171149  def parse_plugin_arg
    172150    arg = @plugin_arg_str.dup
    173151
    174     # 改行を消す
     152    # 改行を消す
    175153    arg.gsub!( /\\\n/, "" )
    176154
    177155    while arg != ""
    178156
    179       # 前の空白読み飛ばす
     157      # 前の空白読み飛ばす
    180158      arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')
    181159
    182       #  識別子取得
     160      #  識別子取得
    183161      if arg =~ /\A[a-zA-Z_]\w*/ then
    184162        ident = $~.to_s    #
     
    189167      end
    190168     
    191       # 前の空白読み飛ばす
     169      # 前の空白読み飛ばす
    192170      arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')
    193171
     
    199177      end
    200178
    201       # 前の空白読み飛ばす
     179      # 前の空白読み飛ばす
    202180      arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')
    203181
    204       # 右辺文字列
    205       if 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    # $   $ で囲まれている場合
    215         rhs = $1
    216         remain = $'
    217       elsif  arg =~ /\A\\"(.*?)\\"\s*,/ then  # || にも [,$] にもできなかった
     182      # 右辺文字列
     183      if 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    # $   $ で囲まれている場合
     193        rhs = $1
     194        remain = $'
     195      elsif  arg =~ /\A\\"(.*?)\\"\s*,/ then  # || にも [,$] にもできなかった
    218196        rhs = $1
    219197        remain = $'
    220198      # elsif arg =~ /\A(.*?)\s*$/ then
    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    # $   $ で囲まれている場合
    231         rhs = $1
    232         remain = $'
    233       elsif  arg =~ /\A\\"(.*?)\\"\s*\z/ then  # || にも [,$] にもできなかった
     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    # $   $ で囲まれている場合
     209        rhs = $1
     210        remain = $'
     211      elsif  arg =~ /\A\\"(.*?)\\"\s*\z/ then  # || にも [,$] にもできなかった
    234212        rhs = $1
    235213        remain = $'
     
    237215        rhs = $1
    238216        remain = $'
    239         # 前の空白読み飛ばす
     217        # 前の空白読み飛ばす
    240218        rhs.sub!( /\A\s*(.*)\s*\z/, '\1')
    241219      elsif arg =~ /\A(.*?)\s*\z/ then
     
    247225      end
    248226
    249       # 0文字の文字列を to_sym すると例外発生するので空白文字とする
     227      # 0文字の文字列を to_sym すると例外発生するので空白文字とする
    250228      if rhs == "" then
    251229        rhs = " "
    252230      end
    253231
    254       arg = remain         # arg の残りの部分
    255       arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')      # 前の空白読み飛ばす
    256 
    257       # \ を外す
    258       rhs = rhs.gsub( /\\(.)/, "\\1" )   # ここで $' が変わることに注意!
     232      arg = remain         # arg の残りの部分
     233      arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')      # 前の空白読み飛ばす
     234
     235      # \ を外す
     236      rhs = rhs.gsub( /\\(.)/, "\\1" )   # ここで $' が変わることに注意!
    259237      # print "parse_plugin_arg:  #{ident} #{rhs}\n"
    260238      @plugin_arg_list[ ident ] = rhs
     
    265243  end
    266244
    267   #=== プラグイン引数をチェックする
    268   # @plugin_arg_check_proc_tab に従ってプラグイン引数をチェックすする
    269   # 古い用法:子クラスでオーバーライドし、引数識別子が正しいかチェックする
    270   #ident:: string: 引数識別子
    271   #rhs:: string: 右辺文字列
     245  #=== プラグイン引数をチェックする
     246  # @plugin_arg_check_proc_tab に従ってプラグイン引数をチェックすする
     247  # 古い用法:子クラスでオーバーライドし、引数識別子が正しいかチェックする
     248  #ident:: string: 引数識別子
     249  #rhs:: string: 右辺文字列
    272250  def check_plugin_arg( ident, rhs )
    273251
     
    294272  end
    295273
    296   #=== プラグインのメッセージ出力
     274  #=== プラグインのメッセージ出力
    297275  def print_msg( msg )
    298276    if @b_silent == true then
     
    302280  end
    303281
    304   #=== プラグイン引数 silent
     282  #=== プラグイン引数 silent
    305283  def set_silent rhs
    306284    if rhs == "true" || rhs == nil then
     
    310288end
    311289
    312 #== 出力文字列を utf-8 から出力ファイルに convert する
    313 # tecsgen のソースコードは utf-8 で記述されている
    314 # これを、出力ファイルの文字コードに変換して出力する
     290#== 出力文字列を utf-8 から出力ファイルに convert する
     291# tecsgen のソースコードは utf-8 で記述されている
     292# これを、出力ファイルの文字コードに変換して出力する
    315293#
    316 # generate.rb で出力するものは message.rb で変換している
    317 # generate.rb で出力するものは APPFile クラスを使用している
    318 # mikan: CFile で出力したものに factory で追記できない (cdl ファイルの場合、追記できても意味がない)
     294# generate.rb で出力するものは message.rb で変換している
     295# generate.rb で出力するものは APPFile クラスを使用している
     296# mikan: CFile で出力したものに factory で追記できない (cdl ファイルの場合、追記できても意味がない)
    319297class CFile
    320298  def self.open( path, mode )
Note: See TracChangeset for help on using the changeset viewer.