summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--lib/irb/ruby-lex.rb38
-rw-r--r--version.h2
3 files changed, 44 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 0c4cf4377e..d8423f9c68 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Thu Jul 23 17:31:02 2009 Keiju Ishitsuka <keiju@ruby-lang.org>
+
+ * lib/irb/ruby-lex.rb: make irb be able to parse
+ string_dvar. [ruby-core: 24051]
+
Wed Jul 22 22:23:24 2009 Yusuke Endoh <mame@tsg.ne.jp>
* vm_core.h (struct rb_iseq_t): add a new field line_no. This field
diff --git a/lib/irb/ruby-lex.rb b/lib/irb/ruby-lex.rb
index 93dc229f31..aee36f95c3 100644
--- a/lib/irb/ruby-lex.rb
+++ b/lib/irb/ruby-lex.rb
@@ -1047,6 +1047,8 @@ class RubyLex
while ch = getc
if @quoted == ch and nest == 0
break
+ elsif ch == "#" and peek(0) == "{"
+ identify_string_dvar
elsif @ltype != "'" && @ltype != "]" && @ltype != ":" and ch == "#"
subtype = true
elsif ch == '\\' and @ltype == "'" #'
@@ -1082,6 +1084,42 @@ class RubyLex
@lex_state = EXPR_END
end
end
+
+ def identify_string_dvar
+ begin
+ getc
+
+ reserve_continue = @continue
+ reserve_ltype = @ltype
+ reserve_indent = @indent
+ reserve_indent_stack = @indent_stack
+ reserve_state = @lex_state
+ reserve_quoted = @quoted
+
+ @ltype = nil
+ @quoted = nil
+ @indent = 0
+ @indent_stack = []
+ @lex_state = EXPR_BEG
+
+ loop do
+ @continue = false
+ prompt
+ tk = token
+ if @ltype or @continue or @indent > 0
+ next
+ end
+ break if tk.kind_of?(TkRBRACE)
+ end
+ ensure
+ @continue = reserve_continue
+ @ltype = reserve_ltype
+ @indent = reserve_indent
+ @indent_stack = reserve_indent_stack
+ @lex_state = reserve_state
+ @quoted = reserve_quoted
+ end
+ end
def identify_comment
@ltype = "#"
diff --git a/version.h b/version.h
index 31245eaf8c..722037af29 100644
--- a/version.h
+++ b/version.h
@@ -1,5 +1,5 @@
#define RUBY_VERSION "1.9.1"
-#define RUBY_PATCHLEVEL 253
+#define RUBY_PATCHLEVEL 254
#define RUBY_VERSION_MAJOR 1
#define RUBY_VERSION_MINOR 9
#define RUBY_VERSION_TEENY 1