cgen 0.16.3 → 0.16.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/History.txt CHANGED
@@ -1,3 +1,11 @@
1
+ cgen 0.16.4
2
+
3
+ - api addition: module and symbol declarations can optionally be sent
4
+ to other file rather than libmain; this supports better separate
5
+ compilation (in redshift)
6
+
7
+ - generated main file is now called libmain.c
8
+
1
9
  cgen 0.16.3
2
10
 
3
11
  - misc fixes for 1.9 compatibility
data/lib/cgen/cgen.rb CHANGED
@@ -418,7 +418,7 @@ require 'cgen/inherit'
418
418
  # way that makes clear that the problem is really with commit.
419
419
  module CGenerator
420
420
 
421
- VERSION = '0.16.3'
421
+ VERSION = '0.16.4'
422
422
 
423
423
  class Accumulator ## should be a mixin? "Cumulative"?
424
424
 
@@ -614,7 +614,7 @@ class Library < Template
614
614
  "\n Name must be a C identifier."
615
615
  end
616
616
 
617
- @include_file, @source_file = add_file name
617
+ @include_file, @source_file = add_file "libmain"
618
618
  @include_file.include '<ruby.h>'
619
619
 
620
620
  @init_library_function = define_c_function "Init_" + name
@@ -886,18 +886,23 @@ class Library < Template
886
886
  def makedepend
887
887
  return if /mswin/i =~ RUBY_PLATFORM ## what else can we do?
888
888
  build_wrapper do
889
+ cpat = "*.c"
890
+ chpat = "*.[ch]"
891
+ dep = "depend"
892
+ return if Dir[cpat].all? {|f| test ?<, f, dep}
893
+
889
894
  cfg = Config::CONFIG
890
895
  dirs = [cfg["sitearchdir"], cfg["archdir"], cfg["includedir"]]
891
896
 
892
897
  case cfg["CC"]
893
898
  when /gcc/
894
899
  makedepend_cmd =
895
- "#{cfg["CC"]} -MM *.c -I#{dirs.join " -I"} >depend 2>#{@logname}"
900
+ "#{cfg["CC"]} -MM #{cpat} -I#{dirs.join " -I"} >#{dep} 2>#{@logname}"
896
901
 
897
902
  else
898
903
  makedepend_cmd =
899
- "touch depend && \
900
- makedepend -fdepend *.c -I#{dirs.join " -I"} >#{@logname} 2>&1"
904
+ "touch #{dep} && \
905
+ makedepend -f#{dep} #{cpat} -I#{dirs.join " -I"} >#{@logname} 2>&1"
901
906
  end
902
907
 
903
908
  result = system makedepend_cmd
@@ -1028,6 +1033,7 @@ class Library < Template
1028
1033
  c_name = spec[:c_name]
1029
1034
  mod = spec[:mod]
1030
1035
  rb_name = spec[:rb_name]
1036
+ cfile = spec[:cfile]
1031
1037
 
1032
1038
  meth_rec =
1033
1039
  if c_name
@@ -1047,7 +1053,7 @@ class Library < Template
1047
1053
 
1048
1054
  kind = @name.to_s.sub(/\Arb_define_/, "")
1049
1055
  if mod
1050
- meth_rec[:mod_c_name] ||= @parent.declare_module(mod) ## @parent ?
1056
+ meth_rec[:mod_c_name] ||= @parent.declare_module(mod, cfile) ## @parent ?
1051
1057
  meth_rec[:c_name] ||=
1052
1058
  ("#{CGenerator::make_c_name rb_name}" +
1053
1059
  "_#{meth_rec[:mod_c_name]}_#{kind}").intern
@@ -1200,20 +1206,20 @@ class Library < Template
1200
1206
  #
1201
1207
  # The second declaration notices that the library already has a variable that
1202
1208
  # will be initialized to the ID of the symbol, and uses it.
1203
- def declare_module mod
1209
+ def declare_module mod, cfile = nil
1204
1210
  c_name = "module_#{CGenerator::make_c_name mod.to_s}"
1205
1211
  declare mod => "VALUE #{c_name}"
