[fpc-devel] Debug compiler

Ondrej Pokorny lazarus at kluug.net
Sun Nov 1 06:26:47 CET 2015


On 01.11.2015 00:11, Jonas Maebe wrote:
> On 31/10/15 21:28, Ondrej Pokorny wrote:
>> The argument that the tenumeratornode concept is completely different
>> from other nodes is correct - but if you think about the syntax you will
>> see that also the syntax is completely different from other pascal
>> syntax so you need such a unique node.
>
> That is a very good argument not to add it...

Yes, my argument that the "syntax is completely different from other 
pascal syntax" is misleading. I put it wrong. It is not different - its 
a new extension within the current pascal syntax:

E.g. the code
*  for s in Self.StringArray do**
**    Writeln(s);**
* would compile even now if *StringArray* was an "array of xyz" or a 
class/record/interface with GetEnumerator function. The syntax is 
already present in Pascal. I only want to extend it for array properties 
(this extension is new and unique).

The fact that the syntax is unique ensures that no legacy code can be 
broken. I personally don't think that adding many new compiler features 
is necessary, but this one really is useful - with this syntax you could 
easily and systematically add enumerators to a lot of different 
properties in the RTL/LCL you cannot use in a for-in loop now:
- TWinControl.Controls
- TStrings.Names
- TStrings.Objects
- TStrings.Values
- TStringGrid.Cols
- TStringGrid.Rows
- TStringGrid.Cells
- etc, etc

Michael liked it as well: 
http://lists.freepascal.org/pipermail/fpc-devel/2015-October/036110.html

---

+ I was wrong about the need to use "tenumeratornode". Actually you can 
use "tcallnode" and get *pd* and *expr* for 
*create_enumerator_for_in_loop* from its properties in function 
*create_for_in_loop*:
expr:=tcallnode(expr).methodpointer;
pd:=tprocdef(tcallnode(expr).symtableprocentry.ProcdefList[xyz]); // 
(you have to find the compatible overload)
(If you don't know what I mean I can send you the code. It's working 
like a charm.)

The only thing we need is a new flag/whatever so that 
*create_for_in_loop* knows that "tcallnode(expr)" contains an enumerator 
function. tnode.flags seems to be full :( Do you have any suggestions? 
If we sort this out, 2 more arguments against it are nil :)

Ondrej

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20151101/2a04f308/attachment.html>


More information about the fpc-devel mailing list