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))