Parameter syntax is ambiguous; does foo(out .bar baz) have an out parameter of type .bar, or an in parameter of type out.bar? Perhaps the leading "." should be changed to ".." or something... - Leading "." is now "..". This has the side-effect of foo..bar being tokenized as foo ..bar, rather than an error as it was previously. - Attributes now go at the end, rather than the beginning. Perhaps the global prefix can go back to being a single dot, but I'm not going to look into it right now. Empty bitfields cause parse errors. Uncaught InvalidArgument exception when namespaces are implicitly declared inside a struct (namespace qualification should not be allowed). Anonymous enumerations cause parse errors. Parameter type names currently cannot be namespace-qualified. Parameter output does not currently contain type information. compiledtypes.h says that .self is CompiledParam and type is CompiledAlias, but the code does not generate a directory. Instead of doing that, I'll stick a CompiledBasicType and a CompiledAlias at the end of CompliedParam. The current array-of-strings representation is kind of stupid; instead of a list of file offsets, switch to counted strings (such as is used now in CompiledAlias), and let the reader iterate over them. Alias should work on more than just types. A lookup can succeed in pass 1 that would yield a different result in pass 2. For instance: struct a { }; struct b { a c; typedef int a; }; Similarly, it's possible for two passes to be insufficient. This causes an internal error: typedef d b; struct d { int f; }; struct a { b c; }; Alias names get recorded in the type field of Datums (and other places) rather than what the alias points to. Constants are currently not allowed at namespace scope. Bool constants cannot be initialized.