Class: MethodDefinition
- Inherits:
-
Object
- Object
- MethodDefinition
- Defined in:
- ext/kmat/auto_collect.rb
Instance Attribute Summary collapse
-
#meth ⇒ Object
readonly
Returns the value of attribute meth.
Instance Method Summary collapse
-
#initialize(name_arg, comment) ⇒ MethodDefinition
constructor
A new instance of MethodDefinition.
- #to_s(join = "\n\t") ⇒ Object
- #type_trans(t) ⇒ Object
Constructor Details
#initialize(name_arg, comment) ⇒ MethodDefinition
Returns a new instance of MethodDefinition.
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'ext/kmat/auto_collect.rb', line 3 def initialize(name_arg, comment) comment = %r|//\s+(.*)|.match(comment)[1] @als = /\Aalias (.+)/.match(comment)&.[](1)&.split(/[,\s]\s*/) @meth = /\Akmm_/.match(name_arg) return unless @meth m = %r|\A(kmm_([^\(_]+)_([^\(]+))\((.+)\)\Z|.match(name_arg) raise "unknown name_arg pattern `#{name_arg}' found" unless m @funcname, @type, @name, arg = m[1], type_trans(m[2]), m[3], m[4] if m = %r|(.+)_p\Z|.match(@name) @name = m[1]+'?' elsif m = %r|(.+)_dest\Z|.match(@name) @name = m[1] @dup_esc = true elsif m = %r|(.+)_destl\Z|.match(@name) @name = m[1]+'!' end if m = %r|(.+)_m2\Z|.match(@name) @name = m[1] @argc = -2 elsif m = %r|\Aint argc|.match(arg) @argc = -1 else @argc = arg.split(/,/).size-1 end end |
Instance Attribute Details
#meth ⇒ Object (readonly)
Returns the value of attribute meth.
28 29 30 |
# File 'ext/kmat/auto_collect.rb', line 28 def meth @meth end |
Instance Method Details
#to_s(join = "\n\t") ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'ext/kmat/auto_collect.rb', line 49 def to_s(join="\n\t") ret = [] if @type.kind_of?(Array) ret << %Q|rb_define_module_function(#{@type[0]}, "#{@name}", #{@funcname}, #{@argc});| elsif %r|\A\_|.match(@name) ret << %Q|rb_define_private_method(#{@type}, "#{@name}", #{@funcname}, #{@argc});| elsif @dup_esc ret << %Q|rb_define_method(#{@type}, "#{@name}!", #{@funcname}, #{@argc});| ret << %Q|rb_funcall(km_cMat, id__define_dup_escaped_method, 1, rb_str_new_cstr("#{@name}"));| else ret << %Q|rb_define_method(#{@type}, "#{@name}", #{@funcname}, #{@argc});| end @als&.each do |a| if @type.kind_of?(Array) ret << %Q|rb_define_alias(#{@type[0]}, "#{a}", "#{@name}");| ret << %Q|rb_define_alias(#{@type[1]}, "#{a}", "#{@name}");| else ret << %Q|rb_define_alias(#{@type}, "#{a}", "#{@name}");| ret << %Q|rb_define_alias(#{@type}, "#{a}!", "#{@name}!");| if @dup_esc end end ret.join(join) end |
#type_trans(t) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'ext/kmat/auto_collect.rb', line 30 def type_trans(t) case t when 'obj' 'rb_cObject' when 'mat' 'km_cMat' when 'Mat' 'km_sMat' when 'ary' 'rb_cArray' when 'MATH' ['rb_mMath', 'rb_sMath'] when 'float' 'rb_cFloat' else raise "unknown type `#{t}' found" end end |