rb-threadframe 0.32 → 0.33
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/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
|