2007-04-18  Raja R Harinath  <rharinath@novell.com>

	Fix #80554
	* parser.cs (ResolveReferences): Don't throw an expression if a
	capture assertion reference cannot be resolved.
	(ParseGroupingConstruct): Provide fallback expression to a capture
	assertion.
	* syntax.cs (CaptureAssertion): If the bareword doesn't refer to
	the name of a capture group, fallback to treating it as a literal
	expression.

2007-04-04  Raja R Harinath  <rharinath@novell.com>

	* interpreter.cs (Eval) <OpCode.Reference>: Distribute for loop
	inside if.
	for () if (a) s1; else s2; => if (a) for () s1; else for () s2;

2007-04-03  Raja R Harinath  <rharinath@novell.com>

	* Regex.cs (~Regex): Don't define in NET_2_0 profile.

2007-01-02  Raja R Harinath  <rharinath@novell.com>

	Fix #79472
	* parser.cs (Parser.GetMapping): Use the actual group numbers to
	build the mapping.

2006-09-28  Andrew Skiba  <andrews@mainsoft.com>

	* Regex.cs: TARGET_JVM

2006-05-30  Gert Driesen  <drieseng@users.sourceforge.net>

	* CaptureCollection.cs: Removed virtual keyword to fix API mismatches.
	* MatchCollection.cs: Removed virtual keyword to fix API mismatches.
	* GroupCollection.cs: Removed virtual keyword to fix API mismatches.

2006-05-08  Raja R Harinath  <rharinath@novell.com>

	Fix #78278
	Remove 65535-limit on number of repetitions matched by a pattern.
	We still have a 65535 limit on the length of a pattern and the
	number of groups in a pattern.
	* compiler.cs (PatternCompiler.EmitCount): New.  Emits an int as
	two ushorts into the program stream.
	(EmitInfo, EmitRepeat, EmitFastRepeat): Use it to emit integers
	rather than shorts.
	* interpreter.cs (Intepreter.ReadProgramCount): Read an int
	emitted into the program stream.
	(Interpreter): Use it.  Update counts.
	(Interpreter.Eval) [OpCode.Repeat, OpCode.FastRepeat]: Likewise.
	* parser.cs (ParseGroup): Pass 0x7ffffff as the max value for '*'
	and '+' repetition patterns.
	* arch.cs (Info, Repeat, FastRepeat): Update description.

2006-04-18  Raja R Harinath  <rharinath@novell.com>

	Treat fixed repetitions of simple regexes as simple too.
	* syntax.cs (Expression.IsComplex): Make abstract.
	(Group.IsComplex, Alternation.IsComplex): Move ...
	(CompositeExpression.IsComplex): ... here.
	(Group.GetAnchorInfo): Reduce allocations.  Avoid creating another
	ArrayList, and use a StringBuilder to build up the string.
	(Repetition.GetAnchorInfo): Use a StringBuilder to build up the string.
	(ExpressionAssertion.IsComplex): Override.

2006-04-17  Florian Gross  <flgr@ccan.de>
	    Raja R Harinath  <rharinath@novell.com>

	* syntax.cs (CharacterClass.Compile): Emit categories after the
	character intervals so that the evaluator can pick up the
	'IgnoreCase' flag.

2006-04-07  Raja R Harinath  <rharinath@novell.com>

	Fix #78007
	* interpreter.cs (Interpreter.Eval) [Anchor, Position.StartOfString]:
	Don't reset 'ptr' to 0 during forward scan.

	Fix #76345
	* interpreter.cs (Interpreter.FastEval) [FastRepeat]: If the first
	tail operation has a 'negate' flag, avoid the "match next char"
	optimization.

	Fix #69269
	* arch.cs (OpCode.NotCategory): New.  Stands for matching a
	character _not_ from the given category.
	* debug.cs (DisassembleBlock): Handle it.
	* compiler.cs (ICompiler.EmitNotCategory): New.
	(Compiler.EmitNotCategory): New.  Emit OpCode.NotCategory.
	* syntax.cs (CharacterClass.Compile): Don't conflate negation of
	the character class and negation of the category.  Use
	EmitNotCategory.
	* interpreter.cs (Interpreter.Eval): Pass OpCode.NotCategory to
	EvalChar.
	(Interpreter.EvalChar): Handle it.

