def extract_size_info()

in scripts/gen_wrappers.py [0:0]


def extract_size_info(node):
    """
    Try to extract what integer value (or named reference) `node` contains.
    Can handle

        pycparser.c_ast.Constant
        pycparser.c_ast.BinaryOp(op="*", left, right)
        pycparser.c_ast.ID

    as long as `left` and `right` are either `Constant` or BinaryOp's that ultimately evaluate to constants.

    :param node: The AST node representing an integer constant.
    :return: The value
    """
    if isinstance(node, pycparser.c_ast.ID):
        return node.name
    elif isinstance(node, BinaryOp):
        if node.op == "*":
            return extract_size_info(node.left) * extract_size_info(node.right)
    elif isinstance(node, pycparser.c_ast.Constant):
        return int(node.value)
    raise NotImplementedError(str(node))