[issue35166] BUILD_MAP_UNPACK doesn't function as expected for dict subclasses

2021-12-30 Thread Irit Katriel


Irit Katriel  added the comment:

BUILD_MAP_UNPACK and BUILD_MAP_UNPACK_WITH_CALL have been removed.

--
nosy: +iritkatriel

___
Python tracker 

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



[issue35166] BUILD_MAP_UNPACK doesn't function as expected for dict subclasses

2018-11-04 Thread Steven D'Aprano


Steven D'Aprano  added the comment:

How weird... after restarting the interpreter, I can't reproduce that 
TypeError. I get the AssertionError Serhiy showed.

--

___
Python tracker 

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



[issue35166] BUILD_MAP_UNPACK doesn't function as expected for dict subclasses

2018-11-04 Thread Steven D'Aprano


Steven D'Aprano  added the comment:

You say it doesn't work as expected, but you don't say what you expect or why. 
(Don't make me guess what you mean -- explicit is better than implicit.)

When I try your subclass in 3.6, I get an unexpected TypeError:

py> class Dict(dict):
... def keys(self): assert 0
... def update(*args, **kwds): assert 0
... def __getitem__(self, key): assert 0
... def __iter__(self): assert 0
...
py> {**Dict(a=1)}
{'a': 1}
py> Dict(a=1).keys()
Traceback (most recent call last):
  File "", line 1, in 
  File "", line 2, in keys
TypeError

--
nosy: +steven.daprano

___
Python tracker 

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



[issue35166] BUILD_MAP_UNPACK doesn't function as expected for dict subclasses

2018-11-04 Thread Serhiy Storchaka


Serhiy Storchaka  added the comment:

Traceback (most recent call last):
  File "", line 1, in 
  File "", line 2, in keys
AssertionError

This works as expected to me.

--
nosy: +serhiy.storchaka

___
Python tracker 

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



[issue35166] BUILD_MAP_UNPACK doesn't function as expected for dict subclasses

2018-11-04 Thread Dan Snider


New submission from Dan Snider :

>>> class Dict(dict):
   
def keys(self): assert 0
def update(*args, **kwds): assert 0
def __getitem__(self, key): assert 0
def __iter__(self): assert 0 


>>> {**Dict(a=1)}
{'a': 1}

The opcode uses PyDict_Update, which calls the internal dict_merge function 
which contains the following line:

if (PyDict_Check(b) && (Py_TYPE(b)->tp_iter == (getiterfunc)dict_iter))

Translated to Python, that should be equal to 

if type(b).__flags__ & (1<<29) and type.__getattribute__(type(b), 
'__iter__') is type.__getattribute__(dict, '__iter__')`

Both that and the line in C evaluate to false for me (while a dict subclass 
that doesn't override __iter__ evaluates to true), so I 
 apparently can't help narrow down the problem any further assuming people 
agree that this is even is a problem...

The BUILD_MAP_UNPACK_WITH_CALL, CALL_FUNCTION_EX, and CALL_FUNCTION_KW opcodes 
are affected as well.

--
components: Interpreter Core
messages: 329280
nosy: bup
priority: normal
severity: normal
status: open
title: BUILD_MAP_UNPACK doesn't function as expected for dict subclasses
type: behavior
versions: Python 3.6, Python 3.7

___
Python tracker 

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