1206
- declare_extern mod => "extern VALUE #{c_name}"
1212
+ (cfile || self).declare_extern mod => "extern VALUE #{c_name}"
1207
1213
  setup mod => "#{c_name} = rb_path2class(\"#{mod}\")"
1208
1214
  c_name.intern
1209
1215
  end
1210
1216
  alias declare_class declare_module
1211
1217
 
1212
1218
  # See #declare_module.
1213
- def declare_symbol sym
1219
+ def declare_symbol sym, cfile = nil
1214
1220
  c_name = "ID_#{CGenerator::make_c_name sym}"
1215
1221
  declare sym => "ID #{c_name}"
1216
- declare_extern sym => "extern ID #{c_name}"
1222
+ (cfile || self).declare_extern sym => "extern ID #{c_name}"
1217
1223
  setup sym => "#{c_name} = rb_intern(\"#{sym}\")"
1218
1224
  c_name.intern
1219
1225
  end
@@ -1221,10 +1227,10 @@ class Library < Template
1221
1227
  # Like Library#declare_symbol, but converts the ID to a VALUE at library
1222
1228
  # initialization time. Useful for looking up hash values keyed by symbol
1223
1229
  # objects, for example. +sym+ is a string or symbol.
1224
- def literal_symbol sym
1230
+ def literal_symbol sym, cfile = nil
1225
1231
  c_name = "SYM_#{CGenerator::make_c_name sym}"
1226
1232
  declare sym => "VALUE #{c_name}"
1227
- declare_extern sym => "extern VALUE #{c_name}"
1233
+ (cfile || self).declare_extern sym => "extern VALUE #{c_name}"
1228
1234
  setup sym => "#{c_name} = ID2SYM(rb_intern(\"#{sym}\"))"
1229
1235
  c_name.intern
1230
1236
  end
@@ -1328,10 +1334,10 @@ class CFile < CFragment
1328
1334
 
1329
1335
  attr_reader :include_file
1330
1336
 
1331
- def initialize name, library, include_file = nil
1337
+ def initialize name, library, include_file = nil, bare = !!include_file
1332
1338
  super name, library
1333
1339
  @include_file = include_file
1334
- if include_file
1340
+ if bare
1335
1341
  add preamble!, include!, declare!, define!
1336
1342
  else
1337
1343
  ## it's a little hacky to decide in this way that this is a .h file
@@ -1416,7 +1422,7 @@ class CFile < CFragment
1416
1422
  unless subclass <= Method ## should use assert
1417
1423
  raise "#{subclass.name} is not <= Method"
1418
1424
  end
1419
- c_name = library.rb_define_method :mod => mod, :rb_name => name
1425
+ c_name = rb_define_method :mod => mod, :rb_name => name, :cfile => self
1420
1426
  define c_name, subclass
1421
1427
  end
1422
1428
 
@@ -1424,7 +1430,7 @@ class CFile < CFragment
1424
1430
  # Used to break large projects up into many files.
1425
1431
  def define_c_module_function mod, name, subclass = ModuleFunction
1426
1432
  raise unless subclass <= ModuleFunction
1427
- c_name = library.rb_define_module_function :mod => mod, :rb_name => name
1433
+ c_name = rb_define_module_function :mod => mod, :rb_name => name, :cfile => self
1428
1434
  define c_name, subclass
1429
1435
  end
1430
1436
 
@@ -1432,7 +1438,7 @@ class CFile < CFragment
1432
1438
  # Used to break large projects up into many files.
1433
1439
  def define_c_global_function name, subclass = GlobalFunction
1434
1440
  raise unless subclass <= GlobalFunction
1435
- c_name = library.rb_define_global_function :rb_name => name
1441
+ c_name = rb_define_global_function :rb_name => name, :cfile => self
1436
1442
  define c_name, subclass
1437
1443
  end
1438
1444
 
@@ -1440,13 +1446,13 @@ class CFile < CFragment
1440
1446
  # Used to break large projects up into many files.
1441
1447
  def define_c_singleton_method mod, name, subclass = SingletonMethod
1442
1448
  raise unless subclass <= SingletonMethod
