summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--generate.rb93
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