hi there,
while trying to get an experimental python-to-c++ compiler (http://mark.dufour.googlepages.com) to run under wine, I found a not-so complicated test case that crashes. it is a simple C++ program, converted from 57 lines of Python. it is quite self-contained, and only uses the Boehm GC, but it crashes early and consistently. I corresponded with mike hearn about this, but he is too busy atm to look at it further. here is a mail of me to him, with a link to an archive with an .exe that crashes (but works under windows), the .py and .?pp source code, and a crash log with debugging symbols. it would be great if any of you here would have a look at it.
--- I tried to minimize the test program so it still crashes. the attachment (t37.py, 56 lines) very quickly and consistently crashes when trying to print out a list of integers:
def propagate(lit, mods, failed_literal=0): .. print 'prop', lit print occurrence[3]
this happens after calling just a few functions (solve_rec, lookahead, lookahead_variable, propagate) and no backtracking.
in C++ terms, occurrence is a list<list<list<int> *> *> *. occurrence[3] is then a list<list<int> *> *. occurrence[3] is a list of 6 'clauses'. it always goes wrong on printing the 3rd clause (or list<int> *), at the line 'r->unit += repr.. ' below, in the file builtin.hpp:
template<class T> str *list<T>::__repr__() { str *r = new str("["); for(int i = 0; i<this->__len__();i++) { r->unit += repr(units[i])->unit; if (i<this->__len__()-1) r->unit += ", "; } r->unit += "]"; return r; }
now what happens in repr(..) is a bit complicated because of templatry and va_args stuff and all, but I would think that if the clause is not corrupt it should just work..
btw. a list<T> uses a vector<T> in it called 'units', as can be seen above.
here's a bundle of files (crash log, t37.py, t37.?pp, t37.exe..): http://mark.dufour.googlepages.com/shedskin_crash.tgz ---
thanks for any help! mark dufour.