Built-In

Built-in functionality refers to functionality that is only available during the compiler runtime and not the EVM runtime that is otherwise inaccessible through the language's syntax.

Macros contain their own syntax and semantics, however, comptime functionality and built-in assistants cover most of the use cases for macros without leaving the language's native syntax.

Types

PrimitiveType

type PrimitiveType;

StructType

type StructType;

EnumType

type EnumType;

UnionType

type UnionType;

FunctionType

type FunctionType;

TypeInfo

type TypeInfo =
    | Primitive(PrimitiveType)
    | Struct(StructType)
    | Enum(EnumType)
    | Union(UnionType)
    | Function(FunctionType);

HardFork

type HardFork =
    | Frontier
    | Homestead
    | Dao
    | Tangerine
    | SpuriousDragon
    | Byzantium
    | Constantinople
    | Petersburg
    | Istanbul
    | MuirGlacier
    | Berlin
    | London
    | ArrowGlacier
    | GrayGlacier
    | Paris
    | Shanghai
    | Cancun;

Functions

@typeInfo

@typeInfo(typeSignature) -> TypeInfo;

The typeInfo function takes a single <type_signature> as an argument and returns a union of types, TypeInfo.

@bitsize

@bitsize(typeSignature) -> u256;

The bitsize function takes a single <type_signature> as an argument and returns an integer indicating the bitsize of the underlying type.

@fields

@fields(structType) -> [T, N];

The fields function takes a single StructType as an argument and returns an array of type signatures of length N where N is the number of fields in the struct.

@compilerError

@compilerError(errorMessage);

The compilerError function takes a single string as an argument and throws an error at compile time with the provided message.

@hardFork

@hardFork() -> HardFork;

The hardFork function returns an enumeration of the built in HardFork type. This is derived from the compiler configuration.

@bytecode

@bytecode(T -> U) -> Bytes;

The bytecode function takes an arbitrary function and returns its bytecode in Bytes.