2006-04-06  Raja R Harinath  <rharinath@novell.com>

	Fix #77487
	* interpreter.cs (Eval) [Until, FastUntil]: Set 'deep' to null
	when evaluating the tail.  Ensure that backtracks don't confuse
	the recursion vs. iteration detector.

2006-04-03  Raja R Harinath  <rharinath@novell.com>

	* interpreter.cs (Eval) [Until, lazy]: Avoid extra evaluation on a
	degenerate match.

2006-03-30  Raja R Harinath  <harinath@gmail.com>

	Fix #77626
	* parser.cs (Parser.ParseCharacterClass): Don't automatically
	assume there's a range when we see '-'.  Ensure that we have seen
	at least one other character, and that we aren't already parsing a
	range.  Handle some more errors.

2005-12-19  Kornél Pál  <kornelpal@hotmail.com>

	* Regex.cs: Added support for regular expressions compiled to
	  assemblies by compiling the pattern. This solution ignores existing
	  CIL code but provides full support for regular expression classes
	  compiled by MS.NET.

2005-11-21  Sebastien Pouliot  <sebastien@ximian.com> 

	* CaptureCollection.cs: Fixed length check.
	* Group.cs: Added missing validation for Synchronized method.
	* Match.cs: Added missing validation for Synchronized and Result 
	methods.
	* MatchEvaluator.cs: Added [Serializable] for 2.0 profile.
	* RegexCompilationInfo.cs: Added missing property validation.
	* Regex.cs: Implemented UseOptionC and UseOptionR protected methods
	(now documented). Fixed API for 2.0 profile.
	* RegexRunner.cs: Stubbed CharInClass for 2.0 profile.

