trepanning 1.93.35 → 2.15.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.
Files changed (134) hide show
  1. checksums.yaml +7 -0
  2. data/ChangeLog +491 -55
  3. data/LICENSE +1 -1
  4. data/NEWS +18 -14
  5. data/README.md +5 -22
  6. data/Rakefile +22 -1
  7. data/app/breakpoint.rb +5 -3
  8. data/app/core.rb +147 -179
  9. data/app/default.rb +47 -46
  10. data/app/file.rb +6 -7
  11. data/app/frame.rb +183 -176
  12. data/app/markdown.rb +2 -9
  13. data/app/options.rb +1 -1
  14. data/app/run.rb +71 -37
  15. data/interface/script.rb +8 -8
  16. data/io.rb +19 -20
  17. data/lib/trepanning.rb +292 -297
  18. data/processor.rb +332 -344
  19. data/processor/breakpoint.rb +98 -96
  20. data/processor/command/base/submgr.rb +9 -9
  21. data/processor/command/break.rb +40 -38
  22. data/processor/command/continue.rb +15 -10
  23. data/processor/command/debug.rb +6 -25
  24. data/processor/command/delete.rb +21 -12
  25. data/processor/command/directory.rb +15 -13
  26. data/processor/command/disable.rb +12 -9
  27. data/processor/command/disassemble.rb +80 -74
  28. data/processor/command/display.rb +15 -12
  29. data/processor/command/down.rb +8 -3
  30. data/processor/command/edit.rb +37 -23
  31. data/processor/command/enable.rb +11 -8
  32. data/processor/command/eval.rb +24 -22
  33. data/processor/command/finish.rb +50 -48
  34. data/processor/command/help.rb +1 -1
  35. data/processor/command/info_subcmd/breakpoints.rb +7 -7
  36. data/processor/command/info_subcmd/files.rb +195 -196
  37. data/processor/command/info_subcmd/frame.rb +7 -4
  38. data/processor/command/info_subcmd/locals.rb +29 -12
  39. data/processor/command/info_subcmd/program.rb +48 -39
  40. data/processor/command/info_subcmd/registers_subcmd/ep.rb +46 -0
  41. data/processor/command/info_subcmd/registers_subcmd/helper.rb +32 -35
  42. data/processor/command/info_subcmd/registers_subcmd/sp.rb +29 -23
  43. data/processor/command/info_subcmd/return.rb +28 -10
  44. data/processor/command/info_subcmd/variables_subcmd/class.rb +3 -3
  45. data/processor/command/info_subcmd/variables_subcmd/constants.rb +77 -0
  46. data/processor/command/info_subcmd/variables_subcmd/globals.rb +7 -7
  47. data/processor/command/info_subcmd/variables_subcmd/instance.rb +68 -22
  48. data/processor/command/info_subcmd/variables_subcmd/locals.rb +148 -67
  49. data/processor/command/list.rb +14 -8
  50. data/processor/command/macro.rb +1 -1
  51. data/processor/command/next.rb +1 -0
  52. data/processor/command/set_subcmd/auto.rb +3 -3
  53. data/processor/command/set_subcmd/different.rb +30 -29
  54. data/processor/command/set_subcmd/events.rb +74 -48
  55. data/processor/command/set_subcmd/max_subcmd/list.rb +12 -5
  56. data/processor/command/set_subcmd/max_subcmd/width.rb +28 -19
  57. data/processor/command/set_subcmd/register.rb +37 -0
  58. data/processor/command/set_subcmd/register_subcmd/pc.rb +67 -0
  59. data/processor/command/set_subcmd/register_subcmd/sp.rb +75 -0
  60. data/processor/command/set_subcmd/reload.rb +12 -10
  61. data/processor/command/set_subcmd/return.rb +68 -44
  62. data/processor/command/shell.rb +3 -2
  63. data/processor/command/show_subcmd/different.rb +17 -14
  64. data/processor/command/show_subcmd/events.rb +25 -25
  65. data/processor/default.rb +1 -1
  66. data/processor/eval.rb +14 -15
  67. data/processor/frame.rb +43 -36
  68. data/processor/help.rb +5 -5
  69. data/processor/hook.rb +26 -29
  70. data/processor/location.rb +54 -51
  71. data/processor/mock.rb +4 -3
  72. data/processor/running.rb +113 -103
  73. data/processor/validate.rb +401 -373
  74. data/test/data/debug.cmd +8 -0
  75. data/test/data/debug.right +13 -0
  76. data/test/data/debugger-stop.right +6 -4
  77. data/test/data/fname-with-blank.cmd +1 -1
  78. data/test/data/fname-with-blank.right +5 -0
  79. data/test/data/pc.cmd +8 -0
  80. data/test/data/pc.right +10 -0
  81. data/test/data/quit.right +3 -1
  82. data/test/data/trace.cmd +2 -2
  83. data/test/data/trace.right +41 -20
  84. data/test/example/assign.rb +6 -0
  85. data/test/functional/fn_helper.rb +11 -17
  86. data/test/functional/test-break-long.rb +15 -16
  87. data/test/functional/test-break.rb +6 -8
  88. data/test/functional/test-condition.rb +8 -10
  89. data/test/functional/test-debugger-call-bug.rb +21 -22
  90. data/test/functional/test-delete.rb +57 -59
  91. data/test/functional/test-eval.rb +101 -103
  92. data/test/functional/test-finish.rb +24 -33
  93. data/test/functional/test-immediate-step-bug.rb +6 -10
  94. data/test/functional/test-next.rb +64 -65
  95. data/test/functional/test-raise.rb +63 -64
  96. data/test/functional/test-recursive-bt.rb +81 -76
  97. data/test/functional/test-remap.rb +6 -7
  98. data/test/functional/test-return.rb +44 -38
  99. data/test/functional/test-step.rb +55 -53
  100. data/test/functional/test-stepbug.rb +6 -9
  101. data/test/functional/test-watchg.rb +40 -39
  102. data/test/integration/test-debug.rb +12 -0
  103. data/test/integration/test-debugger-stop.rb +7 -7
  104. data/test/integration/test-pc.rb +24 -0
  105. data/test/integration/test-trace.rb +1 -1
  106. data/test/unit/cmd-helper.rb +0 -1
  107. data/test/unit/test-app-brkpt.rb +21 -21
  108. data/test/unit/test-app-brkptmgr.rb +7 -8
  109. data/test/unit/test-app-display.rb +3 -4
  110. data/test/unit/test-app-frame.rb +4 -5
  111. data/test/unit/test-base-subsubcmd.rb +2 -2
  112. data/test/unit/test-cmd-break.rb +6 -6
  113. data/test/unit/test-cmd-endisable.rb +7 -6
  114. data/test/unit/test-cmd-parse_list_cmd.rb +24 -24
  115. data/test/unit/test-io-tcpserver.rb +39 -35
  116. data/test/unit/test-proc-default.rb +23 -22
  117. data/test/unit/test-proc-eval.rb +1 -2
  118. data/test/unit/test-proc-frame.rb +8 -9
  119. data/test/unit/test-proc-list.rb +1 -1
  120. data/test/unit/test-proc-location.rb +2 -2
  121. data/test/unit/test-proc-main.rb +10 -10
  122. data/test/unit/test-proc-validate.rb +11 -13
  123. data/test/unit/test-subcmd-help.rb +1 -2
  124. data/trepanning.gemspec +8 -13
  125. metadata +44 -95
  126. data/COPYING +0 -57
  127. data/data/custom_require.rb +0 -44
  128. data/data/perldb.bindings +0 -17
  129. data/data/prelude.rb +0 -38
  130. data/processor/command/info_subcmd/variables_subcmd/constant.rb +0 -41
  131. data/processor/command/raise.rb +0 -48
  132. data/processor/command/set_subcmd/pc.rb +0 -62
  133. data/processor/command/set_subcmd/sp.rb +0 -67
  134. data/processor/eventbuf.rb +0 -133
