Skip to content

list

Centralize the small IRX-side list layout contract plus the AST-type helpers shared by semantic analysis and lowering.

Functions:

list_element_type

list_element_type(
    type_: DataType | None,
) -> DataType | None
Source code in src/irx/builtins/collections/list.py
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
@typechecked
def list_element_type(type_: astx.DataType | None) -> astx.DataType | None:
    """
    title: Return one concrete list element type when available.
    parameters:
      type_:
        type: astx.DataType | None
    returns:
      type: astx.DataType | None
    """
    if not isinstance(type_, astx.ListType):
        return None
    if len(type_.element_types) != 1:
        return None
    element_type = type_.element_types[0]
    return element_type if isinstance(element_type, astx.DataType) else None

list_has_concrete_element_type

list_has_concrete_element_type(
    type_: DataType | None,
) -> bool
Source code in src/irx/builtins/collections/list.py
43
44
45
46
47
48
49
50
51
52
53
@typechecked
def list_has_concrete_element_type(type_: astx.DataType | None) -> bool:
    """
    title: Return whether one list type has a single concrete element type.
    parameters:
      type_:
        type: astx.DataType | None
    returns:
      type: bool
    """
    return list_element_type(type_) is not None