# -*- ruby -*- require 'mkmf' $:.unshift File.dirname(__FILE__) require 'type' require 'dlconfig' def output_arg(x,i) "args[#{i}].#{DLTYPE[x][:stmem]}" end def output_args(types) t = [] types[1..-1].each_with_index{|x,i| t.push(output_arg(x,i))} t.join(",") end def output_callfunc(types) t = types[0] stmem = DLTYPE[t][:stmem] ctypes = types2ctypes(types) if( t == VOID ) callstm = "(*f)(#{output_args(types)})" else callstm = "ret.#{stmem} = (*f)(#{output_args(types)})" end [ "{", "#{ctypes[0]} (*f)(#{ctypes[1..-1].join(',')}) = func;", "#{callstm};", "}"].join(" ") end def output_case(types) num = types2num(types) callfunc_stm = output_callfunc(types) <