- 09 May, 2016 7 commits
-
-
Kevin Modzelewski authored
Bitset iteration micro optimize
-
Kevin Modzelewski authored
Another run-arbitrary-code-during-unwinding issue
-
Kevin Modzelewski authored
The part that tests that certain dicts compare a given way. We don't have consistent dict comparisons yet (#1135)
-
Kevin Modzelewski authored
Since the unwinder now supports throwing exceptions inside destructors (as long as they don't propagate out). This is the same change that C++17 makes, from "bool uncaught_exception()" to "int uncaught_exceptions()".
-
Dong-hee Na authored
-
Kevin Modzelewski authored
This time it was from trying to look at the result of isUnwinding() to determine if the function terminated successfully or via an exception. (And in the exception case, to decref some values that would have been returned.) This got tripped up in a case where we through an exception, this triggers an AUTO_DECREF which takes an object to zero decrefs, which has a custom destructor, and calls code that ends up calling isUnwinding(). This is all happening from inside a C++ destructor, so this counts as isUnwinding(). We had some code to try to keep isUnwinding() meaning what we wanted to use it for, but it was only for certain cases. I think we might be able to extend it to more cases, but it seems like that would be a losing battle since it's hard to say when "unwinding" ends and then we are suddenly not unwinding. So instead, I just disabled isUnwinding() (except in debug mode where it can be somewhat useful for writing "assert(foo || isUnwinding())"), and then used a different way to try to determine if the function exited normally.
-
Kevin Modzelewski authored
bitset begin() function fix
-
- 08 May, 2016 7 commits
-
-
Marius Wachtler authored
refcounting fixes for numpy in PyTuple_GetSlice, PyErr_SetExcInfo and PyErr_GetExcInfo
-
Marius Wachtler authored
-
Dong-hee Na authored
-
Kevin Modzelewski authored
Fix test_set.py
-
Kevin Modzelewski authored
It fetches a webpage from a third-party server ("example.com") and verifies the return code. For some reason it's failing, both for us and for CPython.
-
Kevin Modzelewski authored
-
Kevin Modzelewski authored
This time it was if __eq__ throws.
-
- 07 May, 2016 4 commits
-
-
Kevin Modzelewski authored
It was failing on master due to some of the test cases checking for immediate destruction.
-
Kevin Modzelewski authored
Marius fixed the propagate-C++-exception case, and this commit adds the to- and from-CAPI cases as well.
-
Kevin Modzelewski authored
We were missing a guard and we ended up calling the wrong function :/ Still some other issuse with this test
-
Kevin Modzelewski authored
Fix the lost-ref-from-oargs issue
-
- 06 May, 2016 18 commits
-
-
Kevin Modzelewski authored
They were both failing on master: - test_dumbdbm was failing in a test case that writes out some data to a database, closes it, then reopens the db and expects to be able to read the data. - test_memoryview expected some weakrefs to get cleared at the right time. test_socket.py appears to "pass" -- it exits with code 0, but it spams a bunch of error messages from other threads.
-
Kevin Modzelewski authored
The Rewriter will automatically refcount objects represented as RewriterVar's, but if you store one as an attribute somewhere, it can't keep track of that. So add a registerOwnedAttribute() function that lets you say that there is a reference that lives in an attribute (stored in a memory offset) of another RewriterVar.
-
Kevin Modzelewski authored
-
Kevin Modzelewski authored
Fix some pyexpat issues
-
Marius Wachtler authored
bjit: directly emit recordType again
-
Marius Wachtler authored
the comment was totaly not true, result can't be 0 for our uses
-
Marius Wachtler authored
cleanup abandon generators
-
Marius Wachtler authored
-
Marius Wachtler authored
this makes sure that we don't generate additional cycles to the generator
-
Marius Wachtler authored
we create quite strange lambda cfg nodes but it should be fine I guess
-
Marius Wachtler authored
in order to break cycles we need to traverse all generator owned object at yields. The interpreter is fine because it stores all objects inside the vregs so they will already get visited. For the llvm jit pass all owned object to the yield call as vararg argument. We will currently leak (move objects to gc.garbage) when a generator is involved in a cycle because our PyGen_NeedsFinalizing() is much more conservative.
-
Marius Wachtler authored
the idea is that stealing the value allows us to immediately free the variable in more case when it's unused otherwise we would always have to continue the generator in order to decrease the refcount
-
Marius Wachtler authored
this can happend when a deopt() call inside the llvm tier throws. We would catch the exception in order to do some decrefs and than reraise it from the disabled frame.
-
Marius Wachtler authored
Previously we only supported one unwind to happen at a given time. The change is unfortunately quit ugly :-( but should work.
-
Kevin Modzelewski authored
-
Kevin Modzelewski authored
We were double-registering its exception type as a static constant.
-
Kevin Modzelewski authored
Trying to reduce allocations in refcounting branch
-
Kevin Modzelewski authored
Add some liveness information to the cfg
-
- 04 May, 2016 4 commits
-
-
Kevin Modzelewski authored
-
Kevin Modzelewski authored
-
Kevin Modzelewski authored
I had added an allocation to deal with the requirements refcounting added. To remove that allocation, I added a "SmallUniquePtr" class which is similar to unique_ptr but it allocates the object in-line. It's a bit tricky to use since if the containing object gets moved around then the pointers become invalid.
-
Kevin Modzelewski authored
Previously, to replace a refcounted object in memory, we would do something like array->getAttr(offset)->setType(OWNED); array->setAttr(offset, new_val); The problem is that this ends up emitting something like x = array[offset]; Py_DECREF(x); array[offset] = new_val; which is not safe, since x can have a destructor that runs. In this particular case, the destructor changed the value of array[offset]. It's actually pretty hard to get the right behavior (decref after setting the new value) from outside the rewriter class, so add a new replaceAttr that does these steps.
-