- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/NotifierPlugin.rb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby;charset=UTF-8
r388 r389 11 11 # 12 12 #-- 13 # ä¸è¨èä½æ¨©è 14 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 15 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 16 # å¤ã»åé 17 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 18 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 19 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 20 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 21 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 22 # ç¨ã§ããå½¢ã§åé 23 å¸ããå ´åã«ã¯ï¼åé 24 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 25 # è 26 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 27 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 28 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 29 # ç¨ã§ããªãå½¢ã§åé 30 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 31 # ã¨ï¼ 32 # (a) åé 33 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 34 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 35 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 36 # (b) åé 37 å¸ã®å½¢æ 38 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 39 # å ±åãããã¨ï¼ 40 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 41 # 害ãããï¼ä¸è¨èä½æ¨©è 42 ããã³TOPPERSããã¸ã§ã¯ããå 43 責ãããã¨ï¼ 44 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 45 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 46 ããã³TOPPERSããã¸ã§ã¯ãã 47 # å 48 責ãããã¨ï¼ 13 # 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 14 # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 15 # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 16 # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 17 # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 18 # スコード中に含まれていること. 19 # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 20 # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 21 # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 22 # の無保証規定を掲載すること. 23 # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 24 # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 25 # と. 26 # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 27 # 作権表示,この利用条件および下記の無保証規定を掲載すること. 28 # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 29 # 報告すること. 30 # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 31 # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 32 # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 33 # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 34 # 免責すること. 49 35 # 50 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 51 ã 52 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 53 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 54 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 55 # ã®è²¬ä»»ãè² ããªãï¼ 36 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 37 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 38 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 39 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 40 # の責任を負わない. 56 41 # 57 42 # $Id$ … … 65 50 class NotifierPlugin < CelltypePlugin 66 51 67 # ---------- ã¢ããã¿é¢æ°ã®çæ-------------52 # ---------- アダプタ関数の生成 ------------- 68 53 # 69 # siHandlerBodyã®åãå£é¢æ°ã¯ï¼ã¿ã¤ã ã¤ãã³ãéç¥ã®éç¥å 70 ã¨ãã¦ç´æ¥æå®ãã 71 # ãã¨ã¯ã§ããªãï¼ã·ã°ããã£ãä¸è´ãã¦ããªããã¨ãçç±ã§ããï¼ãã®ããï¼ã¢ã 72 # ãã¿ã¨ãã¦åä½ããé¢æ°ãçæãï¼ã«ã¼ãã«ããã®å¼åºããTECSã®å¼åºãã«å¤æ㧠73 # ããããã«ããå¿ 74 è¦ãããï¼ 54 # siHandlerBodyの受け口関数は,タイムイベント通知の通知先として直接指定する 55 # ことはできない.シグネチャが一致していないことが理由である.このため,アダ 56 # プタとして動作する関数を生成し,カーネルからの呼出しをTECSの呼出しに変換で 57 # きるようにする必要がある. 75 58 # 76 # åºæ¬çã«ã¯ï¼åãå£æ¯ã«ã¢ããã¿é¢æ°ãçæããã°ååã§ããï¼ãããï¼ããã§ã¯ 77 # ã¡ã¢ãªæ¶è²»éãä¸å¿ 78 è¦ã«å¢å ãã¦ãã¾ãï¼ããã§ï¼éç¥å 79 é¢æ°ã«intptr_tåã®å¼æ° 80 # ã渡ãããã¨ã«çç®ãï¼é¢æ°ã®"ä¸è¬å"ãå³ãï¼ããªãã¡åãå£ã®ããå±æ§(ãã 81 # ã§ã¯ï¼çµåå 82 ã®ã»ã«ï¼æ·»åãªã©ãæã)ãï¼ã¢ããã¿é¢æ°ã®å¼æ°ã¨ãã¦åãåãã 83 # ããã«ãï¼1åã®ã¢ããã¿é¢æ°ã2å以ä¸ã®çµåã«å¯¾ãç¨ãããã¨ãã§ããããã« 84 # ããï¼ 59 # 基本的には,受け口毎にアダプタ関数を生成すれば十分である.しかし,これでは 60 # メモリ消費量が不必要に増加してしまう.そこで,通知先関数にintptr_t型の引数 61 # を渡せることに着目し,関数の"一般化"を図る.すなわち受け口のある属性(ここ 62 # では,結合先のセル,添字などを指す)を,アダプタ関数の引数として受け取れる 63 # ようにし,1個のアダプタ関数を2個以上の結合に対し用いることができるように 64 # する. 85 65 # 86 # ã¢ããã¿é¢æ°ã®å±æ§ã«ã¤ãã¦æ´çããã¨ï¼ 87 # - åãå£é¢æ° - ä¸è¬åãè¡ãã¨ï¼å®è¡æã³ã¹ãã大ããå¢å¤§ãã¦ãã¾ããã¨ã 88 # 確èªããã¦ããï¼ãã®ããï¼ä¸è¬åã¯è¡ããªãï¼EntryPropertyã«ãå«ããªãï¼ 89 # - ã»ã«ã¤ã³ããã¯ã¹ - CELLIDXåã§ï¼åã®è¦å®ã¯ãªããï¼"ããã¤ã³ã¿å¤ã¦ããã£ãã 90 # æ´æ°å¤ã¦ããã£ããããã" (TECS 5.3.6) ããï¼ã¤ã³ããã¯ã¹ããã¤ã³ã¿ãã 91 # ãã¨ãåããï¼ã¤ã³ããã¯ã¹ã ã¨ããã¨ï¼ãã®å¤ã¯ã»ã«CBã®ã¢ãã¬ãã·ã³ã°ã« 92 # 使ç¨ãããã®ã§ï¼intptr_tã«åã¾ãçã§ããï¼ãã¤ã³ã¿ã®å ´åï¼å½ç¶intptr_t 93 # ã«åã¾ãï¼ 94 # - åãå£é 95 åã®æ·»å - int_tï¼åæ§ã«intptr_tã«åã¾ãçã§ããï¼ 96 # ãããã®ãã¡ï¼ã»ã«ã¤ã³ããã¯ã¹ã¨åãå£é 97 åã®æ·»åã¯ãã©ã¡ã¼ã¿ã«å«ãããã¨ã 98 # ã§ãããã§ãããï¼ä¸¡æ¹ã¯ç¡çã§ããï¼ 99 # 両æ¹ãæ ¼ç´ããé 100 åãçæãï¼ãã®é 101 åã®è¦ç´ ã¸ã®ãã¤ã³ã¿ã渡ãããã«ããã¨ã 102 # ãé¸æè¢ãå¯è½ã§ãããï¼å®è¡é度ãåªå 103 ããããã«ï¼ãã®æ¹æ³ã¯ã¨ããªãã£ãï¼ 66 # アダプタ関数の属性について整理すると, 67 # - 受け口関数 - 一般化を行うと,実行時コストが大きく増大してしまうことが 68 # 確認されている.このため,一般化は行わない.EntryPropertyにも含めない. 69 # - セルインデックス - CELLIDX型で,型の規定はないが,"ホ゜インタ値て゛あったり 70 # 整数値て゛あったりする。" (TECS 5.3.6) より,インデックスかポインタある 71 # ことが分かる.インデックスだとすると,この値はセルCBのアドレッシングに 72 # 使用されるので,intptr_tに収まる筈である.ポインタの場合,当然intptr_t 73 # に収まる. 74 # - 受け口配列の添字 - int_t.同様にintptr_tに収まる筈である. 75 # これらのうち,セルインデックスと受け口配列の添字はパラメータに含めることが 76 # できそうであるが,両方は無理である. 77 # 両方を格納した配列を生成し,その配列の要素へのポインタを渡すようにするとい 78 # う選択肢も可能であるが,実行速度を優先するために,この方法はとらなかった. 104 79 # 105 # ãã®ããï¼ä¸è¬åã¯ä»¥ä¸ã®ãã¿ã¼ã³ã«åé¡ãã¦è¡ãï¼80 # このため,一般化は以下のパターンに分類して行う. 106 81 # 107 # 1. ã»ã«ã¤ã³ããã¯ã¹ã®ã¿ä¸è¬åï¼ã»ã«ã¤ã³ããã¯ã¹ã®ãã¿ã¼ã³æ°ãåãå£é 108 åã® 109 # æ·»åã®ãã¿ã¼ã³æ°ããå¤ããï¼ãããã¯åãå£ãé 110 åã§ãªãå ´åã«è¡ãããï¼ 111 # 2. åãå£é 112 åã®æ·»åã®ã¿ä¸è¬åï¼ãã®å ´åï¼ã»ã«ãã¨ã«ç°ãªãé¢æ°ãç¨ããï¼ 82 # 1. セルインデックスのみ一般化.セルインデックスのパターン数が受け口配列の 83 # 添字のパターン数より多いか,あるいは受け口が配列でない場合に行われる. 84 # 2. 受け口配列の添字のみ一般化.この場合,セルごとに異なる関数を用いる. 113 85 # 114 # ããããï¼ååãå£é¢æ°ã«ã¤ãã¦ï¼ã¢ããã¿é¢æ°ã®çæåæ°ã¯ï¼115 # O(min{ ã»ã«ã¤ã³ããã¯ã¹ã®ãã¿ã¼ã³æ°, æ·»åã®ãã¿ã¼ã³æ°})116 # ã¨ãªãï¼86 # これより,各受け口関数について,アダプタ関数の生成個数は, 87 # O(min{セルインデックスのパターン数, 添字のパターン数}) 88 # となる. 117 89 # 118 # ãã©ã°ã¤ã³ã§ã®å¦çãã¯ã³ãã¹ã§è¡ãããã«ï¼tecsgen.cfgã§ã¯ã¢ããã¿é¢æ°ãç´119 # æ¥æå®ããã®ã§ã¯ãªãï¼ä»£ããã«ã¢ããã¿é¢æ°ã表ããã¯ãã使ç¨ããï¼ãã®120 # ãã¯ãã¯ã¢ããã¿é¢æ°ãã³ãã«ã¨å¼ã¶ãã¨ã«ããï¼121 # ã¢ããã¿é¢æ°ãã³ãã«ã¯ï¼æ¬¡ã®2åã®è¦ç´ ããæãï¼122 # - ã¢ããã¿é¢æ°ã¸ã®ã®ãã¤ã³ã¿123 # - ã¢ããã¿é¢æ°ã®å¼æ°90 # プラグインでの処理をワンパスで行うために,tecsgen.cfgではアダプタ関数を直 91 # 接指定するのではなく,代わりにアダプタ関数を表すマクロを使用する.この 92 # マクロはアダプタ関数ハンドルと呼ぶことにする. 93 # アダプタ関数ハンドルは,次の2個の要素から成る. 94 # - アダプタ関数へののポインタ 95 # - アダプタ関数の引数 124 96 # 125 97 # $Id$ … … 128 100 class AdapterGenerator 129 101 130 # çµåå 131 ã«é¢ããå±æ§ãå«ãï¼ã»ã«ï¼åãå£é 132 åã®æ·»åããæãï¼ 133 # åä¸ã®EntryPropertyã¨ãªãçµåã¯ï¼å 134 ¨ãåãæ¹æ³ã§ãã®åãå£é¢æ°ãå¼ã³ 135 # åºããï¼ 102 # 結合先に関する属性を含む.セル,受け口配列の添字から成る. 103 # 同一のEntryPropertyとなる結合は,全く同じ方法でその受け口関数を呼び 104 # 出せる. 136 105 # @private 137 106 class EntryProperty 138 # @return [Cell] åãå£å´ã®ã»ã«ï¼107 # @return [Cell] 受け口側のセル. 139 108 attr_reader :cell 140 109 141 # @return [Integer, nil] åãå£é 142 åã®æ·»åï¼é 143 åã§ãªãå ´åã¯nilï¼ 110 # @return [Integer, nil] 受け口配列の添字.配列でない場合はnil. 144 111 attr_reader :subscript 145 112 … … 153 120 end 154 121 155 # åå¤æ§ã®å®ç¾©ï¼Hashã®ãã¼ã¨ãã¦ä½¿ç¨ããã®ã«å¿ 156 è¦ï¼ 122 # 同値性の定義.Hashのキーとして使用するのに必要. 157 123 def eql?(o) @cell == o.cell && @subscript == o.subscript end 158 124 def hash() @cell.hash ^ @subscript.hash end … … 161 127 # @private 162 128 class EntryPort 163 # @param [Port] port çµåå 164 ã®ã»ã«ã®ã»ã«ã¿ã¤ãã®åãå£ï¼ 129 # @param [Port] port 結合先のセルのセルタイプの受け口. 165 130 def initialize(port, prefix) 166 131 @port = port 167 132 @global_name = "#{prefix}_#{@port.get_celltype.get_global_name}_#{@port.get_name}" 168 133 169 # åãå£é¢æ°åï¼siHandlerBodyãæ³å®ãã¦ããã®ã§ï¼é¢æ°åã¯mainã§åºå®ã§ããï¼134 # 受け口関数名.siHandlerBodyを想定しているので,関数名はmainで固定である. 170 135 @entry_fn_name = "#{@port.get_celltype.get_global_name}_#{@port.get_name}_main" 171 136 … … 174 139 end 175 140 176 # @return [String] ã°ãã¼ãã«ã«ä¸æ(ãªãã®ã¨ãã¦æ±ãããã)ãªèå¥åï¼141 # @return [String] グローバルに一意(なものとして扱えるよう)な識別子. 177 142 attr_reader :global_name 178 143 … … 180 145 attr_reader :port 181 146 182 # æå®ããEntryPropertyã«å¯¾å¿ããã¢ããã¿é¢æ°ãã³ãã«ãåå¾ããï¼147 # 指定したEntryPropertyに対応するアダプタ関数ハンドルを取得する. 183 148 # @param [EntryProperty] ep 184 # @return [String] ã¢ããã¿é¢æ°ãã³ãã«ï¼149 # @return [String] アダプタ関数ハンドル. 185 150 # @private 186 151 def adapter_handle_for_entry_property(ep) … … 192 157 end 193 158 194 # çµåå 195 ã®æ 196 å ±ã«å¿ããã¢ããã¿é¢æ°ãã½ã¼ã¹ã»ãããã¼ã«åºåããï¼ 197 # ä¸è¬åæå®ã¯ï¼`cell`ã¾ãã¯`subscript`ã®ä¸æ¹ã®ã¿è¡ããã¨ãã§ããï¼ 159 # 結合先の情報に応じたアダプタ関数をソース・ヘッダーに出力する. 160 # 一般化指定は,`cell`または`subscript`の一方のみ行うことができる. 198 161 # 199 162 # @param [AdapterGenerator] context 200 # @param [String] fn_name é¢æ°åï¼ 201 # @param [Cell, Symbol] cell ã»ã«ï¼ã»ã«ã«ã¤ãã¦ä¸è¬åããå ´å㯠`:generic` 202 # @param [Integer, Symbol, nil] subscript æ·»åï¼æ·»åã«ã¤ãã¦ä¸è¬åããå ´å㯠`:generic` 203 # @param [Celltype] å¼ã³å 204 ã®ã»ã«ã¿ã¤ããcell==:generic ã®å ´åã®ã¿æå¹ 163 # @param [String] fn_name 関数名. 164 # @param [Cell, Symbol] cell セル.セルについて一般化する場合は `:generic` 165 # @param [Integer, Symbol, nil] subscript 添字.添字について一般化する場合は `:generic` 166 # @param [Celltype] 呼び先のセルタイプ、cell==:generic の場合のみ有効 205 167 # @private 206 168 def generate_inner(context, fn_name, cell, subscript, callee_ct=nil) … … 213 175 ct = @port.get_celltype 214 176 215 # ã·ã³ã°ã«ãã³ã»ã«ã¿ã¤ã以å¤ã§ã¯ï¼CELLIDXã®æå®ãå¿ 216 è¦ï¼ 177 # シングルトンセルタイプ以外では,CELLIDXの指定が必要. 217 178 unless ct.is_singleton? 218 179 if cell == :generic … … 220 181 # params << "(CELLIDX)extinf" 221 182 else 222 # ã»ã«ã®CELLIDXãå¾ã183 # セルのCELLIDXを得る 223 184 if ct.has_INIB? || ct.has_CB? 224 185 params << ct.get_name_array(cell)[7] … … 229 190 end 230 191 231 # åãå£é 232 åã®æ·»åï¼ 192 # 受け口配列の添字. 233 193 if @port.get_array_size 234 194 if subscript == :generic … … 248 208 end 249 209 250 # æå®ããJoinã«å¯¾å¿ããã¢ããã¿é¢æ°ãã³ãã«ãåå¾ããï¼251 # @return [Array] ã¢ããã¿é¢æ°ãã³ãã«ï¼210 # 指定したJoinに対応するアダプタ関数ハンドルを取得する. 211 # @return [Array] アダプタ関数ハンドル. 252 212 def make_adapter_handle(join) 253 213 prop = EntryProperty.from_join(join) … … 259 219 end 260 220 261 # ã½ã¼ã¹ã»ãããã¼ã®è¨è¿°ãçæããï¼221 # ソース・ヘッダーの記述を生成する. 262 222 # @param [AdapterGenerator] context 263 223 def generate(context) … … 273 233 no_cellidx = false 274 234 if !(ct.has_INIB? || ct.has_CB?) 275 # CB, INIB æé©åã«ããï¼CB, INIBã両æ¹ä¸è¦ã«ãªã£ãã±ã¼ã¹ï¼276 # CELLIDX ãä¸è¦ã§ããã®ã§ï¼ã»ã«ã«ã¤ãã¦ä¸è¬åãã¦ãæå³277 # ã¯ãªãã®ã§ï¼æ·»åã«ããä¸è¬åãé¸æããï¼235 # CB, INIB最適化により,CB, INIBが両方不要になったケース. 236 # CELLIDXが不要であるので,セルについて一般化しても意味 237 # はないので,添字による一般化を選択する. 278 238 generalize_by_cell_idx = false 279 239 no_cellidx = true 280 240 281 # å 282 ¨ã¦ã®ã»ã«ãåä¸è¦ããï¼ 241 # 全てのセルを同一視する. 283 242 cells = { @props[0].cell => @props } 284 243 285 244 header_file.print " * No INIB & CB: generalized by subscript\n" 286 245 elsif @port.get_array_size 287 # ä¸è¬åãã¿ã¼ã³ã®åé¡ãè¡ãããã«ï¼åãå£å´ã»ã«ãæ·»åã®288 # ãã¿ã¼ã³æ°ãåæãã¦ï¼æé©ãªæ¹ãé¸æããï¼246 # 一般化パターンの分類を行うために,受け口側セルや添字の 247 # パターン数を分析して,最適な方を選択する. 289 248 generalize_by_cell_idx = cells.length >= subscripts.length 290 249 if generalize_by_cell_idx … … 294 253 end 295 254 else 296 # 常ã«CELLIDXã§ä¸è¬å255 # 常にCELLIDXで一般化 297 256 generalize_by_cell_idx = true 298 257 header_file.print " * non-array entry port: generalized by cell\n" … … 302 261 303 262 if generalize_by_cell_idx 304 # CELLIDX ã«ã¤ãã¦ä¸è¬å263 # CELLIDXについて一般化 305 264 subscripts.each { |subscript, props| 306 265 if subscript 307 266 fn_name = "#{@global_name}_adap_#{subscript}" 308 267 else 309 # åãå£é 310 åã§ãªãå ´å 268 # 受け口配列でない場合 311 269 fn_name = "#{@global_name}_adap" 312 270 end … … 318 276 handle = adapter_handle_for_entry_property(prop) 319 277 320 # ã»ã«ã®CELLIDXãå¾ã278 # セルのCELLIDXを得る 321 279 if ct.has_INIB? || ct.has_CB? 322 280 idx = ct.get_name_array(prop.cell)[7] … … 329 287 } 330 288 else 331 # æ·»åã«ã¤ãã¦ä¸è¬å289 # 添字について一般化 332 290 cells.each { |cell, props| 333 291 if no_cellidx 334 # CB/INIB ãªã292 # CB/INIB なし 335 293 fn_name = "#{@global_name}_adap" 336 294 else … … 358 316 attr :header_file 359 317 360 # @param [String] celltype_name ãã³ãã©é¢æ°ã®ã»ã«ã¿ã¤ãï¼361 # @param [String] prefix ååè¡çªãé²ãããã®ãã¬ãã£ãã¯ã¹ï¼318 # @param [String] celltype_name ハンドラ関数のセルタイプ. 319 # @param [String] prefix 名前衝突を防ぐためのプレフィックス. 362 320 def initialize(celltype_name, prefix) 363 321 @celltype_name = celltype_name … … 369 327 370 328 # ===AdapterGenerator#make_adapter_handle=== 371 # æå®ããçµåã®å¼åºããè¡ãããã®ã¢ããã¿é¢æ°ãã³ãã«ãçæããï¼372 # @return [Array] ã¢ããã¿é¢æ°ãã³ãã«ï¼329 # 指定した結合の呼出しを行うためのアダプタ関数ハンドルを生成する. 330 # @return [Array] アダプタ関数ハンドル. 373 331 def make_adapter_handle(join) 374 332 entry_port = @entry_ports[join.get_rhs_port] … … 382 340 383 341 # ===AdapterGenerator#finish=== 384 # ååãå£ã«å¯¾ãï¼ã¢ããã¿é¢æ°ãçæããï¼342 # 各受け口に対し,アダプタ関数を生成する. 385 343 def finish 386 344 @source_file = AppFile.open( "#{$gen}/#{@celltype_name}.c" ) … … 392 350 @header_file.print "\n/* Generated by #{self.class.name} */\n\n" 393 351 394 # NotifierPlugin ã使ç¨ããã»ã«ã¿ã¤ããè¤æ°ããå ´åï¼ããããã«395 # 対ãAdapterGenerator#finishãå¼ã³åºãããï¼tTimeEventHandler.hã«396 # ç¶ãã¦æ¸ãè¾¼ãã§ãã¾ãã¨ï¼ãããã¼ã¬ã¼ãã®é¢ä¿ã§2åç®ä»¥éã®è¨è¿°397 # ãèªã¿è¾¼ã¾ããªããªã£ã¦ãã¾ãï¼ãã®ããï¼ãã¡ã¤ã«å + ã»ã«ã¿ã¤ãå398 # ã¨ããå°ãç¹æ®ãªãããã¼ã¬ã¼ããç¨ããï¼352 # NotifierPluginを使用するセルタイプが複数ある場合,それぞれに 353 # 対しAdapterGenerator#finishが呼び出される.tTimeEventHandler.hに 354 # 続けて書き込んでしまうと,ヘッダーガードの関係で2回目以降の記述 355 # が読み込まれなくなってしまう.このため,ファイル名 + セルタイプ名 356 # という少し特殊なヘッダーガードを用いる. 399 357 header_guard = "#{@celltype_name}_H_#{@prefix}" 400 358 … … 402 360 @header_file.print "\#define #{header_guard}\n\n" 403 361 404 # ã«ã¼ãã«ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãå®è¡ããéï¼ãã³ãã©åãå£ã®ã»ã«ã¿ã¤ã 405 # ã®ã»ã«CBã®å®ç¾©ãå¿ 406 è¦ãªå ´åãããï¼ 362 # カーネルコンフィギュレータを実行する際,ハンドラ受け口のセルタイプ 363 # のセルCBの定義が必要な場合がある. 407 364 @header_file.print "\#include \"#{@celltype_name}_aux.h\"\n\n" 408 365 409 # çµåå 410 ã®ã»ã«ã¿ã¤ãã®å®ç¾©ã¯ï¼èªåã®ã»ã«ã®tecsgen.hãããå 411 ã« 412 # èªã¿è¾¼ã¾ãªããã°ãªããªããï¼ãã®ãã©ã°ã¤ã³ãè¤æ°å®è¡ãããã¨ï¼ 413 # é åºãå´©ãã¦ãã¾ãï¼ããã§ï¼çµåå 414 ã®ã»ã«ã¿ã¤ãã®å®ç¾©ã¯ããä¸ã¤ã® 415 # ãããã¼ãã¡ã¤ã«(tCelltypeName_aux.h)ããèªã¿è¾¼ãããã«ããï¼ 366 # 結合先のセルタイプの定義は,自分のセルのtecsgen.hよりも先に 367 # 読み込まなければならないが,このプラグインが複数実行されると, 368 # 順序が崩れてしまう.そこで,結合先のセルタイプの定義はもう一つの 369 # ヘッダーファイル(tCelltypeName_aux.h)から読み込むようにする. 416 370 aux_header_file = AppFile.open( "#{$gen}/#{@celltype_name}_aux.h" ) 417 371 aux_header_file.print "\n/* Generated by #{self.class.name} */\n\n" … … 424 378 cb_type_only_guard = "#{@celltype_name}_AUX_H_#{@prefix}_CB_TYPE_ONLY" 425 379 426 # çµåå 427 ã®ã»ã«ã¿ã¤ãã®å®ç¾©ãèªã¿è¾¼ã 380 # 結合先のセルタイプの定義を読み込む 428 381 aux_header_file.print "#ifndef TOPPERS_CB_TYPE_ONLY\n" 429 382 aux_header_file.print "#define TOPPERS_CB_TYPE_ONLY\n" … … 456 409 end 457 410 458 # ------ éç¥ã®ãã³ãã©ã®ç¨®é¡ã®å®ç¾©-------411 # ------ 通知のハンドラの種類の定義 ------- 459 412 460 413 class Handler … … 466 419 end 467 420 468 # é常ã®ãã³ãã©421 # 通常のハンドラ 469 422 EVENT_HANDLER = Handler::new("ciNotificationHandler") 470 423 471 # ã¨ã©ã¼ãã³ãã© (é常ã®ãã³ãã©ã失æããå ´åã«å¼ã³åºããã)424 # エラーハンドラ (通常のハンドラが失敗した場合に呼び出される) 472 425 ERROR_HANDLER = Handler::new("ciErrorNotificationHandler") 473 426 … … 492 445 end 493 446 494 # ------ éç¥ã®å±æ§ã®å®ç¾©-------447 # ------ 通知の属性の定義 ------- 495 448 # 496 # ãã³ãã©ã¿ã¤ãã«åè´ããªãå±æ§ãæå®ãããå ´åã« 497 # ã¨ã©ã¼ãåºåã§ãããããå 498 ¨ã¦ã®å±æ§ãããã§åæããã 449 # ハンドラタイプに合致しない属性が指定された場合に 450 # エラーを出力できるよう、全ての属性をここで列挙する。 499 451 500 452 SETVAR_ADDR_ATTR = HandlerAttribute::new("setVariableAddress") … … 512 464 ] 513 465 514 # ------ ãã³ãã©ã¿ã¤ãã®å®ç¾©-------466 # ------ ハンドラタイプの定義 ------- 515 467 516 468 class BaseHandlerType … … 526 478 527 479 #=== NotifierPlugin#BaseHandlerType#validate_join 528 # æå®ããã»ã«ã®çµåå 529 ãããã®ãã³ãã©ã¿ã¤ãã«è©²å½ããããæ¤è¨¼ 530 # handler:: Handler : ãã³ãã© 531 # cell:: Cell : ã»ã« 532 # join:: Join : çµå (declarationãPortã§ãããã®) 480 # 指定したセルの結合先が、このハンドラタイプに該当するかを検証 481 # handler:: Handler : ハンドラ 482 # cell:: Cell : セル 483 # join:: Join : 結合 (declarationがPortであるもの) 533 484 def validate_join(handler, cell, join) 534 485 return !generate_attr_map(handler, cell).nil? … … 536 487 537 488 #=== NotifierPlugin#BaseHandlerType#generate_attr_map 538 # æå®ããã»ã«ã®å±æ§ã¨ãæ¢ç¥ã®HandlerAttributeã®ãããã³ã°ã539 # çæããHash<HandlerAttribute, Join> (åå±æ§ã¨ããã«å¯¾å¿ãã540 # Join(declaration ãDeclã®ãã®)ã表ãHash)ããããã¯ã541 # ãããã³ã°ãè¡ããªãå ´å(å±æ§ã®ä¸è¶³ãéå°)ã¯nilãè¿ãã489 # 指定したセルの属性と、既知のHandlerAttributeのマッピングを 490 # 生成し、Hash<HandlerAttribute, Join> (各属性とそれに対応する 491 # Join(declarationがDeclのもの)を表すHash)、あるいは、 492 # マッピングが行えない場合(属性の不足、過剰)はnilを返す。 542 493 # 543 # handler:: Handler : ãã³ãã©544 # cell:: Cell : ã»ã«494 # handler:: Handler : ハンドラ 495 # cell:: Cell : セル 545 496 def generate_attr_map(handler, cell) 546 497 map = {} … … 552 503 join = join_list.get_item(attr_name.to_sym) 553 504 554 # ãã®ã»ã«ã¿ã¤ãã«ããã¦å¿ 555 é ã®å±æ§ã? 505 # このセルタイプにおいて必須の属性か? 556 506 is_required = @required_attributes.include?(known_attr) 557 507 558 # å±æ§ã®æå®ãä¸è¶³ãã¦ãã? or éå°? 559 # 注: ãã³ãã©ã¿ã¤ãã®å¤å¥ã«ã¯ãã»ã«ã§å¤ãæå®ããã¦ããã 560 # ãèæ 561 ®ããããã»ã«ã¿ã¤ãã§åæå¤ãæå®ããã¦ãã¦ãã 562 # ããã¯ãã³ãã©ã¿ã¤ãã®æ±ºå®ã«å½±é¿ããªãã 508 # 属性の指定が不足している? or 過剰? 509 # 注: ハンドラタイプの判別には、セルで値が指定されているか 510 # が考慮される。セルタイプで初期値が指定されていても、 511 # それはハンドラタイプの決定に影響しない。 563 512 return nil if join.nil? != !is_required 564 513 565 # å¿ 566 è¦ã®ãªãå±æ§ã§ãããæå®ãããã¦ããªãã®ã§é£ã°ã 514 # 必要のない属性であり、指定もされていないので飛ばす 567 515 next if join.nil? 568 516 569 # TODO: attr ã®çµåã§ãããã¨ãæ¤è¨¼517 # TODO: attrの結合であることを検証 570 518 571 519 map[known_attr] = join … … 576 524 577 525 #=== NotifierPlugin#BaseHandlerType#gen_cfg_handler_type 578 # ã¿ã¤ã ã¤ãã³ãã®éç¥ã®ç¨®é¡ã表ãã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®è¨è¿°ãçæããStringã¾ãã¯nilãè¿ã579 # handler:: Handler : ãã³ãã©526 # タイムイベントの通知の種類を表すコンフィギュレータの記述を生成し、Stringまたはnilを返す 527 # handler:: Handler : ハンドラ 580 528 def gen_cfg_handler_type(handler) 581 529 raise "called abstract method gen_cfg_handler_type" … … 583 531 584 532 #=== NotifierPlugin#BaseHandlerType#gen_cfg_handler_parameters 585 # ã¿ã¤ã ã¤ãã³ãã®éç¥ã®å¼æ°ã表ãã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®è¨è¿°ãçæããString[]ãè¿ã586 # handler:: Handler : ãã³ãã©587 # join:: Join : çµå (declarationãPortã§ãããã®)533 # タイムイベントの通知の引数を表すコンフィギュレータの記述を生成し、String[]を返す 534 # handler:: Handler : ハンドラ 535 # join:: Join : 結合 (declarationがPortであるもの) 588 536 # attrMap:: Hash<HandlerAttribute, Join> : 589 # åå±æ§ã¨ããã«å¯¾å¿ããJoin (declarationãDeclã®ãã®)590 # cell:: Cell : ã»ã«591 # adpt_gen:: AdapterGenerator : ã¢ããã¿é¢æ°ãçæãããªãã¸ã§ã¯ã537 # 各属性とそれに対応するJoin (declarationがDeclのもの) 538 # cell:: Cell : セル 539 # adpt_gen:: AdapterGenerator : アダプタ関数を生成するオブジェクト 592 540 def gen_cfg_handler_parameters(handler, join, attrMap, cell, adpt_gen) 593 541 return nil … … 595 543 596 544 #=== NotifierPlugin#BaseHandlerType#might_fail 597 # éç¥ã®éãã¨ã©ã¼ãçºçãããã®çµæã¨ã©ã¼éç¥ãå¼ã¶å¿ 598 è¦ãçãã 599 # ãã©ãããè¿ãã 545 # 通知の際、エラーが発生し、その結果エラー通知を呼ぶ必要が生じる 546 # かどうかを返す。 600 547 def might_fail 601 548 return false … … 613 560 id_attr = join.get_rhs_cell.get_celltype.find(:id) 614 561 if id_attr_join 615 # ã»ã«çææã«åæåããå ´å562 # セル生成時に初期化する場合 616 563 id = id_attr_join.get_rhs.to_s 617 564 else 618 # ã»ã«ã¿ã¤ãã®åæåå¤ã使ãå ´å565 # セルタイプの初期化値を使う場合 619 566 id = id_attr.get_initializer.to_s 620 567 end 621 568 622 # $id$ çã®ç½®æ569 # $id$等の置換 623 570 name_array = taskCell.get_celltype.get_name_array(taskCell) 624 571 id = taskCell.get_celltype.subst_name(id, name_array) … … 673 620 var_value = attrMap[SETVAR_VALUE_ATTR].get_rhs.to_s 674 621 675 # $id$ çã®ç½®æ622 # $id$等の置換 676 623 name_array = cell.get_celltype.get_name_array(cell) 677 624 var_addr = cell.get_celltype.subst_name(var_addr, name_array) … … 702 649 var_addr = attrMap[SETVAR_ADDR_ATTR].get_rhs.to_s 703 650 704 # $id$ çã®ç½®æ651 # $id$等の置換 705 652 name_array = cell.get_celltype.get_name_array(cell) 706 653 var_addr = cell.get_celltype.subst_name(var_addr, name_array) … … 729 676 var_addr = attrMap[INCVAR_ADDR_ATTR].get_rhs.to_s 730 677 731 # $id$ çã®ç½®æ678 # $id$等の置換 732 679 name_array = cell.get_celltype.get_name_array(cell) 733 680 var_addr = cell.get_celltype.subst_name(var_addr, name_array) … … 753 700 id_attr = join.get_rhs_cell.get_celltype.find(:id) 754 701 if id_attr_join 755 # ã»ã«çææã«åæåããå ´å702 # セル生成時に初期化する場合 756 703 id = id_attr_join.get_rhs.to_s 757 704 else 758 # ã»ã«ã¿ã¤ãã®åæåå¤ã使ãå ´å705 # セルタイプの初期化値を使う場合 759 706 id = id_attr.get_initializer.to_s 760 707 end 761 708 762 # $id$ çã®ç½®æ709 # $id$等の置換 763 710 name_array = semaphoreCell.get_celltype.get_name_array(semaphoreCell) 764 711 id = semaphoreCell.get_celltype.subst_name(id, name_array) … … 793 740 id_attr = join.get_rhs_cell.get_celltype.find(:id) 794 741 if id_attr_join 795 # ã»ã«çææã«åæåããå ´å742 # セル生成時に初期化する場合 796 743 id = id_attr_join.get_rhs.to_s 797 744 else 798 # ã»ã«ã¿ã¤ãã®åæåå¤ã使ãå ´å745 # セルタイプの初期化値を使う場合 799 746 id = id_attr.get_initializer.to_s 800 747 end 801 748 flg_pattern = attrMap[SETFLG_FLAG_ATTR].get_rhs.to_s 802 749 803 # $id$ çã®ç½®æ750 # $id$等の置換 804 751 name_array = eventflagCell.get_celltype.get_name_array(eventflagCell) 805 752 id = eventflagCell.get_celltype.subst_name(id, name_array) … … 834 781 id_attr = join.get_rhs_cell.get_celltype.find(:id) 835 782 if id_attr_join 836 # ã»ã«çææã«åæåããå ´å783 # セル生成時に初期化する場合 837 784 id = id_attr_join.get_rhs.to_s 838 785 else 839 # ã»ã«ã¿ã¤ãã®åæåå¤ã使ãå ´å786 # セルタイプの初期化値を使う場合 840 787 id = id_attr.get_initializer.to_s 841 788 end 842 789 843 # $id$ çã®ç½®æ790 # $id$等の置換 844 791 name_array = dataqueueCell.get_celltype.get_name_array(dataqueueCell) 845 792 id = dataqueueCell.get_celltype.subst_name(id, name_array) … … 868 815 sent_value = attrMap[SNDDTQ_VALUE_ATTR].get_rhs.to_s 869 816 870 # $id$ çã®ç½®æ817 # $id$等の置換 871 818 name_array = cell.get_celltype.get_name_array(cell) 872 819 sent_value = cell.get_celltype.subst_name(sent_value, name_array) … … 910 857 end 911 858 def gen_cfg_handler_parameters(handler, join, attrMap, cell, adpt_gen) 912 # tTimeEventHandlerã®çµåå 913 ãåå¾ 859 # tTimeEventHandlerの結合先を取得 914 860 handler_cell = join.get_rhs_cell 915 861 call_join = handler_cell.get_join_list.get_item(:ciHandlerBody) 916 862 917 # çµåããã¦ããªãå ´åã¯tecsgenãã¨ã©ã¼ãåºãã¯ããªã®ã§ããã§ã¯918 # ã¨ã©ã¼ã«ããç¡è¦ããï¼863 # 結合されていない場合はtecsgenがエラーを出すはずなのでここでは 864 # エラーにせず無視する. 919 865 return [] unless call_join 920 866 921 # ã¢ããã¿é¢æ°ãã³ãã«ãåå¾867 # アダプタ関数ハンドルを取得 922 868 adapter_handle = adpt_gen.make_adapter_handle(call_join) 923 869 return [adapter_handle[1], adapter_handle[0]] … … 953 899 954 900 #@celltype:: Celltype 955 #@option:: String : ãªãã·ã§ã³æåå901 #@option:: String :オプション文字列 956 902 def initialize( celltype, option ) 957 903 super 958 904 @plugin_arg_check_proc_tab = NotifierPluginArgProc 959 905 @plugin_arg_str = option 960 @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' ) # åå¾ã® "" ãåãé¤ã906 @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' ) # 前後の "" を取り除く 961 907 @plugin_arg_str.sub!( /(.*)"\z/, '\1' ) 962 908 @factory = nil … … 996 942 kernelCfg.print "\#include \"tTimeEventHandler.h\"\n" 997 943 998 # ã¢ããã¿é¢æ°ãçæããæºå944 # アダプタ関数を生成する準備 999 945 @adpt_gen = AdapterGenerator.new("tTimeEventHandler", @celltype.get_global_name) 1000 946 1001 # å±æ§ç½®æãè¡ãããã¨ãæ¤è¨¼ããã1002 # ããã§è¡ãã®ã¯ãfactoryã§æå®ãããå±æ§åã1003 # åå¨ãããã¨ã確èªããããªããã°ã¨ã©ã¼ãåºåãããã¨ã®ã¿ã§ããã1004 # ã»ã«ãã¨ã®å¦çã®æä¸ã«ã¨ã©ã¼ãåºåãããã¨ãå¯è½ã§ã¯ãããã1005 # ããããã¨ã»ã«ã¿ã¤ãå´ã®åé¡ã§ããã®ã«ãããããããã»ã«ãã¨ã«1006 # ã¨ã©ã¼ã表示ããã¦ãã¾ãã947 # 属性置換が行えることを検証する。 948 # ここで行うのは、factoryで指定された属性名が 949 # 存在することを確認し、しなければエラーを出力することのみである。 950 # セルごとの処理の最中にエラーを出力することも可能ではあるが、 951 # そうするとセルタイプ側の問題であるのにもかかわらず、セルごとに 952 # エラーが表示されてしまう。 1007 953 # {{attribute_name}} -> attribute_value 1008 954 @factory.scan(/\{\{([a-zA-Z0-9_]*?)\}\}/) { |match| 1009 955 name = $1.to_sym 1010 956 1011 # {{_handler_params_}} ã¯ãã³ãã©ã«é¢ããæå®ããã©ã°ã¤ã³å 1012 ã§å¤ãçæããã 957 # {{_handler_params_}} はハンドラに関する指定。プラグイン内で値が生成される 1013 958 next if name == :_handler_params_ 1014 959 … … 1024 969 } 1025 970 1026 # ã¢ããã¿é¢æ°ã®çæãå®äºããã971 # アダプタ関数の生成を完了させる 1027 972 @adpt_gen.finish 1028 973 … … 1039 984 handler_flag = nil 1040 985 1041 # ignoreErrors ãåå¾986 # ignoreErrorsを取得 1042 987 ignoreErrors_attr_join = cell.get_join_list.get_item(:ignoreErrors) 1043 988 ignoreErrors_attr = cell.get_celltype.find(:ignoreErrors) 1044 989 if ignoreErrors_attr_join 1045 # ã»ã«çææã«åæåããå ´å990 # セル生成時に初期化する場合 1046 991 ignoreErrors = ignoreErrors_attr_join.get_rhs.to_s 1047 992 else 1048 # ã»ã«ã¿ã¤ãã®åæåå¤ã使ãå ´å993 # セルタイプの初期化値を使う場合 1049 994 ignoreErrors = ignoreErrors_attr.get_initializer.to_s 1050 995 end … … 1058 1003 end 1059 1004 1060 # ãã¡ã¤ã³æå®ç¨æåå1005 # ドメイン指定用文字列 1061 1006 pre_text = "" 1062 1007 post_text = "\n" … … 1064 1009 1065 1010 [EVENT_HANDLER, ERROR_HANDLER].each { |handler| 1066 # å¼ã³å£ã®çµåãåå¾1011 # 呼び口の結合を取得 1067 1012 call_join = cell.get_join_list.get_item(handler.call_port_name.to_sym) 1068 1013 domain_root = cell.get_region.get_domain_root … … 1078 1023 end 1079 1024 1080 # ãã³ãã©ã¿ã¤ããå¤å¥ãã1025 # ハンドラタイプを判別する 1081 1026 matches = HANDLER_TYPES.select { |handler_type| 1082 1027 handler_type.validate_join(handler, cell, call_join) … … 1088 1033 end 1089 1034 1090 # æåã«è¦ã¤ãã£ãæå¹ãªãã³ãã©ã¿ã¤ãã使ç¨1035 # 最初に見つかった有効なハンドラタイプを使用 1091 1036 ht = matches[0] 1092 1037 1093 # ãã¡ã¤ã³ãã©ã°ã¤ã³ãæå®ããã¦ããå ´åãæå±ãã¡ã¤ã³ã®ãã§ãã¯1038 # ドメインプラグインが指定されている場合、所属ドメインのチェック 1094 1039 domain_root = cell.get_region.get_domain_root 1095 1040 if domain_root.get_domain_type then … … 1119 1064 end 1120 1065 dbgPrint "#{self.class.name}: match pattern 2.\n" 1121 when NullHandlerType.new # ã¨ã©ã¼éç¥ãæå®ãã¦ããªã1066 when NullHandlerType.new # エラー通知を指定していない 1122 1067 dbgPrint "#{self.class.name}: match pattern 3.\n" 1123 1068 end … … 1140 1085 end 1141 1086 1142 # éç¥ãã³ãã©ã§ãã¨ã©ã¼ãçºçããã¯ãããªããã®ã«ãã¨ã©ã¼ãã³ãã©ãæå®ããã¦ããã1143 # ãããã¯ãã®éã®ãã¿ã¼ã³ãæ¤åºããã1144 # (handler_flag ãnilã§ããå ´åããã³ãã©ã¿ã¤ããä¸æã§ãããã¨ã©ã¼ãçºçãããä¸æ1145 # ãªãããæ¤åºã¯è¡ããªãã)1087 # 通知ハンドラで「エラーが発生するはずがない」のに「エラーハンドラが指定されている」 1088 # もしくはその逆のパターンを検出する。 1089 # (handler_flagがnilである場合、ハンドラタイプが不明であり、エラーが発生するか不明 1090 # なため、検出は行わない。) 1146 1091 if handler == ERROR_HANDLER && !ht.is_a?(NullHandlerType) && !event_handler_might_fail 1147 1092 cdl_error2( cell.get_locale, "NTF1004 cell $1: handler type $2 which never raises an error was inferred for the normal notification handler, but an error notification handler was specified.", … … 1158 1103 end 1159 1104 1160 # éç¥æ¹æ³ã®éçAPIè¨è¿°ãçæãã1105 # 通知方法の静的API記述を生成する 1161 1106 handler_flag = ht.gen_cfg_handler_type(handler) 1162 1107 handler_flags << handler_flag if handler_flag … … 1172 1117 } 1173 1118 1174 # $id$ çã®ç½®æ1119 # $id$等の置換 1175 1120 name_array = cell.get_celltype.get_name_array(cell) 1176 1121 handler_args.collect! { |e| … … 1182 1127 } 1183 1128 1184 # tecsgen.cfg ã®è¨è¿°ãçæããã1185 # factory ã«å¯¾ãããã©ã¡ã¼ã¿ç½®æãè¡ãã1129 # tecsgen.cfgの記述を生成する。 1130 # factoryに対し、パラメータ置換を行う。 1186 1131 # {{attribute_name}} -> attribute_value 1187 1132 text = @factory.gsub(/\{\{([a-zA-Z0-9_]*?)\}\}/) { |match| … … 1189 1134 subst_attr = cell.get_celltype.find(name) 1190 1135 1191 # {{_handler_params_}} ã¯ãã³ãã©ã®æå®ã«ç½®æããã1136 # {{_handler_params_}} はハンドラの指定に置換する。 1192 1137 if name == :_handler_params_ 1193 1138 args_joined = handler_flags.join(' | ') … … 1200 1145 1201 1146 unless subst_attr 1202 # å±æ§ãè¦ã¤ãããªãã¨ããã¨ã©ã¼ã¯ãã§ã«å ±åããã¦ããã®ã§1203 # ããã§ã¯ããã¼å¤ãè¿ãã¦ããã ãã§ããã1147 # 属性が見つからないというエラーはすでに報告されているので 1148 # ここではダミー値を返しておくだけである。 1204 1149 next "" 1205 1150 end … … 1207 1152 subst_attr_join = cell.get_join_list.get_item(name) 1208 1153 if subst_attr_join 1209 # ã»ã«çææã«åæåããå ´å1154 # セル生成時に初期化する場合 1210 1155 subst = subst_attr_join.get_rhs.to_s 1211 1156 else 1212 # ã»ã«ã¿ã¤ãã®åæåå¤ã使ãå ´å1157 # セルタイプの初期化値を使う場合 1213 1158 subst = subst_attr.get_initializer.to_s 1214 1159 end 1215 1160 1216 # $id$ çã®ç½®æ1161 # $id$等の置換 1217 1162 cell.get_celltype.subst_name(subst, name_array) 1218 1163 } 1219 1164 1220 # åºå(CRE_xxx)1165 # 出力 (CRE_xxx) 1221 1166 kernelCfg.print pre_text 1222 1167 kernelCfg.print indent, text, "\n" -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.