-- Marcus Denker Sent with Airmail On 17 Oct 2014 at 12:46:20, Nicolai Hess ([email protected]) wrote:
I ran some testcases with your changes and I expect some test are failing now, but actually they don't fail but others do. Yes, but I think these tests are wrong. (needs to be carefully checked). 2014-10-16 22:06 GMT+02:00 Nicolai Hess <[email protected]>: 2014-10-16 17:40 GMT+02:00 Marcus Denker <[email protected]>: >> >> While in the write we need to mark: >> >> lookupVariableForWrite: aVariableNode >> >> | var | >> >> var := scope lookupVar: aVariableNode name. >> >> var ifNil: [^var]. >> var isSpecialVariable ifTrue: [ self storeIntoSpecialVariable: >>aVariableNode ]. >> var isWritable ifFalse: [ self storeIntoReadOnlyVariable: aVariableNode >>]. >> >> var isTemp ifTrue: [ >> "when in a loop, all writes escape" >> scope outerScope isInsideOptimizedLoop ifTrue: [ var >>markEscapingWrite ]. >> "else only escaping when they will end up in different closures" >> (var scope outerNotOptimizedScope ~= scope >>outerNotOptimizedScope) >> ifTrue: [ var markEscapingWrite]]. >> ^var >> >> >> I checked that all Opal tests that are failing are actually testing wrong, >> and I double checked >> that all those methods are now compiled like with the old old compiler… >> Now recompilng the image. > > Hmm… nope…. something wrong. > the “outerScope” was wrong. So without that, I can recompile the image and your example is compiled without temp vectors… Marcus good! I'll open an issue on fogbugz and create a slice with your changes. about reordering of tempvars: It would be nice if the order preserves, but I think we can live with it. Although there is an issue with the debugger: 14058 Inconsistent information in debugger I solved that one by using tempvar names instead if the index, but this has another issue (sometimes the last (or most nested) tempvar is always nil). The real error is, EyeDebuggerContextInspector does recognizes if the index changes (somewhere in EyeDebuggerContextInspector>>#updateList it compares the new elements (with new indices) with the old elements list and skips the update)