2005-11-17  Sebastien Pouliot  <sebastien@ximian.com> 
 
	* Match.cs: Removed the ": base ()" on the private ctor as it is
	unrequired and cause an extra public ctor to added (bug #76736).
	* MatchCollection.cs: Add missing virtual to indexer property.

2005-09-23  Raja R Harinath  <rharinath@novell.com>

	* interpreter.cs (Interpreter.Eval) [OpCode.Until]: Invert the
	sense of a test to reflect the code re-organization.

2005-09-22  Raja R Harinath  <rharinath@novell.com>

	Fix #72152, #72989.
	* interpreter.cs (Interpreter.Eval) [OpCode.Until]: Avoid some
	cases of recursion when dealing with eager quantifiers too.  We
	now avoid recursion when handling the innermost quantifier.
	(Interpreter.IntStack, Interpreter.stack): New.  Stack to help
	implement backtracking in eager quantifiers.

2005-09-21  Raja R Harinath  <rharinath@novell.com>

	* interpreter.cs (Interpreter.Eval) [OpCode.Until]: Avoid some
	cases of recursion when dealing with the minimum count and lazy
	quantifiers.

2005-08-23  Raja R Harinath  <rharinath@novell.com>

	* regex.cs: Remove.  Split into ...
	* MatchEvaluator.cs, Regex.cs, RegexCompilationInfo.cs,	
	RegexOptions.cs: ... these.  Now every publicly exposed type in
	this namespace has its own file.

2005-07-21  Florian Gross  <flgr@ccan.de>

	* Fixed a bug in category.cs that caused ECMAScript \d to fail.

2005-07-13  Raja R Harinath  <rharinath@novell.com>

	Make even more lazier.
	* MatchCollection.cs (TryToGet): Don't generate match i+1 when
	we're looking for match i.  Change post-conditions.
	(FullList): New helper property.  Ensures the list is fully populated.
	(Count, CopyTo): Use it.
	(Enumerator.Current): Update to new post-conditions of TryToGet.
	(Enumerator.MoveNext): Likewise.  Don't modify index if we're
	beyond the end.

2005-07-08  Raja R Harinath  <rharinath@novell.com>

	* MatchCollection.cs: Convert to incremental mode.
	* regex.cs (Regex.Matches): Update.  Pass responsibility of
	generating all matches to MatchCollection.

2005-06-14  Raja R Harinath  <harinath@gmail.com>

	* parser.cs (Parser.ConsumeWhitespace): Add bounds check.

	Fix #74753.
	* Match.cs (Match) [zero-argument variant]: Make private.
	* GroupCollection (Item) [string variant]: Don't look for the
	group number in an empty match.

2005-06-10  Raja R Harinath  <rharinath@novell.com>

	* interpreter.cs (Interpreter.GenerateMatch): Avoid allocating two
	intermediate arrays to build the final result.
	(Interpreter.GetGroupInfo, Interpreter.PopulateGroup): New helper
	functions.
	* CaptureCollection.cs (list): Change from ArrayList to list.
	(SetValue): New internal helper, used by Interpreter.PopulateGroup.
	(Enumerator): Remove helper class.
	(IEnumerator.GetEnumerator): Just use list.GetEnumerator.
	* GroupCollection.cs: Likewise.
	* Group.cs (Group): Move responsibility of populating 'Captures'
	to Interpreter.PopulateGroup.
	* Match.cs (Match): Move responsibility of populating 'Groups' to
	Interpreter.GenerateMatch.

2005-05-25  Raja R Harinath  <rharinath@novell.com>

	* replace.cs (ReplacementEvaluator.Compile): Rewrite to avoid
	creating several intermediate strings.  Simplify internal
	intermediate representation.
	(ReplacementEvaluator.EvaluateAppend): New.  Version of Evaluate
	that builds the result directly on a passed-in StringBuilder.
	(ReplacementEvaluator.Evaluate): Just a wrapper around
	EvaluateAppend.
	* regex.cs (MatchAppendEvaluator): New internal delegate.
	(Regex.Replace): Use MatchAppendEvaluator.
	(Regex.Adapter): New class used to adapt a MatchEvaluator to a
	MatchAppendEvaluator.

2005-05-24  Raja R Harinath  <rharinath@novell.com>

	* replace.cs (ReplacementEvaluator.CompileTerm): Fix group
	returned by $+.

2005-05-20  Ben Maurer  <bmaurer@ximian.com>

	* regex.cs: Some memory allocation optimizations.

2005-05-20  Raja R Harinath  <rharinath@novell.com>

	Fix #74735.
	* replace.cs (ReplacementEvaluator.Compile): Allow CompileTerm to
	fail and yet have advanced the pointer.  Append the scanned-over
	portion to the "literal" being built.
	(ReplacementEvaluator.CompileTerm): Don't throw any exceptions.
	If a term cannot be recognized, just return null.

	* compiler.cs (InterpreterFactory.GroupCount): Fix.  The 0'th
	index corresponds to Opcode.Info.

	* parser.cs (Parser.Unescape): If the string doesn't contain any
	'\' character, don't allocate a new string.

	* replace.cs (ReplacementEvalutator.Term.AppendResult): Rename
	from GetResult.  Append to a passed-in StringBuilder rather than
	return a string.
	(ReplacementEvaluator.Evaluate): Update.
	
	* Capture.cs, Group.cs, Match.cs: New files split out of ...
	* match.cs: ... this.  Remove.

2005-02-27 Gonzalo Paniagua Javier <gonzalo@ximian.com>

	* parser.cs: stuff inside {} might not be a quantifier. Fixes
	bug #69193.

2005-01-10 Gonzalo Paniagua Javier <gonzalo@ximian.com>

	* quicksearch.cs: handle IgnoreCase when getting the shift distance.
	Fixes bug #69065. Patch by mei@work.email.ne.jp.

2005-01-08  Miguel de Icaza  <miguel@ximian.com>

	* syntax.cs: Applied patch from mei@work.email.ne.jp to fix bug
	#71077.

	* parser.cs: Turns out that \digit sequences are octal sequences
	(no leading zero is needed);  And the three octal digit rule
	applies to the leading zero as well.

	This fixes the Unescape method.

2004-11-29 Gonzalo Paniagua Javier <gonzalo@ximian.com>

	* regex.cs: use NextMatch to move on to the next match. Fixes bug
	#57274.

2004-11-09  Atsushi Enomoto  <atsushi@ximian.com>

	* parser.cs : cast.

2004-11-08  Ben Maurer  <bmaurer@ximian.com>

	* replace.cs, parser.cs: Use stringbuilder for allocation sanity.

2004-10-21  Joerg Rosenkranz  <joergr@voelcker.com>

	* regex.cs: Fixed a bug introduced with the last patch which
	prevented any replacements when a postive count is given.
	This also happens in all overloads without count parameter.

2004-10-18 Gonzalo Paniagua Javier <gonzalo@ximian.com>

	* regex.cs: in Replace, when count is negative, replacement continues
	to the end of the string.

	Fixes bug #68398. Patch by Jon Larimer.

2004-06-10  Gert Driesen <drieseng@users.sourceforge.net>

	* RegexRunner.cs: fixed case mismatch of methods

2004-06-10  Gert Driesen <drieseng@users.sourceforge.net>

	* RegexRunner.cs: marked TODO, added missing protected internal
	fields, throw NotImplementedException in all methods

2004-06-10  Gert Driesen <drieseng@users.sourceforge.net>

	* RegexRunnerFactory.cs: removed comment, no longer throw exception
	from ctor
	* regex.cs: fixed public API signature by renaming protected 
	internal fields and adding destructor, added MonoTODO attribute to
	fields and method that are not yet implemented, changed not 
	implemented methods to throw NotImplementedException instead of
	Exception, fixed names of field that are serialized

2004-06-06  Jambunathan K <kjambunathan@novell.com>
	
	* parser.cs: Fixed issues with Regex.Unescape() identified as part of
	debugging bug #58256. The original problem reported was about
	inconsistency between the way we treat replacement patterns and the 
	way microsoft treats the replacement patterns in Regex.Replace(). MS
	implementation is buggy and doesn't honour escape sequences in the
	replacement patterns, even though the SDK claims otherwise.

	
2004-06-01  Gonzalo Paniagua Javier <gonzalo@ximian.com>

	* syntax.cs: re-applied my patch from 2004-05-27 plus a fix which is
	emitting a Category.All if both a category and its negated value are
	present.

2004-06-01  Gonzalo Paniagua Javier <gonzalo@ximian.com>

	* syntax.cs: reverting my previous patch. It causes bigger problems.

2004-05-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>

	* category.cs: added LastValue field to mark the end of enum Category.
	* syntax.cs: in CharacterClass, use Category.LastValue to get the size
	of the array needed. Use a BitArray instead of bool[].
	In AddCategory(), don't set the opposite category as false. Fixes
	bug #59150. All tests pass.

2004-05-25  Jackson Harper  <jackson@ximian.com>

	* parser.cs: Allow creating a regular expression using {,n} as the
	specified. The min bounds is set to -1, I am not completely sure
	if that is what it is supposed to be but MS does not set it to 0
	based on testing. Patch by dave-gnome-bugs@earth.li. Fixes bug #56761.

2004-05-12  Dick Porter  <dick@ximian.com>

	* regex.cs: 
	* quicksearch.cs: 
	* RegexRunnerFactory.cs: 
	* RegexRunner.cs: More public API difference fixes.

	* GroupCollection.cs: 
	* MatchCollection.cs: 
	* CaptureCollection.cs: Moved GroupCollection, MatchCollection and
	CaptureCollection so that they no longer inherit from the
	non-standard RegexCollectionBase class.  Fixes the API difference.

2004-04-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>

	* arch.cs:
	* compiler.cs:
	* interpreter.cs:
	* parser.cs:
	* syntax.cs:
	Patch by Eric Durand Tremblay.
	1) Capture inner group when named.
	2) Resolved parse error caused by not capturing inner group
	3) Resolved incorrect capture group
	4) Now, not capturing anything when unnamed ( correct behavior)


