= Multiple Changes to CIVL Code = == Model Changes == * introduce !LHSExpression, a subtype of !Expression * rename !ArrayIndexExpression to !SubscriptExpression * modify !ModelBuilder to get rid of arrow expressions, replacing them with dot of star * modify !ModelBuilder to get rid of C's pointer-array pun: ** in any subscript expression `a[i]`, make sure `a` has array type. If it doesn't, translate to `*(a+i)` ** in any place where a pointer is called for, but instead an array `a` is used, replace `a` with `&a[0]`. Examples include pointer arithmetic (`a+i`, `a-b`), argument to dereference operator `*`, actual arguments in function calls where the corresponding parameter has pointer type. ** make sure the parameter type of a function call is never an array type. ABC should already be doing this. * use an enumerated type like ExpressionKind for the different kinds of expressions, so `switch` statements can be used * add a method to expressions like `SymbolicExpression getConstantValue()` and a corresponding setter, to cache the value of any expression that has a constant value, such as a literal expression == Semantics Changes ==