[issue35197] graminit.h defines very generic names like 'stmt' or 'test'

2021-05-26 Thread STINNER Victor


STINNER Victor  added the comment:

Moreover, graminit.h was removed in Python 3.10.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35197] graminit.h defines very generic names like 'stmt' or 'test'

2021-05-26 Thread STINNER Victor


STINNER Victor  added the comment:

Issue fixed in bpo-43244.

I moved the evil public Python-ast.h header file into the internal C API as 
Include/internal/pycore_ast.h. It doesn't define "Yield" anymore: 
"_PyAST_Yield" must be used instead.

--
resolution:  -> duplicate
stage:  -> resolved
status: open -> closed
superseder:  -> Move PyArena C API to the internal C API

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35197] graminit.h defines very generic names like 'stmt' or 'test'

2019-05-14 Thread STINNER Victor


STINNER Victor  added the comment:

Another common issue with Python-ast.h, I just saw it on Windows:

  compile.c 
c:\program files (x86)\windows kits\10\include\10.0.17134.0\um\winbase.h(102): 
warning C4005: 'Yield': macro redefinition 
[C:\vstinner\python\master\PCbuild\pythoncore 
.vcxproj]
  c:\vstinner\python\master\include\python-ast.h(627): note: see previous 
definition of 'Yield'

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35197] graminit.h defines very generic names like 'stmt' or 'test'

2018-11-09 Thread STINNER Victor


STINNER Victor  added the comment:

> It can be used by the code that works directly with CST instead of AST: (...)

Sorry, I don't know this part of CPython. Is the CST exposed in any way outside 
CPython internals? If no, I see no reason to expose graminit.h in the public C 
API.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35197] graminit.h defines very generic names like 'stmt' or 'test'

2018-11-09 Thread Serhiy Storchaka


Serhiy Storchaka  added the comment:

It can be used by the code that works directly with CST instead of AST: these 
constants are used as values of the n_type field of the node structure.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35197] graminit.h defines very generic names like 'stmt' or 'test'

2018-11-09 Thread Pablo Galindo Salgado


Pablo Galindo Salgado  added the comment:

>Do you know if it's used outside CPython?

Although not a complete view, all of the mentions I can find in GitHub is in 
copies of CPython/forks/vendoring of Cpython:

https://github.com/search?l=C&p=13&q=graminit.h&type=Code

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35197] graminit.h defines very generic names like 'stmt' or 'test'

2018-11-09 Thread STINNER Victor


STINNER Victor  added the comment:

> I think it would be better to exclude graminit.h from the set of distributed 
> headers. It is internal generated file, it should not be used by any user 
> code.

I'm fine with moving it to Include/internal/. Do you know if it's used outside 
CPython?

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35197] graminit.h defines very generic names like 'stmt' or 'test'

2018-11-09 Thread Serhiy Storchaka


Serhiy Storchaka  added the comment:

graminit.h is included in few files, and not always its inclusion is necessary. 
Here is a patch that minimizes its inclusion. It is not ready for merging, it 
is just a demo.

--
keywords: +patch
Added file: https://bugs.python.org/file47916/include-graminit-h.diff

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35197] graminit.h defines very generic names like 'stmt' or 'test'

2018-11-09 Thread Serhiy Storchaka


Serhiy Storchaka  added the comment:

I think it would be better to exclude graminit.h from the set of distributed 
headers. It is internal generated file, it should not be used by any user code.

Some constants are duplicated as a part of public API in compile.h.

--
nosy: +serhiy.storchaka

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35197] graminit.h defines very generic names like 'stmt' or 'test'

2018-11-09 Thread Pablo Galindo Salgado


Change by Pablo Galindo Salgado :


--
nosy: +pablogsal

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35197] graminit.h defines very generic names like 'stmt' or 'test'

2018-11-09 Thread STINNER Victor


STINNER Victor  added the comment:

Current workaround in ast.c:

/* This is done here, so defines like "test" don't interfere with AST use 
above. */
#include "grammar.h"
#include "parsetok.h"
#include "graminit.h"

This code is in the "middle" of ast.c.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35197] graminit.h defines very generic names like 'stmt' or 'test'

2018-11-09 Thread STINNER Victor


STINNER Victor  added the comment:

> Note: "static const int single_input = 305;" cause a complation error on 
> "case single_input": "case label does not reduce to an integer constant".

Ah! A friend gave me another solution, define an enum. Example:

enum {
single_input = 256,
...
};

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35197] graminit.h defines very generic names like 'stmt' or 'test'

2018-11-09 Thread STINNER Victor


New submission from STINNER Victor :

graminit.h is an header file associating Grammar entities to their values, 
example:

#define stmt 269

Problem: defines symbols have no prefix and cause compilation issues on regular 
C code depending where graminit.h is included. Example with ast.c:

static int
validate_stmt(stmt_ty stmt)
{ ... }

"#define stmt 269" causes a compilation issue, the preprocessor replaces the 
code with:


static int
validate_stmt(stmt_ty 269)
{ ... }

... which is invalid.


Another example:

return validate_expr(exp->v.IfExp.test, Load) &&
validate_expr(exp->v.IfExp.body, Load) &&
validate_expr(exp->v.IfExp.orelse, Load);

The preprocessor replaces "exp->v.IfExp.test" with "exp->v.IfExp.305" which is 
invalid...



The compile.h header file works around the issue by redefining 3 constants but 
using "Py_" prefix:

/* These definitions must match corresponding definitions in graminit.h.
   There's code in compile.c that checks that they are the same. */
#define Py_single_input 256
#define Py_file_input 257
#define Py_eval_input 258

For comparison, graminit.h uses:

#define single_input 256
#define file_input 257
#define eval_input 258


There are different solutions:

* Do nothing: require to include graminit.h at the right place
* Add a prefix to all symbols, ex: test => Py_test, grammar_test, etc.
* Rename problematic names like 'test' and 'stmt'
* Fix C code to avoid problematic name: 'test' is an an attribute name of a 
node struct...

Note: "static const int single_input = 305;" cause a complation error on "case 
single_input": "case label does not reduce to an integer constant".


IMHO adding a prefix would be a nice enhancement and a good compromise. It only 
impacts the four C files which include graminit.h: future.c, ast.c, parsetok.c 
and parsermodule.c.

--
components: Interpreter Core
messages: 329517
nosy: vstinner
priority: normal
severity: normal
status: open
title: graminit.h defines very generic names like 'stmt' or 'test'
versions: Python 3.8

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com