Use a common member for expression base
Keep track of type properties in type
Implement bit-field initializers
init: Remove some unused includes
init: Improve parseinit performance for sequential initializers
Now, we only traverse the current initializer list to find the place to
insert a designated initializer. Regular initializers always go after
the previous one.
init: Error on bit-field initializers for now
Track type qualifiers separately
Using a special qualified type kind has a number of problems:
- Important fields such as size, align, and incomplete may not be set,
since the qualified type was created before a struct was completed.
- When we don't care about type qualifiers (which is the usual case),
we have to explicitly unqualify the type which is annoying and
Instead, in derived types, keep track of the qualifiers of the base type
alongside the base type (similar to what is done for members, parameters,
declarations, and expressions in the past few commits).
expr: Use separate fields for lvalue and decayed instead of flags
Start to handle overlapping initializers
Allow string literals to initialize any array with character type
init: Check for incomplete types
Check for negative array lengths/indices
Fix size of incomplete array types initialized with strings
updatearray takes an index, so was allocating an extra byte.
Remove some unused variables
Don't embed anonymous struct members into parent
While this works nicely for structs, when unions are involved it
makes it impossible to find the next member to initialize without keeping
track of extra data per member.
Fix some potential uninitialized fields
Allow initializing array with longer strings
Ignore qualifiers when parsing initializers