@lang:flat
Flatten one level of nesting in an array.
On-chain (@lang:flat!): Up to 4 elements may be live calls, the rest constant arrays; each live element past the first is re-resolved by every later offset.
Returns: array
Syntax
Section titled “Syntax”@lang:flat(arr)Arguments
Section titled “Arguments”| Name | Type | Description |
|---|---|---|
arr | array | Source array of arrays |
See Also
Section titled “See Also”On-chain face (@flat!)
Section titled “On-chain face (@flat!)”Concatenate the word payloads of an array literal's parts on-chain
through Operators.concat. Parts are constant arrays or :: call
parts.
Up to four parts may be live. The envelopes splice into the calldata in order at the end, and each offset after the first live part is itself a live word: the constant base plus the running total of the earlier payloads, rounded up to whole words. A part may still sit at any logical position, since its ABI offset points at the splice rather than at where it reads.
Four is a hard limit rather than a guideline. An operand expression is a
tree with no way to name a subterm, so each live part is re-resolved by
every offset that follows it — source call included — which is N(N-1)/2
extra resolutions and a calldata blob growing with the square. An
assertion is judged inside an eth_call, so an over-budget expression
runs out of gas and reverts, and a reverted judge cannot be told apart
from one that legitimately failed. Better to refuse at build time.
Examples
Section titled “Examples”load lang
set $safe 0x44fA8E6f47987339850636F88629646662444217
assert @flat!([[1 2] $safe::{caps()(uint256[])}]) == 0x1122See Also
Section titled “See Also”assert,@concat!