diff options
| author | realtradam <[email protected]> | 2022-03-05 08:21:01 -0500 |
|---|---|---|
| committer | realtradam <[email protected]> | 2022-03-05 08:21:01 -0500 |
| commit | 13879296c42c07285bc08720ef57c959ef2fdecc (patch) | |
| tree | e5484c7a9c38d2965b669f5d1749d437d284186a | |
| parent | 5aa60a1cb86214236361eaab8526fa291d2ffa60 (diff) | |
| download | FelBind-13879296c42c07285bc08720ef57c959ef2fdecc.tar.gz FelBind-13879296c42c07285bc08720ef57c959ef2fdecc.zip | |
added phase 2 ints
| -rw-r--r-- | generate.rb | 93 |
1 files changed, 54 insertions, 39 deletions
diff --git a/generate.rb b/generate.rb index 5320db7..fbe02b0 100644 --- a/generate.rb +++ b/generate.rb @@ -1,7 +1,7 @@ require 'optparse' require 'json' require 'set' -require 'active_support/core_ext/string' +require 'active_record' require_relative './templates.rb' options = {} @@ -22,16 +22,16 @@ glue = JSON.parse(File.read(options[:glue])) bound = {} -phase1 = {} -phase2 = {} -phase3 = {} -phase4 = {} -phase5 = {} -complete_phase1 = {} -complete_phase2 = {} -complete_phase3 = {} -complete_phase4 = {} -complete_phase5 = {} +$phase1 = {} +$phase2 = {} +$phase3 = {} +$phase4 = {} +$phase5 = {} +$complete_phase1 = {} +$complete_phase2 = {} +$complete_phase3 = {} +$complete_phase4 = {} +$complete_phase5 = {} result = "" includes = %{ @@ -50,9 +50,9 @@ standard_types = ['bool', 'int', 'float', 'double', 'float', 'const char *', 'un # for displaying statistics glue.first.each do |func, params| if (func.rpartition(' ').first == 'void') && (params[0] == 'void') - phase1[func] = params + $phase1[func] = params elsif (standard_types.include? func.rpartition(' ').first) && (params[0] == 'void') - phase2[func] = params + $phase2[func] = params else no_struct_param = true params.each do |param| @@ -63,39 +63,54 @@ glue.first.each do |func, params| end if no_struct_param if standard_types.include? func.rpartition(' ').first - phase3[func] = params + $phase3[func] = params else - phase4[func] = params + $phase4[func] = params end else - phase5[func] = params + $phase5[func] = params end end end +def debug_mark_binding(func, params) + if $phase1.include? func + $complete_phase1[func] = params + elsif $phase2.include? func + $complete_phase2[func] = params + elsif $phase3.include? func + $complete_phase3[func] = params + elsif $phase4.include? func + $complete_phase4[func] = params + elsif $phase5.include? func + $complete_phase5[func] = params + end +end + # generates functions glue.first.each do |func, params| # for now dont worry about params or returns - if func.rpartition(' ').first != 'void' || params[0] != 'void' - next - else + rpart = func.rpartition(' ') + func_datatype = rpart.first + func_name = rpart.last + + if func_datatype == 'void' && params[0] == 'void' + body = "#{func.split(' ').last}();\nreturn mrb_nil_value();" + defines += Template.function(func.split(' ').last, body) + init_body += Template.init_module_function('test', func.split(' ').last.underscore, func.split(' ').last, "MRB_ARGS_NONE()") + bound[func] = params - if phase1.include? func - complete_phase1[func] = params - elsif phase2.include? func - complete_phase2[func] = params - elsif phase3.include? func - complete_phase3[func] = params - elsif phase4.include? func - complete_phase4[func] = params - elsif phase5.include? func - complete_phase5[func] = params + debug_mark_binding(func, params) + elsif (standard_types.include? func_datatype) && (params[0] == 'void') + if func_datatype == 'int' + body = "return mrb_fixnum_value(#{func.split(' ').last}());" + defines += Template.function(func.split(' ').last, body) + init_body += Template.init_module_function('test', func.split(' ').last.underscore, func.split(' ').last, "MRB_ARGS_NONE()") + + bound[func] = params + debug_mark_binding(func, params) end end - body = "#{func.split(' ').last}();\nreturn mrb_nil_value();" - defines += Template.function(func.split(' ').last, body) - - init_body += Template.init_module_function('test', func.split(' ').last.underscore, func.split(' ').last, "MRB_ARGS_NONE()") end init_body.prepend(Template.define_module('Test')) @@ -106,13 +121,13 @@ result = %{ #{Template.base('test', init_body, nil)} } -result += "//Bound Functions: #{bound.length} / #{phase1.length + phase2.length + phase3.length + phase4.length + phase5.length}\n" +result += "//Bound Functions: #{$complete_phase1.length + $complete_phase2.length + $complete_phase3.length + $complete_phase4.length + $complete_phase5.length} / #{$phase1.length + $phase2.length + $phase3.length + $phase4.length + $phase5.length}\n//---\n" -result += "//Phase 1 Functions: #{complete_phase1.length} / #{phase1.length}\n" -result += "//Phase 2 Functions: #{complete_phase2.length} / #{phase2.length}\n" -result += "//Phase 3 Functions: #{complete_phase3.length} / #{phase3.length}\n" -result += "//Phase 4 Functions: #{complete_phase4.length} / #{phase4.length}\n" -result += "//Phase 5 Functions: #{complete_phase5.length} / #{phase5.length}\n" +result += "//Phase 1 Functions: #{$complete_phase1.length} / #{$phase1.length}\n" +result += "//Phase 2 Functions: #{$complete_phase2.length} / #{$phase2.length}\n" +result += "//Phase 3 Functions: #{$complete_phase3.length} / #{$phase3.length}\n" +result += "//Phase 4 Functions: #{$complete_phase4.length} / #{$phase4.length}\n" +result += "//Phase 5 Functions: #{$complete_phase5.length} / #{$phase5.length}\n" puts result |
