• Tim Peters's avatar
    SF bug #488514: -Qnew needs work · 3caca232
    Tim Peters yazdı
    Big Hammer to implement -Qnew as PEP 238 says it should work (a global
    option affecting all instances of "/").
    
    pydebug.h, main.c, pythonrun.c:  define a private _Py_QnewFlag flag, true
    iff -Qnew is passed on the command line.  This should go away (as the
    comments say) when true division becomes The Rule.  This is
    deliberately not exposed to runtime inspection or modification:  it's
    a one-way one-shot switch to pretend you're using Python 3.
    
    ceval.c:  when _Py_QnewFlag is set, treat BINARY_DIVIDE as
    BINARY_TRUE_DIVIDE.
    
    test_{descr, generators, zipfile}.py:  fiddle so these pass under
    -Qnew too.  This was just a matter of s!/!//! in test_generators and
    test_zipfile.  test_descr was trickier, as testbinop() is passed
    assumptions that "/" is the same as calling a "__div__" method; put
    a temporary hack there to call "__truediv__" instead when the method
    name is "__div__" and 1/2 evaluates to 0.5.
    
    Three standard tests still fail under -Qnew (on Windows; somebody
    please try the Linux tests with -Qnew too!  Linux runs a whole bunch
    of tests Windows doesn't):
        test_augassign
        test_class
        test_coercion
    I can't stay awake longer to stare at this (be my guest).  Offhand
    cures weren't obvious, nor was it even obvious that cures are possible
    without major hackery.
    
    Question:  when -Qnew is in effect, should calls to __div__ magically
    change into calls to __truediv__?  See "major hackery" at tail end of
    last paragraph <wink>.
    3caca232
pydebug.h 1.1 KB