2004-04-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>

	* arch.cs:
	* compiler.cs:
	* interpreter.cs:
	* parser.cs:
	* syntax.cs: converted to unix line endings.

2004-03-30  Lluis Sanchez Gual <lluis@ximian.com>

	* collections.cs: In the indexer, return an empty group if the requested
	group is not found.
	* match.cs: Added default constructor for Group.
	
2004-03-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>

	* parser.cs: fixed group numbering.

2004-03-22  Jackson Harper  <jackson@ximian.com>

	* parser.cs: Use the group number as the name in mapping. Patch by
	Gert Driesen.
	* regex.cs: Fix off by one error. Patch by Gert Driesen.

2004-03-17  Francois Beauchemin <beauche@softhome.net>
 	* syntax.cs, interpreter.cs, quicksearch.cs, regex.cs, compiler.cs : 
 		Revised support for RigthToLeft. 
 		quicksearch has now an reverse option.		
 		This fixes bug #54537 
 
  	* regex.cs, compiler.cs :
 	 	Some code to support CILCompiler.		
 	* regex.cs : 
 		Added some undocumented of MS.
 
2004-03-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>

	* parser.cs: allow a @"\0" escape sequence. Fixes bug #54797.

2004-02-01  Miguel de Icaza  <miguel@ximian.com>

	* syntax.cs, interval.cs: Applied patch from Marco Cravairo
	through Francois Beauchemin who reviewed on the mailing list.
	This fixes bug #45976

