diff options
author | Kevin Menard <nirvdrum@gmail.com> | 2012-10-12 23:03:22 -0400 |
---|---|---|
committer | Kevin Menard <nirvdrum@gmail.com> | 2012-10-12 23:03:22 -0400 |
commit | dd925d3938dac7bd277378679fb1fd9c18917858 (patch) | |
tree | d80802298e019427c3a1e1230c447734d6422bec | |
parent | 4be2aef4d385aaeb995ff3024534d357dff30d8e (diff) | |
download | psych-dd925d3938dac7bd277378679fb1fd9c18917858.tar.gz |
Cache symbols while tokenizing.
-rw-r--r-- | lib/psych/scalar_scanner.rb | 6 |
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 |