Class: TECS2CBridgePlugin
- Inherits:
-
SignaturePlugin
- Object
- Node
- Plugin
- SignaturePlugin
- TECS2CBridgePlugin
- Defined in:
- lib/tecsgen/plugin/TECS2CBridgePlugin.rb
Overview
TECS => C 呼び出しプラグイン
Constant Summary collapse
- @@signature_list =
- @option
-
String ‘“’, ‘”’ で囲まれた文字列
{ }
Constants inherited from Plugin
Class Method Summary collapse
-
.gen_post_code(file) ⇒ Object
後ろのコードを生成 プラグインの後ろのコードを生成 file:: File:.
Instance Method Summary collapse
- #gen_cdl_file(file) ⇒ Object
-
#gen_ep_func_body(file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params) ⇒ Object
受け口関数の本体(C言語)を生成する 通常であれば、ジェネレータは受け口関数のテンプレートを生成する プラグインの場合、変更する必要のないセルタイプコードを生成する file:: FILE 出力先ファイル b_singleton:: bool true if singleton ct_name:: Symbol global_ct_name:: string sig_name:: string ep_name:: string func_name:: string func_global_name:: string func_type:: class derived from Type.
- #gen_postamble(file, b_singleton, ct_name, global_name) ⇒ Object
-
#initialize(signature, option) ⇒ TECS2CBridgePlugin
constructor
- signature
-
Signature シグニチャ(インスタンス).
Methods inherited from Plugin
#cdl_error, #check_plugin_arg, #gen_ep_func?, #gen_preamble, #new_cell, #parse_plugin_arg, #print_msg, #set_locale, #set_silent
Methods inherited from Node
#cdl_error, #cdl_error2, #cdl_error3, #cdl_info, #cdl_info2, #cdl_warning, #cdl_warning2, #get_locale, #locale_str, #set_locale
Constructor Details
#initialize(signature, option) ⇒ TECS2CBridgePlugin
- signature
-
Signature シグニチャ(インスタンス)
47 48 49 50 51 52 53 54 55 |
# File 'lib/tecsgen/plugin/TECS2CBridgePlugin.rb', line 47 def initialize(signature, option) super @signature = signature @header_name = "#{$gen}/#{@signature.get_global_name}.#{$h_suffix}" @celltype_name = :"t#{@signature.get_global_name}" parse_plugin_arg end |
Class Method Details
.gen_post_code(file) ⇒ Object
後ろのコードを生成
プラグインの後ろのコードを生成
- file
-
File:
80 81 82 83 |
# File 'lib/tecsgen/plugin/TECS2CBridgePlugin.rb', line 80 def self.gen_post_code(file) # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること # file.print "/* '#{self.class.name}' post code */\n" end |
Instance Method Details
#gen_cdl_file(file) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/tecsgen/plugin/TECS2CBridgePlugin.rb', line 57 def gen_cdl_file(file) if @@signature_list[@signature.get_global_name] @@signature_list[@signature.get_global_name] << self cdl_warning("T2CW001 signature '$1' duplicate. ignored current one", @signature.get_namespace_path) return end @@signature_list[@signature.get_global_name] = [self] print_msg " TECS2CBridgePlugin: [celltype] TECS2C::#{@celltype_name}. Create cell then join to entry port 'eEntry' from the caller cell\n" file.print <<EOT namespace nTECS2C{ [singleton] celltype #{@celltype_name} { [inline] entry #{@signature.get_namespace_path} eEnt; }; }; EOT end |
#gen_ep_func_body(file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params) ⇒ Object
受け口関数の本体(C言語)を生成する
通常であれば、ジェネレータは受け口関数のテンプレートを生成する
プラグインの場合、変更する必要のないセルタイプコードを生成する
- file
-
FILE 出力先ファイル
- b_singleton
-
bool true if singleton
- ct_name
-
Symbol
- global_ct_name
-
string
- sig_name
-
string
- ep_name
-
string
- func_name
-
string
- func_global_name
-
string
- func_type
-
class derived from Type
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/tecsgen/plugin/TECS2CBridgePlugin.rb', line 97 def gen_ep_func_body(file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params) ret_type = func_type.get_type b_ret_void = ret_type.is_void? if !b_ret_void file.print(" #{ret_type.get_type_str} retval;\n") end if !b_singleton file.print <<EOT #{ct_name}_CB *p_cellcb; if( VALID_IDX( idx ) ){ p_cellcb = #{global_ct_name}_GET_CELLCB(idx); }else{ /* エラー処理コードをここに記述 */ } EOT end # p "celltype_name, sig_name, func_name, func_global_name" # p "#{ct_name}, #{sig_name}, #{func_name}, #{func_global_name}" if !b_ret_void file.print(" retval = ") else file.print(" ") end file.print("#{func_name}(") delim = "" params.each{|param| file.printf("#{delim} #{param.get_name}") delim = "," } file.print(" );\n") if !b_ret_void file.print(" return retval;\n") end end |
#gen_postamble(file, b_singleton, ct_name, global_name) ⇒ Object
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
# File 'lib/tecsgen/plugin/TECS2CBridgePlugin.rb', line 142 def gen_postamble(file, b_singleton, ct_name, global_name) # generate header file here, NOT postamble file2 = CFile.open(@header_name, "w") file2.print <<EOT /* * This file was generated by TECS2CBridgePlugin and has prototype * decalarations of functions in signature '#{@signature.get_namespace_path}' */ #include "global_tecsgen.#{$h_suffix}" EOT @signature.get_function_head_array.each {|f| decl = f.get_declarator func_type = decl.get_type params = func_type.get_paramlist.get_items func_name = decl.get_name ret_type = func_type.get_type # p "celltype_name, sig_name, func_name, func_global_name" # p "#{ct_name}, #{sig_name}, #{func_name}, #{func_global_name}" file2.print("#{ret_type.get_type_str} #{func_name}(") delim = "" params.each{|param| file2.printf("#{delim} #{param.get_name}") delim = "," } file2.print(" )#{ret_type.get_type_str_post};\n") } file2.close end |