9.1. Parameter lists
In Laurel, input and output parameters are defined in a separate list. Inout parameters are defined by repeating the parameter name in both lists. In Core, there is a single parameter list where each parameter defines its kind (in/out/inout).
At the call-site, Laurel requires calls with multiple out parameters to occur inside an assignment,
like this:
assign x, y := multiOutCall(a, b)
Core uses the argument list to assign the output parameters, like this:
multiOutCall(a, b, out x, out y)
In Laurel, an inout parameter only influences the callee's code, since it means there is a single
variable that is used as input and output. On the calling side however, there is no concept of inout
parameters. This is different from Core, where inout variables affect the calling side. Example of
an inout being called in Core, hasInout(inout x).