Alexander Klenin schrieb:

In the first step I'll enclose all semantical code into begin-end,
so that it can be easily hidden (folded) in the Lazarus IDE.

This is not needed -- you can use {$REGION} ... {$ENDREGION}
directives instead.

I'll need begin-end anyways, when the code becomes a subroutine.

If/when somebody implements http://bugs.freepascal.org/view.php?id=13974,
you will be even able to auto-fold irrelevant parts automatically.

That would be nice, indeed, but how should it know which if-else branch is irrelevant?


Later these blocks shall be extended into

 if cond then
   new_proc
 else
 begin
   [old code, also copied into new_proc()]
 end;

Hm, did you consider a proper object-oriented implementation?
I know it is not easy, but since you are going for a great refactoring anyway...

Yes, of course, it can be done in further steps. My very first approach used a semantics class, but after the performance discussion and other problems I dropped it. Some parser routines already are methods, of e.g. psub.TcgProcInfo.


For first results see the dodi/parser_rewrite branch.

Generally speaking, long-lived feature branches should be avoided in SVN,
since the merging is incredibly painful. So it would be advisable to merge
back as soon as possible, or even just work on trunk, using
the techniques you mentioned above to avoid breakage.

I'd appreciate if my work would find its way into the trunk soon. But how to maintain the duplicate code (inlined and in procedures/methods)?

Include files were a technical solution, but only until the procedure/method code deserves further modifications. And I wouldn't like to see hundreds of parser include files...

DoDi

_______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to