cgen 0.16.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/History.txt +199 -0
- data/README.txt +34 -0
- data/examples/bench.rb +14 -0
- data/examples/complex.rb +63 -0
- data/examples/complex2.rb +48 -0
- data/examples/cshadow-example.rb +55 -0
- data/examples/cshadow-point.rb +58 -0
- data/examples/ctest.rb +34 -0
- data/examples/ctest2.rb +32 -0
- data/examples/ctest3.rb +179 -0
- data/examples/ctest4.rb +18 -0
- data/examples/ctest5.rb +27 -0
- data/examples/example-ruby-talk-30April2004.rb +65 -0
- data/examples/fixed-array.rb +221 -0
- data/examples/inherit-example.rb +26 -0
- data/examples/inherit-example.txt +80 -0
- data/examples/instance-eval.rb +66 -0
- data/examples/ivset.rb +55 -0
- data/examples/marshal-test.rb +19 -0
- data/examples/matrix.rb +91 -0
- data/examples/modular-def.rb +87 -0
- data/examples/objattr.rb +46 -0
- data/examples/opaque-struct-test.rb +36 -0
- data/examples/sample.rb +184 -0
- data/examples/struct.rb +103 -0
- data/examples/test.rb +24 -0
- data/examples/yaml.rb +56 -0
- data/install.rb +1015 -0
- data/lib/cgen/attribute.rb +414 -0
- data/lib/cgen/cgen.rb +2041 -0
- data/lib/cgen/cshadow.rb +1037 -0
- data/lib/cgen/inherit.rb +46 -0
- data/rakefile +42 -0
- data/tasks/ann.rake +80 -0
- data/tasks/bones.rake +20 -0
- data/tasks/gem.rake +201 -0
- data/tasks/git.rake +40 -0
- data/tasks/notes.rake +27 -0
- data/tasks/post_load.rake +34 -0
- data/tasks/rdoc.rake +51 -0
- data/tasks/rubyforge.rake +55 -0
- data/tasks/setup.rb +292 -0
- data/tasks/spec.rake +54 -0
- data/tasks/svn.rake +47 -0
- data/tasks/test.rake +40 -0
- data/tasks/zentest.rake +36 -0
- data/test/test-attribute.rb +430 -0
- data/test/test-cgen.rb +127 -0
- data/test/test-cshadow.rb +289 -0
- data/test/test.rb +17 -0
- metadata +123 -0
data/test/test-cgen.rb
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'cgen/cgen'
|
3
|
+
|
4
|
+
|
5
|
+
class BasicTemplateTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
class BasicTemplate < CGenerator::Template
|
8
|
+
accumulator(:acc0, :acc1, :acc2)
|
9
|
+
def initialize(*args)
|
10
|
+
super
|
11
|
+
add 'acc 0 is ', acc0!, 'acc 1 is ', acc1!, 'acc 2 is ', acc2!
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def setup
|
16
|
+
@template = BasicTemplate.new
|
17
|
+
@template.acc0 "zero", "zippo", "zed"
|
18
|
+
@template.acc1 "one", "unity", "uno"
|
19
|
+
@template.acc2 "two", "deuce", "brace"
|
20
|
+
end
|
21
|
+
alias set_up setup
|
22
|
+
|
23
|
+
def test_accumulator
|
24
|
+
result = ['acc 0 is ', "zero", "zippo", "zed",
|
25
|
+
'acc 1 is ', "one", "unity", "uno",
|
26
|
+
'acc 2 is ', "two", "deuce", "brace"].join "\n"
|
27
|
+
assert_equal(result, @template.to_s)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
class CFragmentTest < Test::Unit::TestCase
|
34
|
+
|
35
|
+
class CodeTemplate < CGenerator::CFragment
|
36
|
+
accumulator(:decl) {StatementKeyAccumulator}
|
37
|
+
accumulator(:block) {BlockAccumulator}
|
38
|
+
accumulator(:inner, :outer) {StatementAccumulator}
|
39
|
+
def initialize(*args)
|
40
|
+
super
|
41
|
+
add decl!, block(inner!), outer!
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def setup
|
46
|
+
@template = CodeTemplate.new
|
47
|
+
@template.decl :i => "int i"
|
48
|
+
@template.inner "i = 0"
|
49
|
+
@template.outer "f = 1.3"
|
50
|
+
@template.decl :f => "float f"
|
51
|
+
end
|
52
|
+
alias set_up setup
|
53
|
+
|
54
|
+
def test_accumulator
|
55
|
+
result = <<-END
|
56
|
+
int i;
|
57
|
+
float f;
|
58
|
+
{
|
59
|
+
i = 0;
|
60
|
+
}
|
61
|
+
f = 1.3;
|
62
|
+
END
|
63
|
+
result = result.chomp.tabto 0
|
64
|
+
assert_equal(result, @template.to_s)
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
class LibraryTest < Test::Unit::TestCase
|
71
|
+
class Sample
|
72
|
+
end
|
73
|
+
|
74
|
+
##=== setup code to be done once ===##
|
75
|
+
@lib = CGenerator::Library.new "cgen_test_lib"
|
76
|
+
|
77
|
+
@lib.define_c_method(Sample, :add).instance_eval {
|
78
|
+
arguments "x", "y"
|
79
|
+
returns "rb_float_new(NUM2DBL(x) + NUM2DBL(y))"
|
80
|
+
}
|
81
|
+
|
82
|
+
@lib.define_c_singleton_method(Sample, :reverse).instance_eval {
|
83
|
+
rb_array_args
|
84
|
+
declare :result => "VALUE result"
|
85
|
+
reverse_c_name = declare_symbol :reverse
|
86
|
+
body "result = rb_funcall(args, #{reverse_c_name}, 0)"
|
87
|
+
returns "result"
|
88
|
+
}
|
89
|
+
|
90
|
+
# @lib.declare_symbol "just_to_be_unique_#{(Time.now.to_f * 1000).to_i}"
|
91
|
+
|
92
|
+
other_include_file, other_source_file = @lib.add_file "other_file"
|
93
|
+
|
94
|
+
other_source_file.define_c_method(Sample, :sub).instance_eval {
|
95
|
+
scope "extern"
|
96
|
+
arguments "x", "y"
|
97
|
+
returns "rb_float_new(NUM2DBL(x) - NUM2DBL(y))"
|
98
|
+
}
|
99
|
+
|
100
|
+
attr_accessor :ba
|
101
|
+
|
102
|
+
@lib.before_commit { @@ba = [1] }
|
103
|
+
@lib.before_commit { @@ba << 2 }
|
104
|
+
@lib.after_commit { @@ba << 3 }
|
105
|
+
@lib.after_commit { @@ba << 4 }
|
106
|
+
|
107
|
+
require 'fileutils'
|
108
|
+
dir = File.join("tmp", RUBY_VERSION)
|
109
|
+
FileUtils.mkpath dir
|
110
|
+
Dir.chdir dir do
|
111
|
+
@lib.commit
|
112
|
+
end
|
113
|
+
##==================================##
|
114
|
+
|
115
|
+
def test_add
|
116
|
+
assert_equal(3, Sample.new.add(1, 2))
|
117
|
+
# assert_equal(-1, Sample.new.sub(1, 2))
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_reverse
|
121
|
+
assert_equal([6, 5, 4], Sample.reverse(4, 5, 6))
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_before_after
|
125
|
+
assert_equal([1,2,4,3], @@ba)
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,289 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'cgen/cshadow'
|
3
|
+
|
4
|
+
#
|
5
|
+
# Tests in this file focus on:
|
6
|
+
# - shadow objects in general, rather than particular attribute
|
7
|
+
# types, which are tested in attribute.rb
|
8
|
+
# - behavior accessible from Ruby. The examples (complex.rb,
|
9
|
+
# matrix.rb) test shadow objects from C.
|
10
|
+
# Features tested include inheritance, multiple attributes, omission
|
11
|
+
# of readers or writers, etc.
|
12
|
+
#
|
13
|
+
|
14
|
+
# EmptyBase hierarchy tests the following:
|
15
|
+
# - inheritance with "gaps"
|
16
|
+
# - using the same attr name in parallel branches
|
17
|
+
|
18
|
+
class EmptyBase
|
19
|
+
include CShadow
|
20
|
+
end
|
21
|
+
|
22
|
+
class EBSub_1 < EmptyBase
|
23
|
+
shadow_attr_accessor :x => "int x"
|
24
|
+
end
|
25
|
+
|
26
|
+
class EBSub_1_1 < EBSub_1
|
27
|
+
end
|
28
|
+
|
29
|
+
class EBSub_2 < EmptyBase
|
30
|
+
end
|
31
|
+
|
32
|
+
class EBSub_2_2 < EBSub_2
|
33
|
+
shadow_attr_accessor :x => "int x"
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
# Base hierarchy tests the following:
|
38
|
+
# - inheritance with multiple attributes
|
39
|
+
# - omission of readers and writers
|
40
|
+
# - accessors with different names than the variables
|
41
|
+
# - conflicting accessor names or C variable names
|
42
|
+
# - #each_shadow_attr and #shadow_attrs
|
43
|
+
# - protected and private attrs
|
44
|
+
|
45
|
+
class Base
|
46
|
+
include CShadow
|
47
|
+
shadow_attr_reader :x => 'int x'
|
48
|
+
shadow_attr_writer :y => 'int y'
|
49
|
+
shadow_attr_accessor :obj => Array
|
50
|
+
shadow_attr_accessor :nonpersistent, :np => Object
|
51
|
+
end
|
52
|
+
|
53
|
+
class Sub_1 < Base
|
54
|
+
shadow_attr :z => 'int zzz'
|
55
|
+
end
|
56
|
+
|
57
|
+
# test a class with no shadow_attrs
|
58
|
+
class Sub_2 < Base
|
59
|
+
attr_reader :ruby_reader
|
60
|
+
attr_writer :ruby_writer
|
61
|
+
end
|
62
|
+
|
63
|
+
module Mod_For_Sub_3
|
64
|
+
class Sub_3 < Base
|
65
|
+
# Make sure the nested class name bug isn't biting today.
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
class Sub_4 < Base
|
70
|
+
private :x
|
71
|
+
protected :y=
|
72
|
+
end
|
73
|
+
|
74
|
+
# OtherBase tests using shadow_library to specify another library
|
75
|
+
# to put definitions in. OtherFile tests using shadow_library_file
|
76
|
+
# to put definintions in another file within the same library.
|
77
|
+
|
78
|
+
class OtherBase
|
79
|
+
include CShadow
|
80
|
+
shadow_library Base
|
81
|
+
shadow_attr_accessor :str => "char *pchar"
|
82
|
+
end
|
83
|
+
|
84
|
+
class OtherFile < OtherBase
|
85
|
+
shadow_library_file "OtherFile"
|
86
|
+
shadow_attr_accessor :x => "double x"
|
87
|
+
end
|
88
|
+
|
89
|
+
|
90
|
+
# Compile-time tests (that is, pre-commit)
|
91
|
+
|
92
|
+
class CompileTimeTestCase < Test::Unit::TestCase
|
93
|
+
def test_conflict
|
94
|
+
assert_raises(NameError) {
|
95
|
+
Sub_2.class_eval {
|
96
|
+
shadow_attr "y" => 'char * yy'
|
97
|
+
}
|
98
|
+
}
|
99
|
+
assert_raises(NameError) {
|
100
|
+
Sub_2.class_eval {
|
101
|
+
shadow_attr :y => 'char * yy'
|
102
|
+
}
|
103
|
+
}
|
104
|
+
assert_raises(NameError) {
|
105
|
+
Sub_2.class_eval {
|
106
|
+
shadow_attr :yy => 'char * y'
|
107
|
+
}
|
108
|
+
}
|
109
|
+
|
110
|
+
# Checking overwrite by attr_*
|
111
|
+
assert_raises(NameError) {
|
112
|
+
Sub_2.class_eval {
|
113
|
+
attr_accessor :y
|
114
|
+
}
|
115
|
+
}
|
116
|
+
assert_raises(NameError) {
|
117
|
+
Sub_2.class_eval {
|
118
|
+
attr_reader :y
|
119
|
+
}
|
120
|
+
}
|
121
|
+
assert_raises(NameError) {
|
122
|
+
Sub_2.class_eval {
|
123
|
+
attr_writer :y
|
124
|
+
}
|
125
|
+
}
|
126
|
+
|
127
|
+
# Checking overwrite by shadow_attr_*
|
128
|
+
assert_raises(NameError) {
|
129
|
+
Sub_2.class_eval {
|
130
|
+
shadow_attr_reader :ruby_writer => Object
|
131
|
+
}
|
132
|
+
}
|
133
|
+
assert_raises(NameError) {
|
134
|
+
Sub_2.class_eval {
|
135
|
+
shadow_attr_writer :ruby_reader => Object
|
136
|
+
}
|
137
|
+
}
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
require 'fileutils'
|
142
|
+
dir = File.join("tmp", RUBY_VERSION)
|
143
|
+
FileUtils.mkpath dir
|
144
|
+
Dir.chdir dir do
|
145
|
+
EmptyBase.commit
|
146
|
+
Base.commit # do not commit OtherBase
|
147
|
+
end
|
148
|
+
|
149
|
+
METHOD_MISSING_ERROR =
|
150
|
+
RUBY_VERSION.to_f >= 1.7 ?
|
151
|
+
NoMethodError :
|
152
|
+
NameError
|
153
|
+
|
154
|
+
# Run-time tests (that is, post-commit)
|
155
|
+
|
156
|
+
class EmptyBaseTestCase < Test::Unit::TestCase
|
157
|
+
|
158
|
+
def test_empty_base
|
159
|
+
ebs1 = EBSub_1.new
|
160
|
+
ebs2 = EBSub_2.new
|
161
|
+
ebs11 = EBSub_1_1.new
|
162
|
+
ebs22 = EBSub_2_2.new
|
163
|
+
|
164
|
+
ebs1.x = 3
|
165
|
+
ebs11.x = 4
|
166
|
+
ebs22.x = 5
|
167
|
+
|
168
|
+
assert_raises(METHOD_MISSING_ERROR) {
|
169
|
+
ebs2.x = 6
|
170
|
+
}
|
171
|
+
|
172
|
+
assert_equal(3, ebs1.x)
|
173
|
+
assert_equal(4, ebs11.x)
|
174
|
+
assert_equal(5, ebs22.x)
|
175
|
+
end
|
176
|
+
|
177
|
+
end
|
178
|
+
|
179
|
+
class BaseTestCase < Test::Unit::TestCase
|
180
|
+
|
181
|
+
def test_limited_access
|
182
|
+
b = Sub_1.new
|
183
|
+
|
184
|
+
assert_raises(METHOD_MISSING_ERROR) {
|
185
|
+
b.x = 1
|
186
|
+
}
|
187
|
+
assert_equal(0, b.x)
|
188
|
+
|
189
|
+
b.y = 2
|
190
|
+
assert_raises(METHOD_MISSING_ERROR) {
|
191
|
+
b.y
|
192
|
+
}
|
193
|
+
|
194
|
+
assert_raises(METHOD_MISSING_ERROR) {
|
195
|
+
b.z = 3
|
196
|
+
}
|
197
|
+
assert_raises(METHOD_MISSING_ERROR) {
|
198
|
+
b.z
|
199
|
+
}
|
200
|
+
end
|
201
|
+
|
202
|
+
def test_inherit
|
203
|
+
b = Sub_1.new
|
204
|
+
|
205
|
+
# test inheritance of attr initializers
|
206
|
+
assert_equal(nil, b.obj)
|
207
|
+
|
208
|
+
# test inheritance of attr dump/load code
|
209
|
+
b.obj = [1,2,3]
|
210
|
+
assert_equal([1,2,3], Marshal.load(Marshal.dump(b)).obj)
|
211
|
+
end
|
212
|
+
|
213
|
+
def test_marshal
|
214
|
+
b = Base.new
|
215
|
+
b.obj = [1, {:foo => "foo"}, "bar"]
|
216
|
+
b.instance_eval {@z=3}
|
217
|
+
bb = Marshal.load(Marshal.dump(b))
|
218
|
+
assert_equal(bb.obj, b.obj)
|
219
|
+
assert_equal(bb.instance_eval{@z}, b.instance_eval{@z})
|
220
|
+
end
|
221
|
+
|
222
|
+
def test_nonpersistence
|
223
|
+
b = Base.new
|
224
|
+
assert_equal(nil, b.np)
|
225
|
+
b.np = [4,5,6]
|
226
|
+
assert_equal([4,5,6], b.np)
|
227
|
+
bb = Marshal.load(Marshal.dump(b))
|
228
|
+
assert_equal(nil, bb.np)
|
229
|
+
end
|
230
|
+
|
231
|
+
def test_protect
|
232
|
+
a = Base.new
|
233
|
+
b = Sub_4.new
|
234
|
+
assert_nothing_raised {a.x; a.y = 2}
|
235
|
+
assert_raises(METHOD_MISSING_ERROR) {
|
236
|
+
b.x
|
237
|
+
}
|
238
|
+
assert_raises(METHOD_MISSING_ERROR) {
|
239
|
+
b.y = 2
|
240
|
+
}
|
241
|
+
end
|
242
|
+
|
243
|
+
def test_reflection
|
244
|
+
names = Sub_1.shadow_attrs.collect { |attr| attr.var.to_s }.sort
|
245
|
+
assert_equal(['np', 'obj', 'x', 'y', 'z'], names)
|
246
|
+
end
|
247
|
+
|
248
|
+
end
|
249
|
+
|
250
|
+
class OtherBaseTestCase < Test::Unit::TestCase
|
251
|
+
|
252
|
+
def test_sharing_library
|
253
|
+
ob = OtherBase.new
|
254
|
+
ob.str = "fred"
|
255
|
+
assert_equal("fred", ob.str)
|
256
|
+
|
257
|
+
ob = OtherFile.new
|
258
|
+
ob.x = 1.2
|
259
|
+
assert_equal(1.2, ob.x)
|
260
|
+
end
|
261
|
+
|
262
|
+
end
|
263
|
+
|
264
|
+
begin
|
265
|
+
require 'yaml'
|
266
|
+
module Kernel
|
267
|
+
undef :y # else conflict with checking :y is undefined above
|
268
|
+
end
|
269
|
+
CShadow.allow_yaml
|
270
|
+
rescue Exception => e
|
271
|
+
$stderr.puts "Could not load yaml : #{e.inspect}"
|
272
|
+
else
|
273
|
+
|
274
|
+
class YamlTest < Test::Unit::TestCase
|
275
|
+
|
276
|
+
def test_yaml
|
277
|
+
base = Base.new
|
278
|
+
base.obj = [1,2,3]
|
279
|
+
base.np = "456"
|
280
|
+
|
281
|
+
base2 = YAML.load(YAML.dump(base))
|
282
|
+
|
283
|
+
assert_equal(base.obj, base2.obj)
|
284
|
+
assert_equal(nil, base2.np)
|
285
|
+
end
|
286
|
+
|
287
|
+
end
|
288
|
+
|
289
|
+
end
|
data/test/test.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
def run(x)
|
4
|
+
puts "-"*x.size
|
5
|
+
puts x
|
6
|
+
system(x)
|
7
|
+
# unless system(x)
|
8
|
+
# puts " ... failed: #{$?}"
|
9
|
+
# end
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'rbconfig'
|
13
|
+
ruby = Config::CONFIG["RUBY_INSTALL_NAME"]
|
14
|
+
|
15
|
+
run "#{ruby} test-cgen.rb"
|
16
|
+
run "#{ruby} test-cshadow.rb"
|
17
|
+
run "#{ruby} test-attribute.rb"
|
metadata
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cgen
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.16.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Joel VanderWerf
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-07-26 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: bones
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 2.5.1
|
24
|
+
version:
|
25
|
+
description: |
|
26
|
+
Framework for dynamically generating and loading C extensions from Ruby
|
27
|
+
programs. Includes CShadow module for defining classes in terms of C structs
|
28
|
+
with accessors and inheritance.
|
29
|
+
|
30
|
+
email: vjoel@users.sourceforge.net
|
31
|
+
executables: []
|
32
|
+
|
33
|
+
extensions: []
|
34
|
+
|
35
|
+
extra_rdoc_files:
|
36
|
+
- History.txt
|
37
|
+
- README.txt
|
38
|
+
- examples/inherit-example.txt
|
39
|
+
files:
|
40
|
+
- .gitignore
|
41
|
+
- History.txt
|
42
|
+
- README.txt
|
43
|
+
- examples/bench.rb
|
44
|
+
- examples/complex.rb
|
45
|
+
- examples/complex2.rb
|
46
|
+
- examples/cshadow-example.rb
|
47
|
+
- examples/cshadow-point.rb
|
48
|
+
- examples/ctest.rb
|
49
|
+
- examples/ctest2.rb
|
50
|
+
- examples/ctest3.rb
|
51
|
+
- examples/ctest4.rb
|
52
|
+
- examples/ctest5.rb
|
53
|
+
- examples/example-ruby-talk-30April2004.rb
|
54
|
+
- examples/fixed-array.rb
|
55
|
+
- examples/inherit-example.rb
|
56
|
+
- examples/inherit-example.txt
|
57
|
+
- examples/instance-eval.rb
|
58
|
+
- examples/ivset.rb
|
59
|
+
- examples/marshal-test.rb
|
60
|
+
- examples/matrix.rb
|
61
|
+
- examples/modular-def.rb
|
62
|
+
- examples/objattr.rb
|
63
|
+
- examples/opaque-struct-test.rb
|
64
|
+
- examples/sample.rb
|
65
|
+
- examples/struct.rb
|
66
|
+
- examples/test.rb
|
67
|
+
- examples/yaml.rb
|
68
|
+
- install.rb
|
69
|
+
- lib/cgen/attribute.rb
|
70
|
+
- lib/cgen/cgen.rb
|
71
|
+
- lib/cgen/cshadow.rb
|
72
|
+
- lib/cgen/inherit.rb
|
73
|
+
- rakefile
|
74
|
+
- tasks/ann.rake
|
75
|
+
- tasks/bones.rake
|
76
|
+
- tasks/gem.rake
|
77
|
+
- tasks/git.rake
|
78
|
+
- tasks/notes.rake
|
79
|
+
- tasks/post_load.rake
|
80
|
+
- tasks/rdoc.rake
|
81
|
+
- tasks/rubyforge.rake
|
82
|
+
- tasks/setup.rb
|
83
|
+
- tasks/spec.rake
|
84
|
+
- tasks/svn.rake
|
85
|
+
- tasks/test.rake
|
86
|
+
- tasks/zentest.rake
|
87
|
+
- test/test-attribute.rb
|
88
|
+
- test/test-cgen.rb
|
89
|
+
- test/test-cshadow.rb
|
90
|
+
- test/test.rb
|
91
|
+
has_rdoc: true
|
92
|
+
homepage: http://rubyforge.org/projects/cgen/
|
93
|
+
licenses: []
|
94
|
+
|
95
|
+
post_install_message:
|
96
|
+
rdoc_options:
|
97
|
+
- --main
|
98
|
+
- README.txt
|
99
|
+
require_paths:
|
100
|
+
- lib
|
101
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: "0"
|
106
|
+
version:
|
107
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: "0"
|
112
|
+
version:
|
113
|
+
requirements: []
|
114
|
+
|
115
|
+
rubyforge_project: cgen
|
116
|
+
rubygems_version: 1.3.5
|
117
|
+
signing_key:
|
118
|
+
specification_version: 3
|
119
|
+
summary: Library for packed binary data stored in ruby Strings
|
120
|
+
test_files:
|
121
|
+
- test/test-attribute.rb
|
122
|
+
- test/test-cgen.rb
|
123
|
+
- test/test-cshadow.rb
|