Version: 0.41.0
Inlining
When compiling a contract in LIGO, declarations will get inlined if they are only used once and pure. Inlining often results in larger contracts and is therefore not aggressively done.
A pure declaration is one that doesn't cause side effects like causing a failure or operation.
In some cases you might want to override the default behaviour of LIGO and force inlining. The declaration still needs to be pure though.
#
Inline attributeTo force inlining you can use the inline attribute.
// @inline
let fst = (p: [nat, nat]): nat => p[0];
let main = (p: [nat, nat], s: [nat, nat]) : [list<operation>, [nat, nat]] =>
[list([]) as list<operation>, [fst([p[0], p[1]]), fst([s[1], s[0]])]];
Now if we measure the difference between inlining and without inlining, using
ligo info measure-contract name_of_contract.ligo --entry-point <entrypoint>
, we see the
following results:
With inlining | 66 bytes |
Without inlining | 170 bytes |
info
Note that these results can change due to ongoing work to optimise output of the LIGO compiler.