@@ -115,25 +115,7 @@ clang driver:
115115 * Include search paths are hard-coded into the driver.
116116
117117File Manager:
118- * We currently do a lot of stat'ing for files that don't exist, particularly
119- when lots of -I paths exist (e.g. see the <iostream> example, check for
120- failures in stat in FileManager::getFile). It would be far better to make
121- the following changes:
122- 1. FileEntry contains a sys::Path instead of a std::string for Name.
123- 2. sys::Path contains timestamp and size, lazily computed. Eliminate from
124- FileEntry.
125- 3. File UIDs are created on request, not when files are opened.
126- These changes make it possible to efficiently have FileEntry objects for
127- files that exist on the file system, but have not been used yet.
128-
129- Once this is done:
130- 1. DirectoryEntry gets a boolean value "has read entries". When false, not
131- all entries in the directory are in the file mgr, when true, they are.
132- 2. Instead of stat'ing the file in FileManager::getFile, check to see if
133- the dir has been read. If so, fail immediately, if not, read the dir,
134- then retry.
135- 3. Reading the dir uses the getdirentries syscall, creating an FileEntry
136- for all files found.
118+ * Reduce syscalls, see NOTES.txt.
137119
138120Lexer:
139121 * Source character mapping. GCC supports ASCII and UTF-8.
@@ -149,6 +131,7 @@ Preprocessor:
149131 * MSExtension: "L#param" stringizes to a wide string literal.
150132 * Consider merging the parser's expression parser into the preprocessor to
151133 eliminate duplicate code.
134+ * Add support for -M*
152135
153136Traditional Preprocessor:
154137 * All.
@@ -161,6 +144,7 @@ Parser:
161144
162145Parser Actions:
163146 * All that are missing.
147+ * SemaActions vs MinimalActions.
164148 * Would like to either lazily resolve types [refactoring] or aggressively
165149 resolve them [c compiler]. Need to know whether something is a type or not
166150 to compile, but don't need to know what it is.
@@ -169,70 +153,4 @@ Parser Actions:
169153AST Builder:
170154 * Implement more nodes as actions are available.
171155 * Types.
172- * Allow the AST Builder to be subclassed. This will allow clients to extend it
173- and create their own specialized nodes for specific scenarios. Maybe the
174- "full loc info" use case is just one extension.
175-
176- Fast #Import:
177- * All.
178- * Get frameworks that don't use #import to do so, e.g.
179- DirectoryService, AudioToolbox, CoreFoundation, etc. Why not using #import?
180- Because they work in C mode? C has #import.
181- * Have the lexer return a token for #import instead of handling it itself.
182- - Create a new preprocessor object with no external state (no -D/U options
183- from the command line, etc). Alternatively, keep track of exactly which
184- external state is used by a #import: declare it somehow.
185- * When having reading a #import file, keep track of whether we have (and/or
186- which) seen any "configuration" macros. Various cases:
187- - Uses of target args (__POWERPC__, __i386): Header has to be parsed
188- multiple times, per-target. What about #ifndef checks? How do we know?
189- - "Configuration" preprocessor macros not defined: POWERPC, etc. What about
190- things like __STDC__ etc? What is and what isn't allowed.
191- * Special handling for "umbrella" headers, which just contain #import stmts:
192- - Cocoa.h/AppKit.h - Contain pointers to digests instead of entire digests
193- themselves? Foundation.h isn't pure umbrella!
194- * Frameworks digests:
195- - Can put "digest" of a framework-worth of headers into the framework
196- itself. To open AppKit, just mmap
197- /System/Library/Frameworks/AppKit.framework/"digest", which provides a
198- symbol table in a well defined format. Lazily unstream stuff that is
199- needed. Contains declarations, macros, and debug information.
200- - System frameworks ship with digests. How do we handle configuration
201- information? How do we handle stuff like:
202- #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_2
203- which guards a bunch of decls? Should there be a couple of default
204- configs, then have the UI fall back to building/caching its own?
205- - GUI automatically builds digests when UI is idle, both of system
206- frameworks if they aren't not available in the right config, and of app
207- frameworks.
208- - GUI builds dependence graph of frameworks/digests based on #imports. If a
209- digest is out date, dependent digests are automatically invalidated.
210-
211- * New constraints on #import for objc-v3:
212- - #imported file must not define non-inline function bodies.
213- - Alternatively, they can, and these bodies get compiled/linked *once*
214- per app into a dylib. What about building user dylibs?
215- - Restrictions on ObjC grammar: can't #import the body of a for stmt or fn.
216- - Compiler must detect and reject these cases.
217- - #defines defined within a #import have two behaviors:
218- - By default, they escape the header. These macros *cannot* be #undef'd
219- by other code: this is enforced by the front-end.
220- - Optionally, user can specify what macros escape (whitelist) or can use
221- #undef.
222-
223- New language feature: Configuration queries:
224- - Instead of #ifdef __POWERPC__, use "if (strcmp(`cpu`, __POWERPC__))", or
225- some other, better, syntax.
226- - Use it to increase the number of "architecture-clean" #import'd files,
227- allowing a single index to be used for all fat slices.
228-
229- Cocoa GUI Front-end:
230- * All.
231- * Start with very simple "textedit" GUI.
232- * Trivial project model: list of files, list of cmd line options.
233- * Build simple developer examples.
234- * Tight integration with compiler components.
235- * Primary advantage: batch compiles, keeping digests in memory, dependency mgmt
236- between app frameworks, building code/digests in the background, etc.
237- * Interesting idea: http://nickgravgaard.com/elastictabstops/
238-
156+ * Decls.
0 commit comments