add support for structs
A member access is represented by an index expression and access
relation with a wrapped range. The domain of the wrapped range
represents the structure, while the range of the wrapped range
represents the member. The domain may in turn be a wrapped relation
in case of nested member accesses.
For example, an access of the form
s.f[i].a[j]
is represented as
{ S_0[i, j] -> s_f_a[s_f[s[] -> f[i]] -> a[j]] }
We also keep track of all the structure definitions involved
as some users may need to print these definitions.
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
30 files changed: