<div class="gmail_quote">On Tue, Aug 2, 2011 at 7:03 PM, Marcos Douglas <span dir="ltr"><<a href="mailto:md@delfire.net">md@delfire.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

2011/8/2 Max Vlasov <<a href="mailto:max.vlasov@gmail.com">max.vlasov@gmail.com</a>>:<br>
<div><div></div><div class="h5">> Hi,<br>
><br>
> Personally I stopped using 'with' keyword long time ago, but there are code<br>
> fragments from the past and today I fixed a little bug showing again that<br>
> it's a evil. <br>> .....<br>
><br>
> So not only the 'with' context can silently change while the project is<br>
> evolving, it can also change while it's being ported...<br>
<br></div></div></blockquote><div> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div><div class="h5">
</div></div>IMHO, 'with' should have an implicit pointer like 'self' (could be<br>
'this' or whatever).<br>
<br>
Eg:<br>
<div class="im"><br>
procedure TControlDescendant.Paint;<br>
begin<br>
  with Canvas do<br>
  begin<br>
</div>      this.Rectangle(0, 0, this.Width, this.Height);<br>
  edn;<br>
end;<br>
<font color="#888888"></font><br></blockquote></div><br>Reading all the discussion and suggestions, some thoughts came<br>1. Introducing a check in the compiler setting (or a conditional define) that could force the developer to use self inside 'with' constructions. So with this setting on, any access to fields, properties or methods will require explicit self or 'identifier not found' will be fired.  This solution still won't save from many problem situation (including the one I gave an example), but at least it is compatible with existing Delphi syntax and make some constructions more readable<br>

<br>2. Some switch (maybe on by default) that prevents from compiling if there are several duplicate names in the same 'with' context (including global, local, fields). The developer in this case has at least options to rename local variables, include self for fields to resolve the problem or not using with if there are no other options. <br>

In contrary to 1. this would solve the example I gave since there are two widths and heights in the context of 'with' construction. <br><br>What do you think?<br><br>Max<br>