Mercurial > projects > dstep
annotate sciprts/dstepgen.rb @ 0:c7db221de6e8
First upload of dgen.rb and dstepgen.rb
author | Jacob Carlborg <doob@me.com> |
---|---|
date | Sat, 31 Jan 2009 17:22:44 +0100 |
parents | |
children |
rev | line source |
---|---|
0
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1 #!/usr/bin/env ruby |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
2 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
3 # Copyright (c) 2008-2009, Jacob Carlborg. All rights reserved. |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
4 # Copyright (c) 2006-2007, Apple Inc. All rights reserved. |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
5 # Copyright (c) 2005-2006 FUJIMOTO Hisakuni |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
6 # |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
7 # Redistribution and use in source and binary forms, with or without |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
8 # modification, are permitted provided that the following conditions |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
9 # are met: |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
10 # 1. Redistributions of source code must retain the above copyright |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
11 # notice, this list of conditions and the following disclaimer. |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
12 # 2. Redistributions in binary form must reproduce the above copyright |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
13 # notice, this list of conditions and the following disclaimer in the |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
14 # documentation and/or other materials provided with the distribution. |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
15 # 3. Neither the name of Apple Inc. ("Apple") nor the names of |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
16 # its contributors may be used to endorse or promote products derived |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
17 # from this software without specific prior written permission. |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
18 # |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
19 # THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
20 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
21 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
22 # ARE DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
23 # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
24 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
25 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
26 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
27 # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
28 # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
29 # POSSIBILITY OF SUCH DAMAGE. |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
30 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
31 require "rubygems" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
32 gem "builder", "~> 2.0" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
33 require "builder" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
34 require "tmpdir" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
35 require "optparse" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
36 include Builder |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
37 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
38 $KCODE = "UTF8" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
39 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
40 # Extensions that adds support for member access syntax |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
41 class Hash |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
42 def type |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
43 result = self["type"] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
44 return result unless result.nil? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
45 self[:type] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
46 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
47 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
48 def type= (type) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
49 self[:type] = type |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
50 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
51 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
52 def id |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
53 result = self["id"] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
54 return result unless result.nil? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
55 self[:id] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
56 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
57 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
58 def id= (id) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
59 self[:id] = id |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
60 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
61 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
62 def methods |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
63 result = self["methods"] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
64 return result unless result.nil? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
65 self[:methods] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
66 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
67 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
68 def methods= (methods) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
69 self[:methods] = methods |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
70 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
71 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
72 def method_missing (method, *args) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
73 self.class.instance_eval do |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
74 define_method(method) do |*args| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
75 if args.length > 0 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
76 self[method[0 ... -1]] = args[0] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
77 self[eval(":#{method}"[0 ... -1])] = args[0] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
78 else |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
79 result = self[method] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
80 return result unless result.nil? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
81 self[eval(":#{method}")] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
82 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
83 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
84 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
85 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
86 if (method = method.id2name) =~ /=/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
87 eval("self.#{method} (args.length < 2 ? args[0] : args)") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
88 else |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
89 eval("self.#{method}") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
90 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
91 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
92 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
93 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
94 # This Struct represents an Objective-C Framework |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
95 Framework = Struct.new(:name, :headers) do |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
96 def initialize |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
97 self.headers = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
98 self.name = "" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
99 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
100 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
101 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
102 # This Struct represents a C/Objective-C header |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
103 HeaderFile = Struct.new(:name, :framework, :cftypes, :constants, :defines, :enums, :externs, :functions, |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
104 :imports, :inline_functions, :opaques, :path, :structs, :typedefs) do |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
105 def initialize |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
106 self.name = "" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
107 self.cftypes = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
108 self.constants = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
109 self.defines = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
110 self.enums = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
111 self.externs = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
112 self.framework = "" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
113 self.functions = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
114 self.imports = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
115 self.inline_functions = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
116 self.opaques = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
117 self.path = "" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
118 self.structs = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
119 self.typedefs = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
120 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
121 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
122 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
123 # This class scans the headers |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
124 class HeaderScaner |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
125 CPP = ['/usr/bin/cpp-4.0', '/usr/bin/cpp-3.3', '/usr/bin/cpp3'].find { |x| File.exist?(x) } |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
126 raise "cpp not found" if CPP.nil? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
127 CPPFLAGS = "-D__APPLE_CPP__ -include /usr/include/AvailabilityMacros.h" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
128 CPPFLAGS << "-D__GNUC__" unless /\Acpp-4/.match(File.basename(CPP)) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
129 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
130 attr_accessor :frameworks, :headers, :do_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
131 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
132 def initialize |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
133 @extern_name = 'extern' |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
134 @frameworks = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
135 @file_content = nil |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
136 @headers = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
137 @classes = {} |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
138 @informal_protocols = {} |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
139 @function_pointer_types = {} |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
140 @do_64bit = false |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
141 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
142 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
143 def classes |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
144 @classes |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
145 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
146 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
147 def protocols |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
148 @informal_protocols |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
149 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
150 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
151 def cftypes (header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
152 re = /typedef\s+(const\s+)?(struct\s*\w+\s*\*\s*)([^\s]+Ref)\s*;/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
153 @cpp_result.scan(re).each do |m| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
154 header.cftypes << { :name => m[2], :type => m[1], :const => m[0] =~ /const/ ? true : false} |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
155 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
156 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
157 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
158 def constants (header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
159 tmp = header.externs.map do |i| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
160 constant?(i, true) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
161 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
162 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
163 header.constants = tmp.flatten.compact |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
164 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
165 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
166 def defines (header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
167 re = /#define\s+([^\s]+)\s+(\([^)]+\)|[^\s]+)\s*$/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
168 @file_content.scan(re).each do |m| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
169 next unless !m[0].include?('(') && m[1] != '\\' |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
170 header.defines << { :name => m[0], :value => m[1] } |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
171 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
172 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
173 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
174 def enums (header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
175 re = /\benum\b\s*(\w+\s+)?\{([^}]*)\}/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
176 @cpp_result.scan(re).each do |m| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
177 enum = { :name => m[0], :members => [] } |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
178 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
179 m[1].split(",").map do |i| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
180 name, value = i.split("=", 2).map do |x| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
181 x.strip |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
182 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
183 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
184 enum[:members] << { :name => name, :value => value } unless name.empty? || name[0] == ?# |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
185 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
186 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
187 header.enums << enum |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
188 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
189 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
190 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
191 def function_pointer_types (header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
192 re = /typedef\s+([\w\s]+)\s*\(\s*\*\s*(\w+)\s*\)\s*\(([^)]*)\)\s*;/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
193 data = @cpp_result.scan(re) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
194 re = /typedef\s+([\w\s]+)\s*\(([^)]+)\)\s*;/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
195 data |= @cpp_result.scan(re).map do |m| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
196 ary = m[0].split(/(\w+)$/) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
197 ary[1] << " *" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
198 ary << m[1] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
199 ary |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
200 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
201 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
202 data.each do |m| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
203 name = m[1] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
204 args = m[2].split(",").map do |x| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
205 if x.include?(" ") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
206 ptr = x.sub!(/\[\]\s*$/, "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
207 x = x.sub(/\w+\s*$/, "").strip |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
208 ptr ? x + "*" : x |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
209 else |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
210 x.strip |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
211 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
212 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
213 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
214 type = "#{m[0]}(*)(#{args.join(', ')})" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
215 @function_pointer_types[name] = type |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
216 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
217 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
218 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
219 def typedefs (header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
220 re = /^\s*typedef\s+(.+)\s+([\w\*]+)\s*;$/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
221 data = @cpp_result |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
222 data.scan(re).each do |m| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
223 var = get_var_info(m[0] + " " + m[1]) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
224 header.typedefs << get_var_info(m[0] + " " + m[1]) if var |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
225 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
226 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
227 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
228 def externs (header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
229 re = /^\s*#{@extern_name}\s+\b(.*)\s*;.*$/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
230 header.externs = @cpp_result.scan(re).map do |m| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
231 m[0].strip |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
232 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
233 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
234 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
235 def imports (header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
236 tmp = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
237 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
238 @file_content.each do |line| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
239 if line =~ /#(include|import) <(.+)\.h>/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
240 next if $2 == header.name |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
241 tmp << $2 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
242 elsif line =~ /@class(\s+)(\w+)(,|;)/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
243 next if $2 == header.name |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
244 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
245 if $3 == ";" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
246 tmp << header.framework + "/" + $2 unless header.framework == "" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
247 tmp << $2 if header.framework == "" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
248 elsif |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
249 str = line[6 + $1.length ... -2] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
250 str.gsub!(" ", "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
251 arr = str.split(",") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
252 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
253 arr.each do |s| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
254 tmp << header.framework + "/" + s unless header.framework == "" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
255 tmp << s if header.framework == "" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
256 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
257 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
258 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
259 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
260 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
261 header.imports = tmp.compact.uniq |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
262 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
263 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
264 def informal_protocols (header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
265 self.methods(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
266 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
267 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
268 def methods (header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
269 interface_re = /^@(interface|protocol)\s+(\w+)\s*:?\s*(\w*)\s*(\([^)]+\))?/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
270 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
271 end_re = /^@end/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
272 body_re = /^[-+]\s*(\([^)]+\))?\s*([^:\s;]+)/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
273 args_re = /\w+\s*:/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
274 prop_re = /^@property\s*(\([^)]+\))?\s*([^;]+);$/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
275 current_interface = current_category = nil |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
276 i = 0 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
277 parent = nil |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
278 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
279 @cpp_result.each_line do |line| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
280 size = line.size |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
281 line.strip! |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
282 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
283 if md = interface_re.match(line) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
284 parent = nil |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
285 current_interface = md[1] == "protocol" ? "NSObject" : md[2] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
286 current_category = md[4].delete("()").strip if md[4] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
287 parent = md[3] unless md[3] == "" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
288 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
289 elsif end_re.match(line) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
290 current_interface = current_category = nil |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
291 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
292 elsif current_interface && md = prop_re.match(line) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
293 # Parsing Objective-C 2.0 properties |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
294 if (a = md[2].split(/\s/)).length >= 2 && /^\w+$/.match(name = a[-1]) && (type = a[0 .. -2].join(" ")).index(",").nil? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
295 getter, setter = name, "set#{name[0].chr.upcase + name[1 .. -1]}" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
296 readonly = false |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
297 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
298 if attributes = md[1] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
299 if md = /getter\s*=\s*(\w+)/.match(attributes) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
300 getter = md[1] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
301 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
302 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
303 if md = /setter\s*=\s*(\w+)/.match(attributes) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
304 setter = md[1] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
305 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
306 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
307 readonly = true if attributes.index("readonly") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
308 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
309 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
310 typeinfo = VarInfo.new(type, "", "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
311 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
312 @classes[current_interface] ||= {} |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
313 methods = (@classes[current_interface].methods ||= []) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
314 methods << MethodInfo.new(typeinfo, getter, false, [], line) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
315 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
316 unless readonly |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
317 methods << MethodInfo.new(VarInfo.new("void", "", ""), setter + ":", false, [typeinfo], line) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
318 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
319 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
320 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
321 elsif current_interface && (line[0] == ?+ || line[0] == ?-) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
322 mtype = line[0] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
323 data = @cpp_result[i .. -1] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
324 body_md = body_re.match(data) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
325 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
326 next if body_md.nil? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
327 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
328 rettype = body_md[1] ? body_md[1].delete("()") : "id" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
329 retval = VarInfo.new(rettype, "", "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
330 args = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
331 selector = "" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
332 data = data[0 .. data.index(";")] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
333 args_data = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
334 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
335 data.scan(args_re) do |x| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
336 args_data << [$`, x, $'] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
337 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
338 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
339 variadic = false |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
340 args_data.each_with_index do |ary, n| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
341 before, argname, argtype = ary |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
342 arg_nameless = (n > 0 && /\)\s*$/.match(before)) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
343 argname = ":" if arg_nameless |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
344 realargname = nil |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
345 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
346 if n < args_data.length - 1 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
347 argtype.sub!(args_data[n + 1][2], "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
348 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
349 if arg_nameless |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
350 argtype.sub!(/(\w+\s*)?\w+\s*:\s*$/, "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
351 else |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
352 unless argtype.sub!(/(\w+)\s+\w+:\s*$/) { |s| realargname = $1; "" } |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
353 # maybe the next argument is nameless |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
354 argtype.sub!(/\w+\s*:\s*$/, "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
355 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
356 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
357 else |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
358 argtype.sub!(/\s+__attribute__\(\(.+\)\)/, "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
359 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
360 if arg_nameless |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
361 argtype.sub!(/\w+\s*;$/, "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
362 else |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
363 unless argtype.sub!(/(\w+)\s*;$/) { |s| realargname = $1; "" } |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
364 variadic = argtype.sub!(/,\s*\.\.\.\s*;/, "") != nil |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
365 argtype.sub!(/\w+\s*$/, "") if variadic |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
366 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
367 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
368 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
369 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
370 selector << argname |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
371 realargname ||= argname.sub(/:/, "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
372 args << VarInfo.new(argtype, realargname, "") unless argtype.empty? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
373 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
374 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
375 selector = body_md[2] if selector.empty? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
376 args << VarInfo.new("...", "vararg", "") if variadic |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
377 method = MethodInfo.new(retval, selector, line[0] == ?+, args, data) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
378 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
379 if current_category && current_interface == "NSObject" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
380 (@informal_protocols[current_category] ||= []) << method |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
381 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
382 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
383 @classes[current_interface] ||= {} |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
384 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
385 if header.name == current_interface |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
386 @classes[current_interface].file = header.name |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
387 else |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
388 @classes[current_interface].file ||= header.name |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
389 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
390 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
391 unless parent == current_interface || parent =~ /\s+/ || parent.nil? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
392 @classes[current_interface].parent = parent |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
393 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
394 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
395 (@classes[current_interface].methods ||= []) << method |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
396 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
397 i += size |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
398 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
399 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
400 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
401 def structs (header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
402 re = /typedef\s+struct\s*\w*\s*((\w+)|\{([^{}]*(\{[^}]+\})?)*\}\s*([^\s]+))\s*(__attribute__\(.+\))?\s*;/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
403 i = 0 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
404 body = nil |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
405 @cpp_result.scan(re).each do |m| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
406 struct = { :name => m[4], :members => [] } |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
407 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
408 unless struct[:name].nil? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
409 if struct[:name][0, 1] == "*" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
410 struct[:name].sub!("*", "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
411 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
412 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
413 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
414 return_type = nil |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
415 stripped_return_type = nil |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
416 body = m[2] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
417 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
418 if m[2] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
419 m[2].split(/,|;/).map do |i| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
420 str, bytes = i.split(":", 2).map do |x| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
421 x.strip |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
422 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
423 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
424 var = get_var_info(str, true) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
425 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
426 if var |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
427 if var.return_type == "***dummy***" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
428 var.return_type = return_type |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
429 var.stripped_return_type = stripped_return_type |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
430 else |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
431 return_type = var.return_type |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
432 stripped_return_type = var.stripped_return_type |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
433 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
434 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
435 struct[:members] << { :name => var.name, :bytes => bytes, :declaredType => var.return_type, :type => "", :type64 => "" } unless str.empty? || str[0] == ?# |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
436 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
437 names = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
438 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
439 tmp = struct[:members].collect do |member| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
440 unless names.include?(member[:name]) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
441 names << member[:name] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
442 member |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
443 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
444 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
445 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
446 struct[:members] = tmp.compact |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
447 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
448 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
449 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
450 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
451 header.structs << struct if body |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
452 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
453 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
454 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
455 def functions (header, inline = false) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
456 if inline |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
457 inline_func_re = /(inline|__inline__)\s+((__attribute__\(\([^)]*\)\)\s+)?([\w\s\*<>]+)\s*\(([^)]*)\)\s*)\{/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
458 res = @cpp_result.scan(inline_func_re) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
459 res.each do |x| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
460 x.delete_at(0) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
461 x.delete_at(1) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
462 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
463 else |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
464 skip_inline_re = /(static)?\s(inline|__inline__)[^{;]+(;|\{([^{}]*(\{[^}]+\})?)*\})\s*/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
465 func_re = /(^([\w\s\*<>]+)\s*\(([^)]*)\)\s*)(__attribute__[^;]+)?;/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
466 res = @cpp_result.gsub(skip_inline_re, '').scan(func_re) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
467 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
468 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
469 funcs = res.map do |m| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
470 orig, base, args = m |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
471 base.sub!(/^.*extern\s/, "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
472 func = constant?(base) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
473 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
474 if func |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
475 args = args.strip.split(",").map do |i| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
476 constant?(i) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
477 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
478 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
479 next if args.any? do |x| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
480 x.nil? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
481 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
482 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
483 args = [] if args.size == 1 && args[0].return_type == "void" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
484 FunctionInfo.new(func, args, orig, inline) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
485 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
486 end.compact |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
487 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
488 if inline |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
489 header.inline_functions = funcs |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
490 else |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
491 header.functions = funcs |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
492 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
493 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
494 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
495 def prepare (path) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
496 @file_content = File.read(path) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
497 @file_content.gsub!(%r{(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)}, ""); |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
498 @complete_cpp_result, @cpp_result = do_cpp(path, false, true, "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
499 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
500 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
501 def scan (frameworks, headers) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
502 @frameworks = frameworks |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
503 @headers = headers |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
504 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
505 @frameworks.each do |framework| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
506 framework.headers.each do |header| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
507 prepare(header.path) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
508 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
509 imports(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
510 cftypes(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
511 externs(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
512 constants(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
513 enums(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
514 structs(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
515 typedefs(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
516 functions(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
517 functions(header, true) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
518 defines(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
519 methods(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
520 function_pointer_types(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
521 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
522 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
523 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
524 @headers.each do |header| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
525 prepare(header.path) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
526 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
527 imports(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
528 cftypes(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
529 externs(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
530 constants(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
531 enums(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
532 structs(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
533 typedefs(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
534 functions(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
535 functions(header, true) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
536 defines(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
537 methods(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
538 function_pointer_types(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
539 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
540 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
541 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
542 def get_var_info (str, multi = false) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
543 str.strip! |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
544 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
545 return nil if str.empty? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
546 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
547 if str == "..." |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
548 VarInfo.new("...", "...", str) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
549 else |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
550 str = "***dummy*** " + str if str[-1].chr == '*' || str.index(/\s/).nil? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
551 tokens = multi ? str.split(',') : [str] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
552 part = tokens.first |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
553 re = /^([^()]*)\b(\w+)\b\s*(\[[^\]]*\])*$/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
554 m = re.match(part) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
555 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
556 if m |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
557 return nil if m[1].split(/\s+/).any? do |x| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
558 ['end', 'typedef'].include?(x) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
559 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
560 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
561 m = m.to_a[1..-1].compact.map do |i| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
562 i.strip |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
563 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
564 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
565 m[0] += m[2] if m.size == 3 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
566 m[0] = 'void' if m[1] == 'void' |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
567 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
568 var = begin |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
569 VarInfo.new(m[0], m[1], part) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
570 rescue |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
571 return nil |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
572 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
573 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
574 if tokens.size > 1 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
575 [var, *tokens[1..-1].map { |x| constant?(m[0] + x.strip.sub(/^\*+/, '')) }] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
576 else |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
577 var |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
578 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
579 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
580 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
581 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
582 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
583 def constant? (str, multi = false) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
584 str.strip! |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
585 return nil if str.empty? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
586 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
587 if str == '...' |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
588 VarInfo.new('...', '...', str) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
589 else |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
590 str << " dummy" if str[-1].chr == '*' or str.index(/\s/).nil? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
591 tokens = multi ? str.split(',') : [str] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
592 part = tokens.first |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
593 re = /^([^()]*)\b(\w+)\b\s*(\[[^\]]*\])*$/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
594 m = re.match(part) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
595 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
596 if m |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
597 return nil if m[1].split(/\s+/).any? do |x| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
598 ['end', 'typedef'].include?(x) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
599 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
600 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
601 m = m.to_a[1..-1].compact.map do |i| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
602 i.strip |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
603 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
604 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
605 m[0] += m[2] if m.size == 3 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
606 m[0] = 'void' if m[1] == 'void' |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
607 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
608 var = begin |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
609 VarInfo.new(m[0], m[1], part) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
610 rescue |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
611 return nil |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
612 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
613 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
614 if tokens.size > 1 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
615 [var, *tokens[1..-1].map { |x| constant?(m[0] + x.strip.sub(/^\*+/, '')) }] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
616 else |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
617 var |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
618 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
619 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
620 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
621 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
622 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
623 class VarInfo |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
624 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
625 attr_reader :name, :orig, :const, :type_modifier |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
626 attr_accessor :octype, :resolved_type, :resolved_type64, :return_type, :stripped_return_type |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
627 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
628 def initialize (type, name, orig) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
629 @return_type = type.clone |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
630 @name = name |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
631 @orig = orig |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
632 @const = false |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
633 @type_modifier = "" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
634 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
635 @return_type.gsub!(/\[[^\]]*\]/, "*") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
636 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
637 if @return_type =~ /\bconst\b/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
638 @const = true |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
639 @return_type.gsub!("const", "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
640 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
641 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
642 if @return_type =~ /\b(in|out|inout|oneway|bycopy|byref)\b/ |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
643 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
644 case $1 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
645 when "in" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
646 @type_modifier << "n" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
647 when "out" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
648 @type_modifier << "o" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
649 when "inout" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
650 @type_modifier << "N" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
651 when "oneway" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
652 @type_modifier << "w" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
653 when "bycopy" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
654 @type_modifier << "c" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
655 when "byref" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
656 @type_modifier << "r" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
657 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
658 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
659 @return_type.gsub!("#{$1}", "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
660 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
661 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
662 @return_type.gsub!(/\s?\*\s?/, "*") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
663 @return_type.gsub!(/^\(|\)$/, "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
664 @return_type.strip! |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
665 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
666 t = type.gsub(/\b(__)?const\b/, "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
667 t.gsub!(/<[^>]*>/, '') |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
668 t.gsub!(/\b(in|out|inout|oneway|const)\b/, "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
669 t.gsub!(/\b__private_extern__\b/, "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
670 t.gsub!(/^\s*\(?\s*/, "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
671 t.gsub!(/\s*\)?\s*$/, "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
672 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
673 raise "Empty type (was '#{type}')" if t.empty? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
674 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
675 @stripped_return_type = t |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
676 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
677 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
678 def function_pointer? (function_pointer_types) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
679 type = @function_pointer_types[@stripped_return_type] || @stripped_return_type |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
680 @function_pointer_type ||= FunctionPointerInfo.new_from_type(type) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
681 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
682 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
683 def <=>(x) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
684 self.name <=> x.name |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
685 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
686 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
687 def hash |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
688 @name.hash |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
689 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
690 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
691 def eql? (o) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
692 @name == o.name |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
693 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
694 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
695 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
696 class FunctionInfo < VarInfo |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
697 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
698 attr_reader :args, :argc |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
699 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
700 def initialize (function, args, orig, inline = false) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
701 super(function.return_type, function.name, orig) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
702 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
703 @args = args |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
704 @argc = @args.size |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
705 @variadic = false |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
706 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
707 if @args[-1] && @args[-1].return_type == "..." |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
708 @argc -= 1 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
709 @variadic = true |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
710 @args.pop |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
711 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
712 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
713 @inline = inline |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
714 self |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
715 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
716 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
717 def variadic? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
718 @variadic |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
719 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
720 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
721 def inline? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
722 @inline |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
723 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
724 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
725 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
726 class FunctionPointerInfo < FunctionInfo |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
727 def initialize (return_type, arg_types, orig) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
728 args = arg_types.map do |x| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
729 VarInfo.new(x, "", "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
730 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
731 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
732 super(VarInfo.new(return_type, "", ""), args, orig) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
733 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
734 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
735 def self.new_from_type (type) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
736 @cache ||= {} |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
737 info = @cache[type] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
738 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
739 return info if info |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
740 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
741 tokens = type.split(/\(\*\)/) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
742 return nil if tokens.size != 2 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
743 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
744 return_type = tokens.first.strip |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
745 rest = tokens.last.sub(/^\s*\(\s*/, "").sub(/\s*\)\s*$/, "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
746 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
747 arg_types = rest.split(/,/).map do |x| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
748 x.strip |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
749 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
750 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
751 @cache[type] = self.new(return_type, arg_types, type) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
752 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
753 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
754 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
755 class MethodInfo < FunctionInfo |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
756 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
757 attr_reader :selector |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
758 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
759 def initialize (method, selector, is_class, args, orig) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
760 super(method, args, orig) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
761 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
762 @selector = selector |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
763 @is_class = is_class |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
764 self |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
765 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
766 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
767 def class_method? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
768 @is_class |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
769 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
770 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
771 def <=>(o) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
772 @selector <=> o.selector |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
773 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
774 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
775 def hash |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
776 @selector.hash |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
777 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
778 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
779 def eql? (o) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
780 @selector == o.selector |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
781 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
782 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
783 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
784 def do_cpp (path, fails_on_error = true, do_64 = true, flags = "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
785 f_on = false |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
786 err_file = '/tmp/.cpp.err' |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
787 cpp_line = "#{CPP} #{CPPFLAGS} #{flags} #{do_64 ? '-D__LP64__' : ''} \"#{path}\" 2>#{err_file}" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
788 complete_result = `#{cpp_line}` |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
789 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
790 if $?.to_i != 0 && fails_on_error |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
791 $stderr.puts File.read(err_file) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
792 File.unlink(err_file) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
793 raise "#{CPP} returned #{$?.to_int/256} exit status\nline was: #{cpp_line}" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
794 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
795 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
796 result = complete_result.select do |s| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
797 # First pass to only grab non-empty lines and the pre-processed lines |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
798 # only from the target header (and not the entire pre-processing result). |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
799 next if s.strip.empty? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
800 m = %r{^#\s*\d+\s+"([^"]+)"}.match(s) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
801 f_on = (File.basename(m[1]) == File.basename(path)) if m |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
802 f_on |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
803 end.select do |s| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
804 # Second pass to ignore all pro-processor comments that were left. |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
805 /^#/.match(s) == nil |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
806 end.join |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
807 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
808 File.unlink(err_file) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
809 return [complete_result, result] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
810 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
811 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
812 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
813 class DStepGenerator |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
814 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
815 VERSION = 1.0 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
816 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
817 attr_accessor :out_file, :scaner |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
818 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
819 def initialize |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
820 @do_64bit = false |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
821 @frameworks = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
822 @framework_paths = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
823 @headers = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
824 @import_directives = "" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
825 @informal_protocols = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
826 @classes = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
827 @scaner = HeaderScaner.new |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
828 @scaner.do_64bit = @do_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
829 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
830 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
831 def do_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
832 return @do_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
833 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
834 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
835 def do_64bit= (do_64bit) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
836 @do_64bit = do_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
837 @scaner.do_64bit = do_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
838 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
839 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
840 def collect |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
841 scaner.scan(@frameworks, @headers) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
842 @classes = scaner.classes |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
843 @informal_protocols = scaner.protocols |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
844 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
845 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
846 def handle_framework (framework) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
847 val = framework.name |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
848 path = framework_path(val) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
849 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
850 raise "Can't locate framework '#{val}'" if path.nil? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
851 @framework_paths << File.dirname(path) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
852 raise "Can't find framework '#{val}'" if path.nil? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
853 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
854 parent_path, name = path.scan(/^(.+)\/(\w+)\.framework\/?$/)[0] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
855 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
856 if @private |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
857 headers_path = File.join(path, "PrivateHeaders") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
858 raise "Can't locate private framework headers at '#{headers_path}'" unless File.exist?(headers_path) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
859 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
860 headers = Dir.glob(File.join(headers_path, "**", "*.h")) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
861 public_headers_path = File.join(path, "Headers") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
862 public_headers = if File.exist?(public_headers_path) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
863 HeaderScaner::CPPFLAGS << " -I#{public_headers_path} " |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
864 Dir.glob(File.join8(headers_path, "**", "*.h")) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
865 else |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
866 [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
867 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
868 else |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
869 headers_path = File.join(path, "Headers") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
870 raise "Can't locate public framework headers at '#{headers_path}'" unless File.exist?(headers_path) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
871 public_headers = headers = Dir.glob(File.join(headers_path, "**", "*.h")) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
872 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
873 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
874 # We can't just "#import <x/x.h>" as the main Framework header might not include _all_ headers. |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
875 # So we are tricking this by importing the main header first, then all headers. |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
876 header_basenames = (headers | public_headers).map do |x| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
877 x.sub(/#{headers_path}\/*/, "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
878 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
879 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
880 if idx = header_basenames.index("#{name}.h") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
881 header_basenames.delete_at(idx) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
882 header_basenames.unshift("#{name}.h") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
883 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
884 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
885 @import_directives = header_basenames.map do |x| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
886 "#import <#{name}/#{x}>" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
887 end.join("\n") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
888 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
889 @import_directives << "\n" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
890 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
891 @compiler_flags ||= "-F\"#{parent_path}\" -framework #{name}" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
892 @cpp_flags ||= "" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
893 @cpp_flags << "-F\"#{parent_path}\" " |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
894 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
895 headers.each do |header| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
896 header_file = HeaderFile.new |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
897 header_file.path = header |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
898 header_file.name = File.basename(header, File.extname(header)) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
899 header_file.framework = framework.name |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
900 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
901 framework.headers << header_file |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
902 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
903 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
904 # Memorize the dependencies. |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
905 @dependencies = DStepGenerator.dependencies_of_framework(path) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
906 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
907 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
908 def framework_path (val) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
909 return path if File.exist?(val) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
910 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
911 val += ".framework" unless /\.framework$/.match(val) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
912 paths = ["/System/Library/Frameworks", "/Library/Frameworks", "#{ENV['HOME']}/Library/Frameworks"] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
913 paths << "/System/Library/PrivateFrameworks" if @private |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
914 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
915 paths.each do |dir| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
916 path = File.join(dir, val) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
917 return path if File.exist?(path) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
918 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
919 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
920 return nil |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
921 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
922 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
923 def self.dependencies_of_framework (path) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
924 @dependencies ||= {} |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
925 name = File.basename(path, ".framework") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
926 path = File.join(path, name) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
927 deps = @dependencies[path] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
928 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
929 if deps.nil? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
930 deps = `otool -L "#{path}"`.scan(/\t([^\s]+)/).map do |m| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
931 dpath = m[0] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
932 next if File.basename(dpath) == name |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
933 next if dpath.include?("PrivateFrameworks") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
934 next unless dpath.sub!(/\.framework\/Versions\/\w+\/\w+$/, "") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
935 dpath + ".framework" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
936 end.compact |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
937 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
938 @dependencies[path] = deps |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
939 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
940 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
941 return deps |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
942 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
943 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
944 def compile_and_execute (code, enable_64bit = false) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
945 compiler_line = "gcc " |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
946 src = File.new(unique_tmp_path("src", ".m"), "w") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
947 src << code |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
948 src.close |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
949 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
950 arch_flag = if enable_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
951 "-arch x86_64 -arch ppc64" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
952 else |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
953 "-arch i386 -arch ppc" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
954 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
955 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
956 compiler_line << arch_flag |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
957 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
958 bin = unique_tmp_path "bin" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
959 log = unique_tmp_path "log" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
960 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
961 line = "#{compiler_line} -o #{bin} #{src.path} #{@compiler_flags}> #{log}" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
962 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
963 unless system(line) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
964 msg = "Cannot compile Objective-C code ...aborting\nCommand was: #{line}\n\nLog:\n#{File.read(log)}\n\n" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
965 $stderr << msg |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
966 File.delete src.path |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
967 raise msg |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
968 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
969 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
970 result = `#{bin}` |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
971 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
972 unless $?.success? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
973 raise "Cannot execute compiled Objective-C code ... aborting\nCommand was: #{line}\nBinary is: #{bin}" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
974 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
975 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
976 File.delete bin |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
977 File.delete log |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
978 File.delete src.path |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
979 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
980 return result |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
981 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
982 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
983 def unique_tmp_path (base, extension = "", dir = Dir.tmpdir) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
984 i = 0 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
985 loop do |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
986 path = File.join(dir, "#{base}-#{Process.pid}-#{i}#{extension}") |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
987 return path unless File.exists?(path) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
988 i += 1 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
989 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
990 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
991 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
992 def add_header (path) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
993 header = HeaderFile.new |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
994 header.path = path |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
995 header.name = File.basename(path, File.extname(path)) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
996 @import_directives << "#include <#{path}>\n" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
997 @headers << header |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
998 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
999 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1000 def add_framework (name) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1001 framework = Framework.new |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1002 framework.name = name |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1003 handle_framework(framework) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1004 #@import_directives << "#import <#{framework.name}/#{framework.name}.h>\n" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1005 @frameworks << framework |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1006 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1007 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1008 def collect_header_types (header, enable_64bit) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1009 types = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1010 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1011 header.cftypes.each do |cftype| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1012 types << cftype[:type] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1013 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1014 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1015 header.constants.each do |constant| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1016 types << constant.stripped_return_type |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1017 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1018 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1019 header.structs.each do |struct| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1020 types << struct[:name] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1021 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1022 struct[:members].each do |member| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1023 types << member[:declaredType] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1024 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1025 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1026 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1027 header.typedefs.each do |typedef| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1028 types << typedef.stripped_return_type |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1029 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1030 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1031 header.functions.each do |function| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1032 types << function.stripped_return_type |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1033 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1034 function.args.each do |arg| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1035 types << arg.stripped_return_type |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1036 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1037 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1038 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1039 types |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1040 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1041 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1042 def collect_classes_types (enable_64bit) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1043 types = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1044 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1045 @classes.each do |clazz, value| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1046 value.methods.each do |method| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1047 types << method.stripped_return_type |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1048 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1049 method.args.each do |arg| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1050 types << arg.stripped_return_type |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1051 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1052 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1053 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1054 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1055 types |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1056 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1057 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1058 def collect_informal_protocols_types (enable_64bit) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1059 types = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1060 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1061 @informal_protocols.each do |name, methods| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1062 methods.each do |method| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1063 types << method.stripped_return_type |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1064 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1065 method.args.each do |arg| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1066 types << arg.stripped_return_type |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1067 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1068 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1069 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1070 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1071 types |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1072 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1073 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1074 def resolve_header_types (header, enable_64bit, resolved_types, x) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1075 i = x |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1076 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1077 header.cftypes.each do |cftype| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1078 cftype[enable_64bit ? :type64 : :type] = resolved_types[i] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1079 i += 1 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1080 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1081 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1082 header.constants.each do |constant| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1083 constant.resolved_type = resolved_types[i] unless enable_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1084 constant.resolved_type64 = resolved_types[i] if enable_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1085 i += 1 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1086 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1087 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1088 header.structs.each do |struct| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1089 struct[enable_64bit ? :type64 : :type] = resolved_types[i] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1090 i += 1 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1091 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1092 struct[:members].each do |member| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1093 member[enable_64bit ? :type64 : :type] = resolved_types[i] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1094 i += 1 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1095 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1096 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1097 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1098 header.typedefs.each do |typedef| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1099 typedef.resolved_type = resolved_types[i] unless enable_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1100 typedef.resolved_type64 = resolved_types[i] if enable_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1101 i += 1 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1102 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1103 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1104 header.functions.each do |function| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1105 function.resolved_type = resolved_types[i] unless enable_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1106 function.resolved_type64 = resolved_types[i] if enable_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1107 i += 1 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1108 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1109 function.args.each do |arg| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1110 arg.resolved_type = resolved_types[i] unless enable_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1111 arg.resolved_type64 = resolved_types[i] if enable_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1112 i += 1 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1113 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1114 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1115 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1116 i |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1117 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1118 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1119 def resolve_methods_types (enable_64bit, resolved_types, x) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1120 i = x |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1121 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1122 @classes.each do |clazz, value| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1123 value.methods.each do |method| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1124 method.resolved_type = resolved_types[i] unless enable_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1125 method.resolved_type64 = resolved_types[i] if enable_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1126 i += 1 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1127 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1128 method.args.each do |arg| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1129 arg.resolved_type = resolved_types[i] unless enable_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1130 arg.resolved_type64 = resolved_types[i] if enable_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1131 i += 1 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1132 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1133 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1134 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1135 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1136 i |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1137 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1138 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1139 def resolve_informal_protocols_types (enable_64bit, resolved_types, x) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1140 i = x |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1141 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1142 @informal_protocols.each do |name, methods| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1143 methods.each do |method| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1144 method.resolved_type = resolved_types[i] unless enable_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1145 method.resolved_type64 = resolved_types[i] if enable_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1146 i += 1 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1147 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1148 method.args.each do |arg| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1149 arg.resolved_type = resolved_types[i] unless enable_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1150 arg.resolved_type64 = resolved_types[i] if enable_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1151 i += 1 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1152 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1153 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1154 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1155 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1156 i |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1157 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1158 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1159 def resolve_types (enable_64bit = false) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1160 code = "#include <stdio.h>\n" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1161 code << @import_directives |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1162 types = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1163 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1164 @frameworks.each do |framework| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1165 framework.headers.each do |header| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1166 types << collect_header_types(header, enable_64bit) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1167 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1168 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1169 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1170 @headers.each do |header| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1171 types << collect_header_types(header, enable_64bit) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1172 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1173 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1174 types << collect_classes_types(enable_64bit) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1175 types << collect_informal_protocols_types(enable_64bit) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1176 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1177 code << "int main () \n{\n" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1178 types.flatten! |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1179 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1180 types.each do |type| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1181 code << ' printf("%s\n", ' + "@encode(#{type}));\n" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1182 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1183 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1184 code << " return 0;\n}" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1185 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1186 resolved_types = [] |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1187 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1188 compile_and_execute(code, enable_64bit).split("\n").each do |line| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1189 resolved_types << line |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1190 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1191 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1192 i = 0 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1193 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1194 @frameworks.each do |framework| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1195 framework.headers.each do |header| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1196 i = resolve_header_types(header, enable_64bit, resolved_types, i) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1197 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1198 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1199 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1200 @headers.each do |header| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1201 i = resolve_header_types(header, enable_64bit, resolved_types, i) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1202 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1203 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1204 i = resolve_methods_types(enable_64bit, resolved_types, i) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1205 i = resolve_informal_protocols_types(enable_64bit, resolved_types, i) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1206 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1207 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1208 def generate_header (xml, header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1209 xml.file :name => header.name do |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1210 header.imports.each do |import| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1211 xml.import import |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1212 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1213 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1214 header.defines.each do |define| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1215 xml.define define |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1216 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1217 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1218 header.cftypes.each do |cftype| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1219 xml.cftype cftype |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1220 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1221 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1222 header.constants.each do |constant| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1223 xml.constant :name => constant.name, :declaredType => constant.return_type, :type => constant.resolved_type, :type64 => constant.resolved_type64, :const => constant.const |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1224 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1225 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1226 header.enums.each do |enum| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1227 xml.enum :name => enum[:name] do |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1228 enum[:members].each do |member| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1229 xml.member member |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1230 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1231 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1232 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1233 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1234 header.structs.each do |struct| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1235 xml.struct :name => struct[:name], :type => struct[:type], :type64 => struct[:type64] do |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1236 struct[:members].each do |member| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1237 xml.member member |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1238 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1239 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1240 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1241 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1242 header.typedefs.each do |typedef| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1243 xml.typedef :name => typedef.name, :declaredType => typedef.return_type, :type => typedef.resolved_type, :type64 => typedef.resolved_type64, :const => typedef.const |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1244 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1245 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1246 header.functions.each do |function| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1247 xml.function :name => function.name, :inline => function.inline?, :variadic => function.variadic? do |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1248 function.args.each do |arg| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1249 xml.arg :name => arg.name, :declaredType => arg.return_type, :type => arg.resolved_type, :type64 => arg.resolved_type64, :const => arg.const, :typeModifier => arg.type_modifier |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1250 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1251 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1252 xml.returnValue :declaredType => function.return_type, :type => function.resolved_type, :type64 => function.resolved_type64, :const => function.const, :typeModifier => function.type_modifier |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1253 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1254 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1255 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1256 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1257 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1258 def generate_classes (xml) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1259 @classes.each do |clazz, value| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1260 xml.class :name => clazz, :parent => value.parent, :file => value.file do |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1261 value.methods.each do |method| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1262 xml.method :selector => method.selector, :classMethod => method.class_method?, :variadic => method.variadic? do |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1263 method.args.each do |arg| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1264 xml.arg :name => arg.name, :declaredType => arg.return_type, :type => arg.resolved_type, :type64 => arg.resolved_type64, :const => arg.const, :typeModifier => arg.type_modifier |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1265 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1266 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1267 xml.returnValue :declaredType => method.return_type, :type => method.resolved_type, :type64 => method.resolved_type64, :const => method.const, :typeModifier => method.type_modifier |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1268 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1269 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1270 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1271 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1272 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1273 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1274 def generate_informal_protocols (xml) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1275 @informal_protocols.each do |name, methods| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1276 xml.informalProtocol :name => name do |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1277 methods.each do |method| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1278 xml.method :selector => method.selector, :classMethod => method.class_method?, :variadic => method.variadic? do |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1279 method.args.each do |arg| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1280 xml.arg :name => arg.name, :declaredType => arg.return_type, :type => arg.resolved_type, :type64 => arg.resolved_type64, :const => arg.const, :typeModifier => arg.type_modifier |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1281 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1282 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1283 xml.returnValue :declaredType => method.return_type, :type => method.resolved_type, :type64 => method.resolved_type64, :const => method.const, :typeModifier => method.type_modifier |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1284 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1285 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1286 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1287 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1288 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1289 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1290 def generate |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1291 resolve_types |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1292 resolve_types(true) if @do_64bit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1293 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1294 file = STDOUT if @out_file == nil |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1295 file = File.open @out_file, "w" unless @out_file == nil |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1296 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1297 xml = XmlMarkup.new(:target => file, :indent => 4) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1298 xml.instruct! |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1299 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1300 xml.dstep :xmlns => "http://www.dsource.org/projects/dstep", "xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation" => "http://www.dsource.org/projects/dstep/trunk/scripts/dstep.xsd" do |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1301 @frameworks.each do |framework| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1302 xml.framework :name => framework.name do |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1303 framework.headers.each do |header| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1304 generate_header(xml, header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1305 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1306 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1307 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1308 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1309 @headers.each do |header| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1310 generate_header(xml, header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1311 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1312 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1313 generate_classes(xml) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1314 generate_informal_protocols(xml) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1315 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1316 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1317 file.close unless file == STDOUT |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1318 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1319 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1320 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1321 def die (*msg) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1322 $stderr.puts msg |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1323 exit 1 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1324 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1325 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1326 if __FILE__ == $0 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1327 dstep_gen = DStepGenerator.new |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1328 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1329 OptionParser.new do |opts| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1330 opts.banner = "Usage: #{File.basename(__FILE__)} [options] <headers...>" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1331 opts.separator "" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1332 opts.separator "Options:" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1333 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1334 opts.on("-f", "--framework FRAMEWORK", "Generate metadata for the given framework.") do |opt| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1335 dstep_gen.add_framework(opt) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1336 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1337 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1338 opts.on(nil, "--64-bit", "Write 64-bit annotations.") do |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1339 dstep_gen.do_64bit = true |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1340 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1341 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1342 opts.on("-o", "--output FILE", "Write output to the given file.") do |opt| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1343 die "Output file can't be specified more than once" if dstep_gen.out_file |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1344 dstep_gen.out_file = opt |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1345 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1346 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1347 # opts.on("-d", "--output-dir PATH", "Write ouptut to the given paht, use this with the --framework option") do |opt| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1348 # die "Output directory can't be specified more than once" if dstep_gen.out_dir |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1349 # dstep_gen.out_dir = opt |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1350 # end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1351 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1352 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1353 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1354 help_msg = "Use the `-h' flag or for help." |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1355 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1356 opts.on("-h", "--help", "Show this message.") do |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1357 puts opts, help_msg |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1358 exit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1359 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1360 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1361 opts.on('-v', '--version', 'Show version.') do |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1362 puts DStepGenerator::VERSION |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1363 exit |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1364 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1365 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1366 opts.separator "" |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1367 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1368 if ARGV.empty? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1369 die opts.banner |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1370 else |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1371 begin |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1372 opts.parse!(ARGV) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1373 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1374 ARGV.each do |header| |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1375 dstep_gen.add_header(header) |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1376 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1377 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1378 dstep_gen.collect |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1379 dstep_gen.generate |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1380 rescue => e |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1381 msg = e.message |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1382 msg = "Internal error" if msg.empty? |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1383 |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1384 die msg, opts.banner, help_msg |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1385 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1386 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1387 end |
c7db221de6e8
First upload of dgen.rb and dstepgen.rb
Jacob Carlborg <doob@me.com>
parents:
diff
changeset
|
1388 end |