summaryrefslogtreecommitdiff
path: root/lib/irb
diff options
context:
space:
mode:
authorkeiju <keiju@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-07-23 08:35:22 +0000
committerkeiju <keiju@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-07-23 08:35:22 +0000
commitf984a4d8476c8e1349caed98379843d1268bb069 (patch)
treefd228ae79d707658d0c316136895c12e5eaaedcf /lib/irb
parentdac591d01b0f6f85003b0268119da1d3df8527b5 (diff)
* lib/irb/ruby-lex.rb: make irb be able to parse
string_dvar. [ruby-core: 24051] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24258 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/irb')
-rw-r--r--lib/irb/ruby-lex.rb38
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/irb/ruby-lex.rb b/lib/irb/ruby-lex.rb
index b36629b38e..c758f1dcf2 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 == "'" #'
@@ -1083,6 +1085,42 @@ class RubyLex
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 = "#"