nupp.types

Compiler-only type inspection and construction inside comptime function declarations. Every member is an ordinary checked compile-time value; none has a runtime representation.

Module contents

Functions

FunctionKindDescription
affinecomptime function
argumentscomptime functionThe type arguments a generic declaration was applied to.
arraycomptime function
borrowedcomptime function
carraycomptime function
constofcomptime function
constructioncomptime functionThe parameters a record or struct is constructed with, as a pack whose slots carry their names.
describecomptime function
elementscomptime functionThe fixed elements of a composite type, or a pack's fixed head.
errorcomptime function
fieldscomptime function
formatArgumentscomptime functionComputes the arguments consumed by a literal Lua format string.
function_comptime function
indexercomptime function
intersectioncomptime function
kindcomptime function
literalcomptime function
mapcomptime function
nonExhaustivecomptime function
optionalcomptime function
packcomptime function
parameterscomptime function
pinnedcomptime function
pointercomptime function
readAtcomptime function
readKeyscomptime function
resultscomptime function
sameNominalcomptime functionWhether two types name the same nominal declaration, ignoring its arguments.
shapecomptime function
tuplecomptime function
unioncomptime function
writeAtcomptime function
writeKeyscomptime function

Values

ValueKindDescription
anycomptime type
booleancomptime type
cdatacomptime type
cstringcomptime type
floatcomptime type
int16comptime type
int32comptime type
int64comptime type
int8comptime type
integercomptime type
nevercomptime type
nil_comptime type
numbercomptime type
stringcomptime type
table_comptime type
threadcomptime type
uint16comptime type
uint32comptime type
uint64comptime type
uint8comptime type
unknowncomptime type
userdatacomptime type
voidptrcomptime type

Functions#

affinecomptime function#

local affine: comptime function(representation: type): type
& comptime function(representation: type, const terminal: function): type

Arguments

NameTypeDescription
representationtype
terminalany

Returns

TypeDescription
type

argumentscomptime function#

local arguments: comptime function(value: type): {type}

The type arguments a generic declaration was applied to.

Empty for a type that is not a generic application, so a caller may ask without knowing which it has.

Arguments

NameTypeDescription
valuetype

the applied type to inspect

Returns

TypeDescription
{type}

one handle per argument, in declaration order

arraycomptime function#

local array: comptime function(element: type): type

Arguments

NameTypeDescription
elementtype

Returns

TypeDescription
type

borrowedcomptime function#

local borrowed: comptime function(inner: type): type

Arguments

NameTypeDescription
innertype

Returns

TypeDescription
type

carraycomptime function#

local carray: comptime function(element: type, count: integer?): type

Arguments

NameTypeDescription
elementtype
countinteger?

Returns

TypeDescription
type

constofcomptime function#

local constof: comptime function(inner: type): type

Arguments

NameTypeDescription
innertype

Returns

TypeDescription
type

constructioncomptime function#

local construction: comptime function(value: type): typepack

The parameters a record or struct is constructed with, as a pack whose slots carry their names.

The one declared constructor's parameters, or the stored fields in declaration order when the declaration has no constructor; a field with a default, or one that admits nil, is an optional slot. Written as ...: unpackof nupp.types.construction(E), the pack is a parameter list a call binds by position or by name, the way it would for new E(...).

Arguments

NameTypeDescription
valuetype

the record or struct to inspect

Returns

TypeDescription
typepack

its construction contract

Raises

  • when the declaration has several constructors, which is no single contract

describecomptime function#

local describe: comptime function(value: type | typepack): {
    readonly kind: string,
    readonly sourceKind: string?,

    --- Reports the nominal declaration category without expanding a reference.
    readonly declarationKind: string?,
    readonly name: string?,
    readonly value: (string | boolean | integer)?,
    readonly element: type?,
    readonly members: {type}?,
    readonly fields: {{
        readonly name: string,
        readonly read: type?,
        readonly write: type?
    }}?,
    readonly indexer: type?,
    readonly readKey: type?,
    readonly readValue: type?,
    readonly writeKey: type?,
    readonly writeValue: type?,
    readonly nominal: boolean?,
    readonly head: {type}?,
    readonly tail: type?,
    readonly modes: {string}?,
    readonly count: integer?,
    readonly parameters: typepack?,
    readonly results: typepack?
}

Arguments

NameTypeDescription
valuetype | typepack

Returns

TypeDescription
{ readonly kind: string, readonly sourceKind: string?, --- Reports the nominal declaration category without expanding a reference. readonly declarationKind: string?, readonly name: string?, readonly value: (string | boolean | integer)?, readonly element: type?, readonly members: {type}?, readonly fields: {{ readonly name: string, readonly read: type?, readonly write: type? }}?, readonly indexer: type?, readonly readKey: type?, readonly readValue: type?, readonly writeKey: type?, readonly writeValue: type?, readonly nominal: boolean?, readonly head: {type}?, readonly tail: type?, readonly modes: {string}?, readonly count: integer?, readonly parameters: typepack?, readonly results: typepack? }

elementscomptime function#

local elements: comptime function(value: type | typepack): {type}

The fixed elements of a composite type, or a pack's fixed head.

Arguments

NameTypeDescription
valuetype | typepack

the type or type pack to take apart

Returns

TypeDescription
{type}

one handle per element, in declaration order

errorcomptime function#

local error: comptime function(message: string): never

Arguments

NameTypeDescription
messagestring

Returns

TypeDescription
never

fieldscomptime function#

local fields: comptime function(value: type): {{
    readonly name: string,
    readonly read: type?,
    readonly write: type?
}}

