[Ironruby-core] Code Review: StringGsubEach
dremy at microsoft.com
Mon Jul 7 20:29:21 EDT 2008
tfpt review "/shelveset:StringGsubEach;REDMOND\dremy"
Changes to for string.gsub and string.each (and each_line) to run clean. The most significant change is to track version in MutableString. This version is bumped on any mutation and functions that iterate (each, each_line, gsub) check the version before and after to assure there has been no version change during the iteration. After these changes all gsub, each, and each_line specs run clean (no excludes). Note that although the specs run clean the each behavior does not match MRI. The spec test contains a new line in the iterating string ("hello\nworld") and MRI does throw a runtime exception if this string is iterated. However if there is no new line in the string MRI does not throw an exception if the underlying string is mutated. This seems inconsistent but worth noting.
String#gsub with pattern and block sets $~ for access from the block
String#gsub with pattern and block restores $~ after leaving the block
String#gsub with pattern and block sets $~ to MatchData of last match and nil when there's none for access from outside
String#gsub with pattern and block raises a RuntimeError if the string is modified while substituting
String#each raises a RuntimeError if the string is modified while substituting
String#each_line raises a RuntimeError if the string is modified while substituting
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 19089 bytes
More information about the Ironruby-core