var Array:Int a function foo i arg_rw Int i i := 3 foo a:size
var Array:Int a function foo i arg_w Int i i := 3 var Int j j := a size foo j a 'size :=' j
This is only the tip of a tricky problem with the Pliant compiler: incorrect handling of backtracking in the high level compiler. Backtracking means uncompiling an expression because several instances succeeded to compile the expression and another one has finally been selected. When compiling the expression has some side effects (such as adding a field to a data type) backtracking may be tricky and is poorly handled in the current implementation of the compiler.
There may also be other bad side effects in the Pliant high level compiling mechanism. Say you compile an expression that defines a few keywords then asks its arguments to compile; if the function fails then the successful compilation of the arguments can be semantically incorrect, so should be reversed, but that is not automatically done for compilation speed reasons. The expression is responsible for uncompiling its arguments before exiting in such a situation, but I have not yet carefully checked all the Pliant system against that so there are surely some remaining bugs here.