classification
Title: _ast.ast_type_init does not handle args and kwargs correctly.
Type: behavior Stage: patch review
Components: Library (Lib) Versions: Python 3.8, Python 3.7
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: benjamin.peterson, brett.cannon, remi.lapeyre, serhiy.storchaka, yselivanov
Priority: normal Keywords: patch

Created on 2019-03-14 14:47 by remi.lapeyre, last changed 2019-03-17 18:03 by remi.lapeyre.

Pull Requests
URL Status Linked Edit
PR 12382 open remi.lapeyre, 2019-03-17 18:03
Messages (1)
msg337926 - (view) Author: Rémi Lapeyre (remi.lapeyre) * Date: 2019-03-14 14:47
While looking at issue 36287 I noticed that the argument parsing logic in _ast.ast_type_init is wrong, for example ast.Constant takes only one argument:

✗ ./python.exe 
Python 3.8.0a2+ (remotes/origin/HEAD-1-ged9b774cf3:ed9b774cf3, Mar 14 2019, 00:50:47) 
[Clang 10.0.0 (clang-1000.10.44.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import ast
>>> ast.Constant(1, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Constant constructor takes at most 1 positional argument
>>> ast.Constant(1)
<_ast.Constant object at 0x105b52950>
>>> ast.Constant(value=2)
<_ast.Constant object at 0x105b528f0>
>>> ast.Constant(1, value=2)
<_ast.Constant object at 0x105b529b0>
>>> ast.Constant(1, value=2).value
2


The last lines should have raised TypeError. I could reproduce the issue with Python 2.7, 3.7 and 3.8 but I'm not sure it's worth fixing for 2.7.

I will write a patch to fix the issue.
History
Date User Action Args
2019-03-17 18:03:42remi.lapeyresetkeywords: + patch
stage: patch review
pull_requests: + pull_request12340
2019-03-15 19:13:57brett.cannonsetnosy: + brett.cannon, benjamin.peterson, serhiy.storchaka, yselivanov
2019-03-14 14:47:19remi.lapeyrecreate