1443
- c_name = library.rb_define_singleton_method :mod => mod, :rb_name => name
1449
+ c_name = rb_define_singleton_method :mod => mod, :rb_name => name, :cfile => self
1444
1450
  define c_name, subclass
1445
1451
  end
1446
1452
  alias define_c_class_method define_c_singleton_method
1447
1453
 
1448
1454
  def define_alloc_func klass
1449
- klass_c_name = declare_class klass
1455
+ klass_c_name = declare_class klass, self # cfile
1450
1456
  c_name = "alloc_func_#{klass_c_name}"
1451
1457
  library.init_library_function.body \
1452
1458
  %{rb_define_alloc_func(#{klass_c_name}, #{c_name})}
data/rakefile CHANGED
@@ -11,9 +11,7 @@ Bones {
11
11
  name 'cgen'
12
12
  authors 'Joel VanderWerf'
13
13
  email 'vjoel@users.sourceforge.net'
14
- # url 'http://rubyforge.org/projects/cgen'
15
- # url 'http://rubygems.org/gems/cgen'
16
- url 'http://gemcutter.org/gems/cgen'
14
+ url 'http://rubyforge.org/projects/cgen'
17
15
  rubyforge.name 'cgen'
18
16
  version CGenerator::VERSION
19
17
  readme_file 'README.txt'
@@ -32,6 +30,8 @@ END
32
30
  test.files = Dir["test/test-*.rb"]
33
31
  }
34
32
 
33
+ task 'gem:release' => 'rubyforge:release' # to release to rubyforge as well
34
+
35
35
  task :release => ["rubyforge:release", "rubyforge:doc_release"]
36
36
 
37
37
  # EOF
@@ -53,6 +53,12 @@ class ObjectAttributeTest < AttributeTest
53
53
  def make_thing c
54
54
  @oas.x = c.new
55
55
  end
56
+
57
+ def make_things c, n
58
+ 10.times do
59
+ make_thing c
60
+ end
61
+ end
56
62
 
57
63
  def trash_thing
58
64
  @oas.x = nil
@@ -62,9 +68,8 @@ class ObjectAttributeTest < AttributeTest
62
68
  @oas = ObjectAttributeSample.new
63
69
  c = Class.new
64
70
 
65
- 10.times do
66
- make_thing c
67
- end
71
+ make_things c, 10
72
+
68
73
  GC.start
69
74
  assert_equal(1, ObjectSpace.each_object(c) {})
70
75
  end
@@ -130,6 +135,12 @@ class ShadowObjectAttributeTest < AttributeTest
130
135
  def make_thing c
131
136
  @sas.x = c.new
132
137
  end
138
+
139
+ def make_things c, n
140
+ n.times do
141
+ make_thing c
142
+ end
143
+ end
133
144
 
134
145
  def trash_thing
135
146
  @sas.x = nil
@@ -141,9 +152,7 @@ class ShadowObjectAttributeTest < AttributeTest
141
152
 
142
153
  GC.start
143
154
  n = ObjectSpace.each_object(c) {}
144
- 10.times do
145
- make_thing c
146
- end
155
+ make_things c, 10
147
156
  GC.start
148
157
  assert_equal(n+1, ObjectSpace.each_object(c) {})
149
158
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cgen
3
3
  version: !ruby/object:Gem::Version
4
- hash: 89
4
+ hash: 87
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 16
9
- - 3
10
- version: 0.16.3
9
+ - 4
10
+ version: 0.16.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Joel VanderWerf
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-06-06 00:00:00 -07:00
18
+ date: 2010-06-26 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -26,12 +26,12 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- hash: 17
29
+ hash: 25
30
30
  segments:
31
31
  - 3
32
32
  - 4
33
- - 3
34
- version: 3.4.3
33
+ - 7
34
+ version: 3.4.7
35
35
  type: :development
36
36
  version_requirements: *id001
37
37
  description: |
@@ -89,7 +89,7 @@ files:
89
89
  - test/test-cshadow.rb
90
90
  - test/test.rb
91
91
  has_rdoc: true
92
- homepage: http://gemcutter.org/gems/cgen
92
+ homepage: http://rubyforge.org/projects/cgen
93
93
  licenses: []
94
94
 
95
95
  post_install_message: