# HG changeset patch # User Jacob Carlborg # Date 1247167059 -7200 # Node ID 9e67a1122e8506f0fe63b5e6d22e9c559f2c4d8c # Parent c0cfd40362ee93d67a93db34896b6a10058c2883 Fixed a bug that caused some types to be empty diff -r c0cfd40362ee -r 9e67a1122e85 scripts/dgen.rb --- a/scripts/dgen.rb Wed Jul 08 14:29:59 2009 +0200 +++ b/scripts/dgen.rb Thu Jul 09 21:17:39 2009 +0200 @@ -1132,7 +1132,7 @@ str << type str << " " str << get_identifier(typedef.name).nl - end + end unless type.nil? end str << "\n" @@ -1324,7 +1324,7 @@ when "^" get_struct_type(type[1 .. -1], type64, declared_type) hash = get_struct_type(type[1 .. -1], type64, declared_type) - hash[:name].dup << "*" + hash[:name].dup << "*" unless hash.nil? return hash end end @@ -1460,7 +1460,7 @@ when "return"; return true when "scope"; return true - when "shared"; return true;s + when "shared"; return true when "short"; return true when "static"; return true when "struct"; return true diff -r c0cfd40362ee -r 9e67a1122e85 scripts/dstepgen.rb --- a/scripts/dstepgen.rb Wed Jul 08 14:29:59 2009 +0200 +++ b/scripts/dstepgen.rb Thu Jul 09 21:17:39 2009 +0200 @@ -319,7 +319,7 @@ # end def classes (header) - methods(header, /^@(interface)\s+(\w+)\s*:?\s*(\w*)\s*(\<([\w,\s]+)>)?$/, @classes, false) + methods(header, /^@(interface)\s+(\w+)\s*:?\s*(\w*)\s*(\<([\w,\s]+)>)?(\s*\{|$)/, @classes, false) end def protocols (header) @@ -341,7 +341,7 @@ i = 0 parent = nil protocols = nil - cat = nil + cat = nil @cpp_result.each_line do |line| size = line.size @@ -488,7 +488,7 @@ end def structs (header) - re = /typedef\s+struct\s*\w*\s*((\w+)|\{([^{}]*(\{[^}]+\})?)*\}\s*([^\s]+))\s*(__attribute__\(.+\))?\s*,?(.+)?;/ + re = /typedef\s+struct\s*\w*\s*((\w+)|\{([^{}]*(\{[^}]+\})?)*\}\s*([^\s]+))\s*(__attribute__\(.+\))?\s*(;|,(.+)?;)/ i = 0 body = nil @@ -1175,17 +1175,38 @@ @frameworks << framework end - def collect_header_types (header, enable_64bit) + def collect_cftypes (header, enable_64bit) types = [] - header.cftypes.each do |cftype| + header.cftypes.each do |cftype| types << cftype[:type] end + resolved_types = resolve_types_helper(types, enable_64bit) if types.length > 0 + + header.cftypes.each_with_index do |cftype, i| + cftype[enable_64bit ? :type64 : :type] = resolved_types[i] + end + end + + def collect_constants (header, enable_64bit) + types = [] + header.constants.each do |constant| types << constant.stripped_return_type end + resolved_types = resolve_types_helper(types, enable_64bit) if types.length > 0 + + header.constants.each_with_index do |constant, i| + constant.resolved_type = resolved_types[i] unless enable_64bit + constant.resolved_type64 = resolved_types[i] if enable_64bit + end + end + + def collect_structs (header, enable_64bit) + types = [] + header.structs.each do |struct| types << struct[:name] @@ -1194,10 +1215,39 @@ end end + resolved_types = resolve_types_helper(types, enable_64bit) if types.length > 0 + + i = 0 + + header.structs.each do |struct| + struct[enable_64bit ? :type64 : :type] = resolved_types[i] + i += 1 + + struct[:members].each do |member| + member[enable_64bit ? :type64 : :type] = resolved_types[i] + i += 1 + end + end + end + + def collect_typedefs (header, enable_64bit) + types = [] + header.typedefs.each do |typedef| types << typedef.stripped_return_type end + resolved_types = resolve_types_helper(types, enable_64bit) if types.length > 0 + + header.typedefs.each_with_index do |typedef, i| + typedef.resolved_type = resolved_types[i] unless enable_64bit + typedef.resolved_type64 = resolved_types[i] if enable_64bit + end + end + + def collect_functions (header, enable_64bit) + types = [] + header.functions.each do |function| types << function.stripped_return_type @@ -1206,6 +1256,25 @@ end end + resolved_types = resolve_types_helper(types, enable_64bit) if types.length > 0 + i = 0 + + header.functions.each do |function| + function.resolved_type = resolved_types[i] unless enable_64bit + function.resolved_type64 = resolved_types[i] if enable_64bit + i += 1 + + function.args.each do |arg| + arg.resolved_type = resolved_types[i] unless enable_64bit + arg.resolved_type64 = resolved_types[i] if enable_64bit + i += 1 + end + end + end + + def collect_functions_pointers (header, enable_64bit) + types = [] + header.function_pointers.each do |fp, value| types << value.return_type @@ -1214,7 +1283,29 @@ end unless value.args.nil? end - types + resolved_types = resolve_types_helper(types, enable_64bit) if types.length > 0 + i = 0 + + header.function_pointers.each do |fp, value| + value.resolved_type = resolved_types[i] unless enable_64bit + value.resolved_type64 = resolved_types[i] if enable_64bit + i += 1 + + value.args.each do |arg| + arg.resolved_type = resolved_types[i] unless enable_64bit + arg.resolved_type64 = resolved_types[i] if enable_64bit + i += 1 + end unless value.args.nil? + end + end + + def collect_header_types (header, enable_64bit) + collect_cftypes(header, enable_64bit) + collect_constants(header, enable_64bit) + collect_structs(header, enable_64bit) + collect_typedefs(header, enable_64bit) + collect_functions(header, enable_64bit) + collect_functions_pointers(header, enable_64bit) end def collect_classes_types (enable_64bit) @@ -1230,7 +1321,22 @@ end end - types + resolved_types = resolve_types_helper(types, enable_64bit) if types.length > 0 + i = 0 + + @classes.each do |clazz, value| + value.methods.each do |method| + method.resolved_type = resolved_types[i] unless enable_64bit + method.resolved_type64 = resolved_types[i] if enable_64bit + i += 1 + + method.args.each do |arg| + arg.resolved_type = resolved_types[i] unless enable_64bit + arg.resolved_type64 = resolved_types[i] if enable_64bit + i += 1 + end + end + end end def collect_protocols_types (enable_64bit) @@ -1246,25 +1352,24 @@ end end - types + resolved_types = resolve_types_helper(types, enable_64bit) if types.length > 0 + i = 0 + + @protocols.each do |protocol, value| + value.methods.each do |method| + method.resolved_type = resolved_types[i] unless enable_64bit + method.resolved_type64 = resolved_types[i] if enable_64bit + i += 1 + + method.args.each do |arg| + arg.resolved_type = resolved_types[i] unless enable_64bit + arg.resolved_type64 = resolved_types[i] if enable_64bit + i += 1 + end + end + end end - # def collect_informal_protocols_types (enable_64bit) - # types = [] - # - # @informal_protocols.each do |name, methods| - # methods.each do |method| - # types << method.stripped_return_type - # - # method.args.each do |arg| - # types << arg.stripped_return_type - # end - # end - # end - # - # types - # end - def collect_categories_types (enable_64bit) types = [] @@ -1278,128 +1383,8 @@ end end - types - end - - def resolve_header_types (header, enable_64bit, resolved_types, x) - i = x - - header.cftypes.each do |cftype| - cftype[enable_64bit ? :type64 : :type] = resolved_types[i] - i += 1 - end - - header.constants.each do |constant| - constant.resolved_type = resolved_types[i] unless enable_64bit - constant.resolved_type64 = resolved_types[i] if enable_64bit - i += 1 - end - - header.structs.each do |struct| - struct[enable_64bit ? :type64 : :type] = resolved_types[i] - i += 1 - - struct[:members].each do |member| - member[enable_64bit ? :type64 : :type] = resolved_types[i] - i += 1 - end - end - - header.typedefs.each do |typedef| - typedef.resolved_type = resolved_types[i] unless enable_64bit - typedef.resolved_type64 = resolved_types[i] if enable_64bit - i += 1 - end - - header.functions.each do |function| - function.resolved_type = resolved_types[i] unless enable_64bit - function.resolved_type64 = resolved_types[i] if enable_64bit - i += 1 - - function.args.each do |arg| - arg.resolved_type = resolved_types[i] unless enable_64bit - arg.resolved_type64 = resolved_types[i] if enable_64bit - i += 1 - end - end - - header.function_pointers.each do |fp, value| - value.resolved_type = resolved_types[i] unless enable_64bit - value.resolved_type64 = resolved_types[i] if enable_64bit - i += 1 - - value.args.each do |arg| - arg.resolved_type = resolved_types[i] unless enable_64bit - arg.resolved_type64 = resolved_types[i] if enable_64bit - i += 1 - end unless value.args.nil? - end - - i - end - - def resolve_classes_types (enable_64bit, resolved_types, x) - i = x - - @classes.each do |clazz, value| - value.methods.each do |method| - method.resolved_type = resolved_types[i] unless enable_64bit - method.resolved_type64 = resolved_types[i] if enable_64bit - i += 1 - - method.args.each do |arg| - arg.resolved_type = resolved_types[i] unless enable_64bit - arg.resolved_type64 = resolved_types[i] if enable_64bit - i += 1 - end - end - end - - i - end - - def resolve_protocols_types (enable_64bit, resolved_types, x) - i = x - - @protocols.each do |protocol, value| - value.methods.each do |method| - method.resolved_type = resolved_types[i] unless enable_64bit - method.resolved_type64 = resolved_types[i] if enable_64bit - i += 1 - - method.args.each do |arg| - arg.resolved_type = resolved_types[i] unless enable_64bit - arg.resolved_type64 = resolved_types[i] if enable_64bit - i += 1 - end - end - end - - i - end - - # def resolve_informal_protocols_types (enable_64bit, resolved_types, x) - # i = x - # - # @informal_protocols.each do |name, methods| - # methods.each do |method| - # method.resolved_type = resolved_types[i] unless enable_64bit - # method.resolved_type64 = resolved_types[i] if enable_64bit - # i += 1 - # - # method.args.each do |arg| - # arg.resolved_type = resolved_types[i] unless enable_64bit - # arg.resolved_type64 = resolved_types[i] if enable_64bit - # i += 1 - # end - # end - # end - # - # i - # end - - def resolve_categories_types (enable_64bit, resolved_types, x) - i = x + resolved_types = resolve_types_helper(types, enable_64bit) if types.length > 0 + i = 0 @categories.each do |category, value| value.methods.each do |method| @@ -1414,8 +1399,6 @@ end end end - - i end def get_framework_name (framework) @@ -1425,10 +1408,26 @@ framework[x + 1 ... i] end - def resolve_types (enable_64bit = false) + def resolve_types (enable_64bit = false) + + @frameworks.each do |framework| + framework.headers.each do |header| + collect_header_types(header, enable_64bit) + end + end + + @headers.each do |header| + collect_header_types(header, enable_64bit) + end + + collect_classes_types(enable_64bit) + collect_protocols_types(enable_64bit) + collect_categories_types(enable_64bit) + end + + def resolve_types_helper (types, enable_64bit) code = "#include \n" code << @import_directives - types = [] @frameworks.each do |framework| framework.headers.each do |header| @@ -1466,17 +1465,7 @@ code << line end if !@inject_path.nil? && File.exist?(@inject_path) - code << "\n\n" - - @headers.each do |header| - types << collect_header_types(header, enable_64bit) - end - - types << collect_classes_types(enable_64bit) - types << collect_protocols_types(enable_64bit) - #types << collect_informal_protocols_types(enable_64bit) - types << collect_categories_types(enable_64bit) - + code << "\n\n" code << "int main ()\n{\n" types.flatten! @@ -1492,22 +1481,24 @@ resolved_types << line end - i = 0 + resolved_types - @frameworks.each do |framework| - framework.headers.each do |header| - i = resolve_header_types(header, enable_64bit, resolved_types, i) - end - end - - @headers.each do |header| - i = resolve_header_types(header, enable_64bit, resolved_types, i) - end - - i = resolve_classes_types(enable_64bit, resolved_types, i) - i = resolve_protocols_types(enable_64bit, resolved_types, i) - #i = resolve_informal_protocols_types(enable_64bit, resolved_types, i) - i = resolve_categories_types(enable_64bit, resolved_types, i) + # i = 0 + # + # @frameworks.each do |framework| + # framework.headers.each do |header| + # i = resolve_header_types(header, enable_64bit, resolved_types, i) + # end + # end + # + # @headers.each do |header| + # i = resolve_header_types(header, enable_64bit, resolved_types, i) + # end + # + # i = resolve_classes_types(enable_64bit, resolved_types, i) + # i = resolve_protocols_types(enable_64bit, resolved_types, i) + # #i = resolve_informal_protocols_types(enable_64bit, resolved_types, i) + # i = resolve_categories_types(enable_64bit, resolved_types, i) end def generate_header (xml, header)