@@ -1220,27 +1220,90 @@ if sys.version_info >= (3, 10):
12201220 @overload
12211221 async def anext (__i : SupportsAnext [_T ], default : _VT ) -> _T | _VT : ...
12221222
1223- # TODO: `compile` has a more precise return type in reality; work on a way of expressing that?
1223+ # compile() returns a CodeType, unless the flags argument includes PyCF_ONLY_AST (=1024),
1224+ # in which case it returns ast.AST. We have overloads for flag 0 (the default) and for
1225+ # explicitly passing PyCF_ONLY_AST. We fall back to Any for other values of flags.
12241226if sys .version_info >= (3 , 8 ):
1227+ @overload
12251228 def compile (
12261229 source : str | ReadableBuffer | _ast .Module | _ast .Expression | _ast .Interactive ,
12271230 filename : str | ReadableBuffer | _PathLike [Any ],
12281231 mode : str ,
1229- flags : int = 0 ,
1232+ flags : Literal [0 ],
1233+ dont_inherit : int = False ,
1234+ optimize : int = - 1 ,
1235+ * ,
1236+ _feature_version : int = - 1 ,
1237+ ) -> CodeType : ...
1238+ @overload
1239+ def compile (
1240+ source : str | ReadableBuffer | _ast .Module | _ast .Expression | _ast .Interactive ,
1241+ filename : str | ReadableBuffer | _PathLike [Any ],
1242+ mode : str ,
1243+ * ,
1244+ dont_inherit : int = False ,
1245+ optimize : int = - 1 ,
1246+ _feature_version : int = - 1 ,
1247+ ) -> CodeType : ...
1248+ @overload
1249+ def compile (
1250+ source : str | ReadableBuffer | _ast .Module | _ast .Expression | _ast .Interactive ,
1251+ filename : str | ReadableBuffer | _PathLike [Any ],
1252+ mode : str ,
1253+ flags : Literal [1024 ],
1254+ dont_inherit : int = False ,
1255+ optimize : int = - 1 ,
1256+ * ,
1257+ _feature_version : int = - 1 ,
1258+ ) -> _ast .AST : ...
1259+ @overload
1260+ def compile (
1261+ source : str | ReadableBuffer | _ast .Module | _ast .Expression | _ast .Interactive ,
1262+ filename : str | ReadableBuffer | _PathLike [Any ],
1263+ mode : str ,
1264+ flags : int ,
12301265 dont_inherit : int = False ,
12311266 optimize : int = - 1 ,
12321267 * ,
12331268 _feature_version : int = - 1 ,
12341269 ) -> Any : ...
12351270
12361271else :
1272+ @overload
1273+ def compile (
1274+ source : str | ReadableBuffer | _ast .Module | _ast .Expression | _ast .Interactive ,
1275+ filename : str | ReadableBuffer | _PathLike [Any ],
1276+ mode : str ,
1277+ flags : Literal [0 ],
1278+ dont_inherit : int = False ,
1279+ optimize : int = - 1 ,
1280+ ) -> CodeType : ...
1281+ @overload
1282+ def compile (
1283+ source : str | ReadableBuffer | _ast .Module | _ast .Expression | _ast .Interactive ,
1284+ filename : str | ReadableBuffer | _PathLike [Any ],
1285+ mode : str ,
1286+ * ,
1287+ dont_inherit : int = False ,
1288+ optimize : int = - 1 ,
1289+ ) -> CodeType : ...
1290+ @overload
12371291 def compile (
12381292 source : str | ReadableBuffer | _ast .Module | _ast .Expression | _ast .Interactive ,
12391293 filename : str | ReadableBuffer | _PathLike [Any ],
12401294 mode : str ,
1241- flags : int = ...,
1242- dont_inherit : int = ...,
1243- optimize : int = ...,
1295+ flags : Literal [1024 ],
1296+ dont_inherit : int = False ,
1297+ optimize : int = - 1 ,
1298+ ) -> _ast .AST : ...
1299+ @overload
1300+ def compile (
1301+ source : str | ReadableBuffer | _ast .Module | _ast .Expression | _ast .Interactive ,
1302+ filename : str | ReadableBuffer | _PathLike [Any ],
1303+ mode : str ,
1304+ flags : int ,
1305+ dont_inherit : int = False ,
1306+ optimize : int = - 1 ,
12441307 ) -> Any : ...
12451308
12461309def copyright () -> None : ...
0 commit comments