summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Menard <nirvdrum@gmail.com>2012-10-12 23:03:22 -0400
committerKevin Menard <nirvdrum@gmail.com>2012-10-12 23:03:22 -0400
commitdd925d3938dac7bd277378679fb1fd9c18917858 (patch)
treed80802298e019427c3a1e1230c447734d6422bec
parent4be2aef4d385aaeb995ff3024534d357dff30d8e (diff)
downloadpsych-dd925d3938dac7bd277378679fb1fd9c18917858.tar.gz
Cache symbols while tokenizing.
-rw-r--r--lib/psych/scalar_scanner.rb6
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/psych/scalar_scanner.rb b/lib/psych/scalar_scanner.rb
index 9130746..41e889a 100644
--- a/lib/psych/scalar_scanner.rb
+++ b/lib/psych/scalar_scanner.rb
@@ -16,12 +16,14 @@ module Psych
# Create a new scanner
def initialize
@string_cache = {}
+ @symbol_cache = {}
end
# Tokenize +string+ returning the ruby object
def tokenize string
return nil if string.empty?
return string if @string_cache.key?(string)
+ return @symbol_cache[string] if @symbol_cache.key?(string)
case string
# Check for a String type, being careful not to get caught by hash keys, hex values, and
@@ -67,9 +69,9 @@ module Psych
0.0 / 0.0
when /^:./
if string =~ /^:(["'])(.*)\1/
- $2.sub(/^:/, '').to_sym
+ @symbol_cache[string] = $2.sub(/^:/, '').to_sym
else
- string.sub(/^:/, '').to_sym
+ @symbol_cache[string] = string.sub(/^:/, '').to_sym
end
when /^[-+]?[0-9][0-9_]*(:[0-5]?[0-9])+$/
i = 0