Arguments

NameTypeDescription
valuetype

Returns

TypeDescription
{{ readonly name: string, readonly read: type?, readonly write: type? }}

formatArgumentscomptime function#

local formatArguments: comptime function(format: type): typepack

Computes the arguments consumed by a literal Lua format string.

A broad string produces an open any pack. %? is reserved for compiler-lowered formatting APIs.

Arguments

NameTypeDescription
formattype

the format-string type to inspect

Returns

TypeDescription
typepack

the argument pack consumed by its directives

function_comptime function#

local function_: comptime function(parameters: typepack, results: typepack): type

Arguments

NameTypeDescription
parameterstypepack
resultstypepack

Returns

TypeDescription
type

indexercomptime function#

local indexer: comptime function(readKey: type?, readValue: type?, writeKey: type?, writeValue: type?): type

Arguments

NameTypeDescription
readKeytype?
readValuetype?
writeKeytype?
writeValuetype?

Returns

TypeDescription
type

intersectioncomptime function#

local intersection: comptime function(members: {type}): type

Arguments

NameTypeDescription
members{type}

Returns

TypeDescription
type

kindcomptime function#

local kind: comptime function(value: type | typepack): string

Arguments

NameTypeDescription
valuetype | typepack

Returns

TypeDescription
string

literalcomptime function#

local literal: comptime function(value: string | boolean | integer): type

Arguments

NameTypeDescription
valuestring | boolean | integer

Returns

TypeDescription
type

mapcomptime function#

local map: comptime function(readKey: type, readValue: type, writeKey: type?, writeValue: type?): type

Arguments

NameTypeDescription
readKeytype
readValuetype
writeKeytype?
writeValuetype?

Returns

TypeDescription
type

nonExhaustivecomptime function#

local nonExhaustive: comptime function(): type

Returns

TypeDescription
type

optionalcomptime function#

local optional: comptime function(inner: type): type

Arguments

NameTypeDescription
innertype

Returns

TypeDescription
type

packcomptime function#

local pack: comptime function(head: {type}, tail: type?, modes: {string}?): typepack

Arguments

NameTypeDescription
head{type}
tailtype?
modes{string}?

Returns

TypeDescription
typepack

parameterscomptime function#

local parameters: comptime function(callable: type): typepack

Arguments

NameTypeDescription
callabletype

Returns

TypeDescription
typepack

pinnedcomptime function#

local pinned: comptime function(inner: type): type

Arguments

NameTypeDescription
innertype

Returns

TypeDescription
type

pointercomptime function#

local pointer: comptime function(inner: type): type

Arguments

NameTypeDescription
innertype

Returns

TypeDescription
type

readAtcomptime function#

local readAt: comptime function(value: type, key: type): type

Arguments

NameTypeDescription
valuetype
keytype

Returns

TypeDescription
type

readKeyscomptime function#

local readKeys: comptime function(value: type): {type}

Arguments

NameTypeDescription
valuetype

Returns

TypeDescription
{type}

resultscomptime function#

local results: comptime function(callable: type): typepack

Arguments

NameTypeDescription
callabletype

Returns

TypeDescription
typepack

sameNominalcomptime function#

local sameNominal: comptime function(left: type, right: type): boolean

Whether two types name the same nominal declaration, ignoring its arguments.

Aliases and ownership wrappers are transparent. Structural types and two different nominal declarations answer false even when their shapes match.

Arguments

NameTypeDescription
lefttype
righttype

Returns

TypeDescription
boolean

shapecomptime function#

local shape: comptime function(fields: const{{
    readonly name: string,
    readonly read: type?,
    readonly write: type?
}}, indexer: type?): type

Arguments

NameTypeDescription
fieldsconst{{ readonly name: string, readonly read: type?, readonly write: type? }}
indexertype?

Returns

TypeDescription
type

tuplecomptime function#

local tuple: comptime function(elements: {type}): type

Arguments

NameTypeDescription
elements{type}

Returns

TypeDescription
type

unioncomptime function#

local union: comptime function(members: {type}): type

Arguments

NameTypeDescription
members{type}

Returns

TypeDescription
type

writeAtcomptime function#

local writeAt: comptime function(value: type, key: type): type

Arguments

NameTypeDescription
valuetype
keytype

Returns

TypeDescription
type

writeKeyscomptime function#

local writeKeys: comptime function(value: type): {type}

Arguments

NameTypeDescription
valuetype

Returns

TypeDescription
{type}

Values#

anycomptime type#

local any: comptime type

booleancomptime type#

local boolean: comptime type

cdatacomptime type#

local cdata: comptime type

cstringcomptime type#

local cstring: comptime type

floatcomptime type#

local float: comptime type

int16comptime type#

local int16: comptime type

int32comptime type#

local int32: comptime type

int64comptime type#

local int64: comptime type

int8comptime type#

local int8: comptime type

integercomptime type#

local integer: comptime type

nevercomptime type#

local never: comptime type

nil_comptime type#

local nil_: comptime type

numbercomptime type#

local number: comptime type

stringcomptime type#

local string: comptime type

table_comptime type#

local table_: comptime type

threadcomptime type#

local thread: comptime type

uint16comptime type#

local uint16: comptime type

uint32comptime type#

local uint32: comptime type

uint64comptime type#

local uint64: comptime type

uint8comptime type#

local uint8: comptime type

unknowncomptime type#

local unknown: comptime type

userdatacomptime type#

local userdata: comptime type

voidptrcomptime type#

local voidptr: comptime type