MCPcopy Create free account
hub / github.com/python/mypy / specialize_int_to_bytes

Function specialize_int_to_bytes

mypyc/irbuild/specialize.py:1307–1374  ·  view source on GitHub ↗
(builder: IRBuilder, expr: CallExpr, callee: RefExpr)

Source from the content-addressed store, hash-verified

1305
1306@specialize_function("to_bytes", int_rprimitive)
1307def specialize_int_to_bytes(builder: IRBuilder, expr: CallExpr, callee: RefExpr) -> Value | None:
1308 # int.to_bytes(length, byteorder, signed=False)
1309 if any(kind not in (ARG_POS, ARG_NAMED) for kind in expr.arg_kinds):
1310 return None
1311 if not isinstance(callee, MemberExpr):
1312 return None
1313 length_expr: Expression | None = None
1314 byteorder_expr: Expression | None = None
1315 signed_expr: Expression | None = None
1316 positional_index = 0
1317 for name, arg in zip(expr.arg_names, expr.args):
1318 if name is None:
1319 if positional_index == 0:
1320 length_expr = arg
1321 elif positional_index == 1:
1322 byteorder_expr = arg
1323 elif positional_index == 2:
1324 signed_expr = arg
1325 else:
1326 return None
1327 positional_index += 1
1328 elif name == "length":
1329 if length_expr is not None:
1330 return None
1331 length_expr = arg
1332 elif name == "byteorder":
1333 if byteorder_expr is not None:
1334 return None
1335 byteorder_expr = arg
1336 elif name == "signed":
1337 if signed_expr is not None:
1338 return None
1339 signed_expr = arg
1340 else:
1341 return None
1342 if length_expr is None or byteorder_expr is None:
1343 return None
1344
1345 signed_is_bool = True
1346 if signed_expr is not None:
1347 signed_is_bool = is_bool_rprimitive(builder.node_type(signed_expr))
1348 if not (
1349 is_int_rprimitive(builder.node_type(length_expr))
1350 and is_str_rprimitive(builder.node_type(byteorder_expr))
1351 and signed_is_bool
1352 ):
1353 return None
1354
1355 self_arg = builder.accept(callee.expr)
1356 length_arg = builder.accept(length_expr)
1357 if signed_expr is None:
1358 signed_arg = builder.false()
1359 else:
1360 signed_arg = builder.accept(signed_expr)
1361 if isinstance(byteorder_expr, StrExpr):
1362 if byteorder_expr.value == "little":
1363 return builder.call_c(
1364 int_to_little_endian_op, [self_arg, length_arg, signed_arg], expr.line

Callers

nothing calls this directly

Calls 10

is_bool_rprimitiveFunction · 0.90
is_int_rprimitiveFunction · 0.90
is_str_rprimitiveFunction · 0.90
anyFunction · 0.85
isinstanceFunction · 0.85
zipFunction · 0.85
node_typeMethod · 0.80
acceptMethod · 0.45
falseMethod · 0.45
call_cMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…