rb-threadframe 0.32 → 0.33
Sign up to get free protection for your applications and to get access to all the features.
- data/Makefile +14 -0
- data/NEWS +6 -1
- data/Rakefile +43 -74
- data/ext/iseq_extra.c +33 -1
- data/ext/thread_frame.c +1 -1
- data/include/vm_core_mini.h +1 -1
- data/test/unit/test-lib-iseq-extra.rb +8 -0
- metadata +13 -13
data/Makefile
ADDED
data/NEWS
CHANGED
@@ -1,2 +1,7 @@
|
|
1
|
+
October 27 2010 (0.33)
|
2
|
+
- Revise rvm install script to be more roboust
|
3
|
+
- Change bug report location so we don't spam Ruby's redmine
|
4
|
+
- Add RubyVM::InstructionSequence#parent and #local_iseq fields
|
5
|
+
|
1
6
|
September 12 2010 (0.32)
|
2
|
-
First release on gemcutter
|
7
|
+
- First release on gemcutter
|
data/Rakefile
CHANGED
@@ -1,30 +1,35 @@
|
|
1
1
|
#!/usr/bin/env rake
|
2
2
|
# -*- Ruby -*-
|
3
3
|
require 'rubygems'
|
4
|
-
require '
|
5
|
-
require 'rake/gempackagetask'
|
6
|
-
require 'rake/rdoctask'
|
7
|
-
require 'rake/testtask'
|
4
|
+
require 'fileutils'
|
8
5
|
|
9
|
-
|
6
|
+
ROOT_DIR = File.dirname(__FILE__)
|
10
7
|
|
11
8
|
require 'rbconfig'
|
12
9
|
RUBY_PATH = File.join(RbConfig::CONFIG['bindir'],
|
13
10
|
RbConfig::CONFIG['RUBY_INSTALL_NAME'])
|
14
11
|
|
15
|
-
|
12
|
+
def gemspec
|
13
|
+
@gemspec ||= eval(File.read('.gemspec'), binding, '.gemspec')
|
14
|
+
end
|
16
15
|
|
17
|
-
|
18
|
-
|
16
|
+
require 'rake/gempackagetask'
|
17
|
+
desc "Build the gem"
|
18
|
+
task :package=>:gem
|
19
|
+
task :gem=>:gemspec do
|
20
|
+
Dir.chdir(ROOT_DIR) do
|
21
|
+
sh "gem build .gemspec"
|
22
|
+
FileUtils.mkdir_p 'pkg'
|
23
|
+
FileUtils.mv "#{gemspec.name}-#{gemspec.version}.gem", 'pkg'
|
24
|
+
end
|
19
25
|
end
|
20
26
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
TEST_FILES
|
27
|
+
desc "Install the gem locally"
|
28
|
+
task :install => :gem do
|
29
|
+
Dir.chdir(ROOT_DIR) do
|
30
|
+
sh %{gem install --local pkg/#{gemspec.name}-#{gemspec.version}}
|
31
|
+
end
|
32
|
+
end
|
28
33
|
|
29
34
|
desc 'Create the core thread-frame shared library extension'
|
30
35
|
task :ext do
|
@@ -35,7 +40,7 @@ end
|
|
35
40
|
|
36
41
|
desc 'Remove built files'
|
37
42
|
task :clean do
|
38
|
-
|
43
|
+
Dir.chdir File.join(ROOT_DIR, 'ext') do
|
39
44
|
if File.exist?('Makefile')
|
40
45
|
sh 'make clean'
|
41
46
|
rm 'Makefile'
|
@@ -62,6 +67,7 @@ end
|
|
62
67
|
|
63
68
|
task :default => [:test]
|
64
69
|
|
70
|
+
require 'rake/testtask'
|
65
71
|
desc 'Test units - the smaller tests'
|
66
72
|
task :'test:unit' => [:ext] do |t|
|
67
73
|
Rake::TestTask.new(:'test:unit') do |t|
|
@@ -87,76 +93,39 @@ task :test do
|
|
87
93
|
raise "Test failures" unless exceptions.empty?
|
88
94
|
end
|
89
95
|
|
90
|
-
desc "
|
91
|
-
|
96
|
+
desc "test in isolation."
|
92
97
|
task :'check' do
|
93
|
-
run_standalone_ruby_file(File.join(%W(#{
|
98
|
+
run_standalone_ruby_file(File.join(%W(#{ROOT_DIR} test unit)))
|
99
|
+
end
|
100
|
+
|
101
|
+
desc "Generate the gemspec"
|
102
|
+
task :generate do
|
103
|
+
puts gemspec.to_ruby
|
104
|
+
end
|
105
|
+
|
106
|
+
desc "Validate the gemspec"
|
107
|
+
task :gemspec do
|
108
|
+
gemspec.validate
|
94
109
|
end
|
95
110
|
|
96
111
|
# --------- RDoc Documentation ------
|
112
|
+
require 'rake/rdoctask'
|
97
113
|
desc 'Generate rdoc documentation'
|
98
114
|
Rake::RDocTask.new('rdoc') do |rdoc|
|
99
|
-
rdoc.rdoc_dir = 'doc
|
115
|
+
rdoc.rdoc_dir = 'doc'
|
100
116
|
rdoc.title = 'rb-threadframe'
|
101
|
-
# Show source inline with line numbers
|
102
|
-
rdoc.options << '--inline-source' << '--line-numbers'
|
103
117
|
# Make the readme file the start page for the generated html
|
104
|
-
rdoc.options
|
118
|
+
rdoc.options += %w(--main README.md)
|
105
119
|
rdoc.rdoc_files.include('ext/**/*.c',
|
106
120
|
'README.md')
|
107
121
|
end
|
122
|
+
desc "Same as rdoc"
|
123
|
+
task :doc => :rdoc
|
108
124
|
|
109
|
-
|
110
|
-
|
111
|
-
spec.name = "rb-threadframe"
|
112
|
-
|
113
|
-
spec.homepage = "http://github.com/rocky/rb-threadframe/tree/master"
|
114
|
-
spec.summary = "Frame introspection"
|
115
|
-
spec.description = <<-EOF
|
116
|
-
|
117
|
-
rb-threadframe gives introspection access for frames of a thread.
|
118
|
-
EOF
|
119
|
-
|
120
|
-
spec.version = PACKAGE_VERSION
|
121
|
-
spec.require_path = 'lib'
|
122
|
-
spec.extensions = ["ext/extconf.rb"]
|
123
|
-
|
124
|
-
spec.author = "R. Bernstein"
|
125
|
-
spec.email = "rocky@gnu.org"
|
126
|
-
spec.platform = Gem::Platform::RUBY
|
127
|
-
spec.files = ALL_FILES.to_a
|
128
|
-
|
129
|
-
spec.required_ruby_version = '>= 1.9.2'
|
130
|
-
spec.date = Time.now
|
131
|
-
# spec.rubyforge_project = 'rocky-hacks'
|
132
|
-
|
133
|
-
# rdoc
|
134
|
-
spec.has_rdoc = true
|
135
|
-
spec.extra_rdoc_files = ['README.md', 'threadframe.rd'] +
|
136
|
-
FileList['ext/*.c']
|
137
|
-
end
|
138
|
-
|
139
|
-
# Rake task to build the default package
|
140
|
-
Rake::GemPackageTask.new(spec) do |pkg|
|
141
|
-
pkg.need_tar = true
|
125
|
+
task :clobber_package do
|
126
|
+
FileUtils.rm_rf File.join(ROOT_DIR, 'pkg')
|
142
127
|
end
|
143
128
|
|
144
|
-
|
145
|
-
|
146
|
-
system(*args)
|
129
|
+
task :clobber_rdoc do
|
130
|
+
FileUtils.rm_rf File.join(ROOT_DIR, 'doc')
|
147
131
|
end
|
148
|
-
|
149
|
-
desc 'Install locally'
|
150
|
-
task :install => :package do
|
151
|
-
Dir.chdir(File::dirname(__FILE__)) do
|
152
|
-
# ri and rdoc take lots of time
|
153
|
-
install(spec, '--no-ri', '--no-rdoc')
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
task :install_full => :package do
|
158
|
-
Dir.chdir(File::dirname(__FILE__)) do
|
159
|
-
install(spec)
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
data/ext/iseq_extra.c
CHANGED
@@ -5,7 +5,8 @@
|
|
5
5
|
/*
|
6
6
|
* Additions to the RubyVM::InstructionSequence class
|
7
7
|
*/
|
8
|
-
VALUE rb_cIseq = rb_define_class_under(rb_cRubyVM, "InstructionSequence",
|
8
|
+
VALUE rb_cIseq = rb_define_class_under(rb_cRubyVM, "InstructionSequence",
|
9
|
+
rb_cObject);
|
9
10
|
#endif
|
10
11
|
|
11
12
|
#include "../include/vm_core_mini.h" /* Pulls in ruby.h and node.h */
|
@@ -103,6 +104,35 @@ iseq_equal(VALUE iseqval1, VALUE iseqval2)
|
|
103
104
|
return Qfalse;
|
104
105
|
}
|
105
106
|
|
107
|
+
VALUE
|
108
|
+
iseq_parent(VALUE self)
|
109
|
+
{
|
110
|
+
rb_iseq_t *piseq;
|
111
|
+
rb_iseq_t *parent_iseq;
|
112
|
+
VALUE parent_iseqval;
|
113
|
+
GetISeqPtr(self, piseq);
|
114
|
+
|
115
|
+
if (!RTEST(piseq->parent_iseq)) return Qnil;
|
116
|
+
parent_iseqval = iseq_alloc_shared(rb_cISeq);
|
117
|
+
GetISeqPtr(parent_iseqval, parent_iseq);
|
118
|
+
memcpy(parent_iseq, piseq->parent_iseq, sizeof(struct rb_iseq_struct));
|
119
|
+
return parent_iseqval;
|
120
|
+
}
|
121
|
+
|
122
|
+
VALUE
|
123
|
+
iseq_local_iseq(VALUE self)
|
124
|
+
{
|
125
|
+
rb_iseq_t *piseq;
|
126
|
+
rb_iseq_t *local_iseq;
|
127
|
+
VALUE local_iseqval;
|
128
|
+
GetISeqPtr(self, piseq);
|
129
|
+
|
130
|
+
if (!RTEST(piseq->local_iseq)) return Qnil;
|
131
|
+
local_iseqval = iseq_alloc_shared(rb_cISeq);
|
132
|
+
GetISeqPtr(local_iseqval, local_iseq);
|
133
|
+
memcpy(local_iseq, piseq->local_iseq, sizeof(struct rb_iseq_struct));
|
134
|
+
return local_iseqval;
|
135
|
+
}
|
106
136
|
|
107
137
|
/*
|
108
138
|
* call-seq:
|
@@ -390,12 +420,14 @@ Init_iseq_extra(void)
|
|
390
420
|
rb_define_method(rb_cISeq, "klass", iseq_klass, 0) ;
|
391
421
|
rb_define_method(rb_cISeq, "lineno", iseq_line_no, 0) ;
|
392
422
|
rb_define_method(rb_cISeq, "line_range", iseq_line_range, 0) ;
|
423
|
+
rb_define_method(rb_cISeq, "local_iseq", iseq_local_iseq, 0) ;
|
393
424
|
rb_define_method(rb_cISeq, "local_name", iseq_local_name, 1) ;
|
394
425
|
rb_define_method(rb_cISeq, "local_size", iseq_local_size, 0) ;
|
395
426
|
rb_define_method(rb_cISeq, "local_table_size", iseq_local_table_size, 0) ;
|
396
427
|
rb_define_method(rb_cISeq, "offset2lines", iseq_offset2lines, 1) ;
|
397
428
|
rb_define_method(rb_cISeq, "offsetlines", iseq_offsetlines, 0) ;
|
398
429
|
rb_define_method(rb_cISeq, "orig", iseq_orig, 0) ;
|
430
|
+
rb_define_method(rb_cISeq, "parent", iseq_parent, 0) ;
|
399
431
|
rb_define_method(rb_cISeq, "name", iseq_name, 0) ;
|
400
432
|
rb_define_method(rb_cISeq, "self", iseq_self, 0) ;
|
401
433
|
rb_define_method(rb_cISeq, "source_container", iseq_source_container, 0) ;
|
data/ext/thread_frame.c
CHANGED
data/include/vm_core_mini.h
CHANGED
@@ -134,7 +134,7 @@ typedef struct rb_iseq_struct {
|
|
134
134
|
* arg_block = M+N + 1 + O + 1 // -1 if no block arg
|
135
135
|
* arg_simple = 0 if not simple arguments.
|
136
136
|
* = 1 if no opt, rest, post, block.
|
137
|
-
* = 2 if
|
137
|
+
* = 2 if ambiguous block parameter ({|a|}).
|
138
138
|
* arg_size = argument size.
|
139
139
|
*/
|
140
140
|
|
@@ -54,4 +54,12 @@ class TestLibISeqExtra < Test::Unit::TestCase
|
|
54
54
|
assert_equal(0, sha1 =~ /^[0-9a-f]+$/)
|
55
55
|
end
|
56
56
|
|
57
|
+
def test_iseq_parent
|
58
|
+
parent_iseq = RubyVM::ThreadFrame::current.iseq
|
59
|
+
1.times do
|
60
|
+
tf = RubyVM::ThreadFrame::current
|
61
|
+
assert_equal(true, tf.iseq.parent.equal?(parent_iseq))
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
57
65
|
end
|
metadata
CHANGED
@@ -4,8 +4,8 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
version: "0.
|
7
|
+
- 33
|
8
|
+
version: "0.33"
|
9
9
|
platform: ruby
|
10
10
|
authors:
|
11
11
|
- R. Bernstein
|
@@ -13,13 +13,13 @@ autorequire:
|
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
15
|
|
16
|
-
date: 2010-
|
16
|
+
date: 2010-10-27 00:00:00 -04:00
|
17
17
|
default_executable:
|
18
18
|
dependencies: []
|
19
19
|
|
20
20
|
description: "\n\
|
21
21
|
rb-threadframe gives introspection access for frames of a thread.\n"
|
22
|
-
email:
|
22
|
+
email: rockyb@rubyforge.net
|
23
23
|
executables: []
|
24
24
|
|
25
25
|
extensions:
|
@@ -27,13 +27,10 @@ extensions:
|
|
27
27
|
extra_rdoc_files:
|
28
28
|
- README.md
|
29
29
|
- threadframe.rd
|
30
|
-
- ext/iseq_extra.c
|
31
|
-
- ext/thread_frame.c
|
32
|
-
- ext/proc_extra.c
|
33
|
-
- ext/thread_extra.c
|
34
30
|
files:
|
35
31
|
- README.md
|
36
32
|
- Rakefile
|
33
|
+
- Makefile
|
37
34
|
- LICENSE
|
38
35
|
- NEWS
|
39
36
|
- include/thread_pthread.h
|
@@ -74,17 +71,20 @@ files:
|
|
74
71
|
- ext/extconf.rb
|
75
72
|
has_rdoc: true
|
76
73
|
homepage: http://github.com/rocky/rb-threadframe/tree/master
|
77
|
-
licenses:
|
78
|
-
|
74
|
+
licenses:
|
75
|
+
- MIT
|
79
76
|
post_install_message:
|
80
|
-
rdoc_options:
|
81
|
-
|
77
|
+
rdoc_options:
|
78
|
+
- --main
|
79
|
+
- README.md
|
80
|
+
- --title
|
81
|
+
- ThreadFrame 0.33 Documentation
|
82
82
|
require_paths:
|
83
83
|
- lib
|
84
84
|
required_ruby_version: !ruby/object:Gem::Requirement
|
85
85
|
none: false
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - "="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
segments:
|
90
90
|
- 1
|