[Ironruby-core] Code Review: StringGsubEach

Curt Hagenlocher curth at microsoft.com
Tue Jul 8 02:01:04 EDT 2008


Looks good.

-----Original Message-----
From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Dave Remy
Sent: Monday, July 07, 2008 5:29 PM
To: IronRuby External Code Reviewers
Cc: ironruby-core at rubyforge.org
Subject: [Ironruby-core] Code Review: StringGsubEach

tfpt review "/shelveset:StringGsubEach;REDMOND\dremy"
Comment  :
  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





More information about the Ironruby-core mailing list