Laurel Language Designer Guide

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).