2004-01-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>

	* parser.cs: an opening brace without a
	quantifier do not cause a parse error. Fixes bug #52924.

2004-01-07  Lluis Sanchez Gual <lluis@ximian.com>

	* regex.cs: In Split(), if the last match is at the end of the string, 
	an empty string must be added to the array of results.

2003-12-15  Sanjay Gupta <gsanjay@novell.com>
	* match.cs: Check for null value before Substring method call.  
	Fixes bug #52034.

2003-11-21  Juraj Skripsky <js@hotfeet.ch>

	* quicksearch.cs: Create and use hashtable only for "long" search 
	strings. 

	(Search): Use simple scan for a single-character search strings.
	
	(GetChar): Simplify case sensitivity handling.

2003-11-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>

	* interpreter.cs: when evaluating a degenerate match, restore the
	RepeatContext if fail. Fixes bug #42529.

2003-11-22  Jackson Harper <jackson@ximian.com>

	* regex.cs: Add CultureInvariant flag to RegexOptions.
	
2003-11-20  Juraj Skripsky <js@hotfeet.ch>

	* quicksearch.cs: Use a hashtable instead of an array for the
	shift table to improve the memory usage.  

2003-11-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>

	* regex.cs:
	(Split): include capture groups in the results, if any. Fixes bug
	#51146.

2003-07-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>

	* regex.cs: patch from Eric Lindvall <eric@5stops.com> that fixes bug
	#44830.

2003-03-05  Miguel de Icaza  <miguel@ximian.com>

	* category.cs (CategoryUtils.CategoryFromName): Use StartsWith
	("Is") instead of a substring for (0,2) which was throwing an
	exception causing Category.None to be returned

2003-01-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>

	* collections.cs: fixed bug #30091.

2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>

	* regex.cs: fixed little mistake (closes #35860).

2002-11-12 Jackson Harper <jackson@latitudegeo.com>

	* arch.cs compiler.cs regex.cs: Added mapping attribute to MachineFactories

2002-11-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>

	* parser.cs: detect illegal \ at end of pattern. Fixes 31334.

2002-10-25  Gonzalo Paniagua Javier <gonzalo@ximian.com>

	* parser.cs: applied fix from Tim Haynes (thaynes@openlinksw.com) to
	solve bug #32807. Also modified GetMapping to return the same as MS.

2002-08-28  Juli Mallett  <jmallett@FreeBSD.org>

	* arch.cs, compiler.cs: Give the interpreter machine a property
	for the retrieval of the group count.

	* regex.cs: Use the new GroupCount property of the factory to
	initialise the current group count, and restructure code to compile
	the pattern only the first time it is needed (essentially backing
	out the previous revision of regex.cs, to use the new code.)

2002-08-14  Cesar Octavio Lopez Nataren <cesar@ciencias.unam.mx>

	* regex.cs: Added the ctr for ISerializable implementation and
	implemented the GetObjectData function.

2002-07-30  Juli Mallett  <jmallett@FreeBSD.org>

	* regex.cs: Fixed bug where the expression would not be
	re-evaluated for grouping purposes when factory caches were
	used, resulting in no groups being recognised after one call
	with a given pattern and no change in options.

2002-05-13  Dan Lewis  <dihlewis@yahoo.co.uk>

	* regex.cs: Fixed bug in split.

2002-05-08  Dan Lewis  <dihlewis@yahoo.co.uk>

	* interpreter.cs: Moved to an array-based stack representation
	for faster captures.

	* match.cs, collections.cs: Decoupled capture representation from
	interpreter internals.

	* cache.cs: Changed Key type from struct to class for speed.

2002-04-06  Dan Lewis  <dihlewis@yahoo.co.uk>

	* cache.cs: Object methods should be overridden with "override".

2002-04-04  Dan Lewis  <dihlewis@yahoo.co.uk>

	* RegexRunner.cs, RegexRunnerFactory.cs: MS support classes. Stubs
	added for completeness.

	* regex.cs, match.cs, collections.cs: Serializable attribute.

2002-04-04  Dan Lewis  <dihlewis@yahoo.co.uk>

	* regex.cs: Added static Matches and IsMatch methods.

2002-04-03  Dan Lewis  <dihlewis@yahoo.co.uk>

	* ChangeLog: Added changelog.

	* cache.cs: Fixed bug in MRUList.Evict.
