diff options
| author | realtradam <[email protected]> | 2022-04-09 03:53:49 -0400 |
|---|---|---|
| committer | realtradam <[email protected]> | 2022-04-09 03:53:49 -0400 |
| commit | 8f12cd1f31d991aeb36ba67a4d00e214b03cdac4 (patch) | |
| tree | ca960f2c558b8fa70edb8fc2a1c85a6ee7a9e0be /generate.rb | |
| parent | d54cd794f6ed086f05b2631f73173b73f312b19f (diff) | |
| download | FelBind-8f12cd1f31d991aeb36ba67a4d00e214b03cdac4.tar.gz FelBind-8f12cd1f31d991aeb36ba67a4d00e214b03cdac4.zip | |
Diffstat (limited to 'generate.rb')
| -rw-r--r-- | generate.rb | 60 |
1 files changed, 51 insertions, 9 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 '*/' |
