From 6c6d4568e8b8c8667c0b57ca6e1b5ba5d7acbbe3 Mon Sep 17 00:00:00 2001 From: tenderlove Date: Mon, 22 Oct 2012 21:24:50 +0000 Subject: * ext/psych/lib/psych/scalar_scanner.rb: Cache symbols while tokenizing. Thanks Kevin Menard! git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37291 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/psych/lib/psych/scalar_scanner.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'ext/psych/lib/psych/scalar_scanner.rb') diff --git a/ext/psych/lib/psych/scalar_scanner.rb b/ext/psych/lib/psych/scalar_scanner.rb index 9130746347..41e889a528 100644 --- a/ext/psych/lib/psych/scalar_scanner.rb +++ b/ext/psych/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 -- cgit v1.2.3