[Mono-dev] [PATCH] Simplifying/optimizing CodeGenerator.cs

Juraj Skripsky js at hotfeet.ch
Mon Jan 7 09:51:22 EST 2008


Hi Robert,

Thanks a lot for sketching out what you had in mind! That's a nice and
clean design. I will definitely follow that pattern.

- Juraj


On Mon, 2008-01-07 at 13:26 +0100, Robert Jordan wrote:
> Hi Juray,
> 
> Juraj Skripsky wrote:
> > Adding a abstract method to CodeObject, e.g.
> > 
> > abstract void GenerateCode(CodeGenerator generator);
> > 
> > and implementing/overriding it in each subclass (where it calls the
> > appropriate CodeGenerator.GenerateXYZ mehtod) would indeed result in
> > nicer and faster code.
> 
> 
> This is not quite "Visitor", but it will do it as well.
> The drawback is that the CodeObject hierarchy will depend
> on internal CodeGenerator members.
> 
> With Visitor, this dependency can be eliminated (at the cost
> of some bookkeeping acrobatics):
> 
> public class CodeObject {
> 	...
> 	internal abstract void Accept(CodeDomVisitor visitor);
> }
> 
> public class CodeArrayCreateExpression : CodeObject {
> 	...
> 	internal override void Accept(CodeDomVisitor visitor)
> 	{
> 		visitor.Visit (this);
> 	}
> }
> 
> ...
> 
> internal class CodeDomVisitor {
> 	public abstract void Visit (CodeArrayCreateExpression o);
> 	public abstract void Visit (CodeArgumentReferenceExpression o);
> 	public abstract void Visit (CodeArrayCreateExpression o);
> 	...
> }
> 
> public class CodeGenerator {
> 	internal class Visitor : CodeDomVisitor {
> 		CodeGenerator g;
> 
> 		public override void Visit (CodeArrayCreateExpression o)
> 		{
> 			g.GenerateArrayCreateExpression (o);
> 		}
> 
> 		public override void Visit (CodeArgumentReferenceExpression o)
> 		{
> 			g.GenerateArgumentReferenceExpression (o);
> 		}
> 		...
> 	}
> }
> 
> > 
> > - Juraj
> > 
> 
> Robert
> 
> 
> 
> > 
> > On Sun, 2008-01-06 at 23:45 +0100, Juraj Skripsky wrote:
> >> Hi Robert,
> >>
> >> I don't see how to use the visitor pattern in the implementation of
> >> CodeGenerator. But I'm probably to close to the details right now to see
> >> the big picture.
> >>
> >> Could you roughly describe how you meant to apply the visitor pattern to
> >> this class?
> >>
> >> - Juraj
> >>
> >>
> >> On Sun, 2008-01-06 at 23:15 +0100, Robert Jordan wrote:
> >>> Hi Juraj,
> >>>
> >>> Juraj Skripsky wrote:
> >>>> Hi,
> >>>>
> >>>> Attached you'll find a patch for CodeGenerator.cs (in
> >>>> System.CodeDom.Compiler). It simplifies two methods considerably and
> >>>> might also bring a small performance improvement (perf. tests pending).
> >>> I think using a visitor pattern would be more appropriate.
> >>> Performance and style-wise.
> >>>
> >>> Robert
> >>>
> >>> _______________________________________________
> >>> Mono-devel-list mailing list
> >>> Mono-devel-list at lists.ximian.com
> >>> http://lists.ximian.com/mailman/listinfo/mono-devel-list
> >>>
> >> _______________________________________________
> >> Mono-devel-list mailing list
> >> Mono-devel-list at lists.ximian.com
> >> http://lists.ximian.com/mailman/listinfo/mono-devel-list
> >>
> 
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
> 




More information about the Mono-devel-list mailing list