ruby-internal 0.8.4 → 0.8.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,4 @@
1
1
  $: << '../../'
2
2
  require 'mkmf-ruby-internal'
3
+ have_type('struct RTypedData')
3
4
  create_ruby_internal_makefile 'internal/thread/thread'
@@ -8,6 +8,22 @@
8
8
 
9
9
  #ifdef RUBY_VM
10
10
 
11
+ #ifdef HAVE_TYPE_STRUCT_RTYPEDDATA
12
+
13
+ # undef GetThreadPtr
14
+ # define GetThreadPtr(obj, ptr) \
15
+ TypedData_Get_Struct((obj), rb_thread_t, p_ruby_threadptr_data_type, (ptr))
16
+
17
+ static rb_data_type_t const * p_ruby_threadptr_data_type;
18
+
19
+ static void init_ruby_threadptr_data_type()
20
+ {
21
+ VALUE thread = rb_thread_current();
22
+ p_ruby_threadptr_data_type = RTYPEDDATA_TYPE(thread);
23
+ }
24
+
25
+ #endif
26
+
11
27
  static VALUE rb_cVmControlFrame;
12
28
 
13
29
  /* TODO: also defined in control_frame.c */
@@ -109,5 +125,9 @@ void Init_thread(void)
109
125
 
110
126
  rb_define_method(rb_cThread, "cfp", thread_cfp, 0);
111
127
  #endif
128
+
129
+ #ifdef HAVE_TYPE_STRUCT_RTYPEDDATA
130
+ init_ruby_threadptr_data_type();
131
+ #endif
112
132
  }
113
133
 
@@ -5,6 +5,22 @@
5
5
 
6
6
  #include "vm_core.h"
7
7
 
8
+ #ifdef HAVE_TYPE_STRUCT_RTYPEDDATA
9
+
10
+ # undef GetThreadPtr
11
+ # define GetThreadPtr(obj, ptr) \
12
+ TypedData_Get_Struct((obj), rb_thread_t, p_ruby_threadptr_data_type, (ptr))
13
+
14
+ static rb_data_type_t const * p_ruby_threadptr_data_type;
15
+
16
+ static void init_ruby_threadptr_data_type()
17
+ {
18
+ VALUE thread = rb_thread_current();
19
+ p_ruby_threadptr_data_type = RTYPEDDATA_TYPE(thread);
20
+ }
21
+
22
+ #endif
23
+
8
24
  /* TODO: Using this class is dangerous, because the control frame can be
9
25
  * popped but a reference kept around to it. It will still point to
10
26
  * valid memory, but the data itself will be invalid.
@@ -199,5 +215,9 @@ void Init_control_frame(void)
199
215
  rb_define_method(rb_cVmControlFrame, "method_class", control_frame_method_class, 0);
200
216
  rb_define_method(rb_cVmControlFrame, "prev", control_frame_prev, 0);
201
217
  #endif
218
+
219
+ #ifdef HAVE_TYPE_STRUCT_RTYPEDDATA
220
+ init_ruby_threadptr_data_type();
221
+ #endif
202
222
  }
203
223
 
@@ -4,4 +4,6 @@ require 'mkmf-ruby-internal'
4
4
  ruby_version_code = RUBY_VERSION.gsub(/\./, '').to_i
5
5
  $CPPFLAGS << " -DRUBY_VERSION_CODE=#{ruby_version_code}"
6
6
 
7
+ have_type('struct RTypedData')
8
+
7
9
  create_ruby_internal_makefile 'internal/vm/control_frame/control_frame'
@@ -38,8 +38,6 @@ class TC_Module < Test::Unit::TestCase
38
38
  klass.class_eval do
39
39
  add_method(:foo, n, Noex::PUBLIC)
40
40
  end
41
- p klass.methods.sort
42
- p klass.instance_methods.sort
43
41
  obj = klass.new
44
42
  assert_equal 42, obj.foo
45
43
  end
@@ -0,0 +1,25 @@
1
+ require 'test/unit'
2
+ require 'rbconfig'
3
+
4
+ dir = File.dirname(__FILE__)
5
+ $:.unshift(dir) if not $:.include?(dir)
6
+ $:.unshift("#{dir}/../lib") if not $:.include?("#{dir}/../lib")
7
+ $:.unshift("#{dir}/../ext") if not $:.include?("#{dir}/../ext")
8
+
9
+ require 'internal/thread'
10
+
11
+ $stdout.sync = true
12
+ $stderr.sync = true
13
+
14
+ class TC_Thread < Test::Unit::TestCase
15
+ def test_thread_cfp
16
+ return if not defined?(RubyVM)
17
+
18
+ cfp = Thread.current.cfp
19
+ end
20
+ end
21
+
22
+ if __FILE__ == $0 then
23
+ exit Test::Unit::AutoRunner.run
24
+ end
25
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-internal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.4
4
+ version: 0.8.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-16 00:00:00.000000000 Z
12
+ date: 2012-05-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rubypp
@@ -361,6 +361,7 @@ files:
361
361
  - test/test_method.rb
362
362
  - test/node_samples.rb
363
363
  - test/test_node.rb
364
+ - test/test_thread.rb
364
365
  - test/test_module.rb
365
366
  - test/test_dump_class.rb
366
367
  - pre-install.rb
@@ -416,5 +417,6 @@ test_files:
416
417
  - test/test_helpers.rb
417
418
  - test/test_method.rb
418
419
  - test/test_node.rb
420
+ - test/test_thread.rb
419
421
  - test/test_module.rb
420
422
  - test/test_dump_class.rb