- 
                Notifications
    You must be signed in to change notification settings 
- Fork 3
Description
Currently, Maki emits the same set of properties for every macro invocation; however, if a macro invocation does not align with an AST node, most of these properties are just set to default values and are really meaningless.
For instance, consider these two completely invocations of the MUL() macro:
#define MUL(A, B) A * B
int main(void) {
    int x = MUL(1, 2);
    int y = MUL(1 + 2, 3 * 4);
    return 0;
}The first invocation expands to 1 * 2, and so completely aligns with a multiplication expression AST node.
Maki can analyze this invocation and infer all the usual semantic properties about it (e.g., IsHygienic, TypeSignature).
The second invocation expands to 1 + 2 * 3 + 4, and does not align with an AST node because the arguments 1 + 2 and 3 + 4 do not expand to individual AST nodes (they overlap because of the multiplication operator having higher precedence than addition). Since this expansion does not align with an AST node, Maki won't analyze, and will instead emit default values for all its properties.
Instead of emitting default values for all properties for unaligned expansions, Maki should not emit any semantic properties to make it clear that such properties would be meaningless for the invocation.