- 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/lib/GenParamCopy.rb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby;charset=UTF-8
r388 r389 6 6 # Copyright (C) 2008-2014 by TOPPERS Project 7 7 #-- 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 # 免責すること. 44 30 # 45 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 46 ã 47 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 48 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 49 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 50 # ã®è²¬ä»»ãè² ããªãï¼ 31 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 32 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 33 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 34 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 35 # の責任を負わない. 51 36 # 52 37 # $Id$ … … 55 40 #= ParamCopy 56 41 # 57 # ãã©ã¡ã¼ã¿ã³ãã¼ãããã¼ã·ã£ã©ï¼ã¢ã³ãã¼ã·ã£ã©ã³ã¼ããçæããã¡ã½ãã print_param ãæä¾ããï¼58 # RPCPlugin, OpaqueRPCPlugin ã« include ãããï¼59 # RPCPlugin ( ãã©ã³ã¹ãã¢ã¬ã³ã) ã§ã¯ãoneway é¢æ°ã§ in ã®ãã¤ã³ã¿å¼æ°ã®å ´åã«éã£ã¦ print_param ãç¨ããããï¼42 # パラメータコピーするマーシャラ/アンマーシャラコードを生成するメソッド print_param を提供する. 43 # RPCPlugin, OpaqueRPCPlugin に include される. 44 # RPCPlugin (トランスペアレント) では、oneway 関数で in のポインタ引数の場合に限って print_param が用いられる. 60 45 # 61 46 module GenParamCopy 62 47 63 #=== å¼æ°ã®è»¢éã³ã¼ããçæ48 #=== 引数の転送コードを生成 64 49 65 50 def print_param( name, type, file, nest, dir, outer, outer2, b_marshal, b_get, alloc_cp = nil, alloc_cp_extra = nil, name_list = nil ) … … 76 61 EOT 77 62 if ( dir == :SEND || dir == :RECEIVE ) && type.get_type.has_pointer? then 78 # send, receive ã®å ´åã¯ãã¨ã©ã¼ãªã»ããã«åã NULL ã«ãã63 # send, receive の場合は、エラーリセットに備え NULL にする 79 64 file.print <<EOT 80 65 #{indent}memset( (void *)#{outer}#{name}#{outer2}#{alloc_cp_extra}, 0, sizeof(#{type.get_type.get_type_str}#{type.get_type.get_type_str_post})*(#{size_str}); /* GenParamCopy Alloc1 */ … … 103 88 when :SIGNED 104 89 if bit_size == -1 || bit_size == -11 then 105 sign = "S" # signed char ã®å ´åã®ã¿ S ãã¤ã90 sign = "S" # signed char の場合のみ S がつく 106 91 else 107 92 sign = "" … … 156 141 nest = print_nullable_pre( name, type, file, nest, dir, outer, outer2, b_marshal, b_get ) 157 142 indent = "\t" * nest 158 loop_counter_type = IntType.new(32) # mikan åã size_is, count_is ã®å¼æ°ã®åã¨ãã143 loop_counter_type = IntType.new(32) # mikan 型を size_is, count_is の引数の型とする 159 144 file.print "#{indent}{\t/* GenParamCopy 4 */\n" 160 145 file.print "#{indent} #{loop_counter_type.get_type_str} i__#{nest}, length__#{nest};\n" … … 168 153 count_str = count.to_str( name_list, outer, outer2 ) 169 154 else 170 # size_is ã¯å¿ 171 é . count_is ã¯ãªãã·ã§ã³ 155 # size_is は必須. count_is はオプション 172 156 count_str = size_str 173 157 end 174 158 file.print "#{indent} length__#{nest} = #{count_str};\t/* GenParamCopy 5 */\n" 175 159 176 # size_is ã« max æå®ãããå ´åãlength ã max ãè¶ 177 ãã¦ããããã§ãã¯ããã³ã¼ããçæ 178 # alloc_cp == nil ã®ã¨ã dir 㯠INOUT, OUT ã®ã¯ã (æ¡ä»¶ãåé·)ã試é¨ãçµãã£ã¦ããã®ã§ã次åè¦ç´ãæã«å¤ã 160 # size_is に max 指定がある場合、length が max を超えているかチェックするコードを生成 161 # alloc_cp == nil のとき dir は INOUT, OUT のはず (条件が冗長)。試験が終わっているので、次回見直し時に外す 179 162 if b_get && type.get_max != nil && ! ( ( dir == :INOUT || dir == :OUT ) && alloc_cp == nil ) then 180 163 file.print "#{indent} if( length__#{nest} > #{type.get_max.to_s} ){\t/* GenParamCopy max check 1 */\n" … … 202 185 file.print "#{indent} length__#{nest} = STRLEN#{b_size}(#{outer}#{name}#{outer2})+1;\t/* GenParamCopy 7 */\n" 203 186 end 204 size_str = "length__#{nest}" # string ã®å ´åãstrnlen 以ä¸ã®é åã確ä¿ããªã187 size_str = "length__#{nest}" # string の場合、strnlen 以上の領域を確保しない 205 188 else 206 189 if ( dir == :INOUT ) then 207 190 if ( string.instance_of? Expression ) then 208 191 len = string.to_str( name_list, outer, outer2 ) 209 size_str = "#{len}" # string(len) ã®å ´å len ã確ä¿ãã192 size_str = "#{len}" # string(len) の場合 len を確保する 210 193 else 211 194 raise "unsuscripted string used for inout parameter #{name}" 212 195 end 213 196 else 214 size_str = "length__#{nest}" # string ã®å ´åãstrnlen 以ä¸ã®é åã確ä¿ããªã197 size_str = "length__#{nest}" # string の場合、strnlen 以上の領域を確保しない 215 198 end 216 199 end … … 224 207 EOT 225 208 if ( dir == :SEND || dir == :RECEIVE ) && type.get_type.has_pointer? then 226 # send, receive ã®å ´åã¯ãã¨ã©ã¼ãªã»ããã«åã NULL ã«ãã209 # send, receive の場合は、エラーリセットに備え NULL にする 227 210 file.print <<EOT 228 211 #{indent} memset( (void *)#{outer}#{name}#{outer2}#{alloc_cp_extra}, 0, sizeof(#{type.get_type.get_type_str}#{type.get_type.get_type_str_post})*(#{size_str}) ); /* GenParamCopy Alloc2 */ … … 251 234 EOT 252 235 if ( dir == :SEND || dir == :RECEIVE ) && type.get_type.has_pointer? then 253 # send, receive ã®å ´åã¯ãã¨ã©ã¼ãªã»ããã«åã NULL ã«ãã236 # send, receive の場合は、エラーリセットに備え NULL にする 254 237 file.print <<EOT 255 238 #{indent}memset( (void *)#{outer}#{name}#{outer2}#{alloc_cp_extra}, 0, sizeof(#{type.get_type.get_type_str}#{type.get_type.get_type_str_post}) ); /* GenParamCopy Alloc3 */ … … 286 269 size_str = subsc.to_str( name_list, outer, outer2 ) 287 270 288 loop_counter_type = IntType.new(32) # mikan åã size_is, count_is ã®å¼æ°ã®åã¨ãã271 loop_counter_type = IntType.new(32) # mikan 型を size_is, count_is の引数の型とする 289 272 file.print "#{indent}{\t/* GenParamCopy 11 */\n" 290 273 file.print "#{indent} #{loop_counter_type.get_type_str} i__#{nest}, length__#{nest} = #{size_str};\n" … … 302 285 if type.is_nullable? then 303 286 indent = " " * nest 304 if dir == :OUT then # OUT ã®å ´å print_out_nullable 㧠NULL ãã©ããã®æ 305 å ±ã渡ã 287 if dir == :OUT then # OUT の場合 print_out_nullable で NULL かどうかの情報を渡す 306 288 # 'null or not' is sent in the function 'print_out_nullable' 307 289 if b_get then … … 321 303 #{indent} if( ! b_null_ ){ 322 304 EOT 323 else # dir = :INOUT, b_marshal = true, b_get = true ã®å ´åãNULL ãã©ããã®æ 324 å ±ã渡ããªã 305 else # dir = :INOUT, b_marshal = true, b_get = true の場合、NULL かどうかの情報を渡さない 325 306 file.print <<EOT 326 307 #{indent} int8_t b_null_ = (#{outer}#{name}#{outer2} == NULL);\t/* GenParamCopy Null 21 */ … … 335 316 336 317 if ! ( dir == :INOUT && b_marshal == false ) then 337 # dir = :INOUT, b_marshal = false, b_get = false ã®å ´å318 # dir = :INOUT, b_marshal = false, b_get = false の場合 338 319 file.print <<EOT 339 320 #{indent} if((ercd_=cTDR_putInt8( b_null_ )) != E_OK )\t/* GenParamCopy Null 32 */ … … 355 336 def print_nullable_post( name, type, file, nest, dir, outer, outer2, b_marshal, b_get ) 356 337 if type.is_nullable? then 357 if dir == :OUT then # OUT ã®å ´å print_out_nullable 㧠NULL ãã©ããã®æ 358 å ±ã渡ã 338 if dir == :OUT then # OUT の場合 print_out_nullable で NULL かどうかの情報を渡す 359 339 nest -= 1 360 340 indent = " " * nest … … 371 351 #{indent} } /* ! b_null_ */ 372 352 EOT 373 else # dir = :INOUT, b_marshal = true # inout ã® out æ¹å353 else # dir = :INOUT, b_marshal = true # inout の out 方向 374 354 file.print "#{indent} } /* ! b_null_ GenParamCopy Null 52 */\n" 375 355 end -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.