Skip to content

Commit 2eedaef

Browse files
committed
Move to ArgumentDefinition
1 parent 5bcf27b commit 2eedaef

File tree

2 files changed

+72
-49
lines changed

2 files changed

+72
-49
lines changed

_tools/ruby_h_to_go/lib/ruby_h_to_go/argument_definition.rb

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,5 +55,72 @@ def cast_to_cgo
5555

5656
"#{cast_to_cgo_type(type)}(#{go_name})"
5757
end
58+
59+
# @param char_var_count [Integer]
60+
# @param chars_var_count [Integer]
61+
#
62+
# @return [Array<String, Array<String>, Array<String>>]
63+
# - casted_go_arg [String]
64+
# - before_call_function_lines [Array<String>]
65+
# - after_call_function_lines [Array<String>]
66+
def generate_go_arguments(char_var_count:, chars_var_count:)
67+
case pointer
68+
when :ref
69+
case type
70+
when "char"
71+
# self is string
72+
if char_var_count >= 2
73+
chars_var_name = "char#{snake_to_camel(go_name)}"
74+
clean_var_name = "cleanChar#{go_name}"
75+
else
76+
chars_var_name = "char"
77+
clean_var_name = "clean"
78+
end
79+
80+
before_call_function_lines = [
81+
"#{chars_var_name}, #{clean_var_name} := string2Char(#{go_name})",
82+
"defer #{clean_var_name}()",
83+
"",
84+
]
85+
86+
return chars_var_name, before_call_function_lines, []
87+
88+
when "void"
89+
# c_arg is pointer
90+
return go_name, [], []
91+
92+
else
93+
c_var_name = "c#{snake_to_camel(go_name)}"
94+
95+
before_call_function_line = "var #{c_var_name} #{cast_to_cgo_type(type)}"
96+
after_call_function_line = "*#{go_name} = #{ruby_c_type_to_go_type(type, pos: :arg)}(#{c_var_name})"
97+
98+
return "&#{c_var_name}", [before_call_function_line], [after_call_function_line]
99+
end
100+
101+
when :function
102+
return "toCFunctionPointer(#{go_name})", [], []
103+
104+
when :str_array
105+
if chars_var_count >= 2
106+
chars_var_name = "chars#{snake_to_camel(go_name)}"
107+
clean_var_name = "cleanChars#{go_name}"
108+
else
109+
chars_var_name = "chars"
110+
clean_var_name = "cleanChars"
111+
end
112+
113+
before_call_function_lines = [
114+
"#{chars_var_name}, #{clean_var_name} := strings2Chars(#{go_name})",
115+
"defer #{clean_var_name}()",
116+
"",
117+
]
118+
119+
return chars_var_name, before_call_function_lines, []
120+
121+
else
122+
return cast_to_cgo, [], []
123+
end
124+
end
58125
end
59126
end

_tools/ruby_h_to_go/lib/ruby_h_to_go/function_definition.rb

Lines changed: 5 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -62,55 +62,11 @@ def generate_go_content
6262
after_call_function_lines = []
6363

6464
args.each do |c_arg|
65-
case c_arg.pointer
66-
when :ref
67-
case c_arg.type
68-
when "char"
69-
# c_arg is string
70-
if char_var_count >= 2
71-
chars_var_name = "char#{snake_to_camel(c_arg.go_name)}"
72-
clean_var_name = "cleanChar#{c_arg.go_name}"
73-
else
74-
chars_var_name = "char"
75-
clean_var_name = "clean"
76-
end
77-
78-
before_call_function_lines << "#{chars_var_name}, #{clean_var_name} := string2Char(#{c_arg.go_name})"
79-
before_call_function_lines << "defer #{clean_var_name}()"
80-
before_call_function_lines << ""
81-
82-
casted_go_args << chars_var_name.to_s
83-
when "void"
84-
# c_arg is pointer
85-
casted_go_args << c_arg.go_name
86-
else
87-
c_var_name = "c#{snake_to_camel(c_arg.go_name)}"
88-
89-
before_call_function_lines << "var #{c_var_name} #{cast_to_cgo_type(c_arg.type)}"
90-
after_call_function_lines <<
91-
"*#{c_arg.go_name} = #{ruby_c_type_to_go_type(c_arg.type, pos: :arg)}(#{c_var_name})"
92-
93-
casted_go_args << "&#{c_var_name}"
94-
end
95-
when :function
96-
casted_go_args << "toCFunctionPointer(#{c_arg.go_name})"
97-
when :str_array
98-
if chars_var_count >= 2
99-
chars_var_name = "chars#{snake_to_camel(c_arg.go_name)}"
100-
clean_var_name = "cleanChars#{c_arg.go_name}"
101-
else
102-
chars_var_name = "chars"
103-
clean_var_name = "cleanChars"
104-
end
105-
106-
before_call_function_lines << "#{chars_var_name}, #{clean_var_name} := strings2Chars(#{c_arg.go_name})"
107-
before_call_function_lines << "defer #{clean_var_name}()"
108-
before_call_function_lines << ""
109-
110-
casted_go_args << chars_var_name
111-
else
112-
casted_go_args << c_arg.cast_to_cgo
113-
end
65+
casted_go_arg, before_lines, after_lines = c_arg.generate_go_arguments(char_var_count:, chars_var_count:)
66+
67+
casted_go_args << casted_go_arg
68+
before_call_function_lines.push(*before_lines)
69+
after_call_function_lines.push(*after_lines)
11470
end
11571

11672
call_c_method << casted_go_args.join(", ")

0 commit comments

Comments
 (0)