summaryrefslogtreecommitdiffstats
path: root/lib/puppet/parser/lexer.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/parser/lexer.rb')
-rw-r--r--lib/puppet/parser/lexer.rb16
1 files changed, 9 insertions, 7 deletions
diff --git a/lib/puppet/parser/lexer.rb b/lib/puppet/parser/lexer.rb
index 6a9f1cfc4..1e10ff96c 100644
--- a/lib/puppet/parser/lexer.rb
+++ b/lib/puppet/parser/lexer.rb
@@ -540,15 +540,17 @@ class Puppet::Parser::Lexer
[ str[0..-2],str[-1,1] ]
end
- def tokenize_interpolated_string(token_type)
+ def tokenize_interpolated_string(token_type,preamble='')
value,terminator = slurpstring('"$')
- token_queue << [TOKENS[token_type[terminator]],value]
- while terminator == '$' and not @scanner.scan(/\{/)
- token_queue << [TOKENS[:VARIABLE],@scanner.scan(%r{(\w*::)*\w+|[0-9]})]
- value,terminator = slurpstring('"$')
- token_queue << [TOKENS[DQ_continuation_token_types[terminator]],value]
+ token_queue << [TOKENS[token_type[terminator]],preamble+value]
+ if terminator != '$' or @scanner.scan(/\{/)
+ token_queue.shift
+ elsif var_name = @scanner.scan(%r{(\w*::)*\w+|[0-9]})
+ token_queue << [TOKENS[:VARIABLE],var_name]
+ tokenize_interpolated_string(DQ_continuation_token_types)
+ else
+ tokenize_interpolated_string(token_type,token_queue.pop.last + terminator)
end
- token_queue.shift
end
# just parse a string, not a whole file