On 3/17/2012 16:53, Michael Torrie wrote: > On 03/17/2012 09:12 AM, Kiuhnm wrote: >> On 3/17/2012 16:01, Michael Torrie wrote: >>> On 03/17/2012 08:45 AM, Kiuhnm wrote: >>>> Your way is easy, but the result is poor. >>> >>> In what way? >> >> The resulting code is inefficient, difficult to comprehend and to mantain. >> >>> What is your recommended way? >> >> One should rewrite the code. There is a reason why Python doesn't have >> gotos. > > We appear to have a language barrier here. How should one rewrite the > code? Everyone knows python doesn't have gotos and state machines have > to be created using other mechanisms like loops, state variables, and > such. Your suggestion to "rewrite the code" is unhelpful to the OP if > you're not willing to suggest the best method for doing so.
Why should I write a treatise on decompilation techniques on this ng? > Saying, "be > like a decompiler" doesn't say anything. That looks like a glaring contradiction to me... I'm sure the interested reader will think of some ways of getting additional information on the subject. Here's an example of rewriting: A1. (Do the work of Phase A1.) If <zap> then go to Phase A5, otherwise continue. A2. (Do some work.) If <zorp> go to Phase A4. A3. (Some more work.) A4. (Do something.) If <condition ZZZ> go to Phase A1. A5. (Something more). If <foobar> then go to Phase A2, otherwise end. ==> A1. (Do the work of Phase A1.) If not <zap>: A2. (Do some work.) If <zorp> go to Phase A4. A3. (Some more work.) A4. (Do something.) If <condition ZZZ> go to Phase A1. A5. (Something more). If <foobar> then go to Phase A2, otherwise end. ==> A1. (Do the work of Phase A1.) If not <zap>: A2. (Do some work.) If not <zorp>: A3. (Some more work.) A4. (Do something.) If <condition ZZZ> go to Phase A1. A5. (Something more). If <foobar> then go to Phase A2, otherwise end. ==> while (True): A1. (Do the work of Phase A1.) If not <zap>: A2. (Do some work.) If not <zorp>: A3. (Some more work.) A4. (Do something.) If not <condition ZZZ>: break A5. (Something more). If <foobar> then go to Phase A2 ==> while (True): A1. (Do the work of Phase A1.) If not <zap>: A2. (Do some work.) If not <zorp>: A3. (Some more work.) A4. (Do something.) If not <condition ZZZ>: A5. (Something more). If <foobar> then go to Phase A2 break ==> again = TRUE while (again): A1. (Do the work of Phase A1.) If not <zap>: while (True): A2. (Do some work.) If not <zorp>: A3. (Some more work.) A4. (Do something.) If not <condition ZZZ>: A5. (Something more). If <foobar>: continue again = FALSE; break ==> def f: while (True): A1. (Do the work of Phase A1.) If not <zap>: while (True): A2. (Do some work.) If not <zorp>: A3. (Some more work.) A4. (Do something.) If not <condition ZZZ>: A5. (Something more). If <foobar>: continue return ==> def f: while (True): A1. (Do the work of Phase A1.) If <zap>: continue while (True): A2. (Do some work.) If not <zorp>: A3. (Some more work.) A4. (Do something.) If not <condition ZZZ>: A5. (Something more). If <foobar>: continue return ==> def f: while (True): A1. (Do the work of Phase A1.) If <zap>: continue while (True): A2. (Do some work.) If not <zorp>: A3. (Some more work.) A4. (Do something.) If <condition ZZZ>: continue A5. (Something more). If <foobar>: continue return ==> def f: while (True): A1. (Do the work of Phase A1.) If <zap>: continue while (True): A2. (Do some work.) If not <zorp>: A3. (Some more work.) A4. (Do something.) If <condition ZZZ>: continue A5. (Something more). If not <foobar>: return Etc... until you're satisfied with the result. If the code is more complex, divide et impera. Kiuhnm -- http://mail.python.org/mailman/listinfo/python-list