pry 0.9.8pre5-i386-mswin32 → 0.9.8pre6-i386-mswin32
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/.gitignore +1 -0
- data/CHANGELOG +36 -0
- data/Rakefile +2 -2
- data/lib/pry.rb +3 -2
- data/lib/pry/code.rb +344 -0
- data/lib/pry/command.rb +22 -21
- data/lib/pry/command_set.rb +28 -15
- data/lib/pry/commands.rb +0 -1
- data/lib/pry/config.rb +2 -2
- data/lib/pry/default_commands/context.rb +100 -86
- data/lib/pry/default_commands/documentation.rb +20 -1
- data/lib/pry/default_commands/gems.rb +65 -37
- data/lib/pry/default_commands/input.rb +107 -154
- data/lib/pry/default_commands/introspection.rb +154 -102
- data/lib/pry/default_commands/shell.rb +89 -91
- data/lib/pry/helpers/command_helpers.rb +14 -76
- data/lib/pry/hooks.rb +12 -1
- data/lib/pry/pry_class.rb +3 -3
- data/lib/pry/pry_instance.rb +40 -15
- data/lib/pry/version.rb +1 -1
- data/pry.gemspec +16 -16
- data/test/helper.rb +9 -23
- data/test/test_code.rb +201 -0
- data/test/test_command.rb +10 -0
- data/test/test_default_commands/test_input.rb +11 -11
- data/test/test_default_commands/test_introspection.rb +5 -5
- data/test/test_default_commands/test_shell.rb +10 -10
- data/test/test_hooks.rb +36 -0
- metadata +19 -17
- data/lib/pry/extended_commands/user_command_api.rb +0 -122
@@ -28,67 +28,94 @@ class Pry
|
|
28
28
|
_pry_.instance_eval(&Pry::FILE_COMPLETIONS)
|
29
29
|
end
|
30
30
|
end
|
31
|
-
|
32
31
|
alias_command "file-mode", "shell-mode"
|
33
32
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
33
|
+
command_class "cat", "Show code from a file, Pry's input buffer, or the last exception." do
|
34
|
+
banner <<-USAGE
|
35
|
+
Usage: cat FILE
|
36
|
+
cat --ex [STACK_INDEX]
|
37
|
+
cat --in [INPUT_INDEX_OR_RANGE]
|
39
38
|
|
40
|
-
|
41
|
-
|
42
|
-
start_line = line - 1
|
43
|
-
end
|
39
|
+
cat is capable of showing part or all of a source file, the context of the
|
40
|
+
last exception, or an expression from Pry's input history.
|
44
41
|
|
45
|
-
|
46
|
-
|
47
|
-
|
42
|
+
cat --ex defaults to showing the lines surrounding the location of the last
|
43
|
+
exception. Invoking it more than once travels up the exception's backtrace,
|
44
|
+
and providing a number shows the context of the given index of the backtrace.
|
45
|
+
USAGE
|
48
46
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
47
|
+
def options(opt)
|
48
|
+
opt.on :ex, "Show the context of the last exception.", :optional => true, :as => Integer
|
49
|
+
opt.on :i, :in, "Show one or more entries from Pry's expression history.", :optional => true, :as => Range, :default => -5..-1
|
50
|
+
|
51
|
+
opt.on :s, :start, "Starting line (defaults to the first line).", :optional => true, :as => Integer
|
52
|
+
opt.on :e, :end, "Ending line (defaults to the last line).", :optional => true, :as => Integer
|
53
|
+
opt.on :l, :'line-numbers', "Show line numbers."
|
54
|
+
opt.on :t, :type, "The file type for syntax highlighting (e.g., 'ruby' or 'python').", true, :as => Symbol
|
55
|
+
|
56
|
+
opt.on :f, :flood, "Do not use a pager to view text longer than one screen."
|
57
|
+
end
|
58
|
+
|
59
|
+
def process
|
60
|
+
handler = case
|
61
|
+
when opts.present?(:ex)
|
62
|
+
method :process_ex
|
63
|
+
when opts.present?(:in)
|
64
|
+
method :process_in
|
66
65
|
else
|
67
|
-
|
66
|
+
method :process_file
|
68
67
|
end
|
69
|
-
end
|
70
68
|
|
71
|
-
|
69
|
+
output = handler.call do |code|
|
70
|
+
code.code_type = opts[:type] || :ruby
|
72
71
|
|
73
|
-
|
74
|
-
|
75
|
-
opt.on :f, :flood, "Do not use a pager to view text longer than one screen."
|
76
|
-
opt.on :h, :help, "This message." do
|
77
|
-
output.puts opt.help
|
72
|
+
code.between(opts[:start] || 1, opts[:end] || -1).
|
73
|
+
with_line_numbers(opts.present?(:'line-numbers') || opts.present?(:ex))
|
78
74
|
end
|
75
|
+
|
76
|
+
render_output(output, opts)
|
79
77
|
end
|
80
78
|
|
81
|
-
|
79
|
+
def process_ex
|
80
|
+
window_size = Pry.config.default_window_size || 5
|
81
|
+
ex = _pry_.last_exception
|
82
|
+
|
83
|
+
raise CommandError, "No exception found." unless ex
|
82
84
|
|
83
|
-
|
84
|
-
|
85
|
-
|
85
|
+
if opts[:ex].nil?
|
86
|
+
bt_index = ex.bt_index
|
87
|
+
ex.inc_bt_index
|
88
|
+
else
|
89
|
+
bt_index = opts[:ex]
|
86
90
|
end
|
87
|
-
|
88
|
-
|
91
|
+
|
92
|
+
ex_file, ex_line = ex.bt_source_location_for(bt_index)
|
93
|
+
|
94
|
+
raise CommandError, "The given backtrace level is out of bounds." unless ex_file
|
95
|
+
|
96
|
+
if RbxPath.is_core_path?(ex_file)
|
97
|
+
ex_file = RbxPath.convert_path_to_full(ex_file)
|
98
|
+
end
|
99
|
+
|
100
|
+
start_line = ex_line - window_size
|
101
|
+
start_line = 1 if start_line < 1
|
102
|
+
end_line = ex_line + window_size
|
103
|
+
|
104
|
+
header = unindent <<-HEADER
|
105
|
+
#{text.bold 'Exception:'} #{ex.class}: #{ex.message}
|
106
|
+
--
|
107
|
+
#{text.bold('From:')} #{ex_file} @ line #{ex_line} @ #{text.bold("level: #{bt_index}")} of backtrace (of #{ex.backtrace.size - 1}).
|
108
|
+
|
109
|
+
HEADER
|
110
|
+
|
111
|
+
code = yield(Pry::Code.from_file(ex_file).
|
112
|
+
between(start_line, end_line).
|
113
|
+
with_marker(ex_line))
|
114
|
+
|
115
|
+
"#{header}#{code}"
|
89
116
|
end
|
90
117
|
|
91
|
-
|
118
|
+
def process_in
|
92
119
|
normalized_range = absolute_index_range(opts[:i], _pry_.input_array.length)
|
93
120
|
input_items = _pry_.input_array[normalized_range] || []
|
94
121
|
|
@@ -98,66 +125,37 @@ class Pry
|
|
98
125
|
raise CommandError, "No expressions found."
|
99
126
|
end
|
100
127
|
|
101
|
-
if
|
128
|
+
if zipped_items.length > 1
|
102
129
|
contents = ""
|
103
|
-
|
104
130
|
zipped_items.each do |i, s|
|
105
131
|
contents << "#{text.bold(i.to_s)}:\n"
|
106
|
-
|
107
|
-
code = syntax_highlight_by_file_type_or_specified(s, nil, :ruby)
|
108
|
-
|
109
|
-
if opts.present?(:'line-numbers')
|
110
|
-
contents << text.indent(text.with_line_numbers(code, 1), 2)
|
111
|
-
else
|
112
|
-
contents << text.indent(code, 2)
|
113
|
-
end
|
132
|
+
contents << yield(Pry::Code(s).with_indentation(2)).to_s
|
114
133
|
end
|
115
134
|
else
|
116
|
-
contents =
|
117
|
-
end
|
118
|
-
else
|
119
|
-
unless file_name
|
120
|
-
raise CommandError, "Must provide a file name."
|
135
|
+
contents = yield(Pry::Code(zipped_items.first.last))
|
121
136
|
end
|
122
137
|
|
123
|
-
|
124
|
-
|
125
|
-
rescue Errno::ENOENT
|
126
|
-
raise CommandError, "Could not find file: #{file_name}"
|
127
|
-
end
|
138
|
+
contents
|
139
|
+
end
|
128
140
|
|
129
|
-
|
141
|
+
def process_file
|
142
|
+
file_name = args.shift
|
130
143
|
|
131
|
-
|
132
|
-
|
144
|
+
unless file_name
|
145
|
+
raise CommandError, "Must provide a filename, --in, or --ex."
|
133
146
|
end
|
134
|
-
end
|
135
147
|
|
136
|
-
|
137
|
-
|
138
|
-
ex_file, ex_line = _pry_.last_exception.bt_source_location_for(bt_index)
|
139
|
-
contents = text.with_line_numbers contents, start_line + 1, :bright_red
|
148
|
+
file_name, line_num = file_name.split(':')
|
149
|
+
set_file_and_dir_locals(file_name)
|
140
150
|
|
141
|
-
|
142
|
-
l = idx + start_line
|
143
|
-
if l == (ex_line - 1)
|
144
|
-
" =>#{line}"
|
145
|
-
else
|
146
|
-
" #{line}"
|
147
|
-
end
|
148
|
-
end.join
|
149
|
-
|
150
|
-
# header for exceptions
|
151
|
-
output.puts "\n#{Pry::Helpers::Text.bold('Exception:')} #{_pry_.last_exception.class}: #{_pry_.last_exception.message}\n--"
|
152
|
-
output.puts "#{Pry::Helpers::Text.bold('From:')} #{ex_file} @ line #{ex_line} @ #{text.bold('level: ')} #{bt_index} of backtrace (of #{_pry_.last_exception.backtrace.size - 1}).\n\n"
|
153
|
-
end
|
151
|
+
code = yield(Pry::Code.from_file(file_name))
|
154
152
|
|
155
|
-
|
153
|
+
if line_num
|
154
|
+
code = code.around(line_num.to_i,
|
155
|
+
Pry.config.default_window_size || 7)
|
156
|
+
end
|
156
157
|
|
157
|
-
|
158
|
-
output.puts contents
|
159
|
-
else
|
160
|
-
stagger_output(contents)
|
158
|
+
code
|
161
159
|
end
|
162
160
|
end
|
163
161
|
end
|
@@ -6,26 +6,21 @@ class Pry
|
|
6
6
|
|
7
7
|
module_function
|
8
8
|
|
9
|
-
# if start_line is not false then add line numbers starting with start_line
|
10
|
-
def render_output(should_flood, start_line, text, color=:blue)
|
11
|
-
if start_line
|
12
|
-
text = Pry::Helpers::Text.with_line_numbers text, start_line, color
|
13
|
-
end
|
14
|
-
|
15
|
-
if should_flood
|
16
|
-
output.puts text
|
17
|
-
else
|
18
|
-
stagger_output(text)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
9
|
# Open a temp file and yield it to the block, closing it after
|
23
10
|
# @return [String] The path of the temp file
|
24
|
-
def temp_file
|
25
|
-
file = Tempfile.new(['pry',
|
11
|
+
def temp_file(ext='.rb')
|
12
|
+
file = Tempfile.new(['pry', ext])
|
26
13
|
yield file
|
27
14
|
ensure
|
28
|
-
file.close(true)
|
15
|
+
file.close(true) if file
|
16
|
+
end
|
17
|
+
|
18
|
+
def render_output(str, opts={})
|
19
|
+
if opts[:flood]
|
20
|
+
output.puts str
|
21
|
+
else
|
22
|
+
stagger_output str
|
23
|
+
end
|
29
24
|
end
|
30
25
|
|
31
26
|
def get_method_or_raise(name, target, opts={}, omit_help=false)
|
@@ -34,7 +29,7 @@ class Pry
|
|
34
29
|
if name && !meth
|
35
30
|
command_error("The method '#{name}' could not be found.", omit_help)
|
36
31
|
elsif !meth
|
37
|
-
command_error("No method name given, and context is not a method.", omit_help)
|
32
|
+
command_error("No method name given, and context is not a method.", omit_help, NonMethodContextError)
|
38
33
|
end
|
39
34
|
|
40
35
|
(opts[:super] || 0).times do
|
@@ -49,9 +44,9 @@ class Pry
|
|
49
44
|
meth
|
50
45
|
end
|
51
46
|
|
52
|
-
def command_error(message, omit_help)
|
47
|
+
def command_error(message, omit_help, klass=CommandError)
|
53
48
|
message += " Type `#{command_name} --help` for help." unless omit_help
|
54
|
-
raise
|
49
|
+
raise klass, message
|
55
50
|
end
|
56
51
|
|
57
52
|
def make_header(meth, content=meth.source)
|
@@ -66,63 +61,6 @@ class Pry
|
|
66
61
|
header << "#{Pry::Helpers::Text.bold("Number of lines:")} #{content.each_line.count.to_s}\n"
|
67
62
|
end
|
68
63
|
|
69
|
-
def file_map
|
70
|
-
{
|
71
|
-
[".c", ".h"] => :c,
|
72
|
-
[".cpp", ".hpp", ".cc", ".h", "cxx"] => :cpp,
|
73
|
-
[".rb", "Rakefile", ".irbrc", ".gemspec", ".pryrc"] => :ruby,
|
74
|
-
".py" => :python,
|
75
|
-
".diff" => :diff,
|
76
|
-
".css" => :css,
|
77
|
-
".html" => :html,
|
78
|
-
[".yaml", ".yml"] => :yaml,
|
79
|
-
".xml" => :xml,
|
80
|
-
".php" => :php,
|
81
|
-
".js" => :javascript,
|
82
|
-
".java" => :java,
|
83
|
-
".rhtml" => :rhtml,
|
84
|
-
".json" => :json
|
85
|
-
}
|
86
|
-
end
|
87
|
-
|
88
|
-
def syntax_highlight_by_file_type_or_specified(contents, file_name, file_type)
|
89
|
-
if file_type
|
90
|
-
language_detected = file_type
|
91
|
-
else
|
92
|
-
_, language_detected = file_map.find do |k, v|
|
93
|
-
Array(k).any? do |matcher|
|
94
|
-
matcher == File.extname(file_name) || matcher == File.basename(file_name)
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
if Pry.color
|
100
|
-
CodeRay.scan(contents, language_detected).term
|
101
|
-
else
|
102
|
-
contents
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
# convert negative line numbers to positive by wrapping around
|
107
|
-
# last line (as per array indexing with negative numbers)
|
108
|
-
def normalized_line_number(line_number, total_lines)
|
109
|
-
line_number < 0 ? line_number + total_lines : line_number
|
110
|
-
end
|
111
|
-
|
112
|
-
# returns the file content between the lines and the normalized
|
113
|
-
# start and end line numbers.
|
114
|
-
def read_between_the_lines(file_name, start_line, end_line)
|
115
|
-
if file_name == Pry.eval_path
|
116
|
-
content = Pry.line_buffer.drop(1).join
|
117
|
-
else
|
118
|
-
content = File.read(File.expand_path(file_name))
|
119
|
-
end
|
120
|
-
lines_array = content.each_line.to_a
|
121
|
-
|
122
|
-
[lines_array[start_line..end_line].join, normalized_line_number(start_line, lines_array.size),
|
123
|
-
normalized_line_number(end_line, lines_array.size)]
|
124
|
-
end
|
125
|
-
|
126
64
|
def process_rdoc(comment, code_type)
|
127
65
|
comment = comment.dup
|
128
66
|
comment.gsub(/<code>(?:\s*\n)?(.*?)\s*<\/code>/m) { Pry.color ? CodeRay.scan($1, code_type).term : $1 }.
|
data/lib/pry/hooks.rb
CHANGED
@@ -20,6 +20,10 @@ class Pry
|
|
20
20
|
end
|
21
21
|
protected :hooks
|
22
22
|
|
23
|
+
def errors
|
24
|
+
@errors ||= []
|
25
|
+
end
|
26
|
+
|
23
27
|
# Destructively merge the contents of two `Pry:Hooks` instances.
|
24
28
|
# @param [Pry::Hooks] other The `Pry::Hooks` instance to merge
|
25
29
|
|
@@ -89,7 +93,14 @@ class Pry
|
|
89
93
|
# silence warnings to get rid of 1.8's "warning: multiple values
|
90
94
|
# for a block parameter" warnings
|
91
95
|
Pry::Helpers::BaseHelpers.silence_warnings do
|
92
|
-
@hooks[event_name].map
|
96
|
+
@hooks[event_name].map do |hook_name, callable|
|
97
|
+
begin
|
98
|
+
callable.call(*args, &block)
|
99
|
+
rescue RescuableException => e
|
100
|
+
errors << e
|
101
|
+
e
|
102
|
+
end
|
103
|
+
end.last
|
93
104
|
end
|
94
105
|
end
|
95
106
|
|
data/lib/pry/pry_class.rb
CHANGED
@@ -116,7 +116,7 @@ class Pry
|
|
116
116
|
pry_instance.backtrace = caller.tap(&:shift)
|
117
117
|
|
118
118
|
# yield the binding_stack to the hook for modification
|
119
|
-
|
119
|
+
pry_instance.exec_hook(
|
120
120
|
:when_started,
|
121
121
|
binding_stack = [target],
|
122
122
|
options,
|
@@ -220,8 +220,8 @@ class Pry
|
|
220
220
|
config.prompt = DEFAULT_PROMPT
|
221
221
|
config.print = DEFAULT_PRINT
|
222
222
|
config.exception_handler = DEFAULT_EXCEPTION_HANDLER
|
223
|
-
config.exception_window_size = 5
|
224
223
|
config.exception_whitelist = DEFAULT_EXCEPTION_WHITELIST
|
224
|
+
config.default_window_size = 5
|
225
225
|
config.hooks = DEFAULT_HOOKS
|
226
226
|
config.input_stack = []
|
227
227
|
config.color = Helpers::BaseHelpers.use_ansi_codes?
|
@@ -237,7 +237,7 @@ class Pry
|
|
237
237
|
config.collision_warning = false
|
238
238
|
|
239
239
|
config.gist ||= OpenStruct.new
|
240
|
-
config.gist.inspecter = proc
|
240
|
+
config.gist.inspecter = proc(&:pretty_inspect)
|
241
241
|
|
242
242
|
config.plugins ||= OpenStruct.new
|
243
243
|
config.plugins.enabled = true
|
data/lib/pry/pry_instance.rb
CHANGED
@@ -15,10 +15,11 @@ class Pry
|
|
15
15
|
attr_accessor :binding_stack
|
16
16
|
|
17
17
|
attr_accessor :last_result
|
18
|
-
attr_accessor :last_exception
|
19
18
|
attr_accessor :last_file
|
20
19
|
attr_accessor :last_dir
|
21
20
|
|
21
|
+
attr_reader :last_exception
|
22
|
+
|
22
23
|
attr_reader :input_array
|
23
24
|
attr_reader :output_array
|
24
25
|
|
@@ -142,7 +143,7 @@ class Pry
|
|
142
143
|
# Initialize the repl session.
|
143
144
|
# @param [Binding] target The target binding for the session.
|
144
145
|
def repl_prologue(target)
|
145
|
-
|
146
|
+
exec_hook :before_session, output, target, self
|
146
147
|
initialize_special_locals(target)
|
147
148
|
|
148
149
|
@input_array << nil # add empty input so _in_ and _out_ match
|
@@ -154,7 +155,7 @@ class Pry
|
|
154
155
|
# Clean-up after the repl session.
|
155
156
|
# @param [Binding] target The target binding for the session.
|
156
157
|
def repl_epilogue(target)
|
157
|
-
|
158
|
+
exec_hook :after_session, output, target, self
|
158
159
|
|
159
160
|
Pry.active_sessions -= 1
|
160
161
|
binding_stack.pop
|
@@ -231,10 +232,11 @@ class Pry
|
|
231
232
|
|
232
233
|
result
|
233
234
|
rescue RescuableException => e
|
234
|
-
|
235
|
+
self.last_exception = e
|
236
|
+
e
|
235
237
|
ensure
|
236
238
|
update_input_history(code)
|
237
|
-
|
239
|
+
exec_hook :after_eval, result, self
|
238
240
|
end
|
239
241
|
|
240
242
|
# Perform a read.
|
@@ -270,7 +272,7 @@ class Pry
|
|
270
272
|
|
271
273
|
@suppress_output = true if eval_string =~ /;\Z/ || eval_string.empty?
|
272
274
|
|
273
|
-
|
275
|
+
exec_hook :after_read, eval_string, self
|
274
276
|
eval_string
|
275
277
|
end
|
276
278
|
|
@@ -337,6 +339,7 @@ class Pry
|
|
337
339
|
|
338
340
|
if original_val != indented_val && output.tty? && Pry::Helpers::BaseHelpers.use_ansi_codes? && Pry.config.correct_indent
|
339
341
|
output.print @indent.correct_indentation(current_prompt + indented_val, original_val.length - indented_val.length)
|
342
|
+
output.flush
|
340
343
|
end
|
341
344
|
else
|
342
345
|
indented_val = val
|
@@ -402,6 +405,25 @@ class Pry
|
|
402
405
|
Pry::Command::VOID_VALUE
|
403
406
|
end
|
404
407
|
|
408
|
+
# Execute the specified hook.
|
409
|
+
# @param [Symbol] name The hook name to execute
|
410
|
+
# @param [*Object] args The arguments to pass to the hook
|
411
|
+
# @return [Object, Exception] The return value of the hook or the exception raised
|
412
|
+
#
|
413
|
+
# If executing a hook raises an exception, we log that and then continue sucessfully.
|
414
|
+
# To debug such errors, use the global variable $pry_hook_error, which is set as a
|
415
|
+
# result.
|
416
|
+
def exec_hook(name, *args, &block)
|
417
|
+
e_before = hooks.errors.size
|
418
|
+
hooks.exec_hook(name, *args, &block).tap do
|
419
|
+
hooks.errors[e_before..-1].each do |e|
|
420
|
+
output.puts "#{name} hook failed: #{e.class}: #{e.message}"
|
421
|
+
output.puts "#{e.backtrace.first}"
|
422
|
+
output.puts "(see _pry_.hooks.errors to debug)"
|
423
|
+
end
|
424
|
+
end
|
425
|
+
end
|
426
|
+
|
405
427
|
# Set the last result of an eval.
|
406
428
|
# This method should not need to be invoked directly.
|
407
429
|
# @param [Object] result The result.
|
@@ -415,16 +437,18 @@ class Pry
|
|
415
437
|
end
|
416
438
|
|
417
439
|
# Set the last exception for a session.
|
418
|
-
#
|
419
|
-
|
420
|
-
# @param [Binding] target The binding to set `_ex_` on.
|
421
|
-
def set_last_exception(ex, target)
|
440
|
+
# @param [Exception] ex
|
441
|
+
def last_exception=(ex)
|
422
442
|
class << ex
|
423
443
|
attr_accessor :file, :line, :bt_index
|
424
444
|
def bt_source_location_for(index)
|
425
445
|
backtrace[index] =~ /(.*):(\d+)/
|
426
446
|
[$1, $2.to_i]
|
427
447
|
end
|
448
|
+
|
449
|
+
def inc_bt_index
|
450
|
+
@bt_index = (@bt_index + 1) % backtrace.size
|
451
|
+
end
|
428
452
|
end
|
429
453
|
|
430
454
|
ex.bt_index = 0
|
@@ -432,8 +456,7 @@ class Pry
|
|
432
456
|
|
433
457
|
@last_result_is_exception = true
|
434
458
|
@output_array << ex
|
435
|
-
|
436
|
-
self.last_exception = ex
|
459
|
+
@last_exception = ex
|
437
460
|
end
|
438
461
|
|
439
462
|
# Update Pry's internal state after evalling code.
|
@@ -569,9 +592,11 @@ class Pry
|
|
569
592
|
elsif defined?(Rubinius::Melbourne)
|
570
593
|
Rubinius::Melbourne.parse_string(str, Pry.eval_path)
|
571
594
|
else
|
572
|
-
catch(:valid)
|
573
|
-
|
574
|
-
|
595
|
+
catch(:valid) do
|
596
|
+
Helpers::BaseHelpers.silence_warnings do
|
597
|
+
eval("BEGIN{throw :valid}\n#{str}", binding, Pry.eval_path)
|
598
|
+
end
|
599
|
+
end
|
575
600
|
end
|
576
601
|
|
577
602
|
# Assert that a line which ends with a , is incomplete.
|