|
9 | 9 | import os |
10 | 10 | import sys |
11 | 11 | from collections.abc import Iterable |
12 | | -from typing import Optional, TypeVar |
| 12 | +from typing import List, Optional, TypeVar |
13 | 13 |
|
14 | 14 | from mypy.build import ( |
15 | 15 | BuildResult, |
@@ -911,15 +911,19 @@ def emit_module_methods( |
911 | 911 | if fn.class_name is not None or fn.name == TOP_LEVEL_NAME: |
912 | 912 | continue |
913 | 913 | name = short_id_from_name(fn.name, fn.decl.shortname, fn.line) |
| 914 | + flags: List[str] = [] |
914 | 915 | if is_fastcall_supported(fn, emitter.capi_version): |
915 | | - flag = "METH_FASTCALL" |
| 916 | + flags.append("METH_FASTCALL") |
916 | 917 | else: |
917 | | - flag = "METH_VARARGS" |
| 918 | + flags.append("METH_VARARGS") |
| 919 | + flags.append("METH_KEYWORDS") |
| 920 | + if fn.decl.is_async: |
| 921 | + flags.append("METH_COROUTINE") |
918 | 922 | emitter.emit_line( |
919 | 923 | ( |
920 | | - '{{"{name}", (PyCFunction){prefix}{cname}, {flag} | METH_KEYWORDS, ' |
| 924 | + '{{"{name}", (PyCFunction){prefix}{cname}, {flags}, ' |
921 | 925 | "NULL /* docstring */}}," |
922 | | - ).format(name=name, cname=fn.cname(emitter.names), prefix=PREFIX, flag=flag) |
| 926 | + ).format(name=name, cname=fn.cname(emitter.names), prefix=PREFIX, flags=" | ".join(flags)) |
923 | 927 | ) |
924 | 928 | emitter.emit_line("{NULL, NULL, 0, NULL}") |
925 | 929 | emitter.emit_line("};") |
|
0 commit comments