Hi Juli!

Nice catch - I hadn't thought about that.

Your patch does indeed solve the problem. However the parser is now
being called for each new expression, whether it is in the cache or not.
Perhaps a better long term solution would be to cache a structure in the
lookup table.

At the moment, FactoryCache maps (pattern, options) => (factory). It
could be altered to map (pattern, options) => (factory, mapping,
group_count), so that the Regex constructor could pull these details out
too, and save both parse and compile time.

Thanks,
    Dan.


Juli Mallett wrote:

>Hi,
>
>Currently in the Regex code, there is factory caching code, however things
>like grouping need evaluated each time the Regex is constructed, the most
>simple/obvious solution is to move that code out of the section that runs
>only when there is no cached item in existence.  This happens when one
>constructs more than one Regex with the same pattern and the same options
>and e.g. tries to use $1 in Replace().  Example code which throws bogus
>exception would be something like:
>
>Foo = Regex.Replace(Foo, @"(.*)", "$1");
>// Here we get bogus exception
>Foo = Regex.Replace(Foo, @"(.*)", "$1");
>
>More or less.
>
>Here's a diff:
>
>http://toxic.magnesium.net/~flata/dump/Regex-factorycache-eval.diff
>
>Thanks,
>juli.


__________________________________________________
Do You Yahoo!?
Everything you'll ever need on one web page
from News and Sport to Email and Music Charts
http://uk.my.yahoo.com

_______________________________________________
Mono-list maillist  -  [EMAIL PROTECTED]
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to