Difference between revisions of "Module handling rewrite"
Line 19: | Line 19: | ||
* write ppu | * write ppu | ||
* write object file | * write object file | ||
+ | |||
+ | each task gets a two lists: task which must be processed before itself and tasks | ||
+ | which depend on itself | ||
+ | each task class gets a counter each time a new task to process is search, that counter is increased when searching a task to | ||
+ | process, the queue is walked if a task without empty dependencies is found, it | ||
+ | is moved to the end of the queue if a task is found with the same number as the | ||
+ | current queue walking, the dependencies can't be resolved => error | ||
+ | if a task with an empty dependencies list is found, it is executed | ||
+ | after it is finished, it gets removed from the dependency lists of tasks waiting for it |
Revision as of 23:29, 3 November 2005
This page describes the planned unit handling rewrite. It is done in a branch in svn, the url of the branch is http://svn.freepascal.org/svn/fpc/branches/unitrw/compiler
While implementing this, it should be taken care of running this in multiple threads in the middle/far future.
Task list
- open file
- Parse header
- Parse uses
- Parse interface
- parse impl. header
- parse impl. uses
- load unit
- find unit
- load ppu header
- load ppu interface
- load ppu impl.
- write ppu
- write object file
each task gets a two lists: task which must be processed before itself and tasks which depend on itself each task class gets a counter each time a new task to process is search, that counter is increased when searching a task to process, the queue is walked if a task without empty dependencies is found, it is moved to the end of the queue if a task is found with the same number as the current queue walking, the dependencies can't be resolved => error if a task with an empty dependencies list is found, it is executed after it is finished, it gets removed from the dependency lists of tasks waiting for it