# -*- coding: utf-8 -*- # # TECS Generator # Generator for TOPPERS Embedded Component System # # Copyright (C) 2008-2017 by TOPPERS Project #-- # 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー # スコード中に含まれていること. # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 # の無保証規定を掲載すること. # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ # と. # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 # 作権表示,この利用条件および下記の無保証規定を掲載すること. # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに # 報告すること. # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを # 免責すること. # # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ # の責任を負わない. # # $Id$ #++ #== celltype プラグインの共通の親クラス class MrubyBridgeCellPlugin < CellPlugin # プラグイン引数名 => Proc MrubyBridgePluginArgProc = { "ignoreUnsigned" => Proc.new { |obj,rhs| obj.set_ignoreUnsigned 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 }, } @@b_gen_post_code_by_dependent = false # true if gen_post_code is called by MrubyBridgeCelltypePlugin @@cell_list = {} # gen_cdl_file'ed list to avoid duplicate generation @@signature_list = {} require_tecsgen_lib( "MrubyBridgeSignaturePlugin.rb" ) #@exclude_port::[ String(port_name) ] : #@exclude_port_func::{ [ String(port_name) ] => [ String(func_name) ] } : #@port_list::{ String(port_name) => String(include/exclude=func_name) } : all included port and opt_string #=== CellPlugin# initialize #cell:: Cell セル(インスタンス) # このメソッドは、セルの構文解析が終わったところで呼び出される # この段階では意味解析が終わっていない def initialize( cell, option ) dbgPrint " #{self.class.name}: initialzie=#{cell.get_name} option=#{option}\n" super @cell = cell # option @b_ignoreUnsigned = false @exclude_port = [] @exclude_port_func = {} @b_auto_exclude = true # auto_exclude = true by default MrubyBridgeSignaturePlugin.set_gen_post_code_by_dependent @plugin_arg_str = CDLString.remove_dquote option # @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' ) # 前後の "" を取り除く # @plugin_arg_str.sub!( /(.*)"\z/, '\1' ) @plugin_arg_list = {} dbgPrint "#{self.class.name}: initialzie: #{cell.get_name}\n" @plugin_arg_check_proc_tab = MrubyBridgePluginArgProc parse_plugin_arg @port_list = {} # set @port_list before return ct = @cell.get_celltype return if ct == nil # error case port_list = ct.get_port_list if @exclude_port.length > 0 then # この実装では、存在しない port を指定されてもチェックできない # print "MRBBridgeCellPlugin: exclude list\n" port_list.each{ |port| if ! @exclude_port.include?( port.get_name.to_s ) then # print "MRBBridgeCellPlugin: #{port.get_name} included\n" @port_list[ port ] = "" else # print "MRBBridgeCellPlugin: #{port.get_name} excluded\n" end } else port_list.each{ |port| @port_list[ port ] = "" } end if @exclude_port_func.length > 0 then @port_list.each{ |port, opt_str| delim = "" if @exclude_port_func.include?( port.get_name.to_s ) then @exclude_port_func[ port.get_name.to_s ].each{ |func_name| opt_str += delim + "exclude=" + func_name delim = "," } end @port_list[ port ] = opt_str } end end def gen_cdl_file file dbgPrint "#{self.class.name}: gen_cdl_file: #{@cell.get_name}\n" file.print < [mruby instance] TECS::T#{port.get_signature.get_name}.new( '#{@cell.get_name}#{port.get_name}Bridge' ) \n" if @@signature_list[ port.get_signature ] == nil then opt_str = "ignoreUnsigned=#{@b_ignoreUnsigned}, auto_exclude=#{@b_auto_exclude}, " + opt_str # p "opt_str=#{opt_str}" file.print <