Difference between revisions of "Module handling rewrite"
From Lazarus wiki
Jump to navigationJump to searchm |
|||
Line 20: | Line 20: | ||
* write object file | * write object file | ||
− | each task gets a two lists: task which must be processed before itself and tasks | + | == Task queue == |
− | which depend on itself | + | * 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 | + | * 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, |
− | process, the queue is walked if a task without empty dependencies is found, it | + | * the queue is walked if a task without empty dependencies is found, it is moved to the end of the queue |
− | is moved to the end of the queue if a task is found with the same number as the | + | * if a task is found with the same number as the current queue walking, the dependencies can't be resolved => error |
− | 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 |
− | 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 09:04, 4 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
Task queue
- 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