diff options
| author | realtradam <[email protected]> | 2022-03-10 02:36:43 -0500 |
|---|---|---|
| committer | realtradam <[email protected]> | 2022-03-10 02:36:43 -0500 |
| commit | 39db5fbee576ad02da3d1c07dd63c0183829be0d (patch) | |
| tree | 37b478715dcc3da7f0996f218d046f1b2092a149 /generate.rb | |
| parent | c2450b53b7c197332d25a76eceafd7f5f80e8f24 (diff) | |
| download | FelBind-39db5fbee576ad02da3d1c07dd63c0183829be0d.tar.gz FelBind-39db5fbee576ad02da3d1c07dd63c0183829be0d.zip | |
refactor built in type detection
Diffstat (limited to 'generate.rb')
| -rw-r--r-- | generate.rb | 98 |
1 files changed, 54 insertions, 44 deletions
diff --git a/generate.rb b/generate.rb index f94e0ec..38edd9c 100644 --- a/generate.rb +++ b/generate.rb @@ -19,6 +19,9 @@ end.parse! options[:glue] ||= './glue.json' glue = JSON.parse(File.read(options[:glue])) +# configuration +Tplt.treated_as_int |= ['unsigned char'] + $phase1 = {} $phase2 = {} $phase3 = {} @@ -47,7 +50,7 @@ init_body = "" # convert types -# need to make this built in +# TODO need to make this built in # functionality(with scanner + generator) glue.first.keys.each do |k| rpart = k.rpartition(' ') @@ -103,9 +106,16 @@ end # generates structs +# TODO +# Auto generate struct accessors +# glue.last.each do |struct, params| defines += Tplt.init_struct_wrapper(struct) init_body += Tplt.init_class(struct, 'test') + + params.each do |param| + #puts param + end end # generates functions @@ -118,7 +128,12 @@ glue.first.each do |func, params| func_datatype = rpart.first func_name = rpart.last - next if ['long', 'void *'].include? func_datatype + # TODO: just treat longs and shorts as ints + # + # since void * can be anything just skip functions + # (by default) that use it + next if ['void *'].include? func_datatype + # if phase 1 or 2 if (func_datatype == 'void' && params[0] == 'void') || ((Tplt.non_struct_types.include? func_datatype) && (params[0] == 'void')) @@ -139,54 +154,49 @@ glue.first.each do |func, params| end end if no_struct_param - if true# Tplt.non_struct_types.include? func.rpartition(' ').first - #$phase3[func] = params - # --- - body = '' - #body = Tplt.return_format(func, params) - init_var_body = '' - init_array_body = '' - unwrapped_kwargs = '' - params.each_with_index do |param, index| - temp = param - temp_rpart = temp.rpartition(' ') - if temp_rpart.first == 'const char *' - temp = 'char *' + temp_rpart.last - end - init_var_body += temp + ";\n" - 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") - end - - # if return isnt regular types, add struct to init - unless Tplt.non_struct_types.include? func_datatype - init_var_body += "#{func_datatype} *return_value = {0};\n" + #if true# Tplt.non_struct_types.include? func.rpartition(' ').first + #$phase3[func] = params + # --- + body = '' + #body = Tplt.return_format(func, params) + init_var_body = '' + init_array_body = '' + unwrapped_kwargs = '' + params.each_with_index do |param, index| + temp = param + temp_rpart = temp.rpartition(' ') + if temp_rpart.first == 'const char *' + temp = 'char *' + temp_rpart.last end + init_var_body += temp + ";\n" + 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") + end - body = Tplt.get_kwargs(params.length, init_var_body, init_array_body) - body += unwrapped_kwargs + # if return isnt regular types, add struct to init + unless Tplt.non_struct_types.include? func_datatype + init_var_body += "#{func_datatype} *return_value = {0};\n" + end - # if return isnt regular types, use struct return format - if Tplt.non_struct_types.include? func_datatype - body += Tplt.return_format(func, params) - else - body += Tplt.get_module('Test') - body += Tplt.get_class(func_datatype, 'test') - body += Tplt.return_format_struct(func) - end + body = Tplt.get_kwargs(params.length, init_var_body, init_array_body) + body += unwrapped_kwargs - defines += "\n//#{func}" - defines += Tplt.function(func_name, body) - init_body += Tplt.init_module_function('test', Tplt.rubify_func_name(func_name), func_name, "MRB_ARGS_OPT(1)") # opt stuff isnt correct, need to look at this again - # --- - #puts func - debug_mark_binding(func, params) + # if return isnt regular types, use struct return format + if Tplt.non_struct_types.include? func_datatype + body += Tplt.return_format(func, params) else - #puts func - #puts params - #puts '---' - #$phase4[func] = params + body += Tplt.get_module('Test') + body += Tplt.get_class(func_datatype, 'test') + body += Tplt.return_format_struct(func) end + + defines += "\n//#{func}" + defines += Tplt.function(func_name, body) + init_body += Tplt.init_module_function('test', Tplt.rubify_func_name(func_name), func_name, "MRB_ARGS_OPT(1)") # opt stuff isnt correct, need to look at this again + # --- + #puts func + debug_mark_binding(func, params) + #end else #$phase5[func] = params end |
