debugger-linecache 1.1.2 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  before_install: bundle init --gemspec=debugger-linecache.gemspec
2
- before_script: rake compile
3
2
  rvm:
4
3
  - 1.9.2
5
4
  - 1.9.3
5
+ - 2.0.0
@@ -1,3 +1,7 @@
1
+ ## 1.2.0
2
+ * Replace C extension with ruby
3
+ * No more debugger-ruby_core_source dependency
4
+
1
5
  ## 1.1.2
2
6
  * Fix rdoc/ri warning
3
7
 
@@ -0,0 +1 @@
1
+ Thanks for trying out this project! [See here for contribution guidelines.](http://tagaholic.me/contributing.html)
data/README.md CHANGED
@@ -7,10 +7,14 @@ For more info see OLD\_README.
7
7
  ## Credits
8
8
 
9
9
  * Original authors: R. Bernstein, Mark Moseley
10
+ * @ko1 - replace C extension with ruby
10
11
 
11
12
  ## TODO
12
13
  * Fix todo test
13
14
 
15
+ ## Contributing
16
+ [See here](http://tagaholic.me/contributing.html)
17
+
14
18
  ## LICENSE
15
19
 
16
20
  This library is licensed under LICENSE.txt. Original was GNU.
data/Rakefile CHANGED
@@ -1,11 +1,7 @@
1
1
  # -*- Ruby -*-
2
+
2
3
  require 'rubygems/package_task'
3
4
  require 'rake/testtask'
4
- require 'rake/extensiontask'
5
-
6
- Rake::ExtensionTask.new('trace_nums')
7
-
8
- SO_NAME = "trace_nums.so"
9
5
 
10
6
  desc "Test everything."
11
7
  test_task = task :test => :lib do
@@ -16,13 +12,6 @@ test_task = task :test => :lib do
16
12
  end
17
13
  end
18
14
 
19
- desc "Create the core ruby-debug shared library extension"
20
- task :lib do
21
- Dir.chdir("ext") do
22
- system("#{Gem.ruby} extconf.rb && make")
23
- end
24
- end
25
-
26
15
  desc "Test everything - same as test."
27
16
  task :check => :test
28
17
 
@@ -32,40 +21,8 @@ Gem::PackageTask.new(base_spec) do |pkg|
32
21
  pkg.need_tar = true
33
22
  end
34
23
 
35
- # Windows specification
36
- win_spec = base_spec.clone
37
- win_spec.extensions = []
38
- ## win_spec.platform = Gem::Platform::WIN32 # deprecated
39
- win_spec.platform = 'mswin32'
40
- win_spec.files += ["lib/#{SO_NAME}"]
41
-
42
- desc "Create Windows Gem"
43
- task :win32_gem do
44
- # Copy the win32 extension the top level directory.
45
- current_dir = File.expand_path(File.dirname(__FILE__))
46
- source = File.join(current_dir, "ext", "win32", SO_NAME)
47
- target = File.join(current_dir, "lib", SO_NAME)
48
- cp(source, target)
49
-
50
- # Create the gem, then move it to pkg.
51
- Gem::Builder.new(win_spec).build
52
- gem_file = "#{win_spec.name}-#{win_spec.version}-#{win_spec.platform}.gem"
53
- mv(gem_file, "pkg/#{gem_file}")
54
-
55
- # Remove win extension from top level directory.
56
- rm(target)
57
- end
58
-
59
24
  desc "Remove built files"
60
- task :clean => [:clobber_package, :clobber_rdoc] do
61
- cd "ext" do
62
- if File.exists?("Makefile")
63
- sh "make clean"
64
- rm "Makefile"
65
- end
66
- derived_files = Dir.glob(".o") + Dir.glob("*.so")
67
- rm derived_files unless derived_files.empty?
68
- end
25
+ task :clean => [:clobber_package] do
69
26
  end
70
27
 
71
28
  task :default => [:test]
@@ -1,4 +1,4 @@
1
- # -*- encoding: utf-8 -*-
1
+ # -*- encoding: utf-8 -*-
2
2
  require 'rubygems' unless defined? Gem
3
3
  require File.dirname(__FILE__) + "/lib/debugger/linecache"
4
4
 
@@ -15,8 +15,6 @@ example in a debugger where the same lines are shown many times.
15
15
  s.required_rubygems_version = ">= 1.3.6"
16
16
  s.extra_rdoc_files = ["README.md"]
17
17
  s.files = `git ls-files`.split("\n")
18
- s.extensions << "ext/trace_nums/extconf.rb"
19
- s.add_dependency "debugger-ruby_core_source", '>= 1.1.1'
20
18
  s.add_development_dependency 'rake', '~> 0.9.2.2'
21
- s.add_development_dependency 'rake-compiler', '~> 0.8.0'
19
+ s.license = "MIT"
22
20
  end
@@ -1,5 +1,5 @@
1
1
  module Debugger
2
2
  module Linecache
3
- VERSION = '1.1.2'
3
+ VERSION = '1.2.0'
4
4
  end
5
5
  end
@@ -1,10 +1,26 @@
1
1
  #!/usr/bin/env ruby
2
2
  # $Id$
3
- require 'trace_nums'
4
3
 
5
4
  module TraceLineNumbers
6
5
  # Return an array of lines numbers that could be
7
6
  # stopped at given a file name of a Ruby program.
7
+
8
+ def self.lnums_for_str src
9
+ name = "#{Time.new.to_i}_#{rand(2**31)}"
10
+ iseq = RubyVM::InstructionSequence.compile(src, name)
11
+ lines = {}
12
+ iseq.disasm.each_line{|line|
13
+ if /^\d+ (\w+)\s+.+\(\s*(\d+)\)$/ =~ line
14
+ insn = $1
15
+ lineno = $2.to_i
16
+ next unless insn == 'trace'
17
+ lines[lineno] = true
18
+ # p [lineno, line]
19
+ end
20
+ }
21
+ lines.keys
22
+ end
23
+
8
24
  def lnums_for_file(file)
9
25
  lnums_for_str(File.read(file))
10
26
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: debugger-linecache
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,24 +11,8 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2012-06-30 00:00:00.000000000 Z
14
+ date: 2013-03-11 00:00:00.000000000 Z
15
15
  dependencies:
16
- - !ruby/object:Gem::Dependency
17
- name: debugger-ruby_core_source
18
- requirement: !ruby/object:Gem::Requirement
19
- none: false
20
- requirements:
21
- - - ! '>='
22
- - !ruby/object:Gem::Version
23
- version: 1.1.1
24
- type: :runtime
25
- prerelease: false
26
- version_requirements: !ruby/object:Gem::Requirement
27
- none: false
28
- requirements:
29
- - - ! '>='
30
- - !ruby/object:Gem::Version
31
- version: 1.1.1
32
16
  - !ruby/object:Gem::Dependency
33
17
  name: rake
34
18
  requirement: !ruby/object:Gem::Requirement
@@ -45,22 +29,6 @@ dependencies:
45
29
  - - ~>
46
30
  - !ruby/object:Gem::Version
47
31
  version: 0.9.2.2
48
- - !ruby/object:Gem::Dependency
49
- name: rake-compiler
50
- requirement: !ruby/object:Gem::Requirement
51
- none: false
52
- requirements:
53
- - - ~>
54
- - !ruby/object:Gem::Version
55
- version: 0.8.0
56
- type: :development
57
- prerelease: false
58
- version_requirements: !ruby/object:Gem::Requirement
59
- none: false
60
- requirements:
61
- - - ~>
62
- - !ruby/object:Gem::Version
63
- version: 0.8.0
64
32
  description: ! 'Linecache is a module for reading and caching lines. This may be useful
65
33
  for
66
34
 
@@ -69,22 +37,19 @@ description: ! 'Linecache is a module for reading and caching lines. This may be
69
37
  '
70
38
  email: gabriel.horner@gmail.com
71
39
  executables: []
72
- extensions:
73
- - ext/trace_nums/extconf.rb
40
+ extensions: []
74
41
  extra_rdoc_files:
75
42
  - README.md
76
43
  files:
77
44
  - .travis.yml
78
45
  - CHANGELOG.md
46
+ - CONTRIBUTING.md
79
47
  - LICENSE.txt
80
48
  - OLD_CHANGELOG
81
49
  - OLD_README
82
50
  - README.md
83
51
  - Rakefile
84
52
  - debugger-linecache.gemspec
85
- - ext/trace_nums/extconf.rb
86
- - ext/trace_nums/trace_nums.c
87
- - ext/trace_nums/trace_nums.h
88
53
  - lib/debugger/linecache.rb
89
54
  - lib/linecache19.rb
90
55
  - lib/tracelines19.rb
@@ -123,7 +88,8 @@ files:
123
88
  - test/test-lnum.rb
124
89
  - test/test-tracelines.rb
125
90
  homepage: http://github.com/cldwalker/debugger-linecache
126
- licenses: []
91
+ licenses:
92
+ - MIT
127
93
  post_install_message:
128
94
  rdoc_options: []
129
95
  require_paths:
@@ -1,15 +0,0 @@
1
- require "mkmf"
2
- require "debugger/ruby_core_source"
3
-
4
- if RUBY_VERSION < '1.9'
5
- abort("Ruby version is too old")
6
- end
7
-
8
- hdrs = proc {
9
- have_header("vm_core.h") and have_header("version.h")
10
- }
11
-
12
- dir_config("ruby")
13
- if !Debugger::RubyCoreSource.create_makefile_with_core(hdrs, "trace_nums")
14
- abort("Makefile creation failed.")
15
- end
@@ -1,105 +0,0 @@
1
- /*
2
- Ruby 1.9 version: (7/20/2009, Mark Moseley, mark@fast-software.com)
3
-
4
- Now works with Ruby-1.9.1. Tested with p129 and p243.
5
-
6
- This does not (and can not) function identically to the 1.8 version.
7
- Line numbers are ordered differently. But ruby-debug doesn't seem
8
- to mind the difference.
9
-
10
- Also, 1.9 does not number lines with a "begin" statement.
11
-
12
- All this 1.9 version does is compile into bytecode, disassemble it
13
- using rb_iseq_disasm(), and parse the text output. This isn't a
14
- great solution; it will break if the disassembly format changes.
15
- Walking the iseq tree and decoding each instruction is pretty hairy,
16
- though, so until I have a really compelling reason to go that route,
17
- I'll leave it at this.
18
- */
19
- #include <ruby.h>
20
- #include <version.h>
21
- #include <vm_core.h>
22
- #include "trace_nums.h"
23
-
24
- VALUE mTraceLineNumbers;
25
-
26
- static inline const rb_data_type_t *
27
- threadptr_data_type(void)
28
- {
29
- static const rb_data_type_t *thread_data_type;
30
- if (!thread_data_type)
31
- {
32
- VALUE current_thread = rb_thread_current();
33
- thread_data_type = RTYPEDDATA_TYPE(current_thread);
34
- }
35
- return thread_data_type;
36
- }
37
-
38
- #define ruby_threadptr_data_type *threadptr_data_type()
39
- #define ruby_current_thread ((rb_thread_t *)RTYPEDDATA_DATA(rb_thread_current()))
40
-
41
- /* Return a list of trace hook line numbers for the string in Ruby source src*/
42
- static VALUE
43
- lnums_for_str(VALUE self, VALUE src)
44
- {
45
- VALUE result = rb_ary_new(); /* The returned array of line numbers. */
46
- int len;
47
- char *token;
48
- char *disasm;
49
- rb_thread_t *th;
50
- VALUE iseqval;
51
- VALUE disasm_val;
52
-
53
- StringValue(src); /* Check that src is a string. */
54
- th = GET_THREAD();
55
-
56
- /* First compile to bytecode, using the method in eval_string_with_cref() in vm_eval.c */
57
- th->parse_in_eval++;
58
- th->mild_compile_error++;
59
- iseqval = rb_iseq_compile(src, rb_str_new_cstr("(numbers_for_str)"), INT2FIX(1));
60
- th->mild_compile_error--;
61
- th->parse_in_eval--;
62
-
63
- /* Disassemble the bytecode into text and parse into lines */
64
- disasm_val = rb_iseq_disasm(iseqval);
65
- if (disasm_val == Qnil)
66
- return(result);
67
-
68
- disasm = (char*)malloc(strlen(RSTRING_PTR(disasm_val))+1);
69
- strcpy(disasm, RSTRING_PTR(disasm_val));
70
-
71
- for (token = strtok(disasm, "\n"); token != NULL; token = strtok(NULL, "\n"))
72
- {
73
- /* look only for lines tracing RUBY_EVENT_LINE (1) */
74
- if (strstr(token, "trace 1 ") == NULL)
75
- continue;
76
- len = strlen(token) - 1;
77
- if (token[len] != ')')
78
- continue;
79
- len--;
80
- if ((token[len] == '(') || (token[len] == ' '))
81
- continue;
82
-
83
- for (; len > 0; len--)
84
- {
85
- if (token[len] == ' ')
86
- continue;
87
- if ((token[len] >= '0') && (token[len] <= '9'))
88
- continue;
89
- if (token[len] == '(')
90
- rb_ary_push(result, INT2NUM(atoi(token + len + 1))); /* trace found */
91
-
92
- break;
93
- }
94
- }
95
-
96
- free(disasm);
97
- return result;
98
- }
99
-
100
- void Init_trace_nums(void)
101
- {
102
- mTraceLineNumbers = rb_define_module("TraceLineNumbers");
103
- rb_define_module_function(mTraceLineNumbers, "lnums_for_str",
104
- lnums_for_str, 1);
105
- }
@@ -1,111 +0,0 @@
1
- /* Order is in C enum order. The below is correct for Ruby 1.8.6.
2
- Possibly others, but there may need some adjustment here.
3
- */
4
- const char *NODE2NAME[] =
5
- {
6
- "method",
7
- "fbody",
8
- "cfunc",
9
- "scope",
10
- "block",
11
- "if",
12
- "case",
13
- "when",
14
- "opt_n (-n)",
15
- "while",
16
- "until",
17
- "iter",
18
- "for",
19
- "break",
20
- "next",
21
- "redo",
22
- "retry",
23
- "begin",
24
- "rescue",
25
- "resbody",
26
- "ensure",
27
- "and",
28
- "or",
29
- "not",
30
- "masgn",
31
- "lasgn (x=)",
32
- "dasgn",
33
- "dasgn_curr",
34
- "gasgn",
35
- "iasgn",
36
- "cdecl",
37
- "cvasgn",
38
- "cvdecl",
39
- "op_asgn1",
40
- "op_asgn2",
41
- "op_asgn_and",
42
- "op_asgn_or",
43
- "call",
44
- "fcall",
45
- "vcall",
46
- "super",
47
- "zsuper",
48
- "array",
49
- "zarray",
50
- "hash",
51
- "return",
52
- "yield",
53
- "lvar",
54
- "dvar",
55
- "gvar",
56
- "ivar",
57
- "const",
58
- "cvar",
59
- "nth_ref",
60
- "back_ref",
61
- "match",
62
- "match2 (~=, !~)",
63
- "match3 (~=, !~)",
64
- "lit",
65
- "str",
66
- "dstr",
67
- "xstr",
68
- "dxstr",
69
- "evstr",
70
- "dregx",
71
- "dregx_once",
72
- "args",
73
- "argscat",
74
- "argspush",
75
- "splat (*args)",
76
- "to_ary",
77
- "svalue",
78
- "block_arg",
79
- "block_pass",
80
- "defn",
81
- "defs",
82
- "alias",
83
- "valias",
84
- "undef",
85
- "class",
86
- "module",
87
- "sclass",
88
- "colon2 (::)",
89
- "colon3",
90
- "cref",
91
- "dot2 (..)",
92
- "dot3 (...)",
93
- "flip2",
94
- "flip3",
95
- "attrset",
96
- "self",
97
- "nil",
98
- "true",
99
- "false",
100
- "defined?",
101
- "newline (; or \\n)",
102
- "postexe",
103
- "alloca",
104
- "dmethod",
105
- "bmethod",
106
- "memo",
107
- "ifunc",
108
- "dsym",
109
- "attrasgn",
110
- "last"
111
- };