• Stefan Behnel's avatar
    Make C++ typeid accept specializations of fused types (#3205) · 3a3419fb
    Stefan Behnel authored
    * Potential fix for GH issue #3203
    
    Gets the specialized type if possible from
    NameNode.analyse_as_type
    
    This does introduce a potential new bug:
    ```
    cimport cython
    
    just_float = cython.fused_type(float)
    
    cdef OK1(just_float x):
        return just_float in floating
    
    cdef fail1(just_float x, floating y):
        return just_float in floating
    
    cdef fail2(floating x):
        return floating in floating
    
    def show():
        """
        >>> show()
        True
        True
        True
        True
        """
        print(OK1(1.0))
        print(fail1(1.0, 2.0))
        print(fail1[float, double](1.0, 2.0))
        print(fail2[float](1.0))
    ```
    fail1 and fail2 work before this patch but fail with it. It isn't
    clear to me if this should actually be considered a bug. It
    works in both versions with `cython.floating`, which possibly
    suggests analyse_as_type in AttributeNode should also be changed
    
    * Bring attribute.fused types in line
    
    * Removed try-catch
    
    * Fix and test "type in fused_type" special-case
    
    * Added "analyse_as_specialized_type"
    
    * Fixed cpp_operators (handle type is None)
    3a3419fb
ExprNodes.py 541 KB