Module: MrubyBridgeCelltypePluginModule
- Included in:
- MrubyBridgeCelltypePlugin, MrubyBridgeCompositePlugin
- Defined in:
- lib/tecsgen/plugin/lib/MrubyBridgeCelltypePluginModule.rb
Overview
celltype プラグインの共通の親クラス
Constant Summary collapse
- MrubyBridgePluginArgProc =
プラグイン引数名 => Proc
{ "ignoreUnsigned" => Proc.new {|obj, rhs| obj.set_ignoreUnsigned rhs }, "include_inner_cell" => Proc.new {|obj, rhs| obj.set_include_inner_cell rhs }, "exclude_cell" => Proc.new {|obj, rhs| obj.set_exclude_cell rhs }, "exclude_port" => Proc.new {|obj, rhs| obj.set_exclude_port rhs }, "exclude_port_func" => Proc.new {|obj, rhs| obj.set_exclude_port_func rhs }, "auto_exclude" => Proc.new {|obj, rhs| obj.set_auto_exclude rhs }, }
- @@plugin_list =
[]
- @@count =
1
- @@b_gen_post_code_called =
false
Class Method Summary collapse
-
.gen_post_code(file) ⇒ Object
後ろの CDL コードを生成 プラグインの後ろの CDL コードを生成 file:: File:.
Instance Method Summary collapse
-
#gen_cdl_file(file) ⇒ Object
CDL ファイルの生成 typedef, signature, celltype, cell のコードを生成 重複して生成してはならない すでに生成されている場合は出力しないこと。 もしくは同名の import により、重複を避けること。 file:: FILE 生成するファイル.
-
#gen_factory(file) ⇒ Object
tCelltype_factory.h に挿入するコードを生成する file 以外の他のファイルにファクトリコードを生成してもよい セルタイププラグインが指定されたセルタイプのみ呼び出される.
- #get_celltype ⇒ Object
-
#initialize(celltype, option) ⇒ Object
- celltype
-
Celltype セルタイプ(インスタンス).
-
#new_cell(cell) ⇒ Object
新しいセル cell:: Cell セル.
-
#set_auto_exclude(rhs) ⇒ Object
プラグイン引数 auto_exclude.
- #set_exclude_cell(rhs) ⇒ Object
- #set_exclude_port(rhs) ⇒ Object
-
#set_exclude_port_func(rhs) ⇒ Object
プラグイン引数 exclude_port_func.
-
#set_ignoreUnsigned(rhs) ⇒ Object
プラグイン引数 ignoreUnsigned.
- #set_include_inner_cell(rhs) ⇒ Object
Class Method Details
.gen_post_code(file) ⇒ Object
後ろの CDL コードを生成
プラグインの後ろの CDL コードを生成
- file
-
File:
174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 |
# File 'lib/tecsgen/plugin/lib/MrubyBridgeCelltypePluginModule.rb', line 174 def self.gen_post_code(file) dbgPrint "#{self.name}: gen_post_code_body\n" if @@b_gen_post_code_called == false @@b_gen_post_code_called = true MrubyBridgeCellPlugin.gen_post_code_body file end # この段階で生成すると、同じポストコードで出力される mruby の初期化コードに反映されない # # MrubyBridgeCelltypePlugin の生成する generate 文は、 # fn2 = "#{$gen}/tmp_MrubyBridgeCelltypePlugin_post.cdl" # f2 = File.open( fn2, "w" ) # # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること # dbgPrint "MrubyBridgeCelltypePlugin: gen_post_code\n" # f2.print "/* '#{self.name}' post code */\n" # @@plugin_list.each{ |plugin| # plugin.get_celltype.get_cell_list.each{ |cell| # # mikan option, region # f2.print <<EOT # generate( MrubyBridgeCellPlugin, #{cell.get_namespace_path}, "" ); # EOT # } # } # f2.close # p Import # Import.new "#{fn2}" end |
Instance Method Details
#gen_cdl_file(file) ⇒ Object
CDL ファイルの生成
typedef, signature, celltype, cell のコードを生成
重複して生成してはならない
すでに生成されている場合は出力しないこと。
もしくは同名の import により、重複を避けること。
- file
-
FILE 生成するファイル
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/tecsgen/plugin/lib/MrubyBridgeCelltypePluginModule.rb', line 138 def gen_cdl_file(file) # この段階で呼びだすと generate 文が呼び出される前のセルのみの出力となる # dbgPrint "MrubyBridgeCelltypePlugin: gen_cdl_file: #{@celltype.get_name}\n" # file.print <<EOT # /* MrubyBridgeCelltypePlugin: celltype=#{@celltype.get_name} # * # * cell's generate before celltype's generate # */ # # EOT # @celltype.get_cell_list.each { |cell| # @cell_list << cell # # mikan option, region # dbgPrint "MrubyBridgeCelltypePlugin: cell=#{cell.get_name}\n" # file.print <<EOT # generate( MrubyBridgeCellPlugin, #{cell.get_namespace_path}, "" ); # EOT # } end |
#gen_factory(file) ⇒ Object
tCelltype_factory.h に挿入するコードを生成する
file 以外の他のファイルにファクトリコードを生成してもよい セルタイププラグインが指定されたセルタイプのみ呼び出される
162 163 |
# File 'lib/tecsgen/plugin/lib/MrubyBridgeCelltypePluginModule.rb', line 162 def gen_factory(file) end |
#get_celltype ⇒ Object
165 166 167 |
# File 'lib/tecsgen/plugin/lib/MrubyBridgeCelltypePluginModule.rb', line 165 def get_celltype @celltype end |
#initialize(celltype, option) ⇒ Object
- celltype
-
Celltype セルタイプ(インスタンス)
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/tecsgen/plugin/lib/MrubyBridgeCelltypePluginModule.rb', line 57 def initialize(celltype, option) dbgPrint "#{self.class.name}: initialzie: #{celltype.get_name}\n" super @celltype = celltype @cell_list = [] @include_inner_cell = false @exclude_cells = [] @exclude_port = [] @exclude_port_func = {} @b_ignoreUnsigned = false @b_auto_exclude = true # auto_exclude = true by default @@plugin_list << self @plugin_arg_check_proc_tab = MrubyBridgePluginArgProc @plugin_arg_str = CDLString.remove_dquote option parse_plugin_arg MrubyBridgeCellPlugin.set_gen_post_code_by_dependent end |
#new_cell(cell) ⇒ Object
新しいセル
- cell
-
Cell セル
celltype プラグインを指定されたセルタイプのセルが生成された セルタイププラグインに対する新しいセルの報告 generate 文により呼び出された場合、それまでに定義された cell については、initialize のタイミングで呼び出される
84 85 86 87 88 89 90 91 92 93 94 95 96 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 |
# File 'lib/tecsgen/plugin/lib/MrubyBridgeCelltypePluginModule.rb', line 84 def new_cell(cell) dbgPrint "MrubyBridgeCelltypePluginModule: new_cell: #{cell.get_name}\n" return if @cell_list.include? cell # この行は、本来不要のはず if TECSGEN.post_coded? # post_code 以降のセルは対象から外す cdl_info("I9999 MrubyBridgeCelltypePlugin: $1 is excluded because cell generated after post_coded", cell.get_name) return end # include_inner_cell option if cell.is_cloned? && @include_inner_cell == false # p "#{cell.get_name} excluded" cdl_info("I9999 MrubyBridgeCelltypePlugin: inner cell $1 is excluded", cell.get_name) return # else # p "#{cell.get_name} included" end # exclude_cell option if @exclude_cells.include?(cell.get_name) return end opt_str = "ignoreUnsigned=#{@b_ignoreUnsigned}, auto_exclude=#{@b_auto_exclude}" @exclude_port.each{|port| opt_str += ",exclude_port=#{port}" } @exclude_port_func.each{|port, funcs| funcs.each{|func| opt_str += ",exclude_port_func=#{port}.#{func}" } } # p "MrubyBridgeCelltypePlugin: opt_str=#{opt_str}" fn2 = "#{$gen}/tmp_MrubyBridgeCelltypePluginModule_#{@celltype.get_name}_#{@@count}.cdl" f2 = File.open(fn2, "w") f2.print <<EOT /* MrubyBridgeCelltypePluginModule: celltype=#{@celltype.get_name} */ generate( MrubyBridgeCellPlugin, #{cell.get_namespace_path}, "#{opt_str}" ); EOT f2.close dbgPrint "MrubyBridgeCelltypePluginModule new_cell: Import #{fn2}\n" Import.new fn2.to_s @@count += 1 end |
#set_auto_exclude(rhs) ⇒ Object
プラグイン引数 auto_exclude
273 274 275 276 277 278 279 280 281 282 |
# File 'lib/tecsgen/plugin/lib/MrubyBridgeCelltypePluginModule.rb', line 273 def set_auto_exclude(rhs) # print "MrubyBridgeCellPlugin: auto_exclude=#{rhs}\n" if rhs == "false" @b_auto_exclude = false elsif rhs == "true" @b_auto_exclude = true # auto_exclude = true by default else cdl_warning("MRB9999 auto_exclude: unknown rhs value ignored. specify true or false") end end |
#set_exclude_cell(rhs) ⇒ Object
218 219 220 221 222 223 224 |
# File 'lib/tecsgen/plugin/lib/MrubyBridgeCelltypePluginModule.rb', line 218 def set_exclude_cell(rhs) cells = rhs.split "," cells.each{|rhs_cell| rhs_cell.gsub!(/\s/, "") @exclude_cells << rhs_cell.to_sym } end |
#set_exclude_port(rhs) ⇒ Object
226 227 228 229 230 231 232 233 234 235 236 237 238 239 |
# File 'lib/tecsgen/plugin/lib/MrubyBridgeCelltypePluginModule.rb', line 226 def set_exclude_port(rhs) ports = rhs.split "," ct = @cell.get_celltype return if ct.nil? # error case ports.each{|rhs_port| obj = ct.find(rhs_port.to_sym) if (!obj.instance_of? Port) || obj.get_port_type != :ENTRY cdl_error("MRB9999 exclude_port '$1' not found or not entry in celltype '$2'", rhs_port, ct.get_name) else # print "MRBBridgeCellPlugin: exclude #{rhs_port}\n" @exclude_port << rhs_port end } end |
#set_exclude_port_func(rhs) ⇒ Object
プラグイン引数 exclude_port_func
242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 |
# File 'lib/tecsgen/plugin/lib/MrubyBridgeCelltypePluginModule.rb', line 242 def set_exclude_port_func(rhs) port_funcs = rhs.split "," ct = @celltype return if ct.nil? # error case port_funcs.each{|rhs_port_func| port_func = rhs_port_func.split(".") if port_func.length != 2 cdl_error("MRB9999 exclude_port_func: '$1' not in 'port.func' form", rhs_port_func) end obj = ct.find(port_func[0].to_sym) if (!obj.instance_of? Port) || obj.get_port_type != :ENTRY cdl_error("MRB9999 exclude_port_func: port '$1' not found in celltype '$2'", rhs_port_func, ct.get_name) else signature = obj.get_signature next if signature.nil? # error case if signature.get_function_head port_func[1].to_sym # print "MRBBridgeCellPlugin: #{port_func[0]}.#{port_func[1]} exclude\n" if @exclude_port_func[port_func[0]] @exclude_port_func[port_func[0]] << port_func[1] else @exclude_port_func[port_func[0]] = [port_func[1]] end else cdl_error("MRB9999 include_port_func: func '$1' not found in port '$2' celltype $3", port_func[1], port_func[0], ct.get_name) end end } end |
#set_ignoreUnsigned(rhs) ⇒ Object
プラグイン引数 ignoreUnsigned
206 207 208 209 210 |
# File 'lib/tecsgen/plugin/lib/MrubyBridgeCelltypePluginModule.rb', line 206 def set_ignoreUnsigned(rhs) if rhs == "true" || rhs.nil? @b_ignoreUnsigned = true end end |
#set_include_inner_cell(rhs) ⇒ Object
212 213 214 215 216 |
# File 'lib/tecsgen/plugin/lib/MrubyBridgeCelltypePluginModule.rb', line 212 def set_include_inner_cell(rhs) if rhs == "true" || rhs.nil? @include_inner_cell = true end end |