diff options
| -rw-r--r-- | generate.rb | 60 | ||||
| -rw-r--r-- | templates.rb | 6 |
2 files changed, 54 insertions, 12 deletions
diff --git a/generate.rb b/generate.rb index 0d5ee01..4fa41be 100644 --- a/generate.rb +++ b/generate.rb @@ -134,19 +134,40 @@ class Generate params.each do |param| $all_params.push param - rpart = param.rpartition(' ') - param_datatype = rpart.first - param_name = rpart.last + param_datatype, _space, param_name = param.rpartition(' ') - next unless Template.non_struct_types =~ param_datatype - $bound_params.push param + #next unless Template.non_struct_types =~ param_datatype # getter # take no params # unwrap struct # return(using correct type conversion) body = Template.unwrap_struct("#{struct} *struct_#{struct.downcase}", 'self', "mrb_#{struct}_struct", struct) - body += "return #{Template.to_mrb(param_datatype, "struct_#{struct.downcase}->#{param_name}")};\n" + + # if non struct + if Template.non_struct_types_all =~ param_datatype + $bound_params.push param + if Template.non_struct_types =~ param_datatype + body += "return #{Template.to_mrb(param_datatype, "struct_#{struct.downcase}->#{param_name}")};\n" + else # pointer + body += "return #{Template.to_mrb(param_datatype, "struct_#{struct.downcase}->#{param_name}")};\n" + end + # elseif struct TODO + elsif Template.struct_types_all =~ param_datatype + if Template.struct_types =~ param_datatype + next # TODO + Template.wrap_struct(var_name, target, mrb_type, type) + else # pointer + next # TODO + end + # init var + # unwrap struct + # initialize struct as ruby object + # set to var + # end + else + next + end $defines += Template.function("#{struct}_get_#{param_name}", body) $init_body += Template.init_function("#{struct.downcase}_class", Template::MRuby.rubify_func_name(param_name), "#{struct}_get_#{param_name}", "MRB_ARGS_NONE()") @@ -157,11 +178,30 @@ class Generate # set value in struct # return same value body = '' + # TODO check this and why it is kwargs? body += Template::C.initialize_variables_for_kwargs([param], glue.last, "Struct: #{struct}") body += Template.get_args({ "#{param_name}": "#{param_datatype}" }) body += Template.unwrap_struct("#{struct} *struct_#{struct.downcase}", 'self', "mrb_#{struct}_struct", struct) - body += "struct_#{struct.downcase}->#{param_name} = #{Template::C.convention_parameter(param_name)};\n" - body += "return #{Template.to_mrb(param_datatype, Template::C.convention_parameter(param_name))};\n" + + if Template.non_struct_types_all =~ param_datatype + # if its a pointer + if Template.non_struct_types_pointer =~ param_datatype + body += "*struct_#{struct.downcase}->#{param_name} = #{Template::C.convention_parameter(param_name)};\n" + body += "return #{Template.to_mrb(param_datatype.delete_suffix(' *'), Template::C.convention_parameter(param_name))};\n" + else + body += "struct_#{struct.downcase}->#{param_name} = #{Template::C.convention_parameter(param_name)};\n" + body += "return #{Template.to_mrb(param_datatype, Template::C.convention_parameter(param_name))};\n" + end + elsif Template.struct_types_all =~ param_datatype + next + if Template.struct_types_pointer =~ param_datatype + #TODO + else + #TODO + end + end + + $defines += Template.function("#{struct}_set_#{param_name}", body) $init_body += Template.init_function("#{struct.downcase}_class", "#{Template::MRuby.rubify_func_name(param_name)}=", "#{struct}_set_#{param_name}", "MRB_ARGS_REQ(1)") @@ -192,7 +232,7 @@ class Generate init_array_body += "mrb_intern_lit(mrb, \"#{temp_rpart.last}\"),\n" #unwrapped_kwargs += Tplt.unwrap_kwarg(index, "#{temp_rpart.last} = #{Tplt.to_c(temp_rpart.first, "kw_values[#{index}]")};", nil, "#{temp_rpart.last} Argument Missing") if Template.non_struct_types =~ temp_rpart.first - unwrapped_kwargs += Template::C.unwrap_kwarg(index, "wrapped_value->#{temp_rpart.last} = #{Template.to_c(temp_rpart.first, "kw_values[#{index}]")};\n") + unwrapped_kwargs += Template::C.unwrap_kwarg(index, "wrapped_value->#{temp_rpart.last} = #{Template.to_c(temp_rpart.first, "kw_values[#{index}]")};\n", nil, "Missing kwarg: #{temp_rpart.last.underscore}") else # this is for structs or "undetermined" types # doesnt work yet @@ -391,8 +431,10 @@ raise 'end of testing' puts $result puts '/*' + puts "UNBOUND:" pp $all_params - $bound_params puts + puts "BOUND:" pp $bound_params puts '*/' diff --git a/templates.rb b/templates.rb index 5232a6e..7d88876 100644 --- a/templates.rb +++ b/templates.rb @@ -149,7 +149,7 @@ module Template # Template init_array_body = '' params.each do |param| rpart = param.rpartition(' ') - init_array_body += "mrb_intern_lit(mrb, \"#{rpart.last}\"),\n" + init_array_body += "mrb_intern_lit(mrb, \"#{rpart.last.underscore}\"),\n" end init_array_body.delete_suffix!(",\n") %{uint32_t kw_num = #{params.length}; @@ -172,10 +172,10 @@ mrb_get_args(mrb, "|:", &kwargs); unwrap = Template.unwrap_struct(Template::C.convention_parameter(var_name), "kw_values[#{index - skipped}]", "mrb_#{datatype.delete_suffix(' *')}_struct", datatype.delete_suffix(' *')) - result += Template::C.unwrap_kwarg(index - skipped,unwrap) + result += Template::C.unwrap_kwarg(index - skipped,unwrap, nil, "Missing kwarg: #{var_name.underscore}") elsif Template.non_struct_types_all =~ datatype unwrap = "#{Template::C.convention_parameter(var_name)} = #{Template.to_c(datatype, "kw_values[#{index - skipped}]")};" - result += Template::C.unwrap_kwarg(index - skipped, unwrap) + result += Template::C.unwrap_kwarg(index - skipped, unwrap, nil, "#{var_name.underscore}") else skipped += 1 next |