metadata CHANGED
@@ -1,155 +1,101 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trepanning
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.93.35
5
- prerelease:
4
+ version: 2.15.33
6
5
  platform: ruby
7
6
  authors:
8
7
  - R. Bernstein
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2015-03-12 00:00:00.000000000 Z
11
+ date: 2015-03-08 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: rb-trace
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ~>
20
- - !ruby/object:Gem::Version
21
- version: '0.5'
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ~>
28
- - !ruby/object:Gem::Version
29
- version: '0.5'
30
- - !ruby/object:Gem::Dependency
31
- name: rb-threadframe
14
+ name: redcarpet
32
15
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
16
  requirements:
35
- - - ~>
17
+ - - "~>"
36
18
  - !ruby/object:Gem::Version
37
- version: '0.41'
19
+ version: '3.2'
38
20
  type: :runtime
39
21
  prerelease: false
40
22
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
23
  requirements:
43
- - - ~>
24
+ - - "~>"
44
25
  - !ruby/object:Gem::Version
45
- version: '0.41'
26
+ version: '3.2'
46
27
  - !ruby/object:Gem::Dependency
47
28
  name: columnize
48
29
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
30
  requirements:
51
- - - ~>
31
+ - - "~>"
52
32
  - !ruby/object:Gem::Version
53
33
  version: '0.9'
54
34
  type: :runtime
55
35
  prerelease: false
56
36
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
37
  requirements:
59
- - - ~>
38
+ - - "~>"
60
39
  - !ruby/object:Gem::Version
61
40
  version: '0.9'
62
- - !ruby/object:Gem::Dependency
63
- name: redcarpet
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ~>
68
- - !ruby/object:Gem::Version
69
- version: '3.2'
70
- type: :runtime
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ~>
76
- - !ruby/object:Gem::Version
77
- version: '3.2'
78
41
  - !ruby/object:Gem::Dependency
79
42
  name: coderay
80
43
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
44
  requirements:
83
- - - ~>
45
+ - - "~>"
84
46
  - !ruby/object:Gem::Version
85
47
  version: '1.1'
86
48
  type: :runtime
87
49
  prerelease: false
88
50
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
51
  requirements:
91
- - - ~>
52
+ - - "~>"
92
53
  - !ruby/object:Gem::Version
93
54
  version: '1.1'
94
55
  - !ruby/object:Gem::Dependency
95
56
  name: term-ansicolor
96
57
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
58
  requirements:
99
- - - ~>
59
+ - - "~>"
100
60
  - !ruby/object:Gem::Version
101
61
  version: '1.3'
102
62
  type: :runtime
103
63
  prerelease: false
104
64
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
65
  requirements:
107
- - - ~>
66
+ - - "~>"
108
67
  - !ruby/object:Gem::Version
109
68
  version: '1.3'
110
69
  - !ruby/object:Gem::Dependency
111
70
  name: diff-lcs
112
71
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
72
  requirements:
115
- - - ~>
73
+ - - "~>"
116
74
  - !ruby/object:Gem::Version
117
75
  version: '0'
118
76
  type: :development
119
77
  prerelease: false
120
78
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
79
  requirements:
123
- - - ~>
80
+ - - "~>"
124
81
  - !ruby/object:Gem::Version
125
82
  version: '0'
126
- description: ! '== Description
127
-
128
-
129
- A gdb-like Ruby debugger with both high and low-level debugging support.
130
-
131
-
132
- See https://github.com/rocky/rb-trepanning/wiki/Features for a list of features.
133
-
83
+ description: |
84
+ A Ruby debugger with both high and low-level debugging support.
134
85
 
135
86
  To provide the advanced features this version works only with a
87
+ patched MRI Ruby 2.1.5 runtime.
136
88
 
137
- [patched MRI Ruby 1.9.3. See http://ruby-debugger-runtime.sourceforge.net/
138
-
139
-
140
- This version works only with a patched version of Ruby 1.9.3
141
-
142
- Ruby 2.1.5, look for a version that starts with 2.1.5
143
-
144
- '
89
+ This version works only with a patched version of Ruby 2.1.5
90
+ For a version that works with Ruby 1.9.3 look install a version
91
+ starting with 1.93.
145
92
  email: rockyb@rubyforge.net
146
93
  executables:
147
94
  - trepan
148
95
  extensions: []
149
96
  extra_rdoc_files: []
150
97
  files:
151
- - .gitignore
152
- - COPYING
98
+ - ".gitignore"
153
99
  - ChangeLog
154
100
  - LICENSE
155
101
  - Makefile
@@ -186,10 +132,7 @@ files:
186
132
  - bin/trepan
187
133
  - check-filter.rb
188
134
  - data/.gitignore
189
- - data/custom_require.rb
190
135
  - data/irbrc
191
- - data/perldb.bindings
192
- - data/prelude.rb
193
136
  - interface.rb
194
137
  - interface/.gitignore
195
138
  - interface/client.rb
@@ -258,6 +201,7 @@ files:
258
201
  - processor/command/info_subcmd/program.rb
259
202
  - processor/command/info_subcmd/registers.rb
260
203
  - processor/command/info_subcmd/registers_subcmd/.gitignore
204
+ - processor/command/info_subcmd/registers_subcmd/ep.rb
261
205
  - processor/command/info_subcmd/registers_subcmd/helper.rb
262
206
  - processor/command/info_subcmd/registers_subcmd/pc.rb
263
207
  - processor/command/info_subcmd/registers_subcmd/sp.rb
@@ -269,7 +213,7 @@ files:
269
213
  - processor/command/info_subcmd/variables.rb
270
214
  - processor/command/info_subcmd/variables_subcmd/.gitignore
271
215
  - processor/command/info_subcmd/variables_subcmd/class.rb
272
- - processor/command/info_subcmd/variables_subcmd/constant.rb
216
+ - processor/command/info_subcmd/variables_subcmd/constants.rb
273
217
  - processor/command/info_subcmd/variables_subcmd/globals.rb
274
218
  - processor/command/info_subcmd/variables_subcmd/instance.rb
275
219
  - processor/command/info_subcmd/variables_subcmd/locals.rb
@@ -281,7 +225,6 @@ files:
281
225
  - processor/command/pr.rb
282
226
  - processor/command/ps.rb
283
227
  - processor/command/quit.rb
284
- - processor/command/raise.rb
285
228
  - processor/command/reload.rb
286
229
  - processor/command/reload_subcmd/.gitignore
287
230
  - processor/command/reload_subcmd/command.rb
@@ -315,10 +258,11 @@ files:
315
258
  - processor/command/set_subcmd/max_subcmd/stack.rb
316
259
  - processor/command/set_subcmd/max_subcmd/string.rb
317
260
  - processor/command/set_subcmd/max_subcmd/width.rb
318
- - processor/command/set_subcmd/pc.rb
261
+ - processor/command/set_subcmd/register.rb
262
+ - processor/command/set_subcmd/register_subcmd/pc.rb
263
+ - processor/command/set_subcmd/register_subcmd/sp.rb
319
264
  - processor/command/set_subcmd/reload.rb
320
265
  - processor/command/set_subcmd/return.rb
321
- - processor/command/set_subcmd/sp.rb
322
266
  - processor/command/set_subcmd/substitute.rb
323
267
  - processor/command/set_subcmd/substitute_subcmd/.gitignore
324
268
  - processor/command/set_subcmd/substitute_subcmd/eval.rb
@@ -378,7 +322,6 @@ files:
378
322
  - processor/default.rb
379
323
  - processor/display.rb
380
324
  - processor/eval.rb
381
- - processor/eventbuf.rb
382
325
  - processor/frame.rb
383
326
  - processor/help.rb
384
327
  - processor/hook.rb
@@ -397,12 +340,16 @@ files:
397
340
  - sample/rocky-trepan-colors.rb
398
341
  - test/Makefile
399
342
  - test/data/.gitignore
343
+ - test/data/debug.cmd
344
+ - test/data/debug.right
400
345
  - test/data/debugger-stop.cmd
401
346
  - test/data/debugger-stop.right
402
347
  - test/data/enable.cmd
403
348
  - test/data/enable.right
404
349
  - test/data/fname-with-blank.cmd
405
350
  - test/data/fname-with-blank.right
351
+ - test/data/pc.cmd
352
+ - test/data/pc.right
406
353
  - test/data/quit.cmd
407
354
  - test/data/quit.right
408
355
  - test/data/quit2.cmd
@@ -412,6 +359,7 @@ files:
412
359
  - test/data/trace.cmd
413
360
  - test/data/trace.right
414
361
  - test/example/.gitignore
362
+ - test/example/assign.rb
415
363
  - test/example/debugger-stop.rb
416
364
  - test/example/factorial.rb
417
365
  - test/example/fname with blank.rb
@@ -442,8 +390,10 @@ files:
442
390
  - test/integration/.gitignore
443
391
  - test/integration/file-diff.rb
444
392
  - test/integration/helper.rb
393
+ - test/integration/test-debug.rb
445
394
  - test/integration/test-debugger-stop.rb
446
395
  - test/integration/test-fname-with-blank.rb
396
+ - test/integration/test-pc.rb
447
397
  - test/integration/test-quit.rb
448
398
  - test/integration/test-remote.rb
449
399
  - test/integration/test-trace.rb
@@ -503,30 +453,29 @@ files:
503
453
  homepage: http://wiki.github.com/rocky/rb-trepanning
504
454
  licenses:
505
455
  - MIT
456
+ metadata: {}
506
457
  post_install_message:
507
458
  rdoc_options:
508
- - --main
459
+ - "--main"
509
460
  - README
510
- - --title
511
- - Trepan 1.93.35 Documentation
461
+ - "--title"
462
+ - Trepan 2.15.33 Documentation
512
463
  require_paths:
513
464
  - lib
514
465
  required_ruby_version: !ruby/object:Gem::Requirement
515
- none: false
516
466
  requirements:
517
- - - ~>
467
+ - - "~>"
518
468
  - !ruby/object:Gem::Version
519
- version: 1.9.3
469
+ version: 2.1.5
520
470
  required_rubygems_version: !ruby/object:Gem::Requirement
521
- none: false
522
471
  requirements:
523
- - - ! '>='
472
+ - - ">="
524
473
  - !ruby/object:Gem::Version
525
474
  version: '0'
526
475
  requirements: []
527
476
  rubyforge_project:
528
- rubygems_version: 1.8.23.2
477
+ rubygems_version: 2.2.2
529
478
  signing_key:
530
- specification_version: 3
531
- summary: Enhanced Ruby 1.9.3 Debugger
479
+ specification_version: 4
480
+ summary: Enhanced Ruby 2.1 Debugger
532
481
  test_files: []
data/COPYING DELETED
@@ -1,57 +0,0 @@
1
- Columnize is copyrighted free software by Rocky Bernstein <rocky@rubyforge.org>.
2
-
3
- You can redistribute it and/or modify it under either the terms of the GPL
4
- version 2, or the conditions below:
5
-
6
- 1. You may make and give away verbatim copies of the source form of the
7
- software without restriction, provided that you duplicate all of the
8
- original copyright notices and associated disclaimers.
9
-
10
- 2. You may modify your copy of the software in any way, provided that
11
- you do at least ONE of the following:
12
-
13
- a) place your modifications in the Public Domain or otherwise
14
- make them Freely Available, such as by posting said
15
- modifications to Usenet or an equivalent medium, or by allowing
16
- the author to include your modifications in the software.
17
-
18
- b) use the modified software only within your corporation or
19
- organization.
20
-
21
- c) give non-standard binaries non-standard names, with
22
- instructions on where to get the original software distribution.
23
-
24
- d) make other distribution arrangements with the author.
25
-
26
- 3. You may distribute the software in object code or binary form,
27
- provided that you do at least ONE of the following:
28
-
29
- a) distribute the binaries and library files of the software,
30
- together with instructions (in the manual page or equivalent)
31
- on where to get the original distribution.
32
-
33
- b) accompany the distribution with the machine-readable source of
34
- the software.
35
-
36
- c) give non-standard binaries non-standard names, with
37
- instructions on where to get the original software distribution.
38
-
39
- d) make other distribution arrangements with the author.
40
-
41
- 4. You may modify and include the part of the software into any other
42
- software (possibly commercial). But some files in the distribution
43
- are not written by the author, so that they are not under these terms.
44
-
45
- For the list of those files and their copying conditions, see the
46
- file LEGAL.
47
-
48
- 5. The scripts and library files supplied as input to or produced as
49
- output from the software do not automatically fall under the
50
- copyright of the software, but belong to whomever generated them,
51
- and may be sold commercially, and may be aggregated with this
52
- software.
53
-
54
- 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
55
- IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
56
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
57
- PURPOSE.
@@ -1,44 +0,0 @@
1
- #--
2
- # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
3
- # All rights reserved.
4
- # See LICENSE.txt for permissions.
5
- #++
6
-
7
- module Kernel
8
-
9
- ##
10
- # The Kernel#require from before RubyGems was loaded.
11
-
12
- alias gem_original_require require
13
-
14
- ##
15
- # When RubyGems is required, Kernel#require is replaced with our own which
16
- # is capable of loading gems on demand.
17
- #
18
- # When you call <tt>require 'x'</tt>, this is what happens:
19
- # * If the file can be loaded from the existing Ruby loadpath, it
20
- # is.
21
- # * Otherwise, installed gems are searched for a file that matches.
22
- # If it's found in gem 'y', that gem is activated (added to the
23
- # loadpath).
24
- #
25
- # The normal <tt>require</tt> functionality of returning false if
26
- # that file has already been loaded is preserved.
27
-
28
- def require(path) # :doc:
29
- gem_original_require path
30
- rescue LoadError => load_error
31
- if load_error.message.end_with?(path)
32
- if Gem.try_activate(path)
33
- return gem_original_require(path)
34
- end
35
- end
36
-
37
- raise load_error
38
- end
39
-
40
- private :require
41
- private :gem_original_require
42
-
43
- end unless Kernel.private_method_defined?(:gem_original_require)
44
-
@@ -1,17 +0,0 @@
1
- # Aliases to simulate some of the Perl debugger command set
2
- alias = alias
3
- alias R restart
4
- alias b break
5
- alias c continue
6
- alias f list
7
- alias n next
8
- alias p pr
9
- alias q quit
10
- alias s step
11
- alias v list
12
- macro - Proc.new{|*args| "list -"}
13
- macro E Proc.new{|*args| "info thread"}
14
- macro L Proc.new{|*args| "info break"}
15
- macro T Proc.new{|*args| "info stack"}
16
- macro l Proc.new{|*args| "list>"}
17
- macro r Proc.new{|*args| %w(finish step)}
@@ -1,38 +0,0 @@
1
-
2
- # Mutex
3
-
4
- class Mutex
5
- def synchronize
6
- self.lock
7
- begin
8
- yield
9
- ensure
10
- self.unlock rescue nil
11
- end
12
- end
13
- end
14
-
15
- # Thread
16
-
17
- class Thread
18
- MUTEX_FOR_THREAD_EXCLUSIVE = Mutex.new
19
- def self.exclusive
20
- MUTEX_FOR_THREAD_EXCLUSIVE.synchronize{
21
- yield
22
- }
23
- end
24
- end
25
-
26
- module Kernel
27
- module_function
28
- def require_relative(relative_feature)
29
- c = caller.first
30
- e = c.rindex(/:\d+:in /)
31
- file = $`
32
- if /\A\((.*)\)/ =~ file # eval, etc.
33
- raise LoadError, "require_relative is called in #{$1}"
34
- end
35
- absolute_feature = File.expand_path(File.join(File.dirname(file), relative_feature))
36
- require absolute_feature
37
- end
38
- end