[fpc-devel] NoGlobals branch
DrDiettrich1 at aol.com
Wed Aug 11 16:09:47 CEST 2010
After the problems with the global variables, I started another branch
for removing global variables and fixing compiler "states".
In the NoGlobals branch I already could make the scanner/parser a child
object, owned by the module. It is not yet clear, however, whether the
parser or entire modules can be destroyed before the end of compilation
- if memory requirements are of interest at all.
Unfortunately I couldn't merge this working solution for the
compiler/parser startup and shutdown into the OO_rewrite branch, so that
I'll have to continue with this new branch.
Now it becomes easier to assign further globals and procedures to
specific classes, so that finally every parser can work in its own
thread. The current_module becomes the first, and hopefully only,
candidate for a threadvar. For use in other applications a compiler
class/object could be constructed as well, and back-end classes, of course.
Since not all currently global variables can be moved into their
"natural" (owning...) classes, without causing circular references, I
started to replace e.g. current_scanner by a property.
Nonetheless many assumptions have to be corrected or specified, like a
compile_level doesn't make sense in a threaded compilation. I already
tried to replace that counter by a comparison
current_module=main_module, but this seems not to work properly. I'll
try module.loaded_from=nil in the next round.
I also found an simple workaround for the TImplementedInterfaces
problems (getcopy), that can be moved into the trunk immediately.
More information about the